2

(Это для системы, основанной на antiX, сама основанная на растяжке Debian.) У меня есть следующие правила для 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

Идея состоит в том, что внешний трафик разрешен для всего, что делает root, и для всего, что находится в группе, называемой internet_access. Кажется, это (в основном) работает как надо. Однако synaptic (как и другие программы в семействе apt), похоже, не нравится этот набор правил. Он не может перезагрузить свои базы данных и вместо этого зависает. Я поискал решение и нашел, что добавление этой строки помогает:

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

Я (кажется, я) знаю, что это делает, но я не понимаю, зачем это нужно в первую очередь. Synaptic запускается с правами root и поэтому должен иметь полный доступ к Интернету (другие приложения, запущенные с правами root, имеют доступ к Интернету в порядке).

И во-вторых, если я изменю правило выше на это:

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

он перестает работать снова. Однако, если я перечислю синаптический процесс с помощью psgrep, он будет показан как пользователь root и группа root. Я озадачен.

(Я новичок в Linux (и даже новее в iptables, если можно так выразиться), если вы этого не сделали.)

1 ответ1

2

В моем Kubuntu это происходит потому, что apt-get запускает несколько процессов /usr/lib/apt/methods/http . Их владельцем является _apt , а не root . Я знаю, что _apt существует и в моем Debian.

Создание _apt членом вашей группы internet_access должно помочь.
_apt в вашу группу internet_access не поможет, потому что --gid-owner соответствует, если файловая структура сокета пакета принадлежит данной группе. Это отличается от «если файловая структура сокета пакета принадлежит члену данной группы».

В моем Kubuntu эти http процессы выполняются принадлежащими _apt/nogroup . Кажется, самое простое решение - позволить пользователю _apt общаться:

iptables -A OUTPUT -m owner --uid-owner _apt -j ACCEPT

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .