Tem medo da Firewall do Linux? Nós damos umas dicas
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.
Este artigo tem mais de um ano
Pedro, bom artigo, mas acho que quem não está familiarizado com Linux ou firewalls devia de começar pela ufw… E pelo seu interface, a gufw… É muito mais intuitivo e fácil de utilizar.
+1
Para quê complicar?!…
+1
+1
+1
Gufw é fácil e intuitivo para uso doméstico!
+1
Gufw é fácil e intuitivo para uso doméstico!
Pedro, iptables tem anos de uso, muitos, e tem limitações. Para quem quer ter mais flexibilidade, usando tudo o que iptables oferece e mais flexibilidade, da mesma malta do iptables, existe a nftables. É uma versão da iptables mas mais flexível e que combina melhor com os requisitos de hoje em dia.
Aliás, nftables é a firewall de facto do Linux, já vem por defeito no Debian, sendo que mesmo usando a iptables, o que acontece é que é feita a conversão entre as regras que nos definimos em iptables e depois o que é passado para o kernel.
E como a coisa não fica totalmente bem feita à segunda, só mais uma mensagem para dizer que tal como era suposto usar a iptables com o fail2ban, também é possível fazer o mesmo com a fstables, ou seja, fstables + fail2ban = firewall de elevado sucesso.
Bom artigo, mas só alguém que gosta de sofrer é que vai configurar regras de firewall em linux por linha de comandos. 🙂 Utilizem o webmin para vos facilitar a vida.
Oi? Linha de comando?
Editas um ficheiro, crias as tuas regras à tua medida, e já está.
Porque achas tu que usar o rato e botões te dá mais liberdade, mais flexibilidade e é mais simples que escreveres o que queres num ficheiro?
Experiência.
Tiveste más experiências então.
Já eu tenho tido péssimas experiências com sistemas operativos em que a coisa mais usada é o rato para clicar em caixas e botões. Normalmente acabo frustrado sem conseguir exactamente aquilo que quero, mas apenas qualquer coisa para desenrascar.
“ainda continua com “medo” do IPTables? ” Sim.
Muito provavelmente 1 user vai cometer erros ou esquecer-se de algo.
https://firewalld.org/
Nunca usei, mas pelo que têm no site, usam nftables como backend.
Pelo que percebi, é típico dos sistemas vindo da redhat.
Para mim é fácil. 1+1=2 !
Qual a diferenca entre o comando listado para permitir e bloquear tráfego? Parecem iguais
Acredito que te refiras ao item 10. Neste caso, DROP bloqueia e ACCEPT permite.
Pedro Pinto, a tua área é redes, certo?
Pela tua descrição de ti próprio é o que se depreende.
Aqui vai algo para dares uma vista de olhos, está ainda em fase de desenvolvimento, mas promete revolucionar nesta área do Linux.
https://git.kernel.org/?q=Bpf
Vou espreitar, obrigado.
(yup, sou da área das redes)
PP
O que importa, aqui para o caso das firewall’s, será o chamado bpfilter. Não está ainda maduro, não será uma firewall de facto no sentido de uma nftables, mas o caminho aponta no sentido de ser no futuro a firewall do linux. Interessante se pensarmos no facto de hoje ser tudo empacotado dentro de containers.
Acredito que a descrição da ação REJECT seria “Rejeita o pacote notificando o emissor”.
No mais, ótimo artigo.