Você pode listar o iptables como um usuário não-root e por quê?

4

É possível executar o comando iptables --list …. sem ser root?

A execução como não raiz imprime isso:

$ iptables --list
iptables v1.4.21: can't initialize iptables table 'filter': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.

Se você precisa ser root para listar o iptables, qual é o raciocínio por trás disso? Existe uma preocupação de segurança com a visualização das regras? Existe um recurso ou serviço usado por iptables --list que requer acesso root?

Obviamente, modificar as regras de firewall do iptables requer um usuário privilegiado. Eu estou perguntando sobre visualizá-los.

Em vez de ser root, existe uma capacidade que permita listar as regras? O iptables usa o netlink para fazer interface com o kernel? Como a documentação do netlink menciona que

Only processes with an effective UID of 0 or the CAP_NET_ADMIN capability may send or listen to a netlink multicast group.

Talvez isso não se aplique ao iptables.

Não tenho certeza se esse é o jeito certo de fazer isso, mas adicionar um recurso a iptables também não me permite listar as regras:

bash-4.1$ echo $UID
2000
bash-4.1$ getcap /sbin/iptables-multi-1.4.7
/sbin/iptables-multi-1.4.7 = cap_net_admin+ep
bash-4.1$ /sbin/iptables-multi-1.4.7 main --list
FATAL: Could not load /lib/modules/3.10.0-514.21.1.el7.x86_64/modules.dep: No such file or directory
iptables v1.4.7: can't initialize iptables table 'filter': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded. 

Aqui estão algumas perguntas relevantes q1 e q2 . Ambos fornecem soluções alternativas na minha opinião e não discutem a razão fundamental por trás disso.

    
por Hakan Baba 10.08.2017 / 03:02

2 respostas

3

De fato, iptables usa a interface netlink para se comunicar com o kernel. Ele abre um soquete de netlink para xtables e, em seguida, emite comandos por meio desse soquete. O controle de acesso é executado quando o soquete é aberto, não para comandos individuais, portanto, as mesmas permissões são necessárias para listar e modificar regras. A única maneira de permitir que um usuário liste as regras, mas não as modifique, é dar a elas um executável setuid (ou setcap) cuidadosamente escrito.

Seria bom se houvesse uma interface para o netfilter em /proc , mas até onde sei, a tarefa de implementá-lo nunca foi concluída.

    
por 11.08.2017 / 03:33
1

Aparece iptables precisa de CAP_NET_RAW e CAP_NET_ADMIN para poder ler as tabelas. Eu tentei

$ cp /usr/sbin/iptables ~/iptables  # note, it may be a symbolic link
$ sudo setcap CAP_NET_RAW,CAP_NET_ADMIN+ep  ~/iptables
$ ~/iptables  -nvL

e tudo bem.

    
por 10.08.2017 / 17:41