O kernel Linux inclui o subsistema Netfilter, o qual é usado para manipular ou decidir o destino do tráfego de rede dirigido para ou através de seu servidor. Todas as soluções de firewall Linux modernas utilizam esse sistema para filtragem de pacotes.
O sistema de filtragem de pacotes do kernel tem pouca utilidade para os administradores sem uma interface para gerenciá-la. Este é o propósito do iptables. Quando um pacote chega ao servidor, ele será encaminhado ao subsistema Netfilter para aceitação, manipulação ou rejeição, baseado numa das regras supridas pela interface via iptables. Então, o iptables é tudo que você precisa para gerenciar o seu firewall, caso você tenha familiaridade com ele, mas existem diversos front ends (interfaces de frente) para simplificar a tarefa.
O propósito da Máscara de IP é permitir máquinas com IP privado, endereço não-roteável em sua rede para acessar a Internet por meio da máquina "mascarada". O tráfico destinado de sua rede privada para a Internet deve ser manipulado para obter respostas da máquina que fez a petição, como em uma rota invertida. Para fazer isto, o kernel deve modificar o endereço IP da fonte de cada pacote e retornar respostas a ele, antes que o endereço privado IP faço o pedido de resposta, que é impossível através da Internet. O Linux usa Connection Tracking (conntrack) para acompanhar que conexões pertence a que máquinas e desviar cada pacote de retorno correspondente. O tráfico originado em sua rede privada é assim "mascarado" como tendo originado de seu gateway Ubuntu. Este processo possui refência na documentação da Microsoft como Conexão de Internet Compartilha.
Isto pode ser realizado com uma única regra no iptables, que pode diferir levemente baseado em sua configuração de rede:
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE
O comando acima supõe que seu endereço privado está no intervalo 192.168.0.0/16 e sua interface de Internet, ou dispositivo, é ppp0. A sintaxe é errada como se segue:
-t nat -- a regra é para ir na tabela nat
-A POSTROUTING -- a regra é para ser adicionada (-A) à corrente POSTROUTING
-s 192.168.0.0/16 -- a regra é aplicada a trafego originando do endereço especificado
-o ppp0 -- a regra é aplicada a trafego agendado para ser roteado pelo dispositivo de rede especificado
-j MASQUERADE -- trafego combinando com esta regra "pulará" (-j) para o alvo MASQUERADE para ser manipulado como descrito acima
Cada série na tabela de filtro (a tabela padrão, onde a maioria ou todos os processos e filtragem de pacotes ocorre) tem uma diretriz padrão para ACEITAR, mas se você estiver criando um firewall adicional para o dispositivo de gateway, você terá que definir políticas de DESCARTE ou REJEIÇÂO, em que caso seu tráfico "mascarado" necessitará de permição pra ENVIAR para a série de regras de trabalho acima:
sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT sudo iptables -A FORWARD -d 192.168.0.0/16 -m state --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT
Os comandos acima permitem todas conexões de sua rede local à Internet e todo trânsito relacionado a essas conexões retornar à máquina que os iniciou.
Há muitas ferramentas disponíveis para ajudá-lo a construir um firewall completo sem conhecimento íntimo da ferramenta iptables. Para os que preferem GUI (interfaces gráficas), sugere-se o Firestarter é bem popular e de fácil utilização, e o fwbuilder, uma aplicação poderosa com visual familiar para administradores que usam ferramentas comerciais de firewall, como o Checkpoint FireWall-1. Se você preferir uma ferramenta em linha de comando para configurar arquivos em "texto puro", o Shorewall é uma solução poderosa que o ajudará em configurações avançadas de firewall em sua rede. Se sua rede for relativamente simples ou você não possuir uma rede o ipkungfu deve proporcionar-lhe um firewall útil com configuração inicial zero, e o permitirá facilmente armar um firewall mais avançado editando arquivos de configuração simples e bem documentados. Outra ferramenta interessante é o fireflier, que é orientado para desktop. É composto de um servidor (fireflier-server) e sua escolha de clientes GUI (GTK ou QT), e comporta-se como muitas aplicações interativas populares de firewall para Windows.
O registro (log) das ações do firewall é essencial para reconhecer ataques, investigar e reparar erros em suas regras do firewall e notar atividades inesperadas na rede. Você deve incluir regras de registro em seu firewall para que registros sejam gerado, aliás, e regras de registro devem vir antes de qualquer regra aplicável (uma regra com um alvo que decida o destino do pacote, tal como ACEPT, DISCARD ou REJECT). Por exemplo:
sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "
As requisições pela porta 80 para a máquina local, então, geraria um registro dmesg parecido com este:
[4304885.870000] NEW_HTTP_CONN: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=58288 DF PROTO=TCP SPT=53981 DPT=80 WINDOW=32767 RES=0x00 SYN URGP=0
O registro acima é publicado em /var/log/messages
, /var/log/syslog
, e /var/log/kern.log
. Estes procedimentos podem ser alterado modificando o /etc/syslog.conf
ou instalando e configurando o ulogd e, assim, usar o ULOG como alvo ao invés do LOG (registro). O daemon ulogd é um servidor userspace que observa o sistema para registrar instruções específicas do kernel para firewalls e registrar qualquer arquivo que você queira, igual aos bancos de dados PostgreSQL e MySQL. O registro das ações do firewall pode ser simplificada usando uma ferramenta para análise de registros, como o fwanalog, fwlogwatch, ou lire.