Назад | Перейти на главную страницу

Какое правильное правило iptables разрешает apt-get загружать программы?

Когда я печатаю что-то вроде 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 загружать обновления? Спасибо

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