Як дозволити вихідний SMTP на iptables Debian Linux


13

Якщо я вирішу дозволити увесь трафік у ланцюзі OUTPUT ( iptables -P OUTPUT ACCEPT), відправляється пошта штрафу. Як тільки я замикаю свій сервер із цими правилами, вихідна пошта перестає працювати. Хоча все інше працює, що дивно.

Хтось бачить тут щось, що не моє відправляти пошту? Я наткнувся, переглядав ці правила знову і знову і спробував безліч різних версій.

 iptables -F
 iptables -P INPUT DROP
 iptables -P FORWARD DROP
 iptables -P OUTPUT DROP


 iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

 iptables -A INPUT  -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A INPUT  -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A INPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
 iptables -A OUTPUT -p tcp --dport 587 -j ACCEPT

 iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 587 -j ACCEPT

 iptables -A OUTPUT  -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

 iptables -A OUTPUT  -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A INPUT  -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

 iptables -A INPUT -i lo -j ACCEPT
 iptables -A OUTPUT -o lo -j ACCEPT

 iptables -A OUTPUT -p udp  --dport 53 -j ACCEPT
 iptables -A INPUT -p udp  --sport 53 -j ACCEPT

 iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
 iptables -A INPUT -p tcp --dport 443 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT


 iptables -N LOGGING
 iptables -A INPUT -j LOGGING
 iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
 iptables -A LOGGING -j DROP

Відповіді:


18

У вас є правило випускати трафік, але ви не маєте права дозволяти зворотний трафік.

Я здогадуюсь, що ви мали на меті використовувати ці 2 правила -A INPUT:

iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 587 -j ACCEPT

Однак використання вихідного порту як методу дозволу зворотного трафіку є поганим способом захисту системи. Все, що хтось повинен зробити, це використовувати один з цих вихідних портів, і ваш набір правил брандмауера стає марним.

Набагато кращою ідеєю було б видалити всі -A INPUT ... --sportправила і використовувати замість цього єдине правило:

iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Як працює це правило, це те, що коли ваша система здійснює вихідне з'єднання, ядро ​​записує з'єднання в таблицю відстеження. Потім, коли пакети з віддаленої системи повертаються, він переглядає, чи пов'язані ці пакети з будь-якими з'єднаннями в таблиці відстеження. Біт є той , який дозволяє трафік , безпосередньо пов'язаний з сесією. Це будуть пакети TCP, що повертаються в потоці. The
ESTABLISHED
RELATEDбіт дозволяє отримувати трафік, пов’язаний із з'єднанням, але не є частиною самого з'єднання. Це можуть бути такі речі, як пакети ICMP, як-от "ICMP не може фрагментувати". Ці пакети не є частиною потоку TCP, але життєво важливі для збереження потоку живим (що також є іншим, що ваш набір правил не охоплює, і без якого ви побачите незвичайні проблеми з з'єднанням і втрати).

Це правило також працює для трафіку UDP, але оскільки UDP без громадянства, це не зовсім те саме. Натомість ядро ​​має відслідковувати пакети UDP, які виходять, і просто передбачає, що коли пакети UDP повертаються назад у тій же комбінації хост / порт, і це пов'язано за короткий проміжок часу.


Дякую за відповідь. Я думаю, я не хочу впускати трафік назад, тому що я здійснюю лише вихідне SMTP-з'єднання? Думав, якби я додав правило до ланцюга INPUT, тоді я дозволяв би повернути SMTP. Це веб-сервер, який просто повинен підключитися до зовнішнього хоста SMTP, щоб надіслати пошту .... thx!
916 Мережі

Якщо ви не впустите зворотний трафік назад, як ваша система буде отримувати всі повідомлення "так, я отримав ваші дані", якими користуються протоколи TCP та SMTP?
Патрік

Що має сенс. Я щойно додав ваше правило, і воно повністю спрацювало. Я ціную відповідь! Я намагався проголосувати, але каже, що мені не вистачає репутації (нове для Unix StackExchange)
916 Networks

Я додав пояснення, як це правило працює.
Патрік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.