Você está na página 1de 10

Curso de Firewall IPTABLES

Resumo e Exercícios

MSc Eng. Ali Faiez Taha


CIRP - Centro de Informática de Ribeirão Preto - USP
Sumário

1 Manipulando chains 3
1.1 Controle de uso do Iptables instalado no Linux Fedora 5: . . . . . . . . . . . . . . 3
1.2 Outras opções do iptables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Especicando interfaces de origem/destino . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 Especicando um protocolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Especicando portas de origem/destino . . . . . . . . . . . . . . . . . . . . . . . . 5
1.6 Especicando pacotes syn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.7 Especicando fragmentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.8 Especicando uma exceção . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.9 Especicando LOG como alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.10 Firewall com NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.10.1 Criando chains na tabela nat . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.10.2 Source NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.10.3 Destination NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.10.4 Redirecionamento de portas . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.10.5 Exemplos com NAT: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2 Exercícios: 10

2
Capítulo 1

Manipulando chains

1.1 Controle de uso do Iptables instalado no Linux Fedora 5:


Inicializar o Iptables : service iptables start
Parar o Iptables : service iptables stop

Adição de regras :
iptables -t lter -A INPUT -d 192.168.0.10 -j DROP
Adicionar a regra e fazer o teste com o ping e vericar os resultados
$> ping 192.168.0.10

Listagem das regras :


iptables -t [tabela] -L [chain] [opções]
$> iptables -t lter -L INPUT
$> iptables -L INPUT -n
$> iptables -L INPUT -n -v
$> iptables -L -x
$> iptables -L INPUT -n line-numbers
Os campos mostrados são: pkts, bytes, target, prot, opt, in, out, source, destination

Apagar regras:
$> iptables -t lter -D INPUT 1
$> iptables -D INPUT -d 192.168.0.10 -j DROP

Inserir regras:
$> iptables -t lter -I INPUT 1 -s 192.168.0.10 -d 192.168.0.20 -j ACCEPT
$> iptables -t lter -I INPUT 2 -d 192.168.0.30 -p icmp -j DROP

Substituir regras:
$> iptables -R INPUT 2 -d 192.168.0.30 -p icmp -j ACCEPT

Criação de chains:
iptables [-t tabela] [-N novochain]
$> iptables -t lter -N internet
Para inserir regras no chain internet:
$> iptables -t lter -A internet -s 200.100.200.100 -j DROP
Para criar um jump (pulo) (-j) do chain INPUT para o chain internet :
$> iptables -t lter -A INPUT -j internet

3
CAPÍTULO 1. MANIPULANDO CHAINS 4

Renomear chains:
iptables -t lter -E chain-antigo novo-chain
Não se pode mudar os chains defaults do iptables.
$> iptables -t lter -E internet redeuniversal

Listando os nomes das tabelas atuais: Ver o conteúdo do arquivo /proc/net/ip_tables_names:


$> cat /proc/net/ip_tables_names

Limpar regras de um chain:


iptables [-t tabela] [-F chain]
$> iptables -t lter -F INPUT
$> iptables -t lter -F

Apagar chains:
$> iptables -t lter -X internet
$> iptables -X

Zerar o contador de bytes dos chains:


$> iptables -t lter -Z INPUT
$> iptables -Z

Policiamento padrão de um chain:


Determina o destino de um pacote quando ele chegar ao nal das regras contidas em um chain.
O padrão é ACCEPT.
iptables [-t tabela] [-P chain] [ACCEPT/DROP]
$> iptables -t lter -P INPUT DROP

1.2 Outras opções do iptables


Especicação de Entrada e Saída, origem e destino:
-s ou src ou source: source
-d ou d ou dst: destination
Endereços IP: 192.168.0.100
Hostname: serv_abc
Endereço FQDN: desktop_secretaria.empresa.com.br
Rede/Máscara:192.168.0.0/24, 200.100.200.0/24. O padrão é 0/0 (todas as máquinas de todas
as redes)
Recomenda-se usar sempre endereços IP nas regras, o que evita atrasos na reso-
lução de DNS.

Bloqueio de tráfego vindo da rede 200.100.200.*


$> iptables -A INPUT -s 200.100.200.0/24 -j DROP

Bloqueia conexões com o destino 10.1.2.3


$> iptables -A OUTPUT -d 10.1.2.3 -j DROP

Bloqueia o tráfego da máquina www.dominio.com.br ao endereço 200.100.200.33


$> iptables -A INPUT -s www.dominio.com.br -d 200.100.200.33 -j DROP
CAPÍTULO 1. MANIPULANDO CHAINS 5

1.3 Especicando interfaces de origem/destino


Está na página 27 da apostila: Guia FOCA LINUX : http://granito2/Firewall/FocaLinux.Iptables/index.html
Opção -i (ou in-interface) e -o ( ou out-interface) especicam as interfaces de
origem/destino de pacotes.

ATENÇÃO:

A interface -i nunca pode ser especicada em uma chain OUTPUT.

A interface -o nunca pode ser especicada em uma chain INPUT.

O CHAIN OUTPUT da tabela lter somente poderá conter a interface de saída.

O CHAIN FORWARD da tabela lter é o único que aceitra as especicações de ambas


as interfaces. Se as interfaces forem um MODEM (ppp0) e uma placa de Rede (eth0), podemos
fazer o controle de tráfego de qualquer endereço IP vinda da interface do MODEM.
$> iptables -A INPUT -s 200.100.200.123 -i ppp0 -j DROP
ou então:
iptables -A INPUT -s 200.100.200.123 -i ppp+ -j DROP
ppp+ signica qualquer interface de MODEM (ppp0 a ppp9)

Para bloquear qualquer tráfego local para a Internet:


$> iptables -A OUTPUT -o ppp+ -j DROP

Para bloquear a passagem de tráfego da interface ppp0 para a interface eth1 (da rede
interna):
$> iptables -A FORWARD -i ppp0 -o eth1 -j DROP

1.4 Especicando um protocolo


Usa-se a opção -p (ou protocol). Os protocolos podem ser TCP, UDP e ICMP.
Exemplos:
$> iptables -A INPUT -s 200.100.200.123 -p udp -j DROP
$> iptables -A INPUT -i eth0 -p icmp -j DROP
$> iptables -A OUTPUT -o eht0 -p tcp -j DROP

1.5 Especicando portas de origem/destino


Devem ser especicadas após o protocolo e podem ser precedidas por um das seguintes opções:

• source-port ou sport : Especica uma porta ou faixa de portas de origem

• destination-port ou dport: Especica uma porta ou faixa de portas de destino

Uma faixa de portas pode ser especicada através de PortaOrigem:PortaDestino:


#Bloqueia qualquer pacote indo para 200.100.200.123 na faixa de portas 0 a 1023
$> iptables -A OUTPUT -d 200.100.200.123 -p tcp dport 0:1023 -j DROP

• PortaOrigem default = 0

• PortaDestino default = 65535


CAPÍTULO 1. MANIPULANDO CHAINS 6

Especica múltiplas portas:


iptables -A INPUT -p tcp -i eth0 -m multiport dport 21,23,25,80 -j DROP

1.6 Especicando pacotes syn


Pacotes que inicializam uma conexão. O Iptables consegue bloquear somente pacotes que iniciam
uma conexão, sem afetar os pacotes restantes.Para que uma conexão ocorra é necessário que a
máquina obtenha a resposta a pacotes syn enviados, caso ele seja bloqueado a resposta nunca será
retornada e a conxão não será estabelecida.
$> iptables -A INPUT -p tcp syn dport 23 -i eht0 -j DROP

1.7 Especicando fragmentos


A opção -f permite especicar regras que conram com fragmentos. Fragmentos são simplesmente
um pacote maior dividido em pedaçõs para poder ser transmitido para remontagem do pacote pela
máquina destino.
Somente o primeiro fragmento possui detalhes de cabeçalho para ser processado, o restante
somente possuem alguns cabeçalhos necessários para dar continuidade ao processo de remontagem
do pacote no destino.
$> iptables -A INPUT -s 200.100.200.123 -f -j DROP
Os pacotes vindos de 200.100.200.123 serão descartados.
Com a opção -f pode-se evitar o ood por fragmentos, que, dependendo da intensidade
podem trava a máquina destino.

1.8 Especicando uma exceção


Precedida pelo sinal !
Rejeitar todos os pacotes EXCETO os que vem do endereço 200.100.200.100:
$> iptables -t lter -A INPUT ! -s 200.100.200.100 -j DROP

Bloqueia todos os pacotes EXCETO os que iniciam conexões (! syn), EXCETO para pacotes
vindos pela interface eth0 (! -i eth0):
$> iptables -A INPUT -p tcp ! syn -s 200.100.200.100 ! -i eth0 -j DROP

Bloqueia todos os pacotes vindos de 200.100.200.100, EXCETO os do protocolo tcp:


iptables -A INPUT -s 200.100.200.100 ! -p tcp -j DROP

1.9 Especicando LOG como alvo


Usado para registrar a passagem de pacotes no syslog do sistema Linux. Usado para vericar o
tráfego dos pacotes, tentativas de conxão, auditoria, melhoria das regras, etc.
# Para registrar o bloqueio de pacotes vindos de 200.200.200.1 pela interface ppp0:
$> iptables -A INPUT -s 200.200.200.1 -i ppp+ -j LOG

# Para efetuar o bloqueio :


$> iptables -A INPUT -s 200.200.200.1 -i ppp+ -j REJECT

Deve-se, antes, registrar o LOG e, depois, REJEITAR os pacotes


CAPÍTULO 1. MANIPULANDO CHAINS 7

1.10 Firewall com NAT


NAT = Network Address Translatin, serve para fazer a tradução de endereços que atravessam o
reotador.
As três chaisn da tabela NAT são: PREROUTING, OUTPUT e POSTROUTING
Masquerading: Máquinas de uma rede interna podem acessar a Internet através de uma
máquina Linux, redirecionamento de porta, proxy transparente, etc.
É usado quando se tem um endereço IP válido, uma conexão PPP, IP Dinâmico.
Usando também quando se tem uma conexão ADSLcom IP permanente.

1.10.1 Criando chains na tabela nat


O procedimento é o mesmo usado para se criar um novo chain.
$> iptables -t nat -N intra-net
Para inserir as regras neste chain será necessário especicar a opção -t nat

OBS: deve-se habilitar o suporte ao masquerading no Linux:


$> iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
$> echo 1 > /proc/sys/net/ipv4/ip_forward

Após isso o seu Linux já está congurado. Agora os clientes da rede precisarão ser congurados
para usar o endereço IP do servidor Linux como GATEWAY. Congure também um servidor
DNS e instale um servidor Proxy (opcionais) para acelerar o desmepenho das requisições/resolução
de nomes das máquinas em rede.

1.10.2 Source NAT

Modica o endereço de origem das máquinas cliente antes dos pacotes serem enviados. Toda
operação de SNAT é feita no chain POSTROUTING
# Modica o endereço IP dos pacotes vindos da máquina 192.168.1.2 da rede interna
# que tem como destino a interface eth1 para 200.200.217.40 (que é o nosso endereço
# IP da interface ligada a Internet).
$> iptables -t nat -A POSTROUTING -s 192.168.1.2 -o eth1 -j SNAT to 200.200.217.40

Também é possível especicar faixas de endereços e portas que serão substituídas:


$> iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT to 200.200.217.40-
200.200.217.50

Modica o endereço IP de origem de todas as máquinas da rede 192.168.1.0/24 que tem o


destino a interface eth0 para 200.241.200.40 a 200.241.200.50.
O endereço IP selecionado é escolhido de acordo com o último IP alocado.

$> iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT to 200.200.217.40-


200.200.217.50:1-1023
Idêntico ao anterior, mas faz somente substituições na faixa de portas de origem de 1 a 1023.

$> iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT to 200.200.217.40-


200.200.217.50 to 200.200.217.70-200.200.217.73
Faz o mapeamento para a faixa de portas 200.200.217.40 a 200.200.217.50 e de 200.200.217.70
a 200.200.217.73.

OBS1: Se por algum motivo não for possível mapear uma conexão NAT, ela será derrubada.
OBS2: Tenha certeza que as respostas podem chegar até a máquina que fez o NAT. Se estiver
fazendo SNAT em um endereço livre em sua rede (como 200.200.217.73).
CAPÍTULO 1. MANIPULANDO CHAINS 8

OBS3: Como notou acima, o SNAT é usado quando temos uma conexão externa com um
ou mais IP's xos. O Masquerading é uma forma especial de SNAT usada para funcionar em
conexões que recebem endereços IP aleatórios (PPP).
OBS4: Não se esqueça de habilitar o redirecionamento de pacotes após fazer suas regra de
NAT com o comando:
echo "1" >/proc/sys/net/ipv4/ip_forward, caso contrário o redirecionamento de paco-
tes não funcionará.

1.10.3 Destination NAT

Modica o endereço de destino das máquinas clientes. Muito utilizado para fazer o redireciona-
mento de pacotes, proxyes transparentes e balanceamento de carga. Toda operação de DNAT é
feita no chain PREROUTING.

# Modica o endereço IP destino dos pacotes de 200.200.217.40 vindo da interface eth0 para
192.168.1.2.
$> iptables -t nat -A PREROUTING -s 200.200.217.40 -i eth0 -j DNAT to 192.168.1.2

Também é possível especicar faixas de endereços e portas que serão substituídas no DNAT:
$> iptables -t nat -A PREROUTING -i eth0 -s 192.168.1.0/24 -j DNAT to 200.200.217.40-
200.200.217.50

Modica o endereço IP de destino do tráfego vindos da interface 192.168.1.0/24 para um IP


de 200.241.200.40 a 200.241.200.50. Este é um excelente método para fazer o balanceamento de
carga entre servidores. O endereço IP selecionado é escolhido de acordo com o último IP alocado.
$> iptables -t nat -A PREROUTING -i eth0 -s 192.168.1.0/24 -j DNAT to 200.200.217.40-
200.200.217.50:1024:5000

Idêntico ao anterior, mas faz somente substituições na faixa de portas de destino de 1024 a
5000. A operação acima é a mesma realizada pelo ipmasqadm dos kernels da série 2.2.
OBS1: Se por algum motivo não for possível mapear uma conexão NAT, ela será derrubada.
OBS2: Não se esqueça de conferir se o ip_forward está ajustado para 1:
echo "1" >/proc/sys/net/ipv4/ip_forward

1.10.4 Redirecionamento de portas

Permite passar conexões com destino a uma porta para outra porta na mesma máquina. O alvo
REDIRECT é usado para fazer esta operação, junto com o argumento to-port especicando a
porta que será redirecionada. Este é o método especíco para se fazer um proxy transparente.
Todas as operações de redirecionamento de portas é realizado no chain PREROUTING e
OUTPUT da tabela nat.

$> iptables -t nat -A PREROUTING -i eth0 -p tcp dport 80 -j REDIRECT to-port 81


Redireciona as conexões indo para a porta 80 para a porta 81 (rodando squid) no rewall.

ATENÇÃO: O Proxy Squid possui suporte a proxy transparente, e poderá atender as


requisições acima da regra acima.
Monitore as conexões feitas na tabela NAT:

• cat /proc/net/ip_conntrack
CAPÍTULO 1. MANIPULANDO CHAINS 9

1.10.5 Exemplos com NAT:

Testar e carregar o módulo de NAT:


$> modprobe iptable_nat

Redirecionando conexões FTP entrantes para o host 192.168.0.100 iptables -A FORWARD


-j ACCEPT -p tcp dport 21
iptables -t nat -A PREROUTING -i eth1 -p tcp dport 21 -j DNAT to 192.168.0.100

Redirecionando conexoes SSH e WWW entrantes para o host 192.168.0.100 iptables


-A FORWARD -j ACCEPT -p tcp dport 22
iptables -t nat -A PREROUTING -i eth1 -p tcp dport 22 -j DNAT to 192.168.0.100:22
iptables -A FORWARD -j ACCEPT -p tcp dport 80
iptables -t nat -A PREROUTING -i eth1 -p tcp dport 80 -j DNAT to 192.168.0.100:80

Mais exemplos: http://www.eriberto.pro.br/iptables/


Capítulo 2

Exercícios:

1 - Instalar o iptables no seu Linux e criar um arquivo onde deverão ser colocadas as regras e
chains.
2 - Congurar de modo a bloquear conexões ICMP, TELNET e FTP de entrada.
3 - Limitar as conexões ao serviço SSH de seu servidor e bloquear as demais conexões de fora
para sua máquina.
4 - Habilitar o servidor WEB em porta de conexão não padrão e estabelecer as regras de acesso.
5 - Registrar em LOG o tráfefo do seu Firewall.
6 - Utilizar o script para examinar os LOGs do Firewall Iptables instalado

http://granito2.cirp.usp.br/Firewall/lista.portas.iptables

7 - Examinar os campos referentes a horários, interfaces de Entrada/Saída, endereços de Ori-


gem/Destino, MAC ADDRESS, etc
8 - Salvar e Recuperar as regras usando os comandos iptables-save e iptables-restore.
9 - Montar um sistema NAT com o Fedora, usando duas placas de Rede.
Referência:
http://www.vivaolinux.com.br/artigos/impressora.php?codigo=4248
10 - Proteger seu Firewall contra os seguintes tipos de ataque:
• Ping da morte
• SYN FLOOD
• IP SPOOFING
11 - Elaborar um Firewall dedicado a uma Intranet atendendo os seguintes itens:
• Regras para bloqueios de certos sites.
• Regras para bloqueios a certos sites através de determinados IPs da Intranet.
• Um computador da rede interna deverá permitir a comunicação via RDESKTOP (porta
3389) para apenas alguns IPs da rede externa.
• Congurar a rede interna para DHCP e tabelar os endereços de MAC de cada computador
de modo a travar IPs com MAC ADDRESS.
• Registrar em arquivos de LOG todo o tráfego dessa Intranet.
• Analisar os logs e tabelar as portas de Entrada e Saída mais utilizadas.
• Identicar os tráfegos anômalos, abusos e tentativas de invasão nas diversas portas de E/S.
• Congurar o Firewall para permitir o redirecionamento de portas e redirecionamento de
servidores.

10