Яке правильне правило iptables, яке дозволяє apt-get завантажувати програми?


12

Коли я набираю щось на кшталт 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 завантажувати оновлення? Дякую

Відповіді:


17

apt-get майже завжди завантажує через HTTP, але може також використовувати FTP, тому коротка відповідь, ймовірно, дозволяє вихідні HTTP-з’єднання ... а також DNS, звичайно.

Зараз у вас конфігурація відключає весь вихідний мережевий трафік ( ESTABLISHEDправило, яке ви маєте в OUTPUTланцюжку, не діє, оскільки жодні сеанси не встановлюються). Чи потрібно дозволити ТІЛЬКИ оновлення apt-get, а все ще забороняти все інше? 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

(Безпечно дозволяти всі вхідні встановлені з'єднання при використанні відстеження з'єднань, тому що лише ті з’єднання, які ви в іншому випадку дозволені, переходять у стан ВСТАНОВЛЕНО.)


Привіт, дякую за вашу відповідь. Це спрацювало, але ви вважаєте, що при відкритті цих портів OUTPUT може виникнути занепокоєння щодо безпеки? Дякую
anthony01

1
Більшість брандмауерів, включаючи практично всі коробки в стилі SOHO, дозволяють не обмежувати вихідні з'єднання. Зазвичай люди не мають вимоги обмежувати вихідний трафік. Але це залежить від ваших вимог. Ваша існуюча програма не дозволяє користувачам на відповідній робочій станції переглядати Інтернет. Якщо це вам потрібно зробити, ви не можете використовувати це рішення на базі iptables, оскільки це призводить до дозволу перегляду веб-сторінок.
Селада

І якщо намір заблокувати веб-перегляд, це все одно неправильний інструмент. Використання NetFilter / IPTables для блокування всіх вихідних з'єднань, щоб запобігти перегляду веб-сторінок, як використання базуки для відкриття волоського горіха. Вам потрібен прозорий веб-проксі, який буде вести журнал про неналежне використання, дозволяючи переглядати робочі місця для авторизованих користувачів.
Магеллан

Після годин пошуку ця відповідь нарешті допомогла мені вирішити проблеми з власним локальним сервером. Що б я не робив, весь вихідний трафік був заблокований, поки я явно не дозволив з'єднання DNS через порт 53. Хоча це має сенс, оскільки мій менеджер пакунків скаржився, що він не може вирішити хости.
Цибуля
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.