Правило iptables, щоб дозволити весь вихідний трафік локального походження?


11

Мені було цікаво, чи може хтось допомогти мені з таким правилом iptables:

Ми хотіли б дозволити БУДЬ-ЯКОГО та ВСІХ локальних джерел (як на сервері, на якому працює iptables)

DNS, HTTP тощо ... все це. Потрібно дозволити будь-яке з'єднання, ініційоване сервером, на якому працює iptables.

В даний час ми використовуємо в основному політику OUTPUT за замовчуванням, ACCEPT. Це правильно? Вхідні дані заблоковані, тому я припускаю, що це означає, що підключення (крім тих, які ми дозволяємо) не можна запустити, оскільки вони будуть відкинуті, перш ніж наша сторона може вдарити до політики виходу?

Вибачте, мої навички iptables слабкі;)

Дякую вам

Відповіді:


26

Для цього вам потрібно два правила:

iptables -I OUTPUT -o eth0 -d 0.0.0.0/0 -j ACCEPT
iptables -I INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Деякі примітки.

  • Існуючі правила, які, можливо, у вас є, можливо, це вже роблять, але виглядають інакше.
  • Це використовує -Iдля того, щоб змусити ці правила бути першими. iptablesправила оцінюються зверху вниз.
  • Значення " -oта" -iпрапори означають відповідно "out" та "in". Замініть eth0відповідну назву інтерфейсу Ethernet.

у нас обоє :) я не зміг згадати 2-й, тому що, як я сказав ... мої навички iptables - слабкий соус. дякую за роз’яснення :)
анонімно-один

2
-d 0.0.0.0/0є зайвим і не потрібним.
zapstar

Чудова відповідь. Але зараз я можу пінг-сервер, і я не розумію, чому. Ви можете пояснити?
Даніель

@Daniel Тому що якщо ви дозволите лише вихідний трафік, відповідь ping потрапить до фільтра пакетів, коли він досягне вашого хоста. Щоб цього не допустити, потрібно також дозволити вхідний трафік, пов'язаний з тим самим сеансом, як і пов'язаний з будь-яким вихідним трафіком. Іншими словами, оскільки відповідь ping пов'язана із запитом ping, її слід дозволити. Якщо є вхідний запит ping, а вихідний ping не записаний у сесійну таблицю, тоді вхідний пакет буде видалений. Сподіваюся, що це має сенс!
bahamat

@bahamat: Після повторного спроби я виявив, що потрібно чітко дозволити рух icmp. І я говорив про можливість пінг-сервера, де я реалізував правила, наведені вище. Неможливо відтворити його до речі. Можливо, я десь помилився. Все одно, дякую.
Даніель

0

В даний час ми використовуємо в основному політику OUTPUT за замовчуванням, ACCEPT.

Цього достатньо для OUTPUT, оскільки Netfilter не потребує спеціальних правил, щоб розпочати відстеження станів.

Але якщо ви хочете відфільтрувати вхідний трафік відповідно до політики " заперечення за замовчуванням ", це можна зробити з переключенням INPUT-chain на DROP:iptables -P INPUT DROP

Після цього все було б встановлено лише з двома правилами :

iptables -A INPUT -j ACCEPT -i lo
iptables -A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED

Зверніть свою увагу на правило, що дозволяє вхідний трафік через інтерфейс зворотного зв'язку - як я зазначив у своєму блозі, розміщуючи повідомлення " Мінімальний брандмауер для кінцевого користувача ", якщо це прямо не дозволено, трафік зворотного зв'язку не буде оброблятися "встановленою" перевіркою стану порівняно з поверненням трафік над, скажімо, eth0.

Щоб цей мінімальний набір правил завантажений " як і " без втручання в правила, які вже можуть бути там, зручно використовувати iptables-restoreв SHELL-сесії:

lptables-restore <<__EOF__
-P INPUT DROP
-A INPUT -j ACCEPT -i lo
-A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED
__EOF__

Перш ніж це зробити, переконайтеся, що ви не перервете власне мережеве з'єднання 1 , хоча вже відкриті сесії SSH повинні продовжувати працювати нормально, спроби відкрити нові не спрацюють.

__

  1. Звичайно, ви можете додати інші правила, щоб дозволити такі з'єднання. Це може бути настільки просто, як просто -A INPUT -j ACCEPT -p tcp --dport 22- тут не потрібно повозитися -m state. Також не забудьте виправити lptables-restoreназад, iptables-restoreперш ніж спробувати;)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.