Iptables rules
Neste artigo estão exemplificadas várias regras de utilização com a firewall iptables a fim de servir de template para qualquer regra necessária. Recomenda-se para quem não esteja familiarizado com iptables que leia sobre a matéria a fim de poder compreender melhor o seu uso.
Diferenças entre INPUT, OUTPUT & FORWARD:
- INPUT: acesso de entrada
- OUTPUT: acesso de saída
- FORWARD: acesso de reenvio de pacotes
Diferenças entre REJECT e DROP:
Em termos práticos ambos os parâmetros impedem o acesso ou ligação a tentar ser estabelecida sendo a única diferença a forma como ambos reagem durante a sua actividade.
- DROP: Descarta/ignora o pacote/ligação a ser enviado ou recebido silenciosamente
- REJECT: Normalmente anuncia um erro icmp quando recebe ou envia um pacote/ligação.
Listar regras da firewall
Listar todas as regras:
iptables -L
Listar todas as regras por número
iptables -vnL --line-numbers
Listar apenas regras de entrada
iptables -L INPUT --line-numbers
Listar apenas regras de saída
iptables -L OUTPUT --line-numbers
A combinar os parâmetros obtemos listagens gerais, de saída ou entrada conforme se pretende
iptables -vnL INPUT --line-numbers iptables -vnL OUTPUT --line-numbers
Apagar uma regra da firewall
Adicionando uma regra
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
Apagando a regra adicionada
iptables -D INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
Apagar pelo seu número
iptables -D OUTPUT 5 iptables -D INPUT 22
Bloquear acesso ao exterior
Removemos todas as regras de saída anteriores
iptables -F OUTPUT
De seguida rejeitamos todas as ligações de saída mantendo apenas as que estão actualmente em feito e estabelecidas.
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -j REJECT
Bloquear acesso proveniente do exterior
Removemos todas as regras de entrada anteriores:
iptables -F INPUT
De seguida rejeitamos todas as ligações de entrada mantendo apenas as que estão actualmente em feito e estabelecidas.
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -j REJECT
Bloquear o acesso a tudo
Removemos todas as regras de entrada e saída anteriores:
iptables -F
Rejeitamos todas as entradas
iptables -A INPUT -j REJECT
Rejeitamos todas as saídas
iptables -A OUTPUT -j REJECT
Rejeitamos todos os reenvios
iptables -A FORWARD -j REJECT
Bloquear o acesso completo a um ip
iptables -A INPUT -s 95.85.38.144 -j DROP iptables -A OUTPUT -s 95.85.38.144 -j DROP iptables -A FORWARD -s 95.85.38.144 -j DROP
Descartar ou ignorar repostas ping
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
Bloquear acesso telnet para o exterior
iptables -A OUTPUT -p tcp --dport telnet -j REJECT
Bloquear acesso telnet proveniente do exterior
iptables -A INPUT -p tcp --dport telnet -j REJECT
Bloquear o acesso ssh para o exterior
iptables -A OUTPUT -p tcp --dport ssh -j REJECT
Bloquear o acesso ssh proveniente do exterior
iptables -A INPUT -p tcp --dport ssh -j REJECT
Rejeitar todo acesso vindo do exterior excepto ssh e tráfego local
iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp --dport ssh -j ACCEPT iptables -A INPUT -j REJECT
Aceitar acesso ssh do exterior proveniente de um ip especifico
Bloqueamos todas as ligações à porta 22 excepto se provenientes do ip 69.196.165.40
Aceitamos em primeiro lugar as ligações do ip que queremos
iptables -A INPUT -p tcp -s 69.196.165.40 --dport ssh -j ACCEPT
Bloqueamos todas as restantes.
iptables -A INPUT -p tcp --dport ssh -j REJECT
Aceitar acesso ssh proveniente de uma mac
Com esta regra permitimos o acesso ao serviço ssh que provenha de um endereço mac específico bloqueando todos os restantes.
iptables -A INPUT -m mac --mac-source 00:b0:3d:e1:21:4c -p tcp --dport ssh -j ACCEPT iptables -A INPUT -p tcp --dport ssh -j REJECT
Bloquear o acesso completo a uma mac
iptables -A INPUT -m mac --mac-source b0:34:95:a3:68:b1 -j DROP iptables -A OUTPUT -m mac --mac-source b0:34:95:a3:68:b1 -j DROP iptables -A forwarding_rule -m mac --mac-source b0:34:95:a3:68:b1 -j DROP
Bloquear acesso proveniente do exterior a uma porta local
Neste exemplo usamos a porta 69. Podemos utilizar qualquer porta que desejamos.
iptables -A INPUT -p tcp --dport 69 -j REJECT
Bloquear todo acesso a um interface de rede
Esta regra bloqueará todo o acesso a um interface de rede numa subnet específica. Bastante útil para descartar endereços ip spoofed/forjados.
iptables -A INPUT -i eth0 -s 192.168.0.0/8 -j DROP
Criar uma mascara de ip
Útil para permitir acesso à internet a todos os hosts na mesma subnet]
echo "1" > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o $EXT_IFACE -j MASQUERADE
Bloquear todo acesso telnet excepto proveniente de determinado ip
iptables -A INPUT -t filter ! -s 69.196.165.40 -p tcp --dport 23 -j REJECT
Bloquear acesso ssh excepto proveniente de determinado ip
Se removermos o ! então rejeitamos o acesso eo netrange especificado. Rejeitar todas as ligações provenientes de um netrange/espaço de [[ip]'s.
iptables -A INPUT -t filter -m iprange ! --src-range 172.2.1.70-172.2.1.200 -p tcp --dport 22 -j REJECT
Bloquear todo acesso externo a um ip
iptables -A OUTPUT -d 141.0.174.37 -j REJECT
Bloquear acesso proveniente de um site numa porta
iptables -A INPUT -s myspace.com -p tcp --sport www -j DROP iptables -A INPUT -s 95.85.38.144 -p tcp --sport www -j DROP iptables -A INPUT -s 82.102.24.163 -p tcp --sport 80 -j DROP