Sei sulla pagina 1di 72

Administrao de redes

Firewall - Iptables

Firewall podem ser dispositivos formados por componentes de hardware como roteadores, modens ADSL e ponto de acesso (Access Point) ou atravs um computador configurado como roteador e firewall que so capazes de fazer a filtragem de pacotes e controlar o trfego de pacotes entre uma rede local (LAN) e a rede externa (Internet).

Um computador com Linux configurado como roteador e firewall responsvel pelo roteamento de pacotes e filtragem dos pacotes, onde analisa o cabealho dos pacotes e faz a deciso o que pode entrar e sair pela rede local.

No Linux o programa atual Iptables (kernel 2.4.x e 2.6.x - em verses anteriores ipchains 2.2.x e ipfwadm 2.0.x) responsvel por fazer a filtragem desses pacotes, fornecendo em linha de comandos a possibilidade do administrador manipular as regras dos pacotes do kernel do Linux.

Em todas distribuies Linux o pacote iptables j vem instalao por padro, caso voc no tenha instalado o pacote iptables, voc pode instalar a partir do site http://www.netfilter.org/ e instalar a ltima verso a partir do cdigo fonte do programa baixando o arquivo .tar.bz2 ou em distribuies como Debian e Fedora utilizar os comandos apt-get e yum.

Debian # apt-get install iptables

Fedora # yum install iptables

Nesta captulo ser mostrado como exemplo o computador firewall.dominio.com.br onde sero implementadas regras de iptables com NAT para redirecionar as requisies externas da internet para servidores da rede local DMZ (Veja a aula do Roteador NAT para mais detalhes) com mostra a imagem abaixo.

Este computador configurado como firewall tem o endereo IP mais baixo da nossa rede local DMZ 192.168.0.1 (eth1) e da rede local 192.168.1.1 (eth2) que est com 3 placas de rede:

eth0 - 200.000.000.100 (conexo com a internet IP fixo (eth0) ou dinmico (ppp0)) eth1 (conexo rede local DMZ servidores) eth2 (conexo rede local - computadores Desktop)

* Obs: Para a configurao do DNS necessrio adquirir mais endereos IP fixo com sua operadora ou seu provedor.

Configurao dos endereos IP do firewall

Abaixo segue a configurao das interfaces de rede baseado no Debian e Red Hat / Fedora que pode ser implementado em outras distribuies Linux facilmente.

Hostname Domnio DNS primrio DNS secundrio

firewall dominio.com.br 192.168.1.30 192.168.1.20

Endereo IP eth0(IP fixo) ou ppp0(IP 200.204.143.80 dinmico) Mscara de rede Gateway Endereo IP eth1 (rede DMZ) mscara de rede Endereo de rede Endereo IP eth2 (rede local) Mscara de rede Endereo de rede 255.255.255.192 200.204.143.65 192.168.0.1 255.255.255.0 192.168.0.0 192.168.1.1 255.255.255.0 192.168.1.0

Em distribuies Debian acesse as configuraes de rede atravs do arquivo /etc/network/interfaces e faa as seguintes:

/etc/network/interfaces
/etc/network/interfaces # The loopback network interface auto lo iface lo inet loopback # IP FIXO auto eth0 iface eth0 inet static address 200.204.143.80 netmask 255.255.255.192 gateway 200.204.143.65 # IP DINMICO PPPoE auto ppp0 iface ppp0 inet dhcp # IP da rede DMZ auto eth1 iface eth1 inet static address 192.168.0.1 netmask 255.255.255.0 network .168.0.0 # IP da rede local auto eth2 iface eth2 inet static address 192.168.1.1 netmask 255.255.255.0 netmask 192.168.1.0

No Red Hat / Fedora edite o arquivo os arquivos /etc/sysconfig/network-scripts/ifcfg-eth0, /etc/sysconfig/network-scripts/ifcfg-ppp0, /etc/sysconfig/network-scripts/ifcfg-eth1 e /etc/sysconfig/network-scripts/ifcfg-eth2.

Configurao IP fixo esttico: # placa de rede da rede externa # /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE = eth0 ONBOOT = yes BOOTPROTO = static IPADDR = 200.204.143.80 (IP fixo fornecido pelo provedor) NETMASK = 255.255.255.192 (mscara de rede fornecida pela provedor)

GATEWAY = 200.204.143.65 (gateway fornecido do provedor)

Configurao IP fixo dinmico DHCP:

# placa de rede da rede externa


# /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE = eth0 ONBOOT = yes BOOTPROTO = dhcp

Configurao IP dinmico ADSL PPPOE:

# placa de rede da rede externa


# /etc/sysconfig/network-scripts/ifcfg-ppp0

DEVICE = ppp0 ONBOOT = yes BOOTPROTO = dhcp

# placa de rede da rede DMZ


# /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE = eth1 ONBOOT = yes BOOTPROTO = static IPADDR =192.168.0.1 NETMASK = 255.255.255.0 NETWORK = 192.168.0.0

# placa de rede da rede local


# /etc/sysconfig/network-scripts/ifcfg-eth2

DEVICE = eth2 ONBOOT = yes BOOTPROTO = static IPADDR =192.168.1.1 NETMASK = 255.255.255.0 NETWORK = 192.168.1.0

Configure o nome do host no arquivos /etc/hostname

# /etc/hostname firewall

Especifique os endereos e nome de host no arquivo /etc/hosts

# /etc/hosts 127.0.0.1 localhost localhost.localdomain 192.168.0.1 firewall firewall.dominio.com.br # interface eth1 rede DMZ 192.168.1.1 firewall firewall.dominio.com.br # interface eth2 rede local

Especifique as redes no arquivo /etc/networks

# /etc/networks default 0.0.0.0 loopback 127.0.0.0 link-local 169.254.0.0 rede-DMZ 192.168.0.0 # rede DMZ rede-local 192.168.1.0 # rede local

Edite o arquivo de configurao de resoluo de nomes DNS /etc/host.conf

# /etc/host.conf order hosts,bind multi on

Especifique os endereos de DNS no arquivo /etc/resolv.conf

# /etc/resolv.conf # servidores DNS da rede local DMZ nameserver 192.168.1.30 nameserver 192.168.1.20

Ativando o roteamento

Para ativar o roteamento edite o arquivo /etc/sysctl.conf e altere a linha Debian net.ipv4.conf.default.forwarding=1 para net.ipv4.conf.default.forwarding=0

Red Hat / Fedora net.ipv4.ip_forwarding=1 para net.ipv4.ip_forwarding=0 Ou voc pode adicionar o seguinte comando como root em seu arquivo de Firewall # echo 1 > /proc/sys/net/ipv4/ip_forward

Ativando o mascaramento de IP

Agora compartilhe a internet habilitando o mascaramento de IP com seguinte comando: conexo IP fixo em eth0 # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

conexo discada ou ADSL IP dinmico em ppp0 # iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Configurando as rotas Para configurar as rotas para a rede DMZ (eth1 - 192.168.0.0) e a rede local (eth2 192.168.1.0) use o comando route e adicione os comandos no script do firewall para

ativar na inicializao do Linux. *Obs - (Mais detalhes sobre rotas veja a aula de configurao do roteador) Adicionando as rotas # route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.1 dev eth1 # route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth2 Exibindo as rotas # route -n
Destino Roteador MscaraGen. Opes Mtrica Ref Uso Iface 200.204.210.226 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 192.168.0.0 192.168.0.1 255.255.255.0 UG 0 0 0 eth1 192.168.1.0 192.168.1.1 255.255.255.0 UG 0 0 0 eth2 0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0

Pronto, agora que os endereos IP e os arquivos de configurao da rede esto configurados, o roteamento e o mascaramento de IP ativados e as rotas configuradas, podemos criar nosso script de configurao bsica do nosso firewall, onde veremos a explicao mais detalhada dos comandos e opes do iptables em seguida.

Para ativar as configuraes aps reiniciar o computador crie um script geralmente em /etc/init.d/ com os comandos acima e torne-o executvel e adicione-o no arquivo de inicializao /etc/rc.local.

# /etc/init.d/firewall # apaga todas as regras

/sbin/iptables -F
# ativa o roteamento

echo 1 > /proc/sys/net/ipv4/ip_forward


# habilita o mascaramento de IP

/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE


# configurando as rotas /sbin/route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.1 dev eth1 /sbin/route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth2

Para visualizar as regras adicionadas executa o comando abaixo # iptables -L -t nat -v

Mude as permisses para torna-lo executvel # chmod +x /etc/init.d/firewall Adicione-o na inicializao no arquivo /etc/rc.local # /etc/rc.local /etc/init.d/firewall Agora reinicie a rede ou reinicie o computador e execute o script do firewall

# /etc/init.d/networking restart # /etc/init.d/firewall

# /sbin/service network restart # /etc/init.d/firewall

Iptables Iptables o programa no Linux em linha de comando responsvel pelo filtro de pacotes nas verses do kernel 2.4.x e 2.6.x que funciona atravs de regras determinadas na inicializao do sistema, onde os pacotes que entram no kernel so analisados pelas cadeias (chains) que so situaes que podem ocorrer dentro do kernel. Em uma conexo quando um pacote entra no firewall, o kernel do Linux faz o roteamento do pacote determinando o destino e qual cadeia ir analisar esse pacote. As cadeias iro depender do tipo de tabela, que so divididas em 3 tipos: filter, nat e mangle. Para inicializar o programa iptables abra um terminal e execute o comando iptables -h para exibir as opes que so muitas, comece exibindo a verso do iptables (iptables -V). # iptables -V iptables v1.3.6

A sintaxe do comando iptables da seguinte forma:

iptables -t tabela comando cadeias (chains) opes parmetros destino

10

Vamos analisar resumidamente o funcionamento do iptables, como base no diagrama da imagem abaixo onde mostrado um pacote passando pelo firewall.

1. O pacote entra na interface de rede de entrada. 2. As regras de PREROUNTING (pr-roteamento) da tabela NAT so aplicadas. 3. O pacote passa por uma deciso de roteamento onde desviado para a cadeia INPUT (entrada) caso o destino seja a interface de rede do prprio firewall, caso contrrio encaminhado para a cadeia FORWARD (indo e vindo). 4. O pacote passa por um processo local de verificao para determinar se aceito ou rejeitado. 5. Caso o pacote seja aceito, encaminhado para a cadeia OUTPUT (sada) da tabela NAT ou Filter. 6. O pacote encaminhado para a cadeia POSTROUTING (ps-roteamento) da tabela NAT. 7. As regras de POSTROUTING da tabela NAT so aplicadas. 8. E finalmente o pacote sai da interface de rede sada at seu destino.

11

Tabelas So utilizadas para especificar os tipos de cadeias(chains) que sero utilizadas.

tabela

Significado Essa a tabela padro utilizada, caso nenhuma tabela for determinada, utilizada quando existe trfego de dados normal, sem utilizao de regras com NAT. Essa tabela utilizada as cadeias (chains) INPUT, OUTPUT e FORWARD. usada quando tem NAT, e quando ocorre o trfego de pacotes entre a rede local e a internet. Essa tabela utilizada as cadeias (chains) PREROUTING, POSTROUTING e OUTPUT. Possui 2 cadeias (chains) padres: PREROUTING e OUTPUT, usada para fazer alteraes especiais em pacotes para o tratamento do trfego que atravessa os cadeias chains (como alterar o tipo de servio (TOS) e usa as cinco cadeias (chains) PREROUTING, POSTROUTING, INPUT, OUTPUT e FORWARD.

filter

nat

mangle Cada uma destas cadeias so processadas antes da cadeia correspondente na tabela filter e nat para determinar opes especiais para o trfego dos pacotes (por exemplo, a cadeia PREROUTING da tabela mangle processada antes da PREROUTING da tabela nat e assim por diante).

Para exibir as tabelas atuais utilizadas pelo comando iptables pelo firewall, execute o comando: $ cat /proc/net/ip_tables_names

Comandos Os comandos servem para permitir que o iptables execute determinadas aes como: estabelecer uma poltica de analise dos pacotes, adicionar uma regra ou cadeia, apagar e exibir as regras e cadeias. Comando -P -A -I Significado Determina uma poltica de analise dos pacotes em uma cadeia Adiciona um regra em uma cadeia Insere uma regra em uma cadeia

12

-R -D -F -Z -N -E -X -L

Renomeia uma regra em uma cadeia Exclui uma regra ou uma cadeia Excluir todas as regras de uma cadeia ou de todas as cadeias Zera contadores de uma cadeia ou de todas as cadeias Cria uma nova cadeia definida pelo usurio Renomeia uma cadeia definida pelo usurio Exclui uma cadeia definida pelo usurio Exibe as regras de uma cadeia

- h o u Exibe ajuda do iptables --help

Cadeias (Chains) As cadeias servem para determinar se um pacote ir entrar, sair ou ser redirecionado pelo iptables.

Cadeia INPUT OUTPUT FORWARD

Significado Analisa os pacotes que esto entrando na rede interna. Analisa os pacotes que esto saindo na rede interna. Analisa os pacotes que esto trafegando pela rede, tanto da rede externa (Internet) para rede interna (LAN) e vice-versa. Analisa pacotes que esto entrando pelo firewall e que so aplicadas regras de NAT, onde determinado o destino dos pacotes (DNAT Destination NAT Destino NAT).

PREROUTING

Analisa pacotes que esto saindo pelo firewall e que so POSTROUTING aplicadas regras de NAT, onde determinado a origem dos pacotes (SNAT Source NAT Origem NAT).

Para exibir as cadeias execute os comandos:

# iptables -L -n # iptables -L -t nat

13

Opes

Opo -p ou --protocol

Significado Especifica o protocolo que pode ser TCP, UDP, ICMP ou ALL (todos). *Obs - pode ser usados outros protocolos especificados em /etc/protocols. Especifica os pacotes de origem da rede (192.168.0.0/255.255.255.0) ou computador local (192.168.0.2) Especifica os pacotes de destino da rede (192.168.0.0/255.255.255.0) ou computador local (192.168.0.2) Determina a placa de rede de entrada, onde no pode ser utilizada pela cadeia OUTPUT Determina a placa de rede de sada, onde no pode ser utilizada pela cadeia INPUT

-s, --src ou --source

- d , - - d s t --destination -i ou --in-interface

o u

-o ou --out-interface - - s p o r t --source-port - - d p o r t --destination-port

o u Determinada o porta de origem, onde s pode ser utilizada com as opes -p tcp e -p udp. o u Determinada o porta de destino, onde s pode ser utilizada com as opes -p tcp e -p udp. Essa opo s deve ser usada em pacotes que utilizam o protocolo TCP que tenham o bit SYN ativado e os bits ACK e FIN desativados no incio de uma conexo TCP. Por exemplo, quando se bloqueia esses pacotes vindos de uma placa de rede, a conexo de entrada TCP ser recusada, mas a conexo de sada no. Especifica o destino da regra

--syn

-j ou --jump

Para exibir as opes e parmetros execute o comando:

# iptables -L -n -v

*OBS Antes da opes e parmetros pode ser utilizado a exclamao ! que veremos mais a frente, que significa no (NOT) e inverte o sentido fazendo uma exceo.

14

Destino O destino o que ser determinado para os pacotes, se eles sero aceitos, rejeitados, excludos, redirecionados e etc.

Destino ACCEPT

Significado Especifica que os pacotes sero aceitos e podero passar pelo firewall Especifica que os pacotes sero rejeitados e no podero passar pelo firewall, em caso de pacotes ICMP, como o comando ping, retornar uma mensagem de porta inalcanvel port-unreachable. Especifica tambm que os pacotes sero rejeitados e no podero passar pelo firewall, em caso de pacotes ICMP, como o comando ping, no retornar uma mensagem de porta inalcanvel port-unreachable. Determina que as regras sero gravadas em log pelo daemon syslog em /var/log/syslog. Utilizada para fazer mascaramento de origem e deve ser utilizada com a cadeia POSTROUTING Utilizada com as cadeias PREROUTING e OUTPUT para fazer o redirecionamento de portas e servidores, balanceamento de carga e proxy transparente, onde caso a porta de destino no seja determinada, ser utilizada a porta de origem. *Obs: a porta que estiver sendo redirecionada no pode estar sendo usada no momento por algum servio.

REJECT

DROP

LOG SNAT

DNAT

--to

Utilizada para especificar o endereo IP e a porta de destino, depois de determinado o destino com DNAT ou aps determinado a origem com SNAT. Faz o mascaramento de IP na sada de pacotes em uma interface de rede ppp0, eth0, etc. Utilizada para fazer redirecionamento de conexes para uma porta do firewall Determina a porta de destino, aps o redirecionamento com REDIRECT

MASQUERADE REDIRECT --to-port RETURN

15

Determina que regras sejam executadas at que ocorra algum erro em uma delas, onde usada em linhas seqenciais no firewall, onde retorna o resultado da cadeia anterior sem executar o restante do cadeia atual.

Para exibir os destinos das tabelas filter, nat e mangle execute o comando:

# iptables -L -n -t filter # iptables -L -n -t nat # iptables -L -n -t mangle

ou $ cat /proc/net/ip_tables_targets

Extenses O iptables e o kernel do Linux podem ser extendidos para novas funcionalidades o que os tornam extensveis, as extenses do kernel esto localizadas no diretrio de mdulos do kernel em /lib/modules/2.6.x/kernel/net/ipv4/netfilter/ (onde 2.6.x verso do kernel instalado). E as extenses do programa iptables so bibliotecas compartilhadas e geralmente ficam localizadas em /usr/lib/iptables ou /lib/iptables.

Esses mdulos podem ser carregados e utilizados pelo iptables atravs do comando modprobe.Por exemplo, para carregar algum mdulo listado em /lib/modules/2.6.x/kernel/net/ipv4/netfilter/ ficaria da seguinte forma:

# modprobe ipt_tos # modprobe ipt_LOG

16

As extenses permite o uso de filtros especiais dos pacotes, que podem ser usadas para implementao de segurana mais avanada.

As extenses podem ser utilizadas da seguinte forma na linha de comando com iptables com a opo -p ou -m ou match :

-p (protocolo) [extenso (opo) ]

ou

-m [ mdulo (extenso) ]

Para saber informaes sobre um protocolo que pode ser tcp, udp ou icmp, podemos executar o comando iptables -p protocolo -h.

# iptables -p tcp -h ou # iptables -p tcp --help

Para saber informaes sobre algum mdulo que pode ser mac, limit, multiport, mark, owner, state, tos e unclean, podemos executar o comando iptables -m modulo -h.

# iptables -m multiport -h ou # iptables -m multiport help ou

17

# iptables --match multiport -h

Para exibir os mdulos atuais usados pelo comando iptables, execute o comando:

$ cat /proc/net/ip_tables_matches

Usando o iptables

Usando as cadeias (chains) O iptables utilizada regras (que esto em letras MASCULAS) que so analisadas uma por uma at que a ltima seja analisada, caso alguma regra esteja com erro, por padro ser exibida mensagem de erro e ela no ser aplicada. Assim os pacotes no sero verificados e depender das regras posteriores se os pacotes sero aceitos ou rejeitados.

Criando regras ( -A ) A nossa primeira regra ir bloquear seu prprio computador, onde ser testado com o comando ping no endereo local de loopback 127.0.0.1 ou localhost.

Execute o comando ping com a opo -c 3, onde ser enviados apenas 3 pacotes e veja que est que o computador est respondendo pelo pacotes ICMP $ ping 127.0.0.1 ou $ ping localhost

$ ping -c 3 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.079 ms

18

64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.073 ms 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.074 ms

--- 127.0.0.1 ping statistics --3 packets transmitted, 3 received, 0% packet loss, time 2013ms rtt min/avg/max/mdev = 0.073/0.075/0.079/0.00

Agora adicione um regra na cadeia (chain) INPUT (-A INPUT) utilizando o protocolo ICMP (-p icmp) que bloqueia (-j DROP) o endereo de loopback 127.0.0.1 (-d 127.0.0.1).

# iptables -A INPUT -p icmp -d 127.0.0.1 -j DROP

Para exibir a nova regra criada execute o comando abaixo e veja o que o destino (target) est como DROP (rejeitado), que o protocolo icmp e no tem opes (opt), que a origem (source) qualquer endereo IP 0.0.0.0/0 e o destino (destination) 127.0.0.1.

# iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination DROP cmp -- 0.0.0.0/0 127.0.0.1

Agora execute o comando ping novamente e verifique o IP 127.0.0.1 de destino (-d 127.0.0.1) est bloqueado e no obtm nenhuma resposta, pois os pacotes ICMP foram rejeitados pelo destino (-j DROP).

$ ping -c 3 127.0.0.1

19

Para voltar a aceitar pacotes ICMP e voltar a obtm resposta do comando ping no endereo loopback 127.0.0.1, devemos excluir a regra anterior, que pode ser feito de duas formas:

Primeiramente devemos exibir as numerao das regras com o comando abaixo com a opo --line-numbers.

# iptables -L -n --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination 1 DROP icmp -- 0.0.0.0/0 127.0.0.1

Repare que exibe a linha nmero 1 da cadeia INPUT, onde podemos exclu-la da seguinte forma:

# iptables -D INPUT 1

ou executando a regra novamente especificando o comando -D ao invs de -A

# iptables -D INPUT -p icmp -d 127.0.0.1 -j DROP

Agora voc pode executar ping novamente e obter resposta, pois no tem nenhuma regra bloqueando os pacotes.

$ ping -c 3 127.0.0.1

Voc pode criar a mesma regra para aceitar os pacotes ao invs de rejeitar apenas alterando o destino -j DROP para -j ACCEPT

20

# iptables -A INPUT -p icmp -d 127.0.0.1 -j ACCEPT

Exibindo regras ( -L ) Para exibir regras utilize a seguinte sintaxe: iptables -t tabela -L cadeia opes

-t tabela - podemos especificar a tabela que pode ser filter, nat ou mangle. -L exibe a cadeia (chain) que pode ser INPUT, OUTPUT, FORWARD, PREROUTING ou POSTROUTING. E as opes utilizadas para exibir as regras que podem ser: -v exibe mais detalhes das regras criadas. -n exibe endereos IP e portas ao invs de fazer a resoluo de nomes DNS para serem exibidos, o que torna mais lento para ser exibidas as regras das tabelas. -x exibe nmeros exatos ao invs de nmeros arredondados e exibe uma faixa de portas de uma regra. --line-numbers exibe a numerao de linhas das regras na primeira coluna da tabela

Para exibir as regras das tabelas filter, nat ou mangle execute os comandos especificando as opes: # iptables -t filter -L -n # iptables -t nat -L -n -v # iptables -t mangle -L -n -v --line-numbers

Para exibir as regras da cadeia INPUT, OUTPUT ou FORWARD execute os comandos especificando as opes: # iptables -L INPUT -n

21

# iptables -L OUTPUT -n -v # iptables -L FORWARD -n -v --line-numbers

Por exemplo: # iptables -L INPUT -n -v --line-numbers Chain INPUT (policy ACCEPT 5026K packets, 1075M bytes) num pkts bytes target prot opt in out source destination 1 0 0 DROP cmp -- * * 0.0.0.0/0 127.0.0.1

Exibindo as regras acima usando as opes -n, -v e --line-numbers temos os seguintes campos:

Chain INPUT (policy ACCEPT 5026K packets, 1075M bytes) - Exibe o nome da cadeia (chain) e a poltica padro da cadeia (ACCEPT) onde so exibidos a quantidade e o tamanho dos pacotes. num - exibe a numerao linhas nas cadeias. pkts - especifica a quantidade de pacotes que trafegam pela regra. bytes - especifica a quantidade de bytes que trafegam pela regra. target - especifica o destino da regra, que pode ser DROP, ACCEPT, REJECT ou outro destino. prot - especifica o protocolo usado pela regra, que pode ser tcp, udp, icmp ou all opt - especifica opes extras como excees ! ou fragmentos -f . in - especifica a interface de rede de entrada, de onde dos pacotes vem. out - especifica a interface de rede de sada, para onde os pacotes dos vo. source - especifica o endereo de origem. destination - especifica o endereo de destino.

Apagando regras ( -D ) Primeiramente devemos exibir as numerao das regras com o comando abaixo com a opo --line-numbers.

# iptables -L -n --line-numbers

22

Chain INPUT (policy ACCEPT) num target prot opt source destination 1 DROP icmp -- 0.0.0.0/0 127.0.0.1

Repare que exibe a linha nmero 1 da cadeia INPUT, onde podemos exclu-la da seguinte forma:

# iptables -D INPUT 1

A opo acima no til quando temos um firewall mais complexo com muitas linhas de regras, ento devemos executar a regra novamente especificando o comando -D ao invs de -A.

# iptables -D INPUT -p icmp -d 127.0.0.1 -j DROP

Inserindo regras ( -I ) Para inserir uma nova regra utilizada opo -I, por exemplo, suponha que seu firewall tem uma regra que est bloqueando o endereo de loopback 127.0.0.1 na linha 1 da cadeia (chain) INPUT e voc deseja inserir uma nova regra que libera o acesso antes da regra de bloqueio, neste caso a nova regra passa a estar na linha 1 e a regra de bloqueio na linha 2.

Neste caso no poderamos inserir uma nova regra (-A INPUT) pois seria adicionada no final da cadeia INPUT e o trfego de pacotes seria rejeitado pela primeira regra (linha 1) e nunca atingindo a segunda regra (linha 2).

Esta regra bloqueia ping no endereo 127.0.0.1, onde a regra est na linha 1 da cadeia INPUT.

# iptables -A INPUT -p icmp -d 127.0.0.1 -j DROP

23

# iptables -L INPUT -n --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination 1 DROP icmp -- 0.0.0.0/0 127.0.0.1

Exibindo regra anterior repare que a regra de bloqueio est na linha 1 da cadeia INPUT, e que executando o comando ping verifique que no obtm resposta.

$ ping -c 3 127.0.0.1

Agora podemos inserir uma nova regra na linha 1 que aceite trfego de pacotes e a regra de bloqueio passa para a linha 2, repare o nmero 1 depois da cadeia INPUT especifica a linha 1 da cadeia INPUT.

# iptables -D INPUT 1 -p icmp -d 127.0.0.1 -j DROP

# iptables -L INPUT -n --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT icmp -- 0.0.0.0/0 127.0.0.1 2 DROP icmp -- 0.0.0.0/0 127.0.0.1

$ ping -c 3 127.0.0.1

Agora executando o comando ping obtemos resposta, pois a linha nmero 1 est aceitando trfego de pacotes e descartando a linha 2 de bloqueio DROP.

24

Substituindo regras ( -R ) Para substituir uma regra utilizada a opo -R, por exemplo para substituir as regras anteriores, basta colocar o nmero da linha aps a cadeia e a opo -R, como mostra o exemplo abaixo:

# iptables -R INPUT 2 -p tcp -d 127.0.0.1 -j ACCEPT

Repare abaixo que a linha 2 foi substitudo destino DROP por ACCEPT e o protocolo icmp por tcp.

# iptables -L INPUT -n --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT icmp -- 0.0.0.0/0 127.0.0.1 2 ACCEPT tcp -- 0.0.0.0/0 127.0.0.1

Criando uma nova cadeia (chain) ( -N ) O tamanho de uma nova cadeia pode ter at 31 caracteres e pode ser usado letras maisculas ou minsculas. Quando se tem muitas linhas de regras, a criao de uma nova cadeia ajuda organizar e facilitar o gerenciamento do firewall para um determinado objetivo analisando o trfego de um mesmo tipo de interface de rede, protocolo, endereo de origem, destino e etc.

Para criar uma nova cadeia (chain) na tabela filter execute o comando :

# iptables -t filter -N Minha-Chain

E para inserir regras na nova cadeia use a opo -A antes da nova regra.

25

# iptables -t filter -A Minha-Chain -p tcp -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 --dport 22 -j DROP

Agora inserimos a cadeia INPUT que tem como destino a nova cadeia Minha-Chain.

# iptables -t filter -A INPUT -j Minha-Chain

Exibindo a nova cadeia criada onde foi adicionada na cadeia INPUT.

# iptables -t filter -L -n Chain INPUT (policy ACCEPT) target prot opt source destination Minha-Chain 0 -- 0.0.0.0/0 0.0.0.0/0

Chain Minha-Chain (1 references) target prot opt source destination DROP tcp -- 192.168.0.0/24 192.168.0.1

Renomeando uma cadeia criada ( -E ) Para renomear uma nova cadeia criada nas tabelas filter, nat ou mangle, use a opo -E antes da nova cadeia criada.

# iptables -t filter -E Minha-Chain Outra-Chain

Acima a cadeia Minha-Chain foi renomeada para Outra-Chain, como mostra o comando abaixo:

26

# iptables -t filter -L Outra-Chain -n Chain Outra-Chain (1 references) target prot opt source destination
DROP tcp -- 192.168.0.0/24 192.168.0.1

Excluindo cadeia (chains) criadas ( -X ) Para excluir uma cadeia (chain) criada em uma tabela, use a opo -X antes do nome da cadeia a ser excluda, caso voc no especifique a cadeia a ser apagada, todas as novas cadeias criadas sero excludas.

Exclui da nova cadeia Outra-Chain # iptables -t filter -X Outra-Chain

Exclui todas as novas cadeias criadas # iptables -X

Limpando regras de uma cadeia (chain) ( -F ) Para excluir uma regras criada em uma cadeia (chain), use a opo -F antes do nome da cadeia a ser limpa ou depois da tabela, caso voc no especifique a cadeia ou tabela a ser limpada, todas as regras das cadeias ou tabelas sero limpas.

Limpa as regras da cadeia INPUT # iptables -t filter -F INPUT

Limpa todas as regras da tabela filter # iptables -t filter -F

27

Limpa todas as regras de todas as tabela filter, nat e mangle. # iptables -F

Limpando contador de pacotes e bytes das cadeias (chains) ( -Z ) A opo -Z serve para limpar os contadores de pacotes e bytes dos campos pkts (pacotes) e bytes de uma regra, onde devemos especificar a tabela e a cadeia a ser limpo os contadores, caso no especifique, todos os contadores sero limpos.

Os contadores podem ser exibidos pela opo -v do comando iptables como mostra o comando abaixo.

# iptables -t nat -L -n -v Chain POSTROUTING (policy ACCEPT 96 packets, 7378 bytes) pkts bytes target prot opt in out source destination 832 50143 MASQUERADE 0 -- * eth0 0.0.0.0/0 0.0.0.0/0

Repare que no campo pkts temos 832 pacotes e no campo bytes 50143 bytes, e agora podemos zera-los usado a opo -Z em conjunto com as opes -L e -v, onde a opo -Z zera os pacotes e os bytes evitando o trfego de pacotes durante a exibio e ao mesmo tempo exibe os campos zerados com as opes -L e -v.

# iptables -t nat -Z POSTROUTING -L -v Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 MASQUERADE 0 -- any wlan0 anywhere anywhere

Poltica de uma cadeia (chain) ( -P )

28

A poltica padro do iptables ACCEPT, e serve para especificar o destino de um pacote quando ele atingir o final das regras de uma cadeia. Essa poltica pode alterada atravs da opo -P do comando iptables como mostra a sintaxe abaixo.

iptables -t tabela -P cadeia ACCEPT/DROP

As duas polticas que podem ser usadas so: ACCEPT (bloqueia e depois aceita pacotes) e DROP (aceita e depois rejeita pacotes).

ACCEPT essa poltica utilizada junta com regras de restritivas (DROP e REJECT) na mesma cadeia (chain), ou seja, primeiro tudo bloqueado e o resto aceito.

DROP essa poltica utilizada junta com regras de permissivas (ACCEPT) na mesma cadeia (chain), ou seja, primeiro tudo aceito e o resto bloqueado.

Para exibir as polticas das cadeias execute o comando iptables -L.

# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination

Chain FORWARD (policy ACCEPT) target prot opt source destination

Chain OUTPUT (policy ACCEPT) target prot opt source destination

29

Repare a poltica padro das cadeias (chains) INPUT, FORWARD e OUTPUT ACCEPT, onde podemos alterar com a opo -P do comando iptables como mostra o exemplo abaixo:

# iptables -P INPUT DROP

Agora exibindo novamente a poltica INPUT, veja que a poltica ACCEPT foi alterada para DROP.

# iptables -L INPUT Chain INPUT (policy DROP) target prot opt source destination

Agora iremos criar duas regras utilizando a poltica DROP criada acima, onde primeiramente cria-se as regras que sero aceitas e depois no final as que bloqueia. # iptables -A INPUT -p icmp -d 127.0.0.1 -j ACCEPT # iptables -A INPUT -p tcp -d 127.0.0.1 --dport 22 -j DROP

Acima foram criadas duas regras:

A primeira regra aceita pacotes ICMP do comando ping que tem como destino o endereo IP 127.0.0.1 e como destino ACCEPT (aceitar pacotes). A segunda regra bloqueia a porta 22 do ssh que tem como destino o endereo IP 127.0.0.1 e como destino DROP (rejeitar pacotes).

Agora execute o comando ping e veja que na primeira regra voc consegue obter resposta, j na segunda regra no, pois a porta 22 est bloqueada para aceitar conexes TCP.

30

$ ping -c 2 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.072 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.079 ms

--- 127.0.0.1 ping statistics --2 packets transmitted, 2 received, 0% packet loss, time 1007ms rtt min/avg/max/mdev = 0.072/0.075/0.079/0.009 ms

Repare que os comandos abaixo no obtm resposta, por que a segunda regra est rejeitando pacotes na porta 22. $ ssh -l usuario 127.0.0.1 ou $ telnet 127.0.0.1 22

*Obs Para comando ssh funcionar o servidor ssh, deve estar sendo executado, para isso execute o comando /etc/init.d/ssh start em distribuies Debian. # /etc/init.d/ssh start

Agora mudando a poltica DROP para o padro ACCEPT novamente e substituindo as regras anteriores alterando o destino onde est ACCEPT pra DROP e vice-versa, o comando ping estar bloqueado para aceitas pacotes ICMP e a porta 22 aceitando conexes TCP.

Alterando a poltica de DROP para ACCEPT # iptables -P INPUT ACCEPT

31

Substituindo a primeira regra na linha 1 alterando o destino ACCEPT para DROP # iptables -R INPUT 1 -p icmp -d 127.0.0.1 -j DROP

Substituindo a primeira regra na linha 1 alterando o destino ACCEPT para DROP # iptables -R INPUT 2 -p tcp -d 127.0.0.1 --dport 22 -j ACCEPT

Especificando opes iptables

Endereo de origem e destino A opo -s que tambm pode ser usado --src ou --source serve para especificar a origem dos pacotes e -d onde pode ser usado --dst ou destination especifica o destino dos pacotes. Nessa opes permitido usar um endereo IP (192.168.0.1), um host (pc1), um host completo FQDN (pc1.dominio.com.br) ou uma rede que pode ser usado mscara de rede padro (192.168.0.0/255.255.255.0) ou mscara de rede CIDR (Veja a aula de endereo IP) 192.168.0.0/24. Caso no seja especificado um endereo IP ou rede, ser atribudo o valor 0/0 que significa todos os computadores e todas as redes.

Exemplos: Aceita todos os pacotes tcp na interface de rede eth0 que tem como origem a rede 192.168.0.0/24 e destino o computador 192.168.0.1 # iptables -A INPUT -p tcp -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -j ACCEPT

Bloqueia os pacotes tcp na interface de rede eth0 que tem como origem a rede 192.168.0.0/255.255.255.0 e destino o host pc1 # iptables -A INPUT -p tcp -i eth0 --src 192.168.0.0/255.255.255.0 --dst pc1 -j DROP

Bloqueia os pacotes tcp da porta 22 na interface de rede eth0 que tem como origem a rede 192.168.0.0/24 e destino o host pc1.dominio.com.br.

32

# iptables -A INPUT -p tcp -i eth0 --source 192.168.0.0/24 --destination pc1.dominio.com.br --dport 22 -j DROP

Bloqueia os pacotes tcp da porta 22 na interface de rede eth0 que tem como origem todos os computadores e todas as redes todos e destino o computador 192.168.0.1. # iptables -A INPUT -p tcp -i eth0 -d 192.168.0.1 --dport 22 -j DROP

Interface de origem e destino A opo -i (in - entrada) que pode ser usada tambm --in-interface serve para especificar a interface de rede de entrada de origem e destino dos pacotes e a opo -o (out - sada) que pode ser usado --out-interface serve para especificar a interface de rede de sada de origem e destino dos pacotes.

A interface de entrada -i nunca pode ser usada com uma cadeia (chain) de sada OUTPUT e POSTROUTING, e a interface de sada -o nunca pode ser usada com uma cadeia (chain) de entrada INPUT e PREROUTING. A cadeia (chain) FORWARD pode ser usada tanto para entrada -i como para sada -o, pois nessa cadeia trafega tanto pacotes de entrada como de sada.

As interfaces de rede geralmente so especificadas como ppp0, eth0, eth1, ... e tambm podemos utilizar a interface lo de loopback para o endereo localhost ou 127.0.0.1. No caso especificar mais de uma interface do mesmo tipo como eth0, eth1,... podemos usar o sinal de + (eth+) como mostra os exemplos abaixo.

Exemplos:

Para exibir as interfaces de entrada no campo in e sada no campo out, use a opo -v do comando iptables junto com as opes -L -n.

# iptables -L -n -v
Chain FORWARD (policy ACCEPT 2400 packets, 344K bytes)

33

pkts bytes target prot opt in out source destination 0 0 DROP tcp -- eth0 eth1 0.0.0.0/0 0.0.0.0/0

Aceita conexes tcp na interface ppp0 # iptables -A INPUT -i ppp0 -p tcp -j ACCEPT

Aceita conexes tcp na interface lo que tem como origem e destino o endereo 127.0.0.1 # iptables -A INPUT -i lo -p tcp -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

Aceita conexes tcp em todas interfaces que comeam em eth0, eth1, eth2, ... que tem como origem o endereo IP 192.168.0.1 # iptables -A INPUT -i eth+ -p tcp -d 192.168.0.1 -j ACCEPT

Bloqueia o trfego de entrada (-A INPUT) de pacotes TCP na interface de rede eth1 (-i eth1) # iptables -A INPUT -i eth1 -p tcp -d 192.168.0.1 -j DROP

Para aumentar a segurana dos usurios locais, voc pode bloquear o trfego de conexes que saem dos computadores da rede local para a internet, especificando a interface de rede conectada a rede local. # iptables -A OUTPUT -o eth1 -p tcp -j DROP

Bloqueia o trfego de entrada e sada pacotes TCP da interface de entrada -i eth0 para a interface de sada -o eth1 # iptables -A FORWARD -p tcp -i eth0 -o eth1 -j DROP

Protocolos

34

A opo -p que pode ser usada a opo --protocol (protocolo) serve para especificar o protocolo usado que pode ser tcp, udp e icmp.

Exemplos:

Bloqueia pacotes TCP para a porta 22 do SSH na interface de rede eth0 que tem como destino o endereo IP 192.168.0.1 # iptables -A INPUT -p tcp -i eth0 -d 192.168.0.1 --dport 22 -j DROP

Bloqueia pacotes UDP para a porta 53 do DNS na interface de rede eth0 que tem como destino o endereo IP 192.168.0.1 # iptables -A INPUT -p udp -i eth0 -d 192.168.0.1 --dport 53 -j DROP

Bloqueia pacotes ICMP usado pelo comando ping na interface de rede eth0 que tem como destino o endereo IP 192.168.0.1 # iptables -A INPUT -p icmp -i eth0 -d 192.168.0.1 -j DROP

Portas de origem e destino A opo --sport que pode ser usada tambm --source-port serve para especificar a porta de origem e a opo --dport que pode ser usada tambm --destination-port serve para especificar a porta de destino.

Exemplos:

Bloqueia as conexes tcp da porta 22 na interface eth0 que tem como origem a rede 192.168.0.0/24 e destino o computador 192.168.0.1. A opo sport veremos mais a frente no redirecionamento de portas com DNAT e SNAT. # iptables -A INPUT -p tcp -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 --dport 22 -j DROP

35

Para especifica um intervalo de portas utilize dois pontos (21:81). # iptables -A INPUT -p tcp -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 --dport 21:81 -j DROP

Este exemplo rejeita conexes TCP na interface eth0 nas portas altas do firewall acima da porta 1024 at 65535. # iptables -A INPUT -p tcp -i eth0 --dport 1024:65535 -j DROP

Para especificar vrias portas necessrio utilizar o mdulo multiport, onde as portas devem ser separadas por vrgula (21, 22, 80). # iptables -A INPUT -p tcp -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -m multiport --dport 21, 22, 80 -j DROP

Mensagens do protocolo ICMP Com o protocolo ICMP no possui portas, controle sobre o trfego dos pacotes so feitos pelos tipos de mensagens ICMP que so exibidas pelo comando iptables -p icmp help.

# iptables -p icmp --help ou # iptables -p icmp -h

Por exemplo observando as mensagens temos as mensagens echo-reply (pong) responsvel pelo resposta de ping e echo-request (ping) responsvel pelo requisio de ping, onde podemos bloque-las e assim bloqueando o comando ping.

# iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -j DROP

36

Pacotes syn A opo --syn especifica pacotes syn que so usados para iniciar uma conexo usando o protocolo TCP, bloqueando esses pacotes o computador que enviou os pacotes syn, nunca obter uma resposta, pois a conexo no ser realizada, apenas as conexes j estabelecidas no sero bloqueadas.

A regra abaixo bloqueia qualquer tentativa de conexo que venha da interface de rede eth0, e em seguida aceita apenas conexes para o computador local no endereo de loopback 127.0.0.1 tanto na origem como no destino.

# iptables -A INPUT -p tcp -i eth0 --syn -j DROP # iptables -A INPUT -p tcp -i eth0 --syn -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

Essa opo --syn pode ser invertida se precedida por ! , o que significa rejeitar qualquer pacote (ACK,FIN,RST,URG,PSH) exceto os que iniciam conexes SYN.

# iptables -A INPUT -p tcp -i eth0 ! --syn -j DROP

Flags tcp (--tcp-flags) O cabealho TCP identifica um pacote TCP que est sendo enviado por flags de bits(Urg, Ack, Psh, Rst, Syn e Fin). As flags Urg e Psh dificilmente so utilizadas, abaixo segue as combinaes de flags usadas pelo TCP.

Combinaes de flags SYN SYN ACK ACK

Descrio o primeiro pacote a ser enviado em uma conexo entre a origem e o destino O destino responde ao pacote SYN, confirmando sua mensagem original e enviando SYN como resposta Cada pacote utilizado em uma conexo estabelecida possui um bit ACK ativado para confirmar os pacotes recebidos anteriormente

37

FIN FIN ACK

No momento em que uma conexo estiver sendo fechada, ser enviado um pacote FIN para o outro Este tipo de combinao utilizada para confirmar o primeiro pacote FIN e completar o encerramento da conexo Quando um pacote enviado de forma inesperada enviado um pacote reset(RST), por exemplo, em uma conexo se for recebido um pacote SYN ACK sem ter enviado um pacote SYN ser enviado um pacote RST

RST

As vezes necessrio permitir conexes TCP em uma nica direo e no nas duas direes. Por exemplo, temos um servidor HTTP externo onde permitido fazer requisies de conexes e no conexes vindas deste servidor.

A soluo seria bloquear os pacotes TCP vindos do servidor, mas as conexes TCP precisam de pacotes bidirecionais (indo e vindo) para estabelecer a conexo. Ento a soluo bloquear os pacotes SYN (com as flags SYN ativadas e as flags RST e ACK desativadas, mas dizemos pacotes SYN como atalho) que so utilizados para iniciar uma conexo, onde rejeitando esses pacotes a conexo ser bloqueada.

O protocolo TCP tambm possui as flags SYN, ACK, FIN, RST, URG e PSH, onde podemos especificar todas as flags com a opo ALL, nenhuma com a opo NONE e utilizar o uso de excees com ! na primeira opo depois da opo --tcp-flags.

A opo --tcp-flags permite voc filtrar flags TCP especificas. A primeira opo depois de --tcp-flags especifica as flags que so analisadas, e a segunda opo especifica as flags que so ajustadas para serem rejeitadas ou aceitas.

possvel fazer combinaes de flags na primeira opo e na segunda aps a opo --tcp-flags, como por exemplo:

Opo --tcp-flags --tcp-flags --tcp-flags --tcp-flags ALL ALL ALL

1 opo ALL NONE SYN,ACK

2 opo

38

--tcp-flags --tcp-flags --tcp-flags

SYN,RST,ACK SYN,ACK,FIN,RST,URG,PSH ! SYN,ACK,RST

SYN SYN,ACK,FIN,RST,URG,PSH SYN,ACK

Para fazer testes de conexo, use o comando ssh que usa pacotes TCP que possui as flags tcp. $ ssh -l aluno1 192.168.0.1

Exemplos:

Analisa todas as flags na primeira opo ALL, e na segunda opo especifica a flag SYN onde ser rejeitada qualquer tentativa de conexo. # iptables -A INPUT -p tcp -i eth0 --tcp-flags ALL SYN -j DROP

Analisa todas as flags na primeira opo ALL, e na segunda opo NONE no especifica nenhuma flag a ser rejeitada. # iptables -A INPUT -p tcp -i eth0 --tcp-flags ALL NONE -j DROP

Analisa todas as flags na primeira opo ALL, e na segunda opo ALL especifica todas as flags a serem rejeitadas. # iptables -A INPUT -p tcp -i eth0 --tcp-flags ALL ALL -j DROP Analisa as flags na primeira opo ACK e RST com exceo da flag SYN ( ! SYN ), e na segunda opo rejeita as flags ACK e RST. # iptables -A INPUT -p tcp -i eth0 --tcp-flags ! SYN,ACK,RST ACK,RST -j DROP Analisa as flags na primeira opo SYN e FIN, e na segunda opo rejeita ambas as flags. # iptables -A INPUT -p tcp -i eth0 --tcp-flags SYN,FIN SYN,FIN -j DROP

Analisa as flags na primeira opo ACK e FIN, e na segunda opo rejeita a flag FIN sem o acompanhamento da flag ACK.

39

# iptables -A INPUT -p tcp -i eth0 --tcp-flags ACK,FIN FIN -j DROP

Fragmentos ( -f ) Quando um pacote TCP muito grande para ser enviado de uma nica vez, ento o pacote dividido em pedaos menores que so chamados de fragmentos que so transmitidos como mltiplos pacotes atravs de um computador de origem para ser reconstitudo em um computador destino.

Para especificar fragmentos em regras podemos utilizar a opo -f ou --fragment, para conexes com NAT, todos os fragmentos sero reconstitudos antes de atingirem o cdigo do filtro de pacotes, ento voc no precisa se preocupar com fragmentos.

Este exemplo bloqueia qualquer fragmento sado da interface eth0 que tenha como destino o computador 192.168.0.1 # iptables -A OUTPUT -p tcp -o eth0 -f -d 192.168.0.1 -j DROP

Excees ( ! ) As excees representada por uma exclamao ! podem ser aplicadas em endereos IP ou de rede de origem e destino, protocolos, portas e etc.

Por exemplo:

# iptables -A INPUT -p tcp -i eth0 -s ! 192.168.0.2 -d 192.168.0.1 --destination-port 22 -j DROP Essa regra bloqueia a porta 22 para qualquer computador, exceto para o computador 192.168.1.2 ( ! 192.168.1.2) que utiliza o protocolo tcp, na interface de rede eth0, que tenha como origem qualquer computador e como destino o computador 192.168.0.1.

40

# iptables -A INPUT -p tcp ! --syn -i eth0 -s 192.168.0.0/24 -d 192.168.0.2 -j DROP Essa regra bloqueia a todos os pacotes, exceto os pacotes que tentam iniciar conexes syn ( ! --syn) que utiliza o protocolo tcp, na interface de rede eth0, que tem como origem a rede 192.168.0.0/24 e o destino o computador 192.168.0.2. As conexes j efetuadas no so atingidas por esta regra, e somente pode ser aplicada em conexes TCP.

# iptables -A INPUT -p tcp -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -m multiport --dport ! 22, 21, 80 -j DROP

Essa regra que utiliza o mdulo multiport (para especificar vrias portas) bloqueia todas as portas para a rede 192.168.0.0/24, exceto as portas 21, 22 e 80 ( ! 22, 21, 80) que utiliza o protocolo tcp, na interface de rede eth0, que tenha como destino o computador 192.168.0.1.

Destino O destino de um pacote em uma regra representado pela letra -j que pode ser -j ACCEPT (aceitar pacotes), -j DROP (rejeitar pacotes), -j LOG (gravar em logs), -j REDIRECT (redireciona pacotes), -j SNAT (redirecionamento de origem), -j DNAT (redirecionamento de destino), -j RETURN (retorna o resultado da cadeia anterior sem executar o restante do cadeia atual).

Nos exemplos acima vimos os destinos ACCEPT e DROP, veremos agora os destinos REJECT, LOG e RETURN e mais adiante REDIRECT, SNAT e DNAT na seo de redirecionamento de portas e endereos de origem e destino.

REJECT O destino REJECT rejeita pacotes assim como o destino DROP, pode ser usado apenas na tabela filter e no pode ser utilizado como poltica padro assim como ACCEPT e DROP, e tem como diferena que ele envia uma mensagem ICMP "port-unreachable" porta inalcanvel e o destino DROP no.

As vezes melhor usar REJECT do que DROP para bloquear portas, pois d uma impresso que o computador est sem firewall e alm do mais DROP gasta mais

41

tempo nas repostas de portas de servios, portscanners e sniffers com nmap e netcat diminuindo assim os recursos da mquina.

Exemplo:

Rejeita conexes de pacotes icmp na interface de loopback 127.0.0.1 # iptables -A INPUT -p icmp -d 127.0.0.1 -j REJECT

# iptables -L INPUT -n Chain INPUT (policy ACCEPT) target prot opt source destination
REJECT icmp -- 0.0.0.0/0 127.0.0.1 reject-with icmp-port-unreachable

$ ping -c 2 127.0.0.1

Rejeita conexes de pacotes tcp na porta 22 do SSH na interface de rede eth0 que tem como destino o computador 192.168.0.1. Para isso devemos ter o SSH instalado e executando o servio e o portscanner nmap (caso no tenha instalado use o comando:

# apt-get install nmap

Iniciando o servio ssh # /etc/init.d/ssh start

Utilizando o portscanner nmap abaixo, veja que a porta do ssh est aberta.

42

# nmap -sS localhost


Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2008-04-01 00:50 BRT Interesting ports on localhost (127.0.0.1): Not shown: 1677 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 113/tcp open auth

Agora rejeite conexes na porta 22 do ssh # iptables -A INPUT -p tcp -i eth0 -d 192.168.0.1 --dport 22 -j REJECT

Execute o comando nmap novamente, e veja que agora est filtrada onde obtm-se tambm usando DROP.

# nmap -sS localhost


Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2008-04-01 00:50 BRT Interesting ports on localhost (127.0.0.1): Not shown: 1677 closed ports PORT STATE SERVICE 22/tcp filtered ssh 80/tcp open http 113/tcp open auth

LOG Este destino grava mensagens de log do trfego de pacotes nos arquivos /var/log/syslog (Debian) ou /var/log/messages (Red Hat / Fedora) do daemon syslog do sistema.

43

O destino LOG serve para gravar logs de uma determinada regra em seu firewall, onde geralmente deve ser aplicada no final de uma cadeia (chain) para posterior anlise das tentativas de conexes, facilitando assim o conhecimento das regras que esto sendo aceitas ou bloqueadas.

No iptables no possvel gravar em log e especificar o destino na mesma regra, para gravar mensagens de log de uma regra, primeiramente deve-se gravar em log as tentativas de conexes e depois especificar a regra de destino, onde aceitar os pacotes (-j ACCEPT) ou rejeitar (-j DROP ou REJECT), caso contrrio no funcionar a regra de LOG.

Vale lembrar que para poltica padro -P ACCEPT (permissiva) deve-se primeiro bloquear tudo (-j DROP ou REJECT) e depois aceitar (-j ACCEPT) o que voc quer no final, para a poltica -P DROP (restritiva) o contrrio.

Exemplo:

Grava em log todas as conexes tcp vindas da interface eth0 do computador 192.168.1.30

# iptables -A INPUT -p tcp -i eth0 -s 192.168.1.30 -j LOG


# iptables -A INPUT -p tcp -i eth0 -s 192.168.1.30 -j REJECT

Exiba as regras com o comando iptables -L -n -v

# iptables -L -n
Chain INPUT (policy ACCEPT) target prot opt source destination LOG tcp -- 192.168.1.30 0.0.0.0/0 LOG flags 0 level 4

44

REJECT tcp -- 192.168.1.30 0.0.0.0/0 reject-with icmp-port-unreachable

A partir de um computador da rede local (192.168.1.30), tente acessar um servio que usa o protocolo TCP como o SSH e observe a sada do comando abaixo que a conexo estar recusada.

$ ssh -l aluno1 192.168.1.1


ssh: connect to host 192.168.1.1 port 22: Connection refused

Agora no computador com o firewall, observe no log do syslog as mensagens enviadas das tentativas de conexes com os comandos tail -f /var/log/syslog ou dmesg

# tail -f /var/log/syslog ou # dmesg


Apr 1 20:25:09 firewall kernel: IN=eth0 OUT= MAC=00:11:2f:90:a6:75:00:c0:df:22:d7:dc:08:00 SRC=192.168.1.30 DST=192.168.1.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=63356 DF PROTO=TCP SPT=38316 DPT=22 WINDOW=5840 RES=0x00 ACK SYN URGP=0

Analisando as mensagem de log acima temos os seguintes campos:

Apr 1 20:25:09 - Exibe o ms, o dia e a hora firewall - Nome do computador local que gravou o log kernel - Nome de daemon que registrou a mensagem, o iptables utilizada o prprio do kernel IN - Interface de entrada de origem do pacote OUT - Interface de sada de destino do pacote MAC - Endereo MAC da interface de rede local e da interface de rede remota SRC - Endereo IP de origem

45

DST - Endereo IP de destino LEN - Tamamho do pacote em bytes TOS - Prioridade do pacote PREC - Prioridade do pacote TTL - Tempo de vida do pacote ID - Identificao do pacote que usado por fragmentos posteriores desse pacote DF - (DF - Don't Fragment) - Esta opo diz para no fragmentar pacotes pequenos. PROTO - Especifica o tipo do protocolo podendo ser TCP, UDP ou ICMP. SPT - Especifica a porta de origem do pacote DPT - Especifica a porta de destino do pacote ACK SYN - Especifica flags TCP

Acima temos um log na porta 22 (DPT) que tem com origem o computador 192.168.1.30 (SRC) e destino o computador 192.168.1.1 (DST). Quando temos muitas regras fica complicado conferir os endereos de origem e destino e suas respectivas portas com as regras de acesso (ACCEPT) ou bloqueio (DROP ou REJECT).

Para isso o destino LOG tem opes que permite especificar uma descrio do log para facilitar a anlise.

--log-prefix Descrio - Especifica uma descrio de at 29 caracteres da regra a ser gravada em log para melhor identificao.

--log-level nvel - Determina o nvel da mensagem no syslog que pode ser debug, info, notice, warning, err, crit, alert and emerg, que corresponde aos nmeros de 7 at 0. Para mais detalhes veja a aula mensagens do sistema do curso de Linux Intermedirio.

46

Para especificar uma descrio para nosso exemplo acima, acrescente a opo --log-prefix a nossa regra abaixo, deixe um espao no final da linha onde tem a descrio, para para a prxima opo do log.

# iptables -A INPUT -p tcp -i eth0 -s 192.168.1.30 -j LOG --log-prefix "Firewall: porta 22 REJEITADA " # iptables -A INPUT -p tcp -i eth0 -s 192.168.1.30 -j REJECT

Agora observe as mensagens de log com dmesg ou tail -f /var/log/syslog, e veja a descrio Firewall: porta 22 REJEITADA

# tail -f /var/log/syslog
Apr 1 22:45:55 firewall kernel: Firewall: porta 22 REJEITADA IN=eth0 OUT= MAC=00:11:2f:90:a6:75:00:90:f5:63:33:ee:08:00 SRC=192.168.1.20 DST=192.168.1.10 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=22535 DF PROTO=TCP SPT=54952 DPT=22 WINDOW=5840 RES=0x00 SYN URGP=0

RETURN O destino RETURN serve para interromper a execuo de uma regra atual e retornar para a regra anterior ou posterior. Funciona semelhante aos comandos IF(SE) e ELSE (SENO) em linguagens de programao como C, Perl, Shell Script, Php etc, algo somo:

IF regra anterior for verdadeira execute a regra anterior ELSE execute a regra posterior

Quando uma regra contm o destino RETURN ela ser analisada, e caso encontre informaes contidas na regra anterior ento executada a regra anterior, caso contrrio executada a regra posterior e caso no encontre informaes na regra

47

posterior, ento a poltica padro da cadeia (ACCEPT bloqueia tudo e aceita o resto) ou (DROP aceita tudo e rejeita o resto) utilizada para definir o destino do pacote.

Tendo em mente agora a poltica padro das cadeias ACCEPT e DROP, iremos utilizar como exemplo um computador com o firewall 192.168.1.10 e dois computadores da rede 192.168.1.20 e 192.168.1.30, onde sero rejeitados pacotes ICMP do comando ping para o computador 192.168.1.20 e para o computador 192.168.1.30 no.

Essa a primeira regra onde rejeitada pacotes ICMP para o computador de origem 192.168.1.20 # iptables -A INPUT -p icmp -i eth0 -s 192.168.1.20 -j DROP

Essa regra que contm o destino RETURN que analisar as informaes da regra anterior, caso as informaes sejam verdadeiras ento interrompe a execuo e retorna para a regra anterior, onde rejeitar o pacotes (-j DROP), caso contrrio ser analisadas as regras posteriores onde poder aceitar (ACCEPT) ou rejeitar (REJECT ou DROP) o pacote.

# iptables -A INPUT -p icmp -i eth0 -s 192.168.1.20 -j RETURN

Agora adicione as regras posteriores onde aceitar os pacotes ACCEPT para os dois computadores 192.168.1.20 e 192.168.1.30

# iptables -A INPUT -p icmp -i eth0 -s 192.168.1.20 -j ACCEPT # iptables -A INPUT -p icmp -i eth0 -s 192.168.1.30 -j ACCEPT

Exiba as regras com o comando iptables -L INPUT -n --line-numbers

# iptables -L INPUT -n line-numbers

48

Chain INPUT (policy ACCEPT) num target prot opt source destination 1 DROP icmp -- 192.168.1.20 0.0.0.0/0 2 RETURN icmp -- 192.168.1.20 0.0.0.0/0 3 ACCEPT icmp -- 192.168.1.20 0.0.0.0/0 4 ACCEPT icmp -- 192.168.1.30 0.0.0.0/0

Agora a partir do computador 192.168.1.20, execute o comando ping:

$ ping 192.168.1.10

E no obtm resposta, pois na (linha 2) onde est o destino RETURN, contm informaes sobre endereo IP 192.168.1.20 e ento diz para voltar para a regra anterior (linha 1) que rejeita o pacote (-j DROP) para o endereo IP 192.168.1.20.

Agora a partir do computador 192.168.1.30, execute o comando ping:

$ ping 192.168.1.10
PING 192.168.1.10 (192.168.1.10) 56(84) bytes of data. 64 bytes from 192.168.1.10: icmp_seq=1 ttl=64 time=0.092 ms

E obtm resposta, pois na (linha 2) onde est o destino RETURN, no contm informaes sobre o endereo IP 192.168.1.30 e ento diz para continuar a execuo da regra posterior (linha 3) que tambm no tem informaes sobre o endereo IP 192.168.1.30 e finalmente na (linha 4) encontra informaes sobre o endereo IP 192.168.1.30 onde aceita o pacote (-j ACCEPT).

Caso no encontrasse informaes sobre o endereo IP 192.168.1.30 na ltima linha, ento seria aplicada a poltica padro da cadeia que neste caso ACCEPT (-j ACCEPT) e aceitaria o pacote e se fosse DROP (-j DROP) rejeitaria.

49

Salvando e restaurando as regras Podemos salvar e recuperar as regras de duas maneiras: A primeira criar um shell script como foi mostrado acima no comeo deste captulo (que o correto) com todos os comandos executados onde voc pode personalizar seu script de firewall. A segunda usar os comandos iptables-save (para salvar as regras) e iptables-restore (para restaurar as regras). A sintaxe dos comandos da seguinte forma: Para salvar as regras # iptables-save > /diretorio/regras Para restaurar as regras # iptables-restore < /diretorio/regras Tabela NAT A tabela NAT (Network Address Translation Traduo de endereo de rede) serve para controlar o trfego da traduo de endereos, onde feito o masquerading (mascaramento) que uma tcnica que consiste em reescrever os endereos IP (Ex:192.168.0.10) de origem de um pacote de que passam sobre um roteador, gateway ou firewall (Ex:192.168.0.1) de maneira que um computador de uma rede interna (Ex: 192.168.0.0) tenha acesso ao exterior (Ex:200.204.0.100 - rede pblica Internet). Nesta tabela podemos fazer o masquerading (mascaramento) de IP quando se deseja compartilha a conexo com a internet para os demais computadores da rede e podemos SNAT(endereo de origem) e DNAT(endereo de destino) onde podemos redirecionar as conexes para um servidor da nossa rede local, como foi mostrado no captulo Configurando o roteador. Para monitorar as conexes na tabela nat use o comando cat /proc/net/ip_conntrack. $ cat /proc/net/ip_conntrack Criando uma cadeia na tabela NAT Para criar uma nova cadeia (chain) na tabela nat a mesma sintaxe onde criamos uma nova cadeia acima, apenas deve ser especificado a opo -t nat para no ser criada na tabela padro filter.

50

# iptables -t nat -N Minha-Cadeia Para adicionar regras na nova cadeia da tabela NAT, deve ser especificado a opo -t nat # iptables -t nat -A Minha-Cadeia -p tcp --dport 22 -j DROP

E para exibir as regras tambm deve ser especificado a opo -t nat # iptables -t nat -L -n
Chain Minha-Cadeia (0 references) target prot opt source destination DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22

Mascaramento de IP (Masquerading) Para habilitar o mascaramento de IP no Linux e compartilhar a conexo com a internet para todos os computadores da rede local 192.168.0.0/24. O IP Masquerading que utiliza o destino -j MASQUERADE um tipo especial de SNAT (que veremos logo em seguida abaixo) e que utiliza sempre a cadeia POSTROUTING. O IP Masquerading feito da seguinte forma: Os endereos privados da rede local (192.168.0.2, 192.168.0.2, ...) se conecta ao roteador ou firewall, onde os endereos IP so substitudos pelo IP vlido na internet fornecido pelo provedor que pode ser fixo ou dinmico (200.xxx.xxx.xxx), permitindo assim que os computadores acessarem a internet, e depois de a conexo conseguir ser estabelecida a operao invertida. Veja a seqencia abaixo: Computadores rede local 192.168.0.2, 192.168.0.3 ... => Internet 200.000.000.100 => Roteador / Firewall <=> 192.168.0.1 <=> Roteador / Firewall <=> 192.168.0.1 <=> Internet => 200.000.000.100 Computadores rede local <= 192.168.0.2, 192.168.0.3 ...

51

Para ativar o roteamento de pacotes do kernel digite o comando: # echo "1" >/proc/sys/net/ipv4/ip_forward E habilite o mascaramento de IP com o comando: # iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE Agora configure os computadores da sua rede colocando como gateway o endereo IP do servidor Linux 192.168.0.1 que est como roteador ou firewall da rede compartilhando a conexo com a internet. Endereo de destino (DNAT) e endereo de origem (SNAT) O recurso DNAT (Destination Nat Endereo de destino NAT) uma tcnica que modifica os endereos IP dos computadores de destino, onde bastante utilizado para redirecionamento de IP e portas, proxy transparente e balanceamento de carga. Este recurso sempre e que utiliza a cadeia PREROUNTING e as mesma especificaes de SNAT podem ser especificadas. O recurso SNAT (Source Nat Endereo de origem NAT) uma tcnica que modifica os endereos IP dos computadores de origem antes que os pacotes sejam enviados. Este recurso sempre e que utiliza a cadeia POSTROUTING e funciona da mesma forma como foi mostrado acima no IP Masquerading (Mscaramento de IP) onde permite um ou mais computadores da sua rede acessar a internet atravs de um roteador ou firewall que tem um nico endereo IP vlido na internet. Para fazer os testes de DNAT e SNAT necessrio que para cada regra com DNAT tenha outra regra correspondente com SNAT. Por exemplo: # iptables -t nat -A PREROUTING -d 200.000.000.100 -j DNAT --to 192.168.1.2 # iptables -t nat -A POSTROUTING -s 192.168.1.2 -j SNAT --to 200.000.000.100

Obs: No se esquea habilitar o roteamento de pacotes com o comando : echo "1" >/proc/sys/net/ipv4/ip_forward Voc pode fazer testes externos utilizando o endereo um IP fixo(eth0) ou dinmico(ppp0) pelo navegador acessando o endereo IP do firewall http://200.0.0.100 com um amigo de uma LAN HOUSE pelo amsn, ou fazer os testes localmente da rede local de um computador (192.168.1.2) que esta sendo redirecionado nas regras de DNAT e SNAT, acessando no navegador web o

52

endereo IP virtual http://10.0.0.1 criado com IP Aliasing como mostra o exemplo abaixo: # atribuindo vrios endereos IP na mesma placa de rede com IP Aliasing
/sbin/ifconfig eth0:0 /sbin/ifconfig eth0:1 /sbin/route add -host /sbin/route add -host 10.0.0.1 10.0.0.2 10.0.0.1 10.0.0.2 netmask 255.0.0.0 netmask 255.0.0.0 dev eth0:0 dev eth0:1

Agora a partir de um computador da rede local teste com o comando ping os Ips criados $ ping 10.0.0.1 Exemplos: O exemplo abaixo redireciona as conexes TCP externas com DNAT vindas do IP vlido conectado a internet 200.000.000.100 para o endereo IP da rede local 192.168.1.2 que utiliza a interface de rede eth0. E quando a resposta da requisio da conexo efetuada, invertida a operao utilizando a regra com SNAT, onde alterado a cadeia PREROUTING por POSTROUTING e a especificao da interface rede de entrada -i eth0 para sada -o eth0. # iptables -t nat -A PREROUTING -p tcp -i eth0 -d 200.000.000.100 -j DNAT --to 192.168.1.2 # iptables -t nat -A POSTROUTING -p tcp -o eth0 -s 192.168.1.2 -j SNAT --to 200.000.000.100 ou para teste na rede local # iptables -t nat -A PREROUTING -p tcp -i eth1 -d 10.0.0.1 -j DNAT --to 192.168.1.2 # iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 192.168.1.2 -j SNAT --to 10.0.0.1

Este exemplo faz um balanceamento entres os servidores 192.168.1.2 e 192.168.1.3 e redireciona as conexes com DNAT do endereo IP externo 200.000.000.100 conectado a interface da rede eth0 que tem como destino o intervalo de endereos IP entre 192.168.1.2 a 192.168.1.3 (sendo que poderia ser mais endereos como 192.168.1.4, 192.168.1.5, ...) e depois a operao invertida com SNAT.
# iptables -t nat -A PREROUTING -d 200.000.000.100 -i eth0 -j DNAT --to 192.168.1.1-192.168.1.2

53

# iptables -t nat -A POSTROUTING -s 192.168.1.1 -p tcp -o eth0 -j SNAT --to 200.000.000.100 # iptables -t nat -A POSTROUTING -s 192.168.1.2 -p tcp -o eth0 -j SNAT --to 200.000.000.100

ou para teste na rede local

# iptables -t nat -A PREROUTING -d 10.0.0.1 -i eth0 -j DNAT --to 192.168.1.1-192.168.1.2 # iptables -t nat -A POSTROUTING -s 192.168.1.1 -p tcp -o eth0 -j SNAT --to 10.0.0.1 # iptables -t nat -A POSTROUTING -s 192.168.1.2 -p tcp -o eth0 -j SNAT --to 10.0.0.1

Este exemplo idntico ao exemplo acima, apenas foi especificado a porta :80 no final dos endereos IP
# iptables -t nat -A PREROUTING -d 200.000.000.100 -i eth0 -j DNAT --to 192.168.1.1-192.168.1.3:80 # iptables -t nat -A POSTROUTING -s 192.168.1.1 -p tcp -o eth0 -j SNAT --to 200.000.000.100:80 # iptables -t nat -A POSTROUTING -s 192.168.1.2 -p tcp -o eth0 -j SNAT --to 200.000.000.100:80

ou para teste na rede local


# iptables -t nat -A PREROUTING -d 10.0.0.1 -i eth0 -j DNAT --to 192.168.1.1-192.168.1.3:80 # iptables -t nat -A POSTROUTING -s 192.168.1.1 -p tcp -o eth0 -j SNAT --to 10.0.0.1:80 # iptables -t nat -A POSTROUTING -s 192.168.1.2 -p tcp -o eth0 -j SNAT --to 10.0.0.1:80

Este exemplo redireciona as conexes com DNAT do endereo IP externo 200.000.000.100 conectado a interface da rede eth0 utilizando o protocolo TCP conectado a interface da rede eth0 que tem como destino o endereo IP 192.168.1.2 e o intervalo de portas entre 21 a 80 e depois a operao invertida com SNAT.
# iptables -t nat -A PREROUTING -d 200.000.000.100 -p tcp -i eth0 -j DNAT --to 192.168.1.2:21-80 # iptables -t nat -A POSTROUTING -s 192.168.1.2 -p tcp -o eth0 -j SNAT --to 200.000.000.100:21-80

54

ou para teste na rede local

# iptables -t nat -A PREROUTING -d 10.0.0.1 -p tcp -i eth0 -j DNAT --to 192.168.1.2:21-80 # iptables -t nat -A POSTROUTING -s 192.168.1.2 -p tcp -o eth0 -j SNAT --to 10.0.0.1:21-80

Exibindo as regras # iptables -t nat -L -n


Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT tcp -- 0.0.0.0/0 10.0.0.1 to:192.168.1.2:21-80

Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE 0 -- 0.0.0.0/0 0.0.0.0/0 SNAT tcp -- 192.168.1.2 0.0.0.0/0 to:10.0.0.1:21-80

Redirecionamento de portas O redirecionamento de portas que utilizada o destino REDIRECT, permite redirecionar conexes de uma porta para outra na mesma mquina que est o firewall. Este mtodo um tipo de DNAT e que utiliza sempre a cadeia PREROUNTING e OUTPUT da tabela nat onde aplicado para fazer proxy transparente no servidor Squid. O exemplo abaixo redireciona as conexes tcp vindas da interface eth1 da rede local para a porta 80 de acesso a intenet para a porta do squid 3128 usando a opo --to-port. # iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

55

Podemos tambm redirecionar portas usando DNAT e SNAT para portas de outros computadores da rede local onde esteja servidores http (porta 80), dns (porta 53), ftp (porta 21), smtp (porta 25), ssh (porta 22), mysql (porta 3306).

Exemplos:

Este exemplo redireciona uma porta que no esta em uso, geralmente portas altas acima de 1024, onde ser feito o redirecionamento da porta 8181 do firewall para a porta 80 no servidor web 192.168.1.2.

Pronto agora quando algum externamente da internet acessar o seu navegador web na porta 8181 do firewall com a url http://200.0.0.100:8181 e quem ir responder o servidor web 192.168.1.2 na porta 80.

# iptables -t nat -A PREROUTING -p tcp --dport 8181 -d 200.0.0.100 -j DNAT --to 192.168.1.2:80 # iptables -t nat -A POSTROUTING -p tcp --sport 8181 -d 192.168.1.2 -j SNAT --to 200.0.0.100:80

Neste exemplo abaixo a primeira regra redireciona as conexes vindas da internet na porta 80 do firewall com endereo externo 200.0.0.100 para a porta 80 do servidor HTTP 192.168.1.2 onde utilizando a tabela nat com DNAT.

Depois na segunda regra invertido, onde as conexes que saem do servidor HTTP 192.168.1.2 na porta 80 so redirecionadas usando a tabela nat com SNAT para a porta 80 do firewall com o endereo externo 200.0.0.100.

INTERNET

FIREWALL

SERVIDOR REDE LOCAL <= IP interno 192.168.1.2

http://www.site1.com.br => <= IP externo 200.0.0.100 =>

56

# iptables -t nat -A PREROUTING -p tcp --dport 80 -d 200.0.0.100 -j DNAT --to 192.168.1.2:80 # iptables -t nat -A POSTROUTING -p tcp --sport 80 -s 192.168.1.2 -j SNAT --to 200.0.0.100:80

Exibindo a tabela nat com as regras:

# iptables -t nat -L -n Chain PREROUTING (policy ACCEPT)


target prot opt source destination DNAT tcp -- 200.0.0.100 200.0.0.100 tcp dpt:80 to:192.168.1.2:80

Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE 0 -- 0.0.0.0/0 0.0.0.0/0 SNAT tcp -- 200.0.0.100 192.168.1.2 tcp spt:80 to:200.0.0.100:80

Pronto agora quando algum da internet solicitar um site hospedado no servidor HTTP da rede local, o firewall com o endereo 200.000.000.100 ir redirecionar para a porta 80 do servidor HTTP da rede local 192.168.1.2, que ir responder pelas requisies e exibir a pgina.

Esse mesmo exemplo serve para outros servidores como dns (porta 53), ftp (porta 21), smtp (porta 25), ssh (porta 22), mysql (porta 3306) basta alterar o endereo IP e a porta.

Tabela MANGLE

57

A tabela mangle serve para fazer algum tipo de ao para tratar um pacote que trafega pelas cadeias, como por exemplo especificar o tipo de servio (TOS), e utiliza cinco cadeias PREROUNTING, POSTROUTING, INPUT, OUTPUT e FORWARD. Cada uma dessas cadeias so executadas antes das suas cadeias correspondentes na tabela filter e nat, onde so determinadas as aes a ser aplicadas no trfego dos pacotes.

Por exemplo a cadeia PREROUNTING da tabela mangle executada antes da cadeia PREROUNTING da tabela nat, a cadeia OUTPUT da tabela mangle executada antes da cadeia OUTPUT da tabela nat e cadeia OUTPUT da tabela filter.

Veja a tabela abaixo:

Tabela mangle PREROUNTING => OUTPUT =>

Tabela nat PREROUNTING OUTPUT =>

Tabela filter

OUTPUT

Na tabela mangle podemos especificar o tipo de servio (Type Of Service - TOS) aplicado ao pacote para ordenar a prioridade aumentando ou diminuindo a velocidade do trfego dos pacotes em tempo real. As cadeias da tabela mangle continuam ativas mesmo depois que a conexo estiver estabelecida, determinando que as opes de tipo servio aplicado sejam mantidos.

Tipos de servio O tipo de servio um campo da cabealho de pacotes do protocolo IP (ipv4), que possibilita o kernel determinar a ordem de prioridade de uma pacote.

Especificando o tipo de servio possvel dar prioridade ou no para programas de mensagens como amsn, msn, xchat, gaim, kopette e etc ou programas p2p como ktorrent, gtk-gnutella, amule, emule e etc. Mesmo se estiver sendo feito algum download na rede consumindo toda largura de banda, a prioridade do trfego especificada no tipo de servio ser mantida e aumentando o desempenho dos servios do servidor.

58

Para especificar, alterar e priorizar o tipo de servio dos pacotes usado o destino -j TOS com a opo --set-tos TOS, onde os valores ou bits permitidos no campo TOS aps a opo --set-tos so:

16 ou 0x10 (Prioridade de atraso mnimo Minimize-Delay) 8 ou 0x08 (Prioridade de processamento mximo Maximize-Throughput) 4 ou 0x04 (Prioridade de confiabilidade mxima Maximize-Reliability) 2 ou 0x02 (Prioridade de custo mnimo Minimize-Cost) 0 ou 0x00 (Prioridade de servio normal Normal-Service)

Por padro os pacotes vem com a prioridade de servio normal (0 ou 0x00) e a Prioridade de atraso mnimo tem a prioridade mxima (16 ou 0x10).

Trfego de sada TOS Esse tipo de servio TOS determinada a prioridade do trfego de sada de pacotes do firewall para a internet, onde so utilizadas as cadeias OUTPUT e POSTROUTING e a opo -o para especificar a interface de rede e --dport para especificar a porta.

Vale lembrar que os bits do tipo de servio dos pacotes so apenas modificados e no rejeitados.

Exemplos:

Esta regra determina a prioridade mxima 16 para o trfego de pacotes TCP saindo da rede local 192.168.1.0/24 para a internet atravs apenas da interface ppp0 na porta 80.

# iptables -t mangle -A OUTPUT -p tcp -o ppp0 -s 192.168.1.0/24 --dport 80 -j TOS --set-tos 16

Determina a prioridade mnima 2 para o trfego de pacotes TCP do programa AMSN na porta 1683 saindo do com

59

# iptables -t mangle -A OUTPUT -p tcp -o eth0 -s 192.168.1.2 --dport 1683 -j TOS --set-tos 2

Determina a prioridade de processamento mximo 8 para o trfego de pacotes TCP saindo da rede local, passando pelo firewall e indo para interface ppp0 na porta 3128.

# iptables -t mangle -A OUTPUT -p tcp -o ppp0 --dport 3128 -j TOS --set-tos 8

Exibindo a tabela mangle com os TOS ajustados e as portas onde foram ajustados os bits

# iptables -t mangle -L -n Chain OUTPUT (policy ACCEPT) target prot opt source destination TOS tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:80 TOS set 0x10 TOS tcp -- 192.168.1.2 0.0.0.0/0 tcp dpt:1683 TOS set 0x02 TOS tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3128 TOS set 0x08

Trfego de entrada TOS Esse tipo de servio TOS determinada a prioridade do trfego de entrada de pacotes vindos da internet para o firewall, onde so utilizadas as cadeias INPUT e PREROUNTING e a opo -i para especificar a interface de rede e --sport para especificar a porta.

Os mesmos exemplos de sada TOS podem ser aplicados para a entrada, apenas mudando a cadeia OUTPUT para INPUT, a opo -o por -i e --dport por --sport.

Exemplos:

60

Esta regra determina a prioridade mxima 16 para o trfego de pacotes TCP vindos da internet atravs da interface ppp0 na porta 80.

# iptables -t mangle -A INPUT -p tcp -i ppp0 --sport 80 -j TOS --set-tos 16

Determina a prioridade de processamento mximo 8 para o trfego de pacotes TCP vindos da internet atravs da interface eth0 na porta 53.

# iptables -t mangle -A INPUT -p tcp -i eth0 --sport 53 -j TOS --set-tos 8

Exibindo a tabela mangle com os TOS ajustados e as portas onde foram ajustados os bits

# iptables -t mangle -L -n Chain INPUT (policy ACCEPT) target prot opt source destination TOS tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80 TOS set 0x10 TOS tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:53 TOS set 0x08

Mdulos do iptables Os mdulos do iptables especificados pela opo -m ou --match permitem extender as funcionalidades do iptables atravs de novos recursos de filtragem de pacotes, como limitar a anlise de regras do iptables.

Analisando pacotes conforme a conexo O mdulo ip_conntrack permite determinar regras conforme o estado da conexo de um pacote usando a opo --state (estado) onde so permitidos as seguintes opes:

61

Podemos exibir o mdulo ip_conntrack com comando lsmod e carreg-lo com modprobe.

$ lsmod | grep ip_conntrack ip_conntrack 49088 3 ipt_MASQUERADE,iptable_nat,ip_nat nfnetlink 6680 2 ip_nat,ip_conntrack

# modprobe ip_conntrack

NEW (novo) Verifica pacotes que criam novas conexes ESTABLISHED (estabelecido) Verifica conexes j estabelecidas RELATED (estabelecido) Verifica pacotes relacionados com a conexo como as mensagens de erro ICMP (echo-request ping) INVALID (estabelecido) Verifica pacotes que no puderam ser analisados

Exemplos:

Rejeita novas conexes TCP vindas da interface de rede conectada a internet ppp0 # iptables -A INPUT -p tcp -i ppp0 -m state --state NEW -j DROP

Voc pode especificar mais de um estado separando por vrgula # iptables -A INPUT -p tcp -i ppp0 -m state --state NEW,RELATED,INVALID -j DROP

Limitando o nmero de vezes que uma regra verificada O mdulo -m limit um recurso do iptables que permite verificar a quantidade de vezes que uma regra verificado depois de outras condies forem atendidas.

62

O valor padro de verificao 3 por hora (3/h), mas pode ser alterada pela opo limit onde podemos especificar as seguintes opes:

A sua sintaxe de verificao :

limit nmero / tempo onde nmero a quantidade de vezes e o tempo que pode ser em: s segundo m segundo h hora d dia

Podemos tambm utilizar a opo limit-burst para especificar o valor mximo de pacotes que sero verificados, aumentando de 1 at atingir o valor limite padro 5.

Por exemplo, a regra abaixo grava logs usando o valor padro 3 vezes por hora (3/h). # iptables -A INPUT -p tcp -i eth0 -m limit -j LOG

Exiba a regra criada e veja o padro 3 vezes por hora (3/h).

# iptables -L -n
Chain INPUT (policy ACCEPT) target prot opt source destination LOG tcp -- 0.0.0.0/0 0.0.0.0/0 limit: avg 3/hour burst 5 LOG flags 0 level 4

Nessa regra abaixo os pacotes ICMP echo-request do comando ping so gravados em LOG e depois em seguida so rejeitados na interface de rede eth0 e na regra posterior so verificados 2 vezes por minuto (2/m) e gravados em log.

63

*OBS Ateno ! Cuidado para no entupir seu arquivo de logs de mensagens.

# iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -m limit --limit 1/s -j LOG # iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -j DROP

Exiba a regra criada e veja que aparece o valor 1 vez por segundo (1/sec).

# iptables -L -n
LOG icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8 limit: avg 1/sec burst 5 LOG flags 0 level 4 DROP icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8

Agora execute o comando ping no endereo IP da interface de rede eth0 (192.168.1.10) a partir do host local ou outro computador e veja os logs sendo gravados com o comando tail -f /var/log/syslog.

$ ping 192.168.1.10
PING 192.168.1.10 (192.168.1.10) 56(84) bytes of data. 64 bytes from 192.168.1.10: icmp_seq=1 ttl=64 time=0.090 ms

# tail -f /var/log/syslog
Apr 4 15:34:21 firewall kernel: IN=eth0 OUT= MAC=00:11:2f:90:a6:75:00:90:f5:63:33:ee:08:00 SRC=192.168.1.20 DST=192.168.1.10 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=5646 SEQ=1 Apr 4 15:34:22 firewall kernel: IN=eth0 OUT= MAC=00:11:2f:90:a6:75:00:90:f5:63:33:ee:08:00 SRC=192.168.1.20 DST=192.168.1.10 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=5646 SEQ=2 Apr 4 15:34:23 firewall kernel: IN=eth0 OUT= MAC=00:11:2f:90:a6:75:00:90:f5:63:33:ee:08:00 SRC=192.168.1.20 DST=192.168.1.10 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=5646 SEQ=3

Proteo contra ataque de negao de servio (DoS)

64

O mdulo limit tambm pode ser usado para proteger de ataques de negao de servio (Denial of Service - DoS) como o ping da morte, syn flood, ip spoofing, port scanner e outros com uma taxa verificao mais rpida, com a finalidade de tornar o firewall mais sensvel.

Proteo contra ataque de ping da morte (Ping of Death) Essa regra limita em 1 vez por segundo e aceita (-j ACCEPT) o trfego de pacotes ICMP echo-request de pings (indo e vindo FORWARD) na interface de rede eth0.

# iptables -A FORWARD -i eth0 -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT Proteo contra ports scanners Essa regra limita programas escaneadores de portas (ports scanners) como nmap, em 1 vez por segundo e aceita (-j ACCEPT) o trfego de pacotes tcp com flags tcp de incio, resposta e fim de conexo(SYN, ACK, FIN e RST) entrando na interface de rede eth0.

# iptables -A INPUT -i eth0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT Proteo contra syn flood Essa o tipo de ataque de inundao de syn (tentativas de incio de conexo) e essa regra limita em 1 vez por segundo.

# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT Outra forma de proteger contra esse tipo de ataque pelo prprio kernel, colocando o valor 1 no arquivo /proc/sys/net/ipv4/tcp_syncookies.

# echo 1 > /proc/sys/net/ipv4/tcp_syncookies Proteo contra IP Spoofing Esse tipo de ataque onde obtido endereos de origem e destino pela interface de rede da rede local atravs de programas sniffers.

65

# iptables -A FORWARD -p tcp ! -i eth1 -s 192.168.0.0/24 -j DROP # iptables -A FORWARD -p tcp -i eth1 ! -s 192.168.0.0/24 -j DROP

Neste exemplo a rede 192.168.0.0/24 conectada a interface de rede eth1, somente pode aceitar trfego de pacotes vindos de computadores na faixa de IP(192.168.0.1, 192.168.0.2, ...) e na interface de rede eth1.

Portanto qualquer endereo IP dessa faixa que no esteja indo e vindo pela interface eth1 ser rejeitado, por exemplo o endereo IP 192.168.0.10 vindo da interface de rede ppp0 ser rejeitado, pois pode ser um endereo IP falsificado. Voc pode tambm rejeitar conexes externas a sua rede local com a seguinte de regra, assim evitando algum atacante falsificar algum endereo IP na faixa de IP da sua rede. # iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j DROP Outra forma de proteger contra esse tipo de ataque pelo prprio kernel, colocando o valor 1 no arquivo rp_filter dentro dos diretrios (ppp0, eth0, eth1, ...) correspondente as interfaces de rede do seu computador em /proc/sys/net/ipv4/conf/

Como so vrios arquivos, iremos fazer um loop com o comando for do shell no Linux logado com root.

# for i in /proc/sys/net/ipv4/conf/*/rp_filter APERTE ENTER > do APERTE ENTER > echo 1 > $i APERTE ENTER > done APERTE ENTER

Endereo MAC da interface de rede O mdulo mac (-m mac) utilizado para verificar pacotes de endereos MAC de origem, portanto deve-se ser utilizado com as os cadeias INPUT da tabela filter ou PREROUNTING da tabela nat. Para verificar endereos MAC utilizada a opo --mac-source onde possvel atribuir excees ! de endereos MAC.

66

Exemplo:

Rejeita pacotes tcp do endereo MAC 00:90:F5:63:33:EE na interface eth1 na porta 22.

# iptables -A INPUT -p tcp -i eth1 -m mac --mac-source 00:90:F5:63:33:EE --dport 22 -j DROP

Owner proprietrio de um pacote O mdulo owner (-m owner ou --match owner) verifica o usurio, grupo ou processo local que iniciou a conexo e criou o pacote, somente deve ser aplicado na cadeia OUTPUT da tabela filter. Mesmo assim, pode ser que alguns pacotes de mensagens ICMP no podem ser analisados por no possurem donos.

As opes permitidas pelo mdulo owner so : --uid-owner (UID) Verifica se o pacote foi criado por o UID do usurio especificado, onde somente permitido nmeros.

--gid-owner (GID) Verifica se o pacote foi criado por algum usurio membro do grupo do GID especificado, onde somente permitido nmeros.

--pid-owner (PID) Verifica se o pacote foi criado pelo processo PID do sistema especificado, onde somente permitido nmeros. --sid-owner (ID) Verifica se o pacote foi criado por um processo com Session ID igual ao especificado na opo, onde somente permitido nmeros.

Exemplos:

67

Primeiramente obtenha o UID e GID dos usurios e grupos com o comando id ou cat /etc/passwd

$ id uid=1000(aluno1) gid=1000(aluno1) grupos=24(cdrom),25(floppy),26(tape),29(audio),46(plugdev),110(scanner),1000(aluno1),1005(alunos)

Rejeita pacotes tcp do usurio local com o UID 1001 na interface de loopback lo na porta 22.

# iptables -A OUTPUT -p tcp -o lo -m owner --uid-owner 1001 --dport 22 -j DROP

Rejeita pacotes tcp de usurios locais membros do grupo com o GID 501 na porta 22.

# iptables -t filter -A OUTPUT -p tcp --match owner --gid-owner 501 --dport 22 -j DROP

Verificando o tempo de vida de um pacote (TTL) O mdulo ttl (-m ttl ou --match ttl) verifica o tempo de vida (TTL Time To Live) de um pacote, onde deve-se tomar cuidado ao criar regras com esse mdulo para no rejeitar pacotes vlidos em uma conexo. As seguintes opes podem ser usadas :

--ttl-lt valor Verifica se o tempo de vida TTL menor do que o valor especificado. --ttl-eq valor Verifica se o tempo de vida TTL igual ao valor especificado. --ttl-gt valor Verifica se o tempo de vida TTL maior do que o valor especificado.

68

Exemplos:

Verifica, grava em log e rejeita pacotes ICMP que tenham o TTL muito alto maior do 64 usado pelo comando ping ou traceroute. # iptables -A INPUT -p icmp -j LOG --log-prefix "TTL maior que 64" # iptables -A INPUT -p icmp -m ttl --ttl-gt 100 -j DROP

Verifica e aceita pacotes ICMP que tenham o TTL igual a 64 # iptables -A INPUT -p icmp -m ttl --ttl-eq 64 -j ACCEPT

Verifica e rejeita pacotes ICMP que tenham o TTL igual a 1 # iptables -A INPUT -p icmp -m ttl --ttl-eq 1 -j DROP

Verificando o tamanho de um pacote O mdulo length (-m length ou --match length) permite verificar o tamanho em bytes do pacote atravs da opo --length, onde deve-se usar os dois pontos para especificar um tamanho ou um intervalo de tamanhos como mostra os exemplos abaixo:

Exemplos:

Rejeita pacotes TCP na interface eth0 maiores de 1024 bytes # iptables -A INPUT -p tcp -i eth0 -m length --length 1024: -j DROP

Rejeita pacotes TCP na interface eth0 entre de 10000 (10 KB) e 20000 (KB) kbytes # iptables -A INPUT -p tcp -i eth0 -m length --length 10000:20000 -j DROP

Exemplo de firewall Iremos dar continuidade ao nosso simples firewall criado no incio do captulo onde iremos adicionar algumas regras e fica ao seu critrio adicionar mais regras. Iremos

69

adotar a poltica que j vem como padro (INPUT ACCEPT, OUTPUT ACCEPT e FORWARD ACCEPT) de bloquear tudo e liberar apenas o necessrio para navegao na internet e as portas necessrias para alguns servios. Abaixo segue um exemplo de firewall, onde voc pode incluir suas regras no script e mudar sua permisso para executar, copiar e fazer suas alteraes para sua distribuio Linux.

Download do script

# /etc/init.d/firewall # apaga todas as regras /sbin/iptables -F /sbin/iptables -t filter -F /sbin/iptables -t nat -F /sbin/iptables -t mangle -F # Poltica padro # Com essa poltica o computador com bloqueia tudo primeiramente e depois aceita o resto. iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT

# Bloqueando novas conexes de entrada # Essa regra bloqueia novas requisies em qualquer interface de rede, impedindo que um hacker acesse o firewall. iptables -A INPUT -p tcp -m state --state NEW -j DROP # Bloqueando acesso todas as portas # Essa regra bloqueia todas as portas do computador firewall usando o protocolo TCP em qualquer interface de rede. iptables -A INPUT -p tcp --syn -j DROP # Proteo contra IP Spoofing # Essa regra bloqueia possveis endereos falsificados por programas sniffers de rede na interface de rede eth0. iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j DROP for x in /proc/sys/net/ipv4/conf/*/rp_filter do echo 1 > $x

70

done

# Proteo contra ping da morte # Essa regra bloqueia um tipo de ataque antigo o ping da morte iptables -A INPUT -p icmp -i eth0 --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

# Proteo contra Ports Scanners # Essa regra bloqueia programas escaneadores de portas avanado como o nmap iptables -A INPUT -i eth0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT # Proteo contra syn flood # Essa regra bloqueia tentativas de conexes iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT echo 1 > /proc/sys/net/ipv4/tcp_syncookies # Permitindo acesso a interface de loopback # Abrindo a interface de loopback lo com o endereo local 127.0.0.1 para que os servios funcionem no firewall. iptables -A FORWARD -p tcp -i lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT # Liberando o trfego para a rede local # Na primeira regra permite o trfego de pacotes de novas conexes, estabelecidos e relacionados a conexo, que tenha relao com o trfego originado por usurios da rede local pela interface -o eth1 e indo para a internet passando pelo firewall na interface -i eth0.

# Na segunda regra aceito apenas os pacotes estabelecidos e relacionados a conexo que vem da internet passando pelo firewall na interface -i eth0 e indo para a rede local pela interface -o eth1. iptables -A FORWARD -i eth1 -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT # Permitindo a rede interna acessar internet pelo firewall # Essa regra permite os computadores da rede local (192.168.0.0/24) acessar a internet atravs do firewall (192.168.0.1) pela porta 80. iptables -A FORWARD -p tcp -i eth1 -s 192.168.0.0/24 -d 192.168.0.1 --dport 80 -j ACCEPT # Redirecionando portas para os servidores da rede local DMZ

71

# Essa regra permite que as conexes externas nas portas 53 e 80 sejam redirecionadas para computadores servidores DNS (192.168.0.2) e HTTP fazendo o balanceamento entre o servidor www1 (192.168.0.3) e www2 (192.168.0.4) da rede local DMZ.

# Redireciona conexes na porta 53 do firewall para a porta 53 do servidor da rede local 192.168.0.2 iptables -t nat -A PREROUTING --dport 53 -d 200.0.0.100 -j DNAT --to 192.168.0.2:53 iptables -t nat -A POSTROUTING --sport 53 -s 192.168.0.2 -j SNAT --to 200.0.0.100:53

# Balancemento entre os servidores HTTP www1 (192.168.0.3) e www2 (192.168.0.4) iptables -t nat -A PREROUTING -p tcp --dport 80 -d 200.0.0.100 -j DNAT --to 192.168.0.3-192.168.0.4:80

iptables -t nat -A POSTROUTING -p tcp --sport 80 -s 192.168.0.3 -j DNAT --to 200.0.0.100:80 iptables -t nat -A POSTROUTING -p tcp --sport 80 -s 192.168.0.4 -j DNAT --to 200.0.0.100:80 # ativa o roteamento echo 1 > /proc/sys/net/ipv4/ip_forward # habilita o mascaramento de IP /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # configurando as rotas /sbin/route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.1 dev eth1 /sbin/route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth2

72

Potrebbero piacerti anche