Visualizando todas as regras do iptables

144

Existe uma maneira de visualizar as iptablesregras com mais detalhes?

Recentemente, adicionei o disfarce a uma variedade de IPs:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
service iptables save
service iptables restart

O que fez o que eu quero, mas quando eu uso:

iptables -L

Eu obtenho a mesma saída que normalmente:

Chain INPUT (policy ACCEPT)
target    prot opt source        destination

Chain FORWARD (policy ACCEPT)
target    prot opt source        destination

Chain OUTPUT (policy ACCEPT)
target    prot opt source        destination

Como posso ver as regras, incluindo as que adiciono? (o sistema é o CentOS 6)

TheLovelySausage
fonte

Respostas:

116

Ao usar o -L, --listopção para listar as regras de firewall atuais, você também precisa especificar a tabela Netfilter apropriado (um dos filter, nat, mangle, rawou security). Então, se você adicionou uma regra para a nattabela, você deve especificar explicitamente esta tabela usando o -t, --tableopção:

iptables --table nat --list

Ou usando o formato abreviado de opções:

iptables -t nat -L

Se você não especificar uma tabela específica, a filtertabela será usada como padrão.


Para resultados mais rápidos, pode ser útil incluir também a opção -n, --numericpara imprimir endereços IP numéricos em vez de nomes de host, evitando a necessidade de aguardar pesquisas de DNS reversas.

Você pode obter ainda mais informações, incluindo o -v, --verboseopção.

Anthony Geoghegan
fonte
113

iptablescontrola cinco tabelas diferentes: filter, nat, mangle, rawe security. Em uma determinada chamada, iptablesapenas exibe ou modifica uma dessas tabelas, especificadas pelo argumento da opção -t(o padrão é filter). Para ver o estado completo do firewall, é necessário chamar iptablescada uma das tabelas sucessivamente.

Além disso, para obter uma representação precisa das regras, você precisa passar a opção -v. Caso contrário, alguns critérios importantes são omitidos na saída, como a interface nas regras de filtro (por exemplo, uma regra que diz "aceite tudo" e uma regra que diz "aceite tudo na interface de loopback" só pode ser distinguida -v).

Portanto, para obter uma apresentação completa das regras do filtro de rede, você precisa

iptables -vL -t filter
iptables -vL -t nat
iptables -vL -t mangle
iptables -vL -t raw
iptables -vL -t security

Como alternativa, você pode chamar o iptables-saveprograma, que exibe todas as regras em todas as tabelas em um formato que pode ser analisado iptables-restore. Esse formato também é razoavelmente legível por seres humanos (é como uma série de chamadas ao iptablescomando para criar a tabela).

Gilles
fonte
56

iptables -Sfaz o truque para mim. Parece listar todas as regras ativas, mesmo quando o serviço está desativado.

Na página do manual:

-S, --list-rules [chain] Imprime todas as regras na cadeia selecionada. Se nenhuma cadeia for selecionada, todas as cadeias serão impressas como iptables-save. Como todos os outros comandos do iptables, ele se aplica à tabela especificada (o filtro é o padrão).

Cameron
fonte
Esta é uma resposta realmente kwl, eu também notei que / sbin / service iptables estado dá uma saída semelhante
TheLovelySausage
6
+1. Não 'parece' sobre isso - na página de manual: "-S, imprima todas as regras na cadeia selecionada. Se nenhuma cadeia for selecionada, todas as cadeias serão impressas como iptables-save". Este é o que eu normalmente preciso.
Mike S
3
não achei que fosse esse o caso. iptables -Snão mostra todas as minhas regras nat, que eu posso ver quando eu corroiptables -L -t nat
mulllhausen
11
@MikeS Na página de manual, AMBOS os comandos operam apenas na tabela especificada, filtre por padrão. "Como qualquer outro comando iptables, ele se aplica à tabela especificada (o filtro é o padrão)." O texto da documentação é copiado quase de forma idêntica para -S e -L, eles diferem apenas na formatação da saída, não nas regras impressas. Isso é verdade pelo menos no Ubuntu 16.04, que no meu sistema é o iptables v1.6.0.
Scott
Concorde com @mulllhausen aqui. Eu precisava do "sudo iptables --table nat --list" para mostrar minhas regras da tabela nat. o sinalizador "-S" por si só não os mostrou.
Robert Oschler
15

O que eu faço é executar iptables-save > iptables_bckp, isso iria fazer backup de todas as camadas, editar o arquivo e restaurar as tabelas de ipiptables-restore < iptables_bckp

# iptables-save > iptables_bckp
# vim iptables_bckp
# iptables-restore < iptables_bckp

Você pode fazer um backup duplo para modificar um deles sem perder as tabelas de ip anteriores.

Essa é uma prática pessoal, não estou dizendo que essa é a melhor maneira, mas para mim funciona muito bem.

Experimente

tachomi
fonte
Esta é a única resposta realista que encontrei até agora que também despeja todas as tabelas.
Chris Harrington
4

O iptablescomando também requer que você especifique a tabela, caso contrário, o padrão é filtrar a tabela. Então tente:

iptables -t nat -L
user425
fonte
1

Você pode usar:

# lsmod | grep ip_tables
ip_tables              13193  4 iptable_raw,iptable_mangle,iptable_nat,iptable_filter

Para encontrar todas as tabelas e mostrar regras específicas na tabela.

Tur Le
fonte
1

Se realmente ajudar, você pode escrever um script bash e colocá-lo em uma pasta que seja referência pelo seu caminho ou por um alias no arquivo ~ / .bashrc.

AllRules.sh

#!/bin/bash

 echo "Filter table:"
 iptables -t filter -vL

 echo "Nat table:"
 iptables -t nat -vL

 echo "Mangle table:"
 iptables -t mangle -vL

 echo "Raw table:"
 iptables -t raw -vL

 echo "Security table:"
 iptables -t security -vL

 echo 
 echo "All rules in all tables printed"

Lembre-se de conceder permissões de execução ao seu novo script bash com chmod

Se a permissão for um problema, talvez seja necessário adicionar o sudo na frente de todos os iptablescomandos.

ob1
fonte
0
iptables -vnxL
iptables -vnxL -tnat

possivelmente adicionalmente, embora estes sejam muito raramente usados:

iptables -vnxL -traw
iptables -vnxL -tmangle
iptables -vnxL -tsecuriy
sjas
fonte