L'ambiente in cui opero è un'operazione di web hosting su larga scala (diverse centinaia di server gestiti, indirizzamento quasi pubblico, ecc. Quindi è improbabile che tutto ciò che parla della gestione dei collegamenti ADSL funzioni bene), e noi " stai cercando qualcosa che possa essere comodo per gestire sia il set di regole di base (circa 12.000 voci in iptables al conteggio corrente) sia i set di regole basati su host che gestiamo per i clienti. Il nostro set di regole del router principale cambia alcune volte al giorno e i set di regole basati sull'host cambiano forse 50 volte al mese (su tutti i server, quindi forse una modifica ogni cinque server al mese).
Attualmente stiamo usando filtergen (che è in genere palle e super-palle alla nostra scala di operazioni), e in passato ho usato shorewall in altri lavori (che sarebbe preferibile a filtergen, ma immagino che ci debba essere essere qualcosa là fuori che è meglio di così).
I "mosti" che abbiamo creato per qualsiasi sistema di sostituzione sono:
- Deve generare un set di regole abbastanza rapidamente (una corsa filtergen sul nostro set di regole richiede 15-20 minuti; questo è semplicemente folle) - questo è legato al punto successivo:
- È necessario generare un file di stile iptables-restore e caricarlo in un colpo solo, non chiamare iptables per ogni inserimento di regole
- Non è necessario disattivare il firewall per un periodo prolungato durante il ricaricamento del set di regole (di nuovo, questa è una conseguenza del punto precedente)
- Deve supportare IPv6 (non stiamo implementando nulla di nuovo che non sia compatibile con IPv6)
- Deve essere privo di DFSG
- È necessario utilizzare file di configurazione in testo normale (poiché eseguiamo tutto attraverso il controllo di revisione e l'utilizzo degli strumenti di manipolazione del testo Unix standard è il nostro SOP)
- Deve supportare sia RedHat che Debian (pacchetto preferito, ma almeno non deve essere apertamente ostile agli standard di entrambe le distribuzioni)
- Deve supportare la capacità di eseguire comandi iptables arbitrari per supportare funzionalità che non fanno parte della "lingua madre" del sistema
Tutto ciò che non soddisfa tutti questi criteri non verrà preso in considerazione. I seguenti sono i nostri "simpatici":
- Dovrebbe supportare i "frammenti" di file di configurazione (vale a dire, è possibile eliminare un mucchio di file in una directory e dire al firewall "includere tutto in questa directory nel set di regole"; usiamo ampiamente la gestione della configurazione e vorremmo usare questa funzione per fornire automaticamente regole specifiche del servizio)
- Dovrebbe supportare tabelle non elaborate
- Dovrebbe consentire all'utente di specificare ICMP particolari sia nei pacchetti in arrivo che nelle regole REJECT
- Dovrebbe supportare con grazia i nomi host che si risolvono in più di un indirizzo IP (siamo stati catturati da questo un paio di volte con filtergen; è un dolore piuttosto reale nel culo)
- Più caratteristiche iptable opzionali / bizzarre sono supportate dallo strumento (nativamente o tramite plugin esistenti o facilmente scrivibili), meglio è. Di tanto in tanto usiamo strane funzionalità di iptables, e più di quelle che "funzionano", meglio è per tutti.