User Tools

Site Tools


wikiv3:iptables-cons

Iptables

Tipos de Tabelas

  • Filter
  • Nat
  • Mangle
  • Raw

Para listar as “chains” que cada tabela possui use a sinxtaxe:

# iptables -L -t <tabela>

Tipos de Chain

Uma chain é local onde vão ser definidas as regras para o nosso firewall. Cada Tabela possui suas CHAINS.

Chais da tabela Filter:

  • INPUT - Regras de entrada de pacotes;
  • OUTPUT - Regras de saída de pacotes;
  • FORWARD - Regras de passagem de pacotes pelo firewall.

Chais da tabela NAT:

  • PREROUTING - Regras que serão processadas antes do roteamento dos pacotes nas interfaces do firewall;
  • POSTROUTING - Regras que serão processadas pós roteamento dos pacotes nas interfaces do firewall;
  • OUTPUT - Regras de saída de pacotes.

Políticas e as exceções

Políticas básicas:

- Negar todo o tráfego para as “chains” de “INPUT”, “OUTPUT” e “FORWARD”.

Exceções:

- Definir a relação dos serviços que devem ser liberados no “Firewall”.

Controles:

- O que não for oficialmente permitido já está expressa e previamente negado.

Sintaxe do Iptables

A sintaxe do comando iptables:

iptables [-t tabela] [opção] [chain] [dados] -j [alvo]

Exemplo para compartilhar a internet:

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

Parâmetros e alvos do Iptables

Parâmetros Descrição
-P –policy Estabelece a politica de acesso de uma chain.
-t –table Seleciona uma tabela
-A –append Adiciona como ultima regra da sequencia de uma chain
-I –insert Insere como primeira regra da sequencia de uma chain
-N –new-chain Cria uma nova chain
-D –delete Remove uma regra
-X –delete-chain Elimina todas as regras presentes em chains de usuário
-F –flush Elimina todas as regras presentes em uma chain padrão
-s -source Determina a origem do pacote
-d –destination Determina o destino do pacote
–sport –source-port Define a porta de origem
–dport –destination-port Define a porta de destino
-i –in-interface Define a interface de entrada
-o –out-interface Define a interface de saida
-p –protocol Seleciona o protocolo (tcp, udp, icmp)
Alvo (target) Descrição
ACCEPT O pacote é aceito
REJECT O pacote é rejeitado imediatamento
DROP O pacote é negado silenciosamente

Script para fechar as políticas básicas

Se estivermos aplicando as regras conectados por ssh é recomendado aplicar essas regras para não perdermos o acesso ao servidor:

# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Agora as regras de bloqueio:

# cat drop.sh 
drop.sh
#!/bin/bash 
IPT=$(which iptables) 
 
nega () 
{ 
$IPT -P INPUT DROP 
$IPT -P OUTPUT DROP 
$IPT -P FORWARD DROP 
 } 
nega

Dê permissão de execução ao script, em seguida execute-o:

# chmod 755 drop.sh 
# bash drop.sh
# iptables -nL
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
 
Chain FORWARD (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
 
Chain OUTPUT (policy DROP)
target     prot opt source               destination         

Script para limpar as políticas básicas

# cat limpa.sh 
limpa.sh
#!/bin/bash 
IPT=$(which iptables) 
 
limpa () 
 { 
$IPT -F 
$IPT -F -t nat 
$IPT -F -t mangle 
$IPT -P INPUT ACCEPT 
$IPT -P OUTPUT ACCEPT 
$IPT -P FORWARD ACCEPT 
 } 
limpa

Dê permissão de execução ao script, em seguida execute-o:

# chmod 755 limpa.sh
# ./limpa.sh
# iptables -n -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   

Script para liberar o acesso à interface loopback

Primeiro vamos fechar as políticas básicas

# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ./drop.sh 

Script para liberar a loopback

# cat loop.sh
loop.sh
#!/bin/bash
IPT=$(which iptables) 
LO="127.0.0.1" 
 
loop () 
 { 
$IPT -A INPUT -i lo -d $LO -j ACCEPT 
$IPT -A OUTPUT -o lo -d $LO -j ACCEPT 
 } 
loop
# bash loop.sh
# iptables -n -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ACCEPT     all  --  0.0.0.0/0            127.0.0.1           
 
Chain FORWARD (policy DROP)
target     prot opt source               destination         
 
Chain OUTPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ACCEPT     all  --  0.0.0.0/0            127.0.0.1            

Script para liberar a entrada de pacotes ICMP Echo Reply e a saída de pacotes ICMP Echo Request

# cat ping.sh 
ping.sh
#!/bin/bash
IPT=$(which iptables) 
NET="0/0" 
FW="192.0.2.1" 
WAN1="203.0.113.1" 
WAN2="198.51.100.1"
 
ping () 
 { 
 
$IPT -A INPUT -p icmp --icmp-type 0  -s $NET -d $FW -j ACCEPT 
$IPT -A OUTPUT -p icmp --icmp-type 8 -s $FW -d $NET -j ACCEPT
 
$IPT -A INPUT -p icmp --icmp-type 0  -s $NET -d $WAN1 -j ACCEPT 
$IPT -A OUTPUT -p icmp --icmp-type 8 -s $WAN1 -d $NET -j ACCEPT
 
$IPT -A INPUT -p icmp --icmp-type 0  -s $NET -d $WAN2 -j ACCEPT 
$IPT -A OUTPUT -p icmp --icmp-type 8 -s $WAN2 -d $NET -j ACCEPT
 } 
ping

Dê permissão de execução ao script, em seguida execute-o:

# chmod 755 ping.sh
# ./ping.sh
# iptables -n -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ACCEPT     all  --  0.0.0.0/0            127.0.0.1           
ACCEPT     icmp --  0.0.0.0/0            192.0.2.1           icmp type 0 
ACCEPT     icmp --  0.0.0.0/0            203.0.113.1         icmp type 0 
ACCEPT     icmp --  0.0.0.0/0            198.51.100.1        icmp type 0 
 
Chain FORWARD (policy DROP)
target     prot opt source               destination         
 
Chain OUTPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ACCEPT     all  --  0.0.0.0/0            127.0.0.1           
ACCEPT     icmp --  192.0.2.1            0.0.0.0/0           icmp type 8 
ACCEPT     icmp --  203.0.113.1          0.0.0.0/0           icmp type 8 
ACCEPT     icmp --  198.51.100.1         0.0.0.0/0           icmp type 8 

Script para poder utilizar o programa mtr, que é um programa similar ao traceroute

# cat mtr.sh>
mtr.sh
# cat mtr.sh 
#!/bin/bash 
IPT=$(which iptables) 
NET="0/0" 
WAN2="198.51.100.1"
 
mtr () 
 { 
$IPT -A INPUT -p icmp --icmp-type 11 -s $NET -d $WAN2 -j ACCEPT 
 } 
mtr

Dê permissão de execução ao script, em seguida execute-o:

# chmod 755 mtr.sh
# ./mtr.sh
# iptables -n -L --line-number
Chain INPUT (policy DROP)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2    ACCEPT     all  --  0.0.0.0/0            127.0.0.1           
3    ACCEPT     icmp --  0.0.0.0/0            192.0.2.1           icmp type 0 
4    ACCEPT     icmp --  0.0.0.0/0            203.0.113.1         icmp type 0 
5    ACCEPT     icmp --  0.0.0.0/0            198.51.100.1        icmp type 0 
6    ACCEPT     icmp --  0.0.0.0/0            198.51.100.1        icmp type 11 
 
Chain FORWARD (policy DROP)
num  target     prot opt source               destination         
 
Chain OUTPUT (policy DROP)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2    ACCEPT     all  --  0.0.0.0/0            127.0.0.1           
3    ACCEPT     icmp --  192.0.2.1            0.0.0.0/0           icmp type 8 
4    ACCEPT     icmp --  203.0.113.1          0.0.0.0/0           icmp type 8 
5    ACCEPT     icmp --  198.51.100.1         0.0.0.0/0           icmp type 8 
wikiv3/iptables-cons.txt · Last modified: by 127.0.0.1