Pergunta

Existe alguma maneira conveniente para mostrar carregado iptables lista módulo? Eu posso mostrar módulos instalados listando / lib / iptables diretório / (ou / lib64 / iptables /), mas eu preciso lista módulo activo.

Foi útil?

Solução

Loaded iptables módulos podem ser encontradas em / ip_tables_matches entrada / proc / net proc sistema de arquivos.

cat /proc/net/ip_tables_matches

No PHP eu posso acessar o carregado iptables módulos de carga e explodir o conteúdo do arquivo:

$content = file_get_contents('/proc/net/ip_tables_matches');
$modules = explode("\n", $content);

Claro que requer proc sistema de arquivos a ser montado (distros maioria GNU Linux montá-lo por padrão)

Outras dicas

Este é um post muito velho, mas vamos lá:

# lsmod | grep ip

Mostra uma lista de módulos carregados, o que eu acho que a maioria está relacionada com iptables ... /proc/net/ip_tables_matches não mostra módulos (pelo menos não no RHEL 6)

Dê uma olhada no seguinte diretório (substitua por sua versão do kernel):

ls /lib/modules/2.6.32-504.8.1.el6.x86_64/kernel/net/netfilter/

Você pode carregar o módulo usando (soltando a .ko conforme listado no diretório):

modprobe nf_conntrack_ftp

Como alternativa, você pode garantir que ele é carregado na inicialização, adicionando-o:

/etc/sysconfig/iptables-config (RHEL/CENTOS) 

IPTABLES_MODULES="nf_conntrack_ftp"

Este parece ser mal documentada.

Tente isto para uma visão rápida sobre os módulos do netfilter apresentar no seu sistema, aqui um one-liner para colar:

for i in /lib/modules/$(uname -r)/kernel/net/netfilter/*; do echo "\e[33;1m$(basename "$i")\e[0m"; strings "$i" | \grep -e description -e depends| sed -e 's/Xtables: //g' -e 's/=/: /g' -e 's/depends=/depends on: /g'; echo; done

Mais uma vez para facilitar a leitura, com novas linhas adicionadas:

#!/bin/bash
for i in /lib/modules/$(uname -r)/kernel/net/netfilter/*
do 
    echo "\e[33;1m$(basename "$i")\e[0m"
    strings "$i" | \grep -e description -e depends | sed -e 's/Xtables: //g' -e 's/=/: /g' -e 's/depends=/depends on: /g'
    echo
done

Nome do arquivo aparecerá em amarelo, a partir do qual você pode adivinhar se o módulo em questão existe ou não. Descrição e dependências são as próximas duas linhas abaixo.

Isso não vai cobrir tudo (porque isso seria demasiado fácil, OFC). Apenas olhando para cima os módulos manualmente, para ver se eles existem, dá-lhe 100% de informações precisas.

iptables -m <match/module name> --help

Se um módulo existe no seu sistema, no final do texto de ajuda você vai ter alguma informação sobre como usá-lo:

ctr-014# iptables -m limit --help
iptables v1.4.14

Usage: iptables -[ACD] chain rule-specification [options]
       iptables -I chain [rulenum] rule-specification [options]


...


[!] --version   -V              print package version.

limit match options:
--limit avg                     max average match rate: default 3/hour
                                [Packets per second unless followed by 
                                /sec /minute /hour /day postfixes]
--limit-burst number            number to match in a burst, default 5
ctr-014# 

É o módulo não está presente no seu sistema:

ctr-014# iptables -m iplimit --help
iptables v1.4.14: Couldn't load match `iplimit':No such file or directory

Try `iptables -h' or 'iptables --help' for more information.
ctr-014#

Como Gonio sugeriu listas lsmod todos os módulos do kernel carregados, mas grepping "ip" não vai lhe dar todas as iptables módulos.

Eu prefiro usar

lsmod|grep -E "nf_|xt_|ip"

e ainda, eu não tenho certeza que a lista será completa.

Como um método alternativo, este também pode ser feito com um script Python.

Em primeiro lugar certifique-se que a biblioteca iptc. sudo pip instalar --upgrade python-iptables

(Assumindo Python3 é a sua versão)

import iptc
table = iptc.Table(iptc.Table.FILTER)
for chain in table.chains:
    print("------------------------------------------")
    print("Chain ", chain.name)
    for rule in chain.rules:
        print("Rule ", "proto", rule.protocol, "src:", rule.src, "dst:" , rule.dst, "in:", rule.in_interface, "out:", rule.out_interface)
        print("Matches:")
        for match in rule.matches:
            print(match.name)
        print("Target:")
        print(rule.target.name)
print("------------------------------------------")
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top