(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.)