Para listar as “chains” que cada tabela possui use a sinxtaxe:
# iptables -L -t <tabela>
Uma chain é local onde vão ser definidas as regras para o nosso firewall. Cada Tabela possui suas CHAINS.
Chais da tabela Filter:
Chais da tabela NAT:
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.
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 | 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 | |
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
#!/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
# cat 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
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
#!/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
# cat 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
# cat 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