Você está na página 1de 8

Tutorial IPTABLES

Toda comunicação numa rede TCP-IP é feita através de pacotes. O Netfilter trata
apenas de regras. Estas regras são aplicadas aos pacotes. Cada regra é criada
para fazer alguma coisa, e esta coisa é chamada de alvo. As regras pertencem a
vertentes (chains), que são usadas para agrupar regras. Se uma regra for
aplicável a um pacote, então o alvo é executado. Os alvos pré-existentes são
ACCEPT (aceitar), DROP (descartar), REJECT (retornar ou devolver).
As tabelas do iptables são:

Tabela Filter (tabela padrão) - Esta tabela possui três vertentes:


• INPUT (entrada) trata os pacotes destinados ao sistema local,
• OUTPUT (saída) filtra os pacotes que estão saindo do sistema local e
• FORWARD (redespacho) mostra o que deve ser feito com os pacotes que estão apenas em
trânsito porque se destinam a outra máquina. Vale ressaltar que um pacote não pode transitar
por mais de uma vertente,ou seja, não pode pular de INPUT para OUTPUT ou para qualquer
outra chain.

Comando para visualizar a Tabela Filter:


iptables -L -t filter ou iptables -L (a tabela filter é padrão do sistema, por isso não precisadigitar o -t
filter para visualizar)

Tabela Nat (usada para tradução de endereços de rede) -


Esta tabela é usada para
alterar o endereço IP e/ou portas de destino. Suas vertentes são:
• PREROUTING (pré-roteamento) pode identificar a origem do pacote (interface de entrada)
além do endereço IP e a porta à qual se destina. Antes do pacote ser roteado (quando ainda
está na área de pré-roteamento) pode alterar o IP e também a porta que deve recebê-lo, em
outras palavras, pode-se mudar a rota do pacote direcionando-o para uma outra maquina e/ou
para uma outra porta na mesma máquina ou numa máquina diferente.
• OUTPUT (saída) serve para dar saída aos pacotes e para analisá-los antes que saiam da
maquina.
• POSTROUTING (pós-roteamento) pode alterar o IP/porta de origem do pacote. Também pode
indicar a interface de saída. Tudo isto acontece depois do pacote ter sido tratado na vertente
OUTPUT e um pouco antes de ser despachado, ou seja, quando está na área de pós-
roteamento.

Comando para visualizar a Tabela Nat:


iptables -L -t nat (nesse caso como a tabela nat não é padrão, precisa especificar com o -t que quer
visualizar essa tabela, caso não seja especificado ele irá mostrar a tabela filter)

Tabela Mangle - Esta tabela server para guardar regras que alteram as propriedades
dos pacotes. O motivo mais comum é alterar o campo Tipo de Serviço (Type Of
Service - TOS).
Comando para visualizar a Tabela Mangle:
iptables -L -t mangle
# Parâmetros básicos do iptables
#-A - Este comando acrescenta uma regra às existentes no sistema, ou seja, permite
#colocar/atualizar regras já existentes na estrutura do firewall.
#-I - Este comando insere uma nova regra no início da tabela.
#-D - Este comando exclui uma regra específica no firewall.
#-P - Este comando define a regra padrão do firewall.
#-L - Este comando lista todas as regras existentes no firewall.
#-F - Este comando zera todas as regras do firewall (o chamado flush). Se este
#comando for executado todas as regras do firewall são excluídas.
#-h - Invoca o help, ajuda do comando.
#-R - Este comando substitui uma regra no firewall.
#-C - Checa as regras básicas do firewall.
#-Z - Zera uma regra específica.
#-N - Cria uma nova regra com um nome específico.
#-X - Exclui uma regra específica por seu nome.

#Observe que os comandos e opções possuem duas formas: a completa e a reduzida.


#Observe também que a forma reduzida dos comandos é sempre em letra maiúscula e a
#das opções é em letra minúscula e que a forma completa é precedida por -- e a
#forma reduzida por -. Ex: Para listar tabelas a forma completa é --list (dois
#hífens seguidos pela palavra list) e a forma reduzida é -L (um hífem seguido pela
#letra maiúscula L).
# Parâmetros diversos:
#-i : Interface que o pacote entrou;
#-o : Interface que o pacote vai sair;
#-s : Source. Endereço IP de origem;
#-d : Destiny. Endereço IP de destino do pacote;
#-p : Especifica o protocolo de transporte. TCP, UDP ou ICMP;
#--dport : Porta de destino do pacote. TCP ou UDP;
#--sport : Porta de origem do pacote. TCP ou UDP;
#-m multiport : Especifica mais de uma porta para uma única regra.
#--to-destination ou --to: Utilizado no Prerouting quando se quer redirecionar um endereço a outro.
# Para salvar as regras atuais do seu iptables em um arquivo, basta rodar o seguinte comando:
iptables-save > iptables.rules
# Para habilitar o ip_forward, rode o seguinte comando:
sysctl -w net.ipv4.ip_forward=1
# Para restaurar regras salvas em um arquivo rode o seguinte comando:
iptables-restore < iptables.rules
# Lembrando que é importante rodar o ip_forward, caso contrário suas regras da chain nat não irão
funcionar direito.
# Adicionar iptables e ip_forward no boot:
# Primeiro adicionar o iptables no boot abrindo o arquivo de configuração de rede:
nano /etc/network/interfaces
# Dentro desse arquivo, nas últimas linhas coloque a seguinte linha:
pre-up iptables-restore < /root/iptables.rules
# O /root/iptables.rules vai ser o caminho em que estiver salvo o seu arquivo do iptables.
# Agora para adicionar o ip_forward no boot vá no seguinte arquivo:
nano /etc/rc.local
# Antes da ultima linha "exit 0" adicione o seu comando:
sysctl -w net.ipv4.ip_forward=1
# Para verificar se o ip_forward foi aplicado, rode o seguinte comando:
sysctl net.ipv4.ip_forward
# Ele tem que lhe trazer o =1, isso significa que ele foi aplicado.
# Após essas configurações serem feitas, o seu iptables deve estar no boot
# Para realizar as regras de iptables, é muito importante que se saiba dos protocolos e portas
utilizados, caso você não lembre de algo, ou queira ter alguma ajuda, existe um arquivo dentro do
linux que lista algumas portas padrões. Abra o arquivo com o seguinte comando:
nano /etc/services
# Ele irá lhe listar várias portas e seus protocolos, use o ctrl+w para pesquisar a porta que estiver em
dúvida.
Alguns Cenários Possíveis
1) Um firewall que na tabela filter as cadeias INPUT e OUTPUT estão em DROP. Faça o firewall
pingar em si mesmo com loopback e o seu próprio endereço.

IP Firewall: 192.168.15.180
Resolução:
iptables -A OUTPUT -s 192.168.15.180 -d 192.168.15.180 -p icmp -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -p icmp -j ACCEPT
iptables -A OUTPUT -s 192.168.15.180 -d 192.168.15.180 -p icmp -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -p icmp -j ACCEPT

2) Já com a máquina liberada o ping em loopback, libere o ping da sua máquina para outra e vice-
versa.
IP Firewall: 192.168.15.180
IP Máquina 2: 192.168.15.179
Resolução:
iptables -A OUTPUT -s 192.168.15.180 -d 192.168.15.179 -p icmp -j ACCEPT
iptables -A INPUT -s 192.168.15.180 -d 192.168.15.179 -p icmp -j ACCEPT

3) Libere o acesso via ssh para a outra máquina na sua.


IP Firewall: 192.168.15.180
IP Máquina 2: 192.168.15.179
Resolução:
Iptables -A OUTPUT -s 192.168.15.180 -d 192.168.15.179 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.15.179 -d 192.168.15.180 -p tcp --sport 22 -j ACCEPT

4) Existem dois servidores de monitoramento, conectadas ao firewall pela rede interna, que precisam
monitorar via SNMP dois dispositivos que estão conectadas em uma outra rede externa. As regras
INPUT e OUTPUT foram colocadas em DROP e as únicas permissões que poderão existir serão
estas:
• O firewall só poderá receber ping dos dispositivos externos (switch e roteador);
• O acesso ssh ao servidor de monitoramento zabbix deve ser liberado, a máquina física deve
accessar o servidor zabbix.
• Terá que ser feito um redirecionamento para que a interface web do seu servidor possa ser
acessada em uma porta diferente da padrão e pelo endereço do firewall;

Um exemplo de um arquivo de configuração que poderia ser feito para que esse cenário pudesse ser
aplicado, seria este:
# Generated by iptables-save v1.4.21 on Thu Aug 6 08:52:18 2015
*nat
:PREROUTING ACCEPT [2244:317545]
:INPUT ACCEPT [1673:100404]
:OUTPUT ACCEPT [187:12028]
:POSTROUTING ACCEPT [539:32340]
# Redirecionamento: Tudo o que vier no endereço ip do firewall na porta especificada será
redirecionado para o endereço do servidor de monitoramento especificado
-A PREROUTING -d 172.16.26.249/32 -p tcp -m tcp --dport 8888 -j DNAT --to-destination
192.168.5.10:80
# Redirecionamento: Tudo o que vier no endereço ip do firewall na porta especificada será
redirecionado para o endereço do servidor de monitoramento especificado
-A PREROUTING -d 172.16.26.249/32 -p tcp -m tcp --dport 7777 -j DNAT --to-destination
192.168.5.20:80
# Mascarar os endereços ip da rede interna para que eles possam sair na rede externa com um
endereço ip da rede externa
-A POSTROUTING -s 192.168.5.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Thu Aug 6 08:52:18 2015
# Generated by iptables-save v1.4.21 on Thu Aug 6 08:52:18 2015
*filter
:INPUT DROP [2:168]
:FORWARD ACCEPT [16798:5470701]
:OUTPUT DROP [238:17664]
# Faz registro de LOG
-A INPUT -j LOG
# Libera monitoramento via SNMP para um dispositivo
-A INPUT -s 172.16.26.250/32 -d 192.168.5.20/32 -p udp -m udp --sport 161 -j ACCEPT
# Libera monitoramento via SNMP para um dispositivo
-A INPUT -s 172.16.26.251/32 -d 192.168.5.20/32 -p udp -m udp --sport 161 -j ACCEPT
# Libera monitoramento via SNMP para um dispositivo
-A INPUT -s 172.16.26.251/32 -d 192.168.5.10/32 -p udp -m udp --sport 161 -j ACCEPT
# Libera monitoramento via SNMP para um dispositivo
-A INPUT -s 172.16.26.250/32 -d 192.168.5.10/32 -p udp -m udp --sport 161 -j ACCEPT
# Liberando acesso SSH da maquina fisica para o servidor
-A INPUT -s 172.16.26.X/32 -d 192.168.5.20/32 -p tcp -m tcp --dport 22 -j ACCEPT
# Liberar ping de um dos dispositivos para o firewall
-A INPUT -s 172.16.26.250/32 -d 172.16.26.249/32 -p icmp -j ACCEPT
# Liberar ping do outro dispositivo para o firewall
-A INPUT -s 172.16.26.251/32 -d 172.16.26.249/32 -p icmp -j ACCEPT
# Faz registro de LOG
-A OUTPUT -j LOG
# Libera monitoramento via SNMP para um dispositivo
-A OUTPUT -s 192.168.5.20/32 -d 172.16.26.250/32 -p udp -m udp --dport 161 -j ACCEPT
# Libera monitoramento via SNMP para um dispositivo
-A OUTPUT -s 192.168.5.20/32 -d 172.16.26.251/32 -p udp -m udp --dport 161 -j ACCEPT
# Libera monitoramento via SNMP para um dispositivo
-A OUTPUT -s 192.168.5.10/32 -d 172.16.26.250/32 -p udp -m udp --dport 161 -j ACCEPT
# Libera monitoramento via SNMP para um dispositivo
-A OUTPUT -s 192.168.5.10/32 -d 172.16.26.251/32 -p udp -m udp --dport 161 -j ACCEPT
# Liberando acesso SSH da maquina fisica para o servidor
-A OUTPUT -s 192.168.5.20/32 -d 172.16.26.X/32 -p tcp -m tcp --sport 22 -j ACCEPT
# Liberar ping de um dos dispositivos para o firewall
-A OUTPUT -s 172.16.26.249/32 -d 172.16.26.250/32 -p icmp -j ACCEPT
# Liberar ping do outro dispositivo para o firewall
-A OUTPUT -s 172.16.26.249/32 -d 172.16.26.251/32 -p icmp -j ACCEPT

Você também pode gostar