fwbuilder tra questi è senza dubbio uno dei migliori.
iptables and ip6tables commands. The difference between these two commands is that the former acts on the IPv4 network, whereas the latter acts on IPv6. Since both network protocol stacks will probably be around for many years, both tools will need to be used in parallel.
filter riguarda le regole di filtraggio (accettare, rifiutare o ignorare un pacchetto);
nat concerns translation of source or destination addresses and ports of packages;
mangle riguarda altre trasformazioni sui pacchetti IP (inclusi il campo e le opzioni del ToS: Type of Service);
raw permette altre modifiche manuali sui pacchetti prima che giungano al sistema di monitoraggio delle connessioni.
filter contiene tre catene standard:
INPUT: riguarda i pacchetti che hanno come destinazione il firewall stesso;
OUTPUT: riguarda i pacchetti emessi dal firewall;
FORWARD: riguarda i pacchetti che transitano attraverso il firewall (che non è né la sorgente, né la destinazione).
nat contiene tre catene standard:
PREROUTING: per modificare i pacchetti non appena arrivano;
POSTROUTING: per modificare i pacchetti quando sono pronti per essere spediti;
OUTPUT: per modificare i pacchetti generati dal firewall stesso.
-j dei comandi) all'azione specificata. Sono stati standardizzati i comportamenti più comuni ed esistono azioni dedicate per ognuno. Intraprendere una di queste azioni standard interrompe l'avanzamento nella catena, dato che il destino del pacchetto è già stato deciso (salvo l'eccezione descritta in seguito):
ACCEPT: permette al pacchetto di continuare per la sua strada;
REJECT: rifiuta il pacchetto con un pacchetto di errore ICMP (l'opzione --reject-with tipo di iptables permette di selezionare il tipo di errore);
DROP: elimina (ignora) il pacchetto;
LOG: registra (via syslogd) un messaggio con la descrizione del pacchetto; da notare che questa azione non interrompe l'elaborazione, e l'esecuzione della catena prosegue con la regola successiva, ed è per questo che per registrare i pacchetti rifiutati è necessario usare insieme una regola LOG e una REJECT o DROP;
ULOG: registra un messaggio via ulogd, che può essere maggiormente personalizzato ed è più efficiente di syslogd per analizzare una grande mole di messaggi; da notare che questa azione, come «LOG», anch'essa fa proseguire l'elaborazione con la regola successiva nella catena corrente;
RETURN: interrompe l'elaborazione della catena corrente, e ritorna alla catena chiamante; nel caso in cui la catena corrente sia standard, non esiste alcuna catena chiamante, perciò viene eseguita l'azione predefinita (specificata dall'opzione -P di iptables);
SNAT (only in the nat table): apply Source NAT (extra options describe the exact changes to apply);
DNAT (only in the nat table): apply Destination NAT (extra options describe the exact changes to apply);
MASQUERADE (only in the nat table): apply masquerading (a special case of Source NAT);
REDIRECT (only in the nat table): redirect a packet to a given port of the firewall itself; this can be used to set up a transparent web proxy that works with no configuration on the client side, since the client thinks it connects to the recipient whereas the communications actually go through the proxy.
mangle, esulano dagli scopi di questo libro. Una lista integrale si ottiene con iptables(8) e ip6tables(8).
iptables e ip6tables permettono la manipolazione di tabelle, catene e regole. L'opzione -t tabella individua su quale tabella vanno ad operare (filter è la predefinita).
-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. 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.
conditions -j action action_options. If several conditions are described in the same rule, then the criterion is the conjunction (logical and) of the conditions, which is at least as restrictive as each individual condition.
-p protocollo verifica il campo protocollo del pacchetto IP. I valori più usati sono tcp, udp, icmp e icmpv6. Anteporre un punto esclamativo alla condizione la nega, facendola corrispondere a «qualunque pacchetto con un protocollo differente da quello specificato». Questa meccanismo di negazione non è specifico solo per l'opzione -p, ma può essere utilizzato anche per tutte le altre condizioni.
-s indirizzo oppure -s rete/maschera verifica l'indirizzo sorgente del pacchetto. Ugualmente, -d indirizzo oppure -d rete/maschera verifica l'indirizzo destinazione.
-i interfaccia seleziona i pacchetti provenienti dalla data interfaccia di rete. -o interfaccia seleziona quelli uscenti da una specifica interfaccia.
-p tcp può essere raffinata con ulteriori condizioni sulle porte TCP, con clausole tipo --source-port porta e --destination-port porta.
--state stato verifica lo stato di un pacchetto in una connessione (questa richiede il modulo del kernel ipt_conntrack, per il monitoraggio delle connessioni). Lo stato NEW descrive un pacchetto che instaura una nuova connessione; ESTABLISHED descrive i pacchetti appartenenti ad una connessione già in essere, e RELATED descrive i pacchetti che instaurano una connessione correlata con una già esistente (che è utile per le connessioni ftp-data in modalità «attiva» del protocollo FTP).
LOG, per esempio, ha le seguenti opzioni:
--log-level, with default value warning, indicates the syslog severity level;
--log-prefix permette l'inserimento di un prefisso di testo per differenziare i messaggi di log;
--log-tcp-sequence, --log-tcp-options e --log-ip-options indicano dati ulteriori da integrare nel messaggio: rispettivamente, il numero di sequenza TCP, opzioni TCP e opzioni IP.
DNAT action provides the --to-destination address:port option to indicate the new destination IP address and/or port. Similarly, SNAT provides --to-source address:port to indicate the new source IP address and/or port.
REDIRECT action (only available if NAT is available) provides the --to-ports port(s) option to indicate the port, or port range, where the packets should be redirected.
iptables/ip6tables. Digitare questi comandi manualmente può essere noioso, perciò sono solitamente memorizzati in uno script in modo tale che ad ogni avvio della macchina venga richiamata automaticamente la stessa configurazione. Questo script può essere scritto a mano, ma può essere interessante prepararlo con uno strumento di alto livello quale fwbuilder.
#apt install fwbuilder
fwbuilder traduca le regole in base con gli indirizzi assegnati agli oggetti.
fwbuilder can then generate a script configuring the firewall according to the rules that have been defined. Its modular architecture gives it the ability to generate scripts targeting different systems (iptables for Linux, ipf for FreeBSD and pf for OpenBSD).
up del file /etc/network/interfaces. Nel seguente esempio, lo script è memorizzato in /usr/local/etc/arrakis.fw.
Esempio 14.1. File interfaces che richiama lo script del 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