iptables: tentando entender a regra que dá acesso ao synaptic

2

(Isto é para um sistema baseado em antiX, baseado no Debian). Eu tenho as seguintes regras para o iptables:

iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.10.0/24 -d 192.168.10.0/24 -j ACCEPT
iptables -A OUTPUT -s 192.168.10.0/24 -d 192.168.10.0/24 -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner root -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner internet_access -j ACCEPT
iptables -nvL

A ideia é que o tráfego externo é permitido para tudo que o root faz e para tudo que está em um grupo chamado internet_access. Isso parece (principalmente) funcionar como deveria. No entanto, synaptic (assim como os outros programas da família apt) não parece gostar desse conjunto de regras. Não é possível recarregar seus bancos de dados e, em vez disso, trava. Eu pesquisei por uma solução e descobri que adicionar essa linha ajuda:

iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

Eu (acho que) sei o que faz, mas não entendo porque é necessário, em primeiro lugar. O synaptic é executado como root e, portanto, deve ter acesso total à Internet (outros aplicativos iniciados como root têm acesso à Internet).

E, segundo, se eu alterar a regra acima para isso:

iptables -A OUTPUT -p tcp --dport 80 -m owner --uid-owner root -m state --state NEW -j ACCEPT

ele pára de funcionar novamente. No entanto, se eu listar o processo sináptico com o psgrep, ele será mostrado como raiz do usuário e raiz do grupo. Estou intrigado.

(Eu sou novo no Linux (e ainda mais novo no iptables, por assim dizer) se você não tivesse inferido isso.)

    
por tmsg 23.08.2018 / 12:03

1 resposta

2

No meu Kubuntu, é porque apt-get executa vários /usr/lib/apt/methods/http processos. O proprietário deles é _apt , não root . Eu sei que _apt existe no meu Debian também.

Tornar _apt um membro do seu grupo internet_access deve ajudar.
Tornar _apt um membro do seu grupo internet_access não ajudará, porque --gid-owner corresponde se a estrutura do arquivo do soquete do pacote pertence ao grupo fornecido. Isso é diferente de "se a estrutura de arquivos do soquete do pacote é de propriedade de um membro do grupo especificado".

No meu Kubuntu, esses http processos são de propriedade de _apt / nogroup . A solução mais fácil parece permitir que o usuário _apt se comunique:

iptables -A OUTPUT -m owner --uid-owner _apt -j ACCEPT
    
por 23.08.2018 / 13:08