Como combinar conjuntos de regras iptables

3

Digamos que há vários scripts iptables (executados no momento da inicialização), todos executando algo como iptables -A ... para adicionar regras. Estou pensando que isso poderia ser melhorado, transformando todos esses scripts de shell em arquivos de texto gerados por iptables-save .

Mas devo estar fazendo algo errado, tentando ler todos esses conjuntos de regras. O script executado no momento da inicialização passaria por esses arquivos e os leria usando iptables-restore . Claro que com -n ou --noflush . Isso funciona para algumas regras (armazenadas nas cadeias padrão), mas não para a maioria das minhas regras que estão em outras cadeias. Abaixo está um exemplo de 2 conjuntos de regras que se dão um ao outro (conjunto de leitura a, checagem; conjunto de leitura b, checar, mas setar se foi).

Como você leria um monte de conjuntos de regras do iptables?

Exemplo:

$ cat fake1-a.rules 
*nat
:PREROUTING ACCEPT [7:997]
:INPUT ACCEPT [7:997]
:OUTPUT ACCEPT [28:1810]
:POSTROUTING ACCEPT [28:1810]
COMMIT
*mangle
:PREROUTING ACCEPT [344:84621]
:INPUT ACCEPT [344:84621]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [296:37971]
:POSTROUTING ACCEPT [296:37971]
COMMIT
*filter
:INPUT ACCEPT [102:26513]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [89:10767]
:TESTCHAIN - [0:0]
-A TESTCHAIN -p tcp -m tcp --dport 12345 -j DROP
COMMIT
$ cat fake1-b.rules 
*nat
:PREROUTING ACCEPT [7:997]
:INPUT ACCEPT [7:997]
:OUTPUT ACCEPT [28:1810]
:POSTROUTING ACCEPT [28:1810]
COMMIT
*mangle
:PREROUTING ACCEPT [344:84621]
:INPUT ACCEPT [344:84621]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [296:37971]
:POSTROUTING ACCEPT [296:37971]
COMMIT
*filter
:INPUT ACCEPT [102:26513]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [89:10767]
:TESTCHAIN - [0:0]
-A TESTCHAIN -p tcp -m tcp --dport 54321 -j DROP
COMMIT
# cat fake1-a.rules | iptables-restore --noflush
# iptables -nL | grep DROP
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:12345
# cat fake1-b.rules | iptables-restore --noflush
# iptables -nL | grep DROP
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:54321
    
por basic6 05.06.2014 / 19:02

1 resposta

3

A opção --noflush para iptables-restore não funciona para cadeias definidas pelo usuário, como TESTCHAIN , apenas cadeias incorporadas. Sua melhor aposta é consolidar todas as regras de TESTCHAIN em um único arquivo e importar esse conjunto de regras usando iptables-restore . Você pode encontrar todas as regras com algo como:

egrep -r  "\sTESTCHAIN\s" firewall_rules_directory/*
    
por 05.06.2014 / 19:49