1. Iptables -Introdução
• Os firewalls existem no Linux desde o kernel 1.1, com o
ipfw, originário do BSD.
• Esse filtro era userspace, ou seja, rodava como um
programa comum no sistema, similarmente ao BIND
(servidor de nomes).
• Com o kernel 2.0 veio o ipfwadm, que ainda era uma
ferramenta userspace e controlava as regras de filtragem
do kernel.
• Na versão 2.2 do kernel, veio o ipchains (ainda presente
em algumas distribuições) e em 1999, veio o iptables 2,
presente a partir do kernel 2.3.15.
2. Iptables -Introdução
O iptables é um firewall nativo do Linux e que faz parte
do seu kernel e por isto tem um desempenho melhor
que firewalls instalados como aplicações. Com isso, ele é
bastante seguro e rápido.
3. Cadeias e políticas-padrão
No iptables, existem tabelas de filtragem (chains), e três
delas são básicas e não podem ser apagadas: INPUT,
OUTPUT e FORWARD.
A chain INPUT trata dos pacotes de entrada, aqueles que
chegam da rede.
A chain OUTPUT trata dos pacotes de saída, aqueles que vão
para a rede.
E finalmente a chain FORWARD trata do encaminhamento
de pacotes, ou seja, roteamento.
5. Comandos do Iptables
iptables -A adiciona uma nova regra ao fim da lista de
regras
iptables -P <nome-da-cadeia> <alvo> muda a política
padrão de uma cadeia, de forma que todo pacote desta
cadeia ficará sujeito a esta política, caso não exista nenhuma
regra anterior que se aplique a mesma.
iptables -D apaga uma regra específica da lista
iptables -L lista as regras existentes na lista.
Roteador
iptables -F remove todas as entradas adicionadas na lista
de regras do iptables
6. Alvos das regras
iptables -I Insere uma nova regra ao início da lista de
regras
-j – define o alvo do pacote caso o mesmo se encaixe em uma
regra. As principais ações são ACCEPT, DROP, REJECT.
ACCEPT aceita o pacote
REJECT rejeita educadamente o pacote, enviando um
pacote de resposta ao emissor.
DROP o pacote simplesmente é descartado, sem aviso.
LOG Permite fazer log Roteador
dos pacotes que se encaixam
na regra.
7. Parâmetros para a filtragem de
pacotes
-p – especifica o protocolo aplicado à regra. Se enquadra
aos protocolos da camada de transporte, como tcp, udp e
icmp
Ex: iptables - A INPUT –p tcp –j ACCEPT
8. Parâmetros para a filtragem de
pacotes
-s – especifica a origem (source) do pacote ao qual a regra
deve ser aplicada. A origem pode ser um host ou uma rede.
Nesta opção geralmente utilizamos o IP seguido de sua
sub-rede:
Ex: iptables –A INPUT –s 172.16.53.1 –j DROP
iptables –A INPUT –s 172.16.53.1 –j ACCEPT
Este comando descarta todo pacote de entrada vindo da
origem 172.16.53.1
O segundo comando aceita todo pacote de entrada vindo
da origem 172.16.53.1
9. Parâmetros para a filtragem de
pacotes
-d – especifica o destino do pacote (destination) ao qual a
regra deve ser aplicada. Sua utilização se dá da mesma
maneira que a ação –s.
Ex: iptables –A OUTPUT –d 172.16.53.1 –j DROP
iptables –A OUTPUT –d 172.16.53.1 –j ACCEPT
Este comando descarta todo pacote de saída com destino
à máquina 172.16.53.1
O segundo comando aceita todo pacote de saída com
destino à máquina 172.16.53.1
10. Parâmetros para a filtragem de
pacotes
-i – especifica a interface de entrada a ser utilizada e
como um Firewall possui mais de uma interface esta
regra acaba sendo muito importante para distinguir a
qual interface de rede o filtro deve ser aplicado.
Ex: iptables –A INPUT –i eth0 –j DROP
O comando permite que todo pacote que entra pela
interface eth0 seja selecionado para ser descartado pelas
regras do firewall.
11. Parâmetros para a filtragem de
pacotes
-o – especifica a interface de saída a ser utilizada e se aplica
da mesma forma que a regra –i, mas este parâmetro é
menos usado, pois normalmente nos preocupamos em
impedir que o firewall aceite conexões em determinadas
portas, ao invés de tentar interceptar as respostas.
Ex: iptables –A FORWARD –o eth0 –j DROP
O comando permite que todo pacote que sai pela interface
eth0 seja selecionado para ser descartado pelas regras do
firewall.
12. Parâmetros para a filtragem de
pacotes
--sport – porta de origem (source port). Com esta regra é
possível aplicar filtros com base na porta de origem do
pacote.
Ex: iptables –A INPUT –p tcp –-sport 22 –j DROP
O comando permite que todo pacote de entrada usando o
protocolo TCP e com origem na porta 22 seja descartado.
13. Parâmetros para a filtragem de
pacotes
--dport – porta de destino (destination port) especifica a
porta de destino do pacote e funciona de forma similar à
regra sport.
iptables –A OUTPUT –p tcp –-dport 22 –j DROP
O comando permite que todo pacote de saída usando o
protocolo TCP e com destino na porta 22 seja descartado.
14. Parâmetros para a filtragem de
pacotes
-m mac --mac-source – é a regra que permite especificar
endereços MAC dentro de regras do iptables. Ele é uma
forma de dificultar o uso de endereços IP falseados para
ganhar acesso ao servidor, pois permite relacionar o IP ao
endereço MAC da placa instalada. Não é 100% eficaz pois o
endereço MAC pode ser trocado via ifconfig e ele não é
válido para a camada de rede, ou seja, quando sai da rede
local, ele é descartado.
iptables -A INPUT –p tcp --dport 22 –m mac --mac-source
00:1B:24:46:29:88 –j DROP
15. Parâmetros para a filtragem de
pacotes
Comando faz com que qualquer pacote de entrada com
destino na porta 22 advindo da máquina que possua MAC
00:1B:24:46:29:88 seja descartado.
iptables -A INPUT –p tcp --dport 22 –m mac --mac-source
00:1B:24:46:29:88 –j REJECT
Comando faz com que qualquer pacote de entrada com
destino na porta 22 advindo da máquina que possua MAC
00:1B:24:46:29:88 seja rejeitado.
16. Parâmetros para a filtragem de
pacotes
multiport - com o modulo multiport é possível que
especifiquemos múltiplas portas a serem afetadas pela
regra, sob o limite máximo de 15.
EX: iptables –A INPUT –p tcp –i eth0 –m multiport –-
dport 80,25,53,110 –j DROP
Este comando indica em uma só regra por via de multiport
que o firewall descartará (-J DROP) qualquer pacote que
entre pela interface eth0 (-i eth0) destinado às portas
80,25, 53, 110.
17. Bloqueando domínios
É possível ainda permitir ou bloquear com base no domínio,
tanto para entrada como para saída. Isto permite bloquear sites
e programas diretamente a partir do firewall, sem precisar
instalar um servidor Squid e configurá-lo.
Iptables –A OUTPUT –d www.orkut.com –j DROP
O comando impede que pacotes de saída destinados ao
domínio sejam enviados, ou seja, impede que o domínio seja
acessado a partir da própria máquina local.
Originalmente o iptables sabia trabalhar apenas com endereços
IP. A possibilidade de criar regras baseadas em domínios são
um recurso um pouco mais recente, onde o firewall faz um
lookup no domínio, para saber qual o IP atual.
18. Salvando as regras criadas no
Firewall
Toda regra criada no Iptables fica gravada em memória
RAM, sendo posteriormente apagada quando o sistema é
ligado ou reiniciado.
Para que o administrador de redes não seja obrigado a ter
que refazer todas as regras de firewall sempre que o
sistema é ligado, existe um comando do iptables que
possibilita que salvemos as regras criadas em um arquivo,
que depois pode ser usado para restaurar as regras no
firewall.
Para então salvar as regras criadas em um arquivo,
devemos usar o comando:
iptables-save > nome_do_arquivo
19. Salvando as regras criadas no
Firewall
Após isto, o arquivo criado terá todas as regras do firewall
criadas.
Em uma próxima ocasião quando o sistema for reiniciado, as
regras podem ser restauradas através do comando
iptables-restore < nome_do_arquivo
Este comando acessará o arquivo e colocará em memória
todas as regras que estavam gravadas no arquivo.
20. Roteamento no Linux
O roteamento em um sistema Linux é nativo do kernel, ou
seja, ao iniciar o serviço de rede, o kernel já ativou o
roteamento de pacotes. O serviço roda inicialmente de
uma forma local, roteando apenas os pacotes da própria
máquina. Para que o kernel possa rotear pacotes de outras
máquinas é preciso dizer que ele deve fazer isso, que é feito
inserindo o valor 1 no arquivo
/proc/sys/net/ipv4/ip_forward.
21. Roteamento no Linux
Verificando o valor de ip_forward
# cat /proc/sys/net/ipv4/ip_forward
Mudando o valor de ip_forward
# echo 1 > /proc/sys/net/ipv4/ip_forward
Verificando o novo valor de ip_forward
# cat /proc/sys/net/ipv4/ip_forward
Também é possível fazer isso, e de uma forma mais
adequada, editando-se o arquivo /etc/sysctl.conf.