fwbuilder
está, sem dúvida, entre os melhores.
iptables
e ip6tables
. A diferença entre estes dois comandos é que o primeiro atua sobre rede IPv4, enquanto que o último sobre o IPv6. Uma vez que ambas pilhas de protocolo de rede provavelmente estarão circulando por muitos anos, ambas as ferramentas serão utilizadas em paralelo.
filtro
se ocupa das regras de filtragem (aceitando, recusando ou ignorando um pacote);
nat
diz respeito a tradução de endereços e portas de origem ou destino de pacotes;
mangle
diz respeito a outras alterações nos pacotes IP (incluindo campos e opções de ToS - Tipo de Serviço);
raw
permite outras modificações manuais em pacotes antes deles chegarem ao sistema de rastreamento de conexões.
security
is used for Mandatory Access Control networking rules, implemented by Linux Security Modules such as SELinux.
filter (filtro)
possui três cadeias padrão:
INPUT (ENTRADA)
: lida com os pacotes cujo destino é o próprio firewall;
OUTPUT (SAÍDA)
: lida com os pacotes emitidos pelo firewall;
FORWARD (REPASSAR)
: lida com os pacotes em trânsito através do firewall (que não é nem a sua origem nem o seu destino).
nat
também tem três cadeias de padrão:
PREROUTING (PRÉ ROTEAMENTO)
: altera pacotes assim que eles chegam;
POSTROUTING (PÓS ROTEAMENTO)
: altera pacotes quando eles estão prontos para seguir seu caminho;
INPUT
: to modify packets destined for local sockets;
OUTPUT (SAÍDA)
: altera pacotes gerados pelo próprio firewall.
-j
, de jump, nos comandos) para a especificada ação para continuar o processamento. Os comportamentos mais comuns são padronizados, e existem ações específicas para eles. fazer uma destas ações padrão interrompe o processamento da cadeia, já que o destino do pacote já está selado (salvo uma exceção mencionada a seguir):
ACCEPT
: permite que o pacote siga seu caminho;
REJECT
: rejeita o pacote com um erro ICMP (a opção --reject-withtipo
para iptables
permite seleccionar o tipo de erro);
DROP
: apaga (ignora) o pacote;
LOG
: loga (via syslogd
) uma mensagem com uma descrição do pacote; observe que esta ação não interrompe o processamento, e a execução da cadeia continua na próxima regra, razão pela qual logar pacotes recusados exige tanto uma regra LOG quando uma regra REJECT/DROP;
NFLOG
: log a message via the loaded logging backend (usually nfnetlink_log), which can be better adapted and more efficient than syslogd
for handling large numbers of messages; note that this action, like LOG, also returns processing to the next rule in the calling chain;
RETURN
: interrompe o processamento da cadeia atual, e volta para a cadeia chamada; no caso da cadeia atual ser uma das padrão, não há nenhuma cadeia de chamada, de modo que a ação padrão (definida com a opção -P
para o iptables
) é executada em vez disto;
SNAT
(apenas na tabela nat
): aplica Source NAT (opções extras descrevem as alterações exatas para aplicar);
DNAT
(apenas na tabela nat
): aplica Destination NAT (opções extras descrevem as alterações exatas para aplicar);
MASQUERADE
(apenas na tabela nat
): aplica masquerading (um caso especial de Source NAT);
REDIRECT
(apenas na tabela nat
): redireciona um pacote para uma determinada porta do próprio firewall; isto pode ser usado para configurar um proxy web transparente que funciona sem nenhuma configuração no lado do cliente, uma vez que o cliente pensa que ele se conecta ao destinatário mas na verdade as comunicações passam pelo proxy.
mangle
, estão fora do escopo deste texto. O iptables(8) e ip6tables(8) tem um lista completa.
iptables
e ip6tables
permitem manipulação de tabelas, cadeias e regras. Sua opção -t tabela
indica em qual tabela operar (por padrão, na filter
).
-N chain
option creates a new chain. The -X chain
deletes an empty and unused chain. The -A chain rule
adds a rule at the end of the given chain. The -I chain rule_num rule
option inserts a rule before the rule number rule_num. The -D chain rule_num
(or -D chain rule
) option deletes a rule in a chain; the first syntax identifies the rule to be deleted by its number, while the latter identifies it by its contents. The -F chain
option flushes a chain (deletes all its rules); if no chain is mentioned, all the rules in the table are deleted. The -L chain
option lists the rules in the chain; if no chain is mentioned, all chains are listed. Finally, the -P chain action
option defines the default action, or “policy”, for a given chain; note that only standard chains can have such a policy.
condições -j ação opções_ações
. Se várias condições são descritas na mesma regra, então o critério é a conjunção (e lógico) das condições, que é pelo menos tão restritiva quanto cada condição individual.
-p protocolo
corresponde ao campo protocolo do pacote IP. Os valores mais comuns são tcp
, udp
, icmp
, e icmpv6
. Prefixar a condição com um ponto de exclamação nega a condição, que se transforma numa correspondência para "todos os pacotes com um protocolo diferente do especificado". Este mecanismo de negação não é específico para a opção -p
e também pode ser aplicada a todas outras condições.
-s endereço
ou -s rede/máscara
corresponde ao endereço de origem do pacote. Do mesmo modo, -d endereço
ou -d rede/máscara
corresponde ao endereço de destino.
-i interface
seleciona os pacotes entrando pela dada interface. -o interface
seleciona pacotes saindo de uma interface específica.
-p TCP
pode ser complementada com condições sobre as portas TCP, com cláusulas como --source-port porta
(porta de origem) e --destination-port porta
(porta de destino).
--state estado
corresponde ao estado de um pacote em uma conexão (isto requer o módulo ipt_conntrack
do kernel, para rastreamento de conexões). O estado NEW
descreve um pacote iniciando uma nova conexão; O estado ESTABLISHED
corresponde aos pacotes pertencentes a uma conexão já existente, e RELATED
correspondem aos pacotes iniciando uma nova conexão relacionada a uma já existente (o que é útil para as conexões ftp-data
no modo ativo do protocolo FTP).
LOG
, por exemplo, tem as seguintes opções:
--log-level
, com valor padrão warning
(aviso), indica o nível de severidade no syslog
;
--log-prefix
permite especificar um prefixo de texto para diferenciar mensagens registradas;
--log-tcp-sequence
, --log-tcp-options
e --log-ip-options
indicam dados extras a serem integrados na mensagem: respectivamente, o número de seqüência TCP, opções TCP, e as opções IP.
DNAT
fornece a opção --to-destination endereço:porta
para indicar o novo endereço IP de destino e/ou porta. Da mesma forma, SNAT
fornece --to-source endereço:porta
para indicar o novo endereço e/ou porta IP de origem.
REDIRECT
(disponível apenas se o NAT está disponível) fornece a opção --to-ports porta(s)
para indicar a porta, ou intervalo de portas, para onde os pacotes devem ser redirecionados.
iptables
/ip6tables
. Digitar estes comandos manualmente pode ser tedioso, por isso as chamadas são normalmente armazenados em um script para que a mesma configuração seja criada automaticamente a cada vez que a máquina inicia. Este script pode ser escrito à mão, mas também pode ser interessante prepará-lo com uma ferramenta de alto nível, como fwbuilder
.
#
apt install fwbuilder
fwbuilder
traduzir as regras de acordo com os endereços atribuídos aos objetos.
fwbuilder
pode gerar um script de configuração do firewall de acordo com as regras que foram definidas. Sua arquitetura modular lhe confere a capacidade de gerar scripts que visam diferentes sistemas (iptables
para Linux, ipf
para o FreeBSD e pf
para OpenBSD).
up
do /etc/network/interfaces
. No exemplo a seguir, o script é armazenado em /usr/local/etc/arrakis.fw
.
Exemplo 14.1. arquivo interfaces
chamando script firewall
auto eth0 iface eth0 inet static address 192.168.0.1 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 up /usr/local/etc/arrakis.fw