Todos nós temos a noção que é importante dispormos de mecanismos de segurança nos nossos PC’s. Para quem é utilizador do Linux certamente que já ouviu falar do iptables (firewall)… mas provavelmente nunca o usou devido à sua complexidade. O iptables é uma ferramenta bastante poderosa por si só, que vem por omissão nas distribuições Linux.
Hoje apresentamos a compilação de alguns artigos que mostram como funciona o iptables e como podem usar este poderoso mecanismo de segurança.
O IPtables é um mecanismo de segurança que permite controlar tráfego IP ao nível dos pacotes (layer 3). De uma forma geral, com o iptables podemos definir uma sequência de regras que permitem ou bloqueiam determinados serviços/aplicações. Os serviços/aplicações usam normalmente o protocolo UDP ou TCP.
NetFilter vs IPTables
Para que o IPTables funcione corretamente, é necessário que que se ativem mecanismos no próprio kernel, que permitem avaliar, controlar e manipular tráfego ao nível dos pacotes. O IPtables é a aplicação usada para criar e gerir as regras que iremos usar para filtrar os pacotes com base nos mais diversos critérios.
Funcionamento do NetFilter
Os pacotes são filtrados com base num conjunto sequencial de regras (cadeia), onde cada regra contem um conjunto de condições. A sequência com que a cadeia de regras é criada é muito importante, uma vez que são processadas pela ordem com que foram criadas até que uma delas se aplique.
Quando os pacotes não “encaixam” em nenhum dos critérios das regras definidas, é aplicada a política implícita dessa cadeia de regras, podendo o tráfego ser aceite ou rejeitado.
As cadeias são agrupadas em 3 tabelas pré-definidas:
- Filter – responsável pela filtragem de pacotes
- Nat – permite a tradução de endereços e portos (mecanismo de NAT)
- Mangle – permite a alteração especial nos pacotes
- Raw – para configurar exceções relativamente ao registo de sessões
Chain (cadeias)
Cada chain consiste numa lista ordenada de regras, sendo que a ordem das mesmas é muito importante. Quando um pacote é submetido a uma cadeia, as suas características são comparadas uma a uma, pela ordem que foram sendo definidas. Quando as características de um pacote não encaixam em qualquer uma das regras, é aplicada então a política predefinida dessa cadeira.
Uma vez que a tabela filter é a mais utilizada, vamos analisar as chains da mesma:
Cadeias da tabela filter
- INPUT
- Filtragem de pacotes IP à entrada do sistema
- OUTPUT
- Filtragem de pacotes IP à saída do sistema
- FORWARD
- Filtragem de pacotes IP à passagem do sistema
Targets (Ações)
Um target indica a ação a aplicar ao pacote, caso a regra se verifique. Alguns exemplos de targets para a chains INPUT/OUTPUT/FORWARD
- DROP
- Descarta um pacote sem notificar o emissor
- ACCEPT
- Aceita o pacote
- REJECT
- Rejeita o pacote sem notificar o emissor
Aqui ficam alguns exemplos de utilização do iptables:
1) Apagar todas as regras
Antes de começar a criar um conjunto de regras, é importante que apague todas as regras existentes. Para isso basta que usem o comando:
iptables -F
ou
iptables –flush
2) Definir politica por omissão para as cadeias (chains)
Como referimos, as cadeias de regras têm sempre uma política por omissão que pode ser DROP ou ACCEPT (na prática é uma regra implícita). Vamos considerar que queremos que a cadeia INPUT e FORWARD como DROP e OUTPUT como ACCEPT. Para isso basta executar o seguinte comando:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
3) Mostrar o estado da Firewall
Para visualizarem todas as regras, basta que executem o comando:
iptables -L -n –v
onde:
- L – lista todas as regras
- n – Mostra o IP e porta num formato numérico
- v – detalhe da informação
4) Mostrar todas as regras (com número de linha)
Para ver as regras com o respetivo número, basta que usem o comando:
iptables -n -L -v --line-numbers
5) Bloquear um endereço específico
Como ultima dica ensinamos como podem bloquear/aceitar uma determinada comunicação vinda de um endereço IP especifico. Vamos considerar que pretendemos bloquear as comunicações vindas do endereço 192.168.1.1:
iptables -A INPUT -s 192.168.1.1 -j DROP
Nota: No caso de terem definido a politica por omissão para as cadeia INPUT como DROP e caso pretendam aceitar todas as comunicações do endereço 192.168.1.1, basta que insiram a regra
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
6) Apagar regras da firewall
Para apagar facilmente regras na firewall é importante saber qual a linha a que corresponde essa regra ( –line-numbers)
iptables -L INPUT -n --line-numbers
e em seguida remover com a opção –D mais o numero da regras. Vamos considerar para este exemplo que queremos apagar a regra 3.
iptables -D INPUT 3
7) Inserir regras
Do mesmo modo que se apagam regras de uma determinada posição, é também possível criar regras para uma determinada posição (Não se esqueçam que o iptables funciona em modo TOP-Down). Vamos considerar que pretendemos novamente colocar a regra que apagas novamente na posição 3.
iptables -I INPUT 3 -p tcp --dport 22 -j ACCEPT
8) Como guardar as regras
Para guardar as regras no Debian e derivados, basta executar o comando iptables-save e escolher o ficheiro para guardar as regras
Nota: No CentOS / RHEL / Fedora podem usar o comando service iptables save
9) Como repor as regras (guardadas)
Para repor as regras guardadas, basta fazer uso do comando iptables-restore e indicar o ficheiro onde estão guardadas as regras.
iptables-restore < regras
10) Bloquear ou permitir pings
Para bloquear ou permitir o protocolo ICMP (vulgarmente designado de ping) para a vossa máquina, basta que usem uma das seguintes regras (de acordo com o pretendido).
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
E agora, ainda continua com “medo” do IPTables? Se tiverem algumas sugestões ou dicas deixem nos comentários.