Liberando acessos
Vamos agora liberar o ping para a tua máquina. Para isso, vamos adicionar uma regra na change INPUT (-A INPUT), permitindo (-j ACCEPT) o protocolo
ICMP (-p icmp).
E para efeito de desempenho, vamos listar as regras de firewall (-L) sem a resolução de nomes dns (-n).
# iptables -A INPUT -p icmp -j ACCEPT
# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Testando o ping:
ping -c 1 172.20.1.145
PING 172.20.1.145 (172.20.1.145) 56(84) bytes of data.
64 bytes from 172.20.1.145: icmp_req=1 ttl=64 time=0.028 ms
--- 172.20.16.60 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.028/0.028/0.028/0.000 ms
Vemos que agora, o equipamento responde ao ping.
Você pode adicionar regras usando o "-I" ao invés de "-A". A diferença é que o "-I" adiciona a regra no top da tabela, enquanto que o "-A", adiciona no
final.
* Lembre-se: as regras mais acima têm precedência em relação às que estão embaixo.
Especificando IP de origem e destino
Há situações que você precisa liberar um acesso apenas a alguns hosts. Por exemplo, você pode liberar acesso remoto em seu servidor apenas para as
estações dos administradores do sistema.
Para isso, use o parâmetro "-s" (origem) e "-d" (destino):
# iptables -A INPUT -s 172.20.16.60 -j ACCEPT
Isso permite que o host 172.20.16.60 se conecte em qualquer porta.
# iptables -A OUTPUT -d 8.8.8.8 j DROP
Isso bloqueia o acesso a qualquer porta do IP 8.8.8.8.
Especificando o tipo de protocolo
Para começar a ser mais específico, podemos especificar qual o tipo que porta você quer bloquear. Por exemplo, para bloquear todos os pacotes TCP,
permitindo somente o UDP, devemos usar o parâmetro "-p":
# iptables -A INPUT -s 172.20.16.60 -p udp -j ACCEPT
Podemos ser ainda mais específicos, liberando o acesso somente à porta 53 UDP (DNS) usando o parâmetro "--dport":
# iptables -A INPUT -s 172.20.16.60 -p udp --dport 53 -j ACCEPT
# iptables -A INPUT -s 172.20.16.60 -j DROP.
Podemos perceber na primeira regra, que o host 172.20.16.60 tem liberado a resolução de nomes (UDP 53). Na segunda regra, está sendo bloqueado
qualquer outro tipo de acesso deste host.
Trabalhando com a chain FORWARD
Agora que você já sabe o básico do iptables, vamos partir para a configuração de um firewall de rede.
Vamos supor que você tenha um equipamento com duas placas de rede, a eth0 ligada na tua rede local, e eth1 na internet. Primeiramente, temos que
habilitar o roteamento:
# sysctl net.ipv4.ip_forward=1
Como eu mostrei nos outros artigos da série, é necessário que as estações da rede saiam para a internet com o IP externo do firewall.
Para fazer isso, digite o comando abaixo:
# iptables -t nat -A POSTROUTING -j MASQUERADE
Não se preocupe em entender esse comando agora, pois vou explicá-lo mais pra frente neste artigo. A princípio, tenha em mente que esse comando vai
fazer com que todos as estações da rede saiam com o IP do firewall.
Para comprovar isso, acesse:
Note que o IP mostrado é o do firewall, e não o teu.
Agora, para liberar o acesso da rede interna à navegação (HTTP e HTTPS), digite:
# iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
# iptables -A FORWARD -p tcp --dport 443 -j ACCEPT
Especificando as interfaces nas regras de firewall
Para evitar um ataque do tipo IP spoofing, você pode especificar as interfaces de rede nas regras do iptables. Vamos supor que a eth0 seja a interface
da rede interna e eth1, a interface da internet:
# iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 80 -j ACCEPT
Em outras palavras, a regra acima permite (ACCEPT) o acesso da HTTP (-p tcp --dport 80) que esteja entrando pela rede interna (-i eth0) e saindo pela
interface de internet (-o eth0).
# iptables -A FORWARD -i eth0 -o eth1 -s 172.20.16.60 -d 8.8.8.8 -p udp --dport 53 -j ACCEPT
Acima, a regra permite (-j ACCEPT) que pacotes de DNS (-p udp --dport 53) vindos de 172.20.16.60 (-s 172.20.16.60) com destino ao DNS do Google (-
d 8.8.8.8) entrando pela interface da LAN (-i eth0) e saindo pela interface de internet (-o eth1) atravessem o firewall (-A FORWARD).