Firewalls no Linux
Atualizado
Atualizado
O iptables é o atual software de implementação de firewalls em sistemas Linux e está disponível por padrão na maioria das distribuições modernas do Linux.
Para implementar a ferramenta iptables é necessário um kernel que possua a infraestrutura netfilter implementada (disponível por ladrão a partir do kernel 2.3.15).
Caso não esteja instalado, em sistemas Debian, pode-se instalar utilizando o apt (apt-get install iptables
).
Para utilizar o iptables é necessário especificar, inicialmente, uma das 'tables':
FILTER;
NAT;
MANGLE; ou
RAW
Para indicar a table utiliza-se o parâmetro -t
(iptables -t <table>
), Porém, se esse parâmetro for omitido, subentende-se que se está utilizando a table filter
(Firewall como Filtro de Pacotes) que é a principal funcionalidade do Firewall.
Abordaremos nesta disciplina prioritariamente a table 'FILTER' para filtragem de pacotes e a table 'NAT' para fazer mascaramento (NAT 1:N).
Por padrão o Iptables tem 3 (três) chains padrões:
INPUT:
Chain com regras para pacotes 'entrando' (input) no Firewall
OUPUT:
Chain com regras para pacotes 'saindo' (output) do Firewall
FORWARD:
Chain com regras para pacotes 'cruzando' (forward) o Firewall
O firewall não é um serviço (pois insere as regras diretamente no kernel) e, portanto, o Iptables não funciona como os serviços do Linux com 'start' para iniciar e 'stop' para parar ou 'restart' para reiniciar.
Em função disso, optamos por criar um script shell (fw.sh
) e executá-lo sempre que a máquina reiniciar ou que as regras do firewall forem alteradas.
A seguir um script sugerido como sendo um 'padrão' com linhas de comentário para facilitar o entendimento (defina o seu nome como fw.sh
por exemplo):
Esse script deve ter permissão de execução:
A execução do script da forma como está bloqueará todos os repasses de pacote (FORWARD) e manterá liberadas as saídas e entradas de pacotes de/para a própria máquina do firewall (INPUT e OUTPUT).
A execução da linha de comandos a seguir exibirá todas as regras e políticas das tables da chain filter.
-s
: Origem (source) = Pode ser uma rede (Endereço IP com máscara) ou um host (Endereço IP)
-d
: Destino (destination) = Pode ser uma rede (Endereço IP com máscara) ou um host (Endereço IP)
-p
: Protocolo (protocol)
--dport
: Porta de Destino (destination port)
--sport
: Porta de Origem (source port)
-j
: Ação (jump to) = Pode ser ACCEPT, DROP ou LOG (ações padrão)
!
: Inverte uma regra = (match NOT equal to)