IP Masquerading
O masquerading funciona da seguinte forma, em uma rede, o
servidor possui um ip válido na internet e um ip não
válido que é o ip do servidor na rede interna. As
demais máquinas da rede possuem, cada uma delas, ips
não válidos na internet, sendo esses ips
válidos apenas dentro da rede interna. Para que as
máquinas da rede possam acessar a internet através do
servidor, é preciso que o mesmo tenha ativado, e esteja
funcionando, o IP masquerading. Como mostra a figura abaixo o
servidor Linux possui dois IP's, um deles é um IP
válido na internet "200.10.15.1" e outro é um IP
frio, inválido para a internet "192.168.1.1". Os clientes da
rede (Máquina 1....) possuem endereços IP's
192.168.1.X formando uma rede da classe C.
Para que as máquinas da rede interna (192.168.1.X)
possam acessar a internet através do servidor é
necessário que o IP Masquerading esteja configurado e
ativado.
_ __ _
| \/ \/ |
/ Internet \
\_/\_/\_/\_/
|
|
| eth0 => 200.10.15.1
| /
| /
__________
| |
| Firewall | <-- Servidor
| System |
|__________|
|\
| \
| eth1 => 192.168.1.1
|
|
_____________________________________________
| | |
| | |
| | |
| | |
_____________ _____________ _____________
| | | | | |
| Máquina 1 | | Máquina 2 | | Máquina 3 |
|_____________| |_____________| |_____________|
192.168.1.2 192.168.1.3 192.168.1.4
|
Nesse caso temos um servidor com duas placas de rede, eth0
conectado na internet, e eth1 conectado na rede interna, e mais 3
máquinas na rede conectadas ao servidor para acessar a
internet. Para que as máquinas internas da rede acessem a
internet precisaremos ativar o IP masquerading no servidor. A
primeira providência é habilitar o repasse
(forwarding) de pacotes. Vamos criar um arquivo "firewall"
localizado em /etc/rc.d/init.d que será responsável
pelo gerenciamento do firewall e adicionar as
configurações de firewall nele para que se torne
automático no caso do servidor ser reiniciado:
Primeiramente abra, com seu editor de textos preferido, o
arquivo /etc/init.d/firewall, caso ele
não exista, será criado.
[root@localhost]# mcedit /etc/rc.d/init.d/firewall
|
Em seguida adicione as seguintes linhas ao arquivo, elas
serão responsáveis para que o firewall seja
habilitado no ntsysv, que será usado para ativar ou
desativar a inicialização automática do
firewall no boot: OBS: As linhas marcadas com "*" não devem
ser incluídas no arquivo.
#! /bin/sh
# Inicialização do firewall - ipchains
#
# description: Firewall
# chkconfig: 2345 80 30
# processname: firewall
# pidfile: /var/run/firewall.pid
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network
if [ ${NETWORKING} = "no" ]
then
exit 0
fi
case "$1" in
start)
gprintf "Iniciando o serviço de %s: " "Firewall"
echo
|
Agora adicione as seguintes linhas para que todas as
regras do firewall sejam "limpas", para que, dessa forma, comecemos
a partir do início a configurar nossas regras de
firewall:
# Limpando todas as regras de firewall antes de
começar
ipchains -F input ipchains -F forward
ipchains -F output ipchains -P input ACCEPT ipchains -P forward
ACCEPT ipchains -P output ACCEPT
A partir de agora vamos realmente começar a
configuração do firewall, inclua essas linhas para
que seja ativado o IP Masquerading no servidor e, dessa forma, as
máquinas internas da rede estejam aptas a acessar a internet
através do servidor:
# Ativando repasse de pacotes
echo 1 > /proc/sys/net/ipv4/ip_forward
|
# Carregando módulos necessários ao IP
Masquerading
/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_quake
/sbin/modprobe ip_masq_irc
/sbin/modprobe ip_masq_user
/sbin/modprobe ip_masq_raudio
|
# Ativando o IP Masquerading
ipchains -P forward DENY
ipchains -A forward -s 192.168.1.0/24 -j MASQ
|
Nesse ponto as máquinas da rede já estarão
aptas a acessar a internet pois o servidor já estará
fazendo o mascaramento de IPs. A partir de agora vamos
começar a definir as regras de entrada do firewall,
são aquelas que irão filtrar tudo que entra na rede
vindo da internet. Vamos começar bloqueando todo os pacotes
icmp e também igmp vindos da internet, isso evitará
que sejam usados alguns tipos de scanports "contra" seu sistema,
scanports servem para saber quais portas estão abertas no
servidor para serem usadas em possíveis "ataques":
# Configurando regras de entrada
# Liberando acesso total ao servidor para a rede interna
ipchains -A input -s 192.168.1.0/24 -d 192.168.1.1 -i eth1 -j ACCEPT
|
# Bloqueando protocolos icmp vindos da internet
ipchains -A input -l -p icmp -d 200.10.15.1 -i eth0 -j REJECT
|
Vamos agora bloquear o acesso externo à serviços
que utilizam protocolos udp e são necessários apenas
à rede interna, como não sabemos quais os
serviços o servidor estará rodando, pois isso depende
da vontade do administrador, vamos especificar uma faixa de portas
que cobre todos eles:
# Bloqueando acesso externo à serviços udp
internos
ipchains -A input -l -p udp -d 200.10.15.1 :1023 -i eth0 -j REJECT
|
Daqui em diante entra a parte mais importantes do firewall, as
regras que filtram os serviços de protocolo tcp, mas as
regras a serem inseridas a partir deste ponto depende dos
serviços que estarão rodando e, principalmente, do
uso que se deseja fazer deles. Aqui apresentaremos alguns exemplos,
os quais devem ser adaptados, ou mesmo excluídos, dependendo
da necessidade:
Vamos supor que existam alguns serviços rodando no
servidor, a título de exemplo, vamos assumir que todos eles
são _apenas_ para uso das máquinas da rede interna,
caso pretenda-se que algum serviço aceite conexões
vindas da internet a regra para o mesmo deve ser omitida. As regras
são apresentadas na mesma ordem em que os serviços
serão, agora, listados, são eles: ftp, ssh, telnet,
email (SMTP), servidor DNS, servidor www, email (POP3), portmapper,
servidor proxy (squid) e servidor de irc.
# Configurando regras de filtragem de protocolo tcp
# ftp
ipchains -A input -l -p tcp -d 200.10.15.1 21 -i eth0 -j REJECT
|
# ssh
ipchains -A input -l -p tcp -d 200.10.15.1 22 -i eth0 -j REJECT
ipchains -A input -l -p udp -d 200.10.15.1 22 -i eth0 -j REJECT
|
# telnet
ipchains -A input -l -p tcp -d 200.10.15.1 23 -i eth0 -j REJECT
|
# SMTP (email)
ipchains -A input -l -p tcp -d 200.10.15.1 25 -i eth0 -j REJECT
|
# Servidor DNS
ipchains -A input -l -p udp -d 200.10.15.1 53 -i eth0 -j REJECT
ipchains -A input -l -p tcp -d 200.10.15.1 53 -i eth0 -j REJECT
|
# Servidor www
ipchains -A input -l -p tcp -d 200.10.15.1 80 -i eth0 -j REJECT
|
# POP3 (email)
ipchains -A input -l -p tcp -d 200.10.15.1 110 -i eth0 -j REJECT
|
# Portmapper
ipchains -A input -l -p tcp -d 200.10.15.1 111 -i eth0 -j REJECT
|
# Servidor proxy (squid)
ipchains -A input -l -p tcp -d 200.10.15.1 3128 -i eth0 -j REJECT
ipchains -A input -l -p udp -d 200.10.15.1 3128 -i eth0 -j REJECT
|
# X11 (não retire essa linha)
ipchains -A input -l -p tcp -d 200.10.15.1 6000 -i eth0 -j REJECT
|
# Servidor de irc
ipchains -A input -l -p tcp -d 200.10.15.1 6667 -i eth0 -j REJECT
ipchains -A input -l -p udp -d 200.10.15.1 6667 -i eth0 -j REJECT
|
Agora vamos definir as regras de saída, no caso,
liberando acesso total da rede para a internet:
ipchains -P output DENY
ipchains -A output -s 192.168.1.0/24 -d 0.0.0.0/0 -j ACCEPT
|
Pronto, as regras de firewall foram todas definidas, lembre-se
para os serviços que não se deseja filtrar apenas
omita as linhas correspondentes. Agora vamos finalizar nosso
arquivo para que possamos utiliza-lo, adicione as seguintes linhas
ao final do arquivo:
;;
stop)
gprintf "Parando o serviço de %s: " "Firewall"
echo
/sbin/ipchains --flush
;;
*)
gprintf "Uso: firewall (start|stop)"
echo
;;
esac
exit 0
|
Agora salve o arquivo pressionando F2 e
saia do mcedit pressionando F10.
Presisamos agora dar permissão de execução
ao arquivo:
[root@localhost]# cds
[root@localhost]# chmod +x firewall
|
Agora vamos ativá-lo para inicialização
automática no boot da máquina:
Procure por firewall, ative-o pressionando a barra de
espaço, pressione TAB para selecionar
OK e pressione ENTER
para sair.
Agora toda vez que a máquina for reiniciada o firewall
será automaticamente configurado, para ativá-lo agora
execute:
[root@localhost]# ./firewall start
|
Pronto seu firewall já está configurado e
funcionando, mas, lembre-se:
Os IPs utilizados nesse exemplo devem ser substituídos
pelos IPs utilizados em sua rede, bem comos os devices de rede
(eth0, eth1), também devem ser substituídos de acordo
com sua rede.
Esse exemplo representa a criação de _um_
arquivo, todas as informações que se deseja utilizar
devem ser incluídas no mesmo arquivo, e na mesma ordem
apresentada.
Agora vamos fazer um breve comentário a respeito das
máquinas clientes, que também devem ser configuradas
para que acessem a internet através do servidor.
Configuração das Estações
A configuração das estações de
trabalho para utilizar o IP Masquerading é bastante simples
tanto para estações Conectiva Linux quanto para
estações Windows®.
Para configurar a estação Conectiva Linux a fim de
utilizar o servidor com o objetivo de conectar-se à
Internet, execute os seguintes passos:
[root@localhost]# linuxconf
|
Vá para Ambiente de ->->
Selecione Padrões e informe o endereço de IP de
seu servidor.
Deixe a opção Ative o roteamento desativada.
Saia do Linuxconf e ative a configuração.
[root@localhost]# ./network stop
|
[root@localhost]# ./network start
|
Estações Windows®
Para configurar uma estação Windows® para
utilizar o servidor a fim de conectar-se à Internet, siga os
seguintes passos:
-
Vá para ->->->
-
Clique em TCP/IP e pressione o botão Propriedades.
-
Clique em Configuração DNS
-
Clique em Ativar DNS e digite o nome de sua máquina no
campo Host e o domínio no campo Domínio. Especifique
também o DNS do provedor onde você esta se
conectando.
-
Digite o endereço de IP de seu servidor em Ordem pesquisa
servidor DNS e clique em Adicionar.
-
Digite o nome do seu domínio em Ordem pesquisa sufixo
domínio e clique em Adicionar.
-
Clique em Gateway e informe o número ip do seu
servidor.
-
Clique em Ok e saia da configuração de rede.
Você terá de reinicializar o computador. Para testar a
configuração, tente acessar algum endereço da
Internet após ter reinicializado a máquina.