
Когда я набираю что-то вроде sudo apt-get install firefox
, все работает, пока меня не спрашивают:
After this operation, 77 MB of additional disk space will be used.
Do you want to continue [Y/n]? Y
Затем отображаются сообщения об ошибках:Failed to fetch: <URL>
Мои правила iptables следующие:
-P INPUT DROP
-P OUTPUT DROP
-P FORWARD DROP
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
Что мне нужно добавить, чтобы разрешить apt-get загружать обновления? Спасибо
решение1
apt-get почти всегда загружает данные по HTTP, но может также использовать FTP, поэтому краткий ответ, вероятно, будет заключаться в разрешении исходящих HTTP-подключений... и DNS, конечно.
Ваша текущая конфигурация запрещает весь исходящий сетевой трафик ( ESTABLISHED
правило, которое у вас есть в OUTPUT
цепочке, неэффективно, так как сеансы никогда не будут установлены). Нужно ли вам разрешитьТОЛЬКОapt-get updates при этом все еще запрещая все остальное?, iptables
вероятно, неподходящий инструмент для этой работы, поскольку он на самом деле не будет интерпретировать URL-адреса и выборочно разрешать HTTP-передачи. Для этой работы вам следует использовать HTTP-прокси-сервер.
Вы можете использовать более простую настройку, которая разрешит загрузки apt-get, но учтите, что это также разрешит все остальные исходящие DNS и HTTP-соединения, что может оказаться не тем, что вам нужно.
iptables -F OUTPUT # remove your existing OUTPUT rule which becomes redundant
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
Если ваши источники APT включают источники HTTPS или FTP или источники HTTP на портах, отличных от 80, вам придется добавить и эти порты.
Далее вам нужно будет разрешить обратный трафик. Вы можете сделать это с помощью этого единственного правила, которое разрешает любое установленное соединение:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
(При использовании отслеживания подключений можно безопасно разрешить все входящие установленные соединения, поскольку только те соединения, которые вы в противном случае разрешили, перейдут в состояние ESTABLISHED.)
решение2
Файл apt транспортируется через протоколы http, поэтому вам следует настроить свой компьютер на прием данных с сервера портов 80 и 8080. Затем правила iptables должны быть такими:
iptables -A INPUT -p tcp --sport 80 -m conntrack --state NEW -j ACCEPT
iptables -A INPUT -p tcp --sport 8080 -m conntrack --state NEW -j ACCEPT