Зменшіть правила брандмауера наполовину - на одне правило iptables для tcp та udp


12

У мене на брандмауері є ряд правил iptables, які виглядають так:

iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT

Чи є ярлик для наявності двох правил - одне для tcp і одне для udp - для кожної адреси? Я можу сказати, чи можу я зробити щось подібне:

iptables -A zone_lan_forward -p tcp,udp -d 1.2.3.0/24 -j ACCEPT

Відповіді:


22

Створіть новий ланцюжок, який прийме будь-які пакети TCP та UDP, і перейдіть до цього ланцюжка з окремих дозвольних правил IP / порту:

iptables -N ACCEPT_TCP_UDP
iptables -A ACCEPT_TCP_UDP -p tcp -j ACCEPT
iptables -A ACCEPT_TCP_UDP -p udp -j ACCEPT

iptables -A zone_lan_forward -d 1.2.3.0/24 -j ACCEPT_TCP_UDP

Це додає накладні витрати на кілька зайвих рядків, але вдвічі зменшує кількість правил TCP / UDP.

Я б не опустив цей -pаргумент, тому що ви не тільки відкриваєте брандмауер для ICMP, але і будь-який інший протокол. З сторінки man iptables на -p:

Зазначений протокол може бути одним з tcp, udp, icmp або всім, або він може бути числовим значенням, що представляє один з цих протоколів або інший. Ім'я протоколу з / etc / протоколів також дозволено.

Ви не можете слухати на будь-яких протоколів TCP, UDP і ICMP , за винятком прямо зараз , але хто знає , що майбутнє може тримати. Було б поганою практикою залишати брандмауер відкритим без потреби.

Відмова: Команди iptables від верхньої частини моєї голови; У мене немає доступу до коробки, на якій можна перевірити їх банкомат.


Це дуже елегантне рішення, яке не залишає брандмауер відкритим без потреби.
Big McLargeHuge

4
Але цей спосіб створення нової ланцюга не вдасться, якщо фільтрація буде виконана через номер порту призначення. Хтось може підказати, як подолати вищезгадану проблему?
Амор

@Amor У цьому прикладі, якщо ви використовували -p allвсі --dportправила zone_lan_forwardланцюга, це може досягти того, що ви шукаєте. Звичайно, я припускаю, що немає іншого способу потрапити на цей ланцюг за допомогою протоколу, який не є TCP / UDP ACCEPT_TCP_UDP. Очевидно, це ризикована стратегія, якщо кілька людей мають доступ до зміни правил, а хтось підходить і редагує ваші правила, не розуміючи цієї тонкощі.
Семюел Хармер

Ооопс. Не помітили замовлення ланцюгів. Вам також потрібно змінити порядок ланцюгів у цьому прикладі для того, що я нещодавно сказав, що працює належним чином. Тож ACCEPT_TCP_UDPстрибки, до zone_lan_forwardяких потім стрибає ACCEPT.
Семюел Хармер

2

Якщо вам не дуже важливий трафік ICMP (який ви можете заблокувати в усьому світі за допомогою правила), ви можете просто опустити прапор -p, і він охопить усі протоколи.


Чи варто дбати про трафік ICMP? Мене найбільше хвилює доступ до HTTP.
Big McLargeHuge

Не зовсім. Ви можете заблокувати ICMP (ping), якщо ви хочете, але оскільки він обслуговує HTTP-трафік все одно, немає великого сенсу.
Натан С

@NathanC, я думаю, що порада відкрити ВСІ порти, коли ОП запитує, як зменшити вдвічі його правила, може призвести до неприємностей зараз чи в майбутньому.
Джед Даніельс

@JedDaniels перемикач -p вказує протоколи, а не порти. Відповідь нижче має альтернативу, якщо вони хочуть заблокувати щось, крім tcp & udp.
Натан С

@NathanC Так, і видалення -p означає "відкрити всі протоколи, а не лише tcp або udp", що є необачним, якщо не небезпечним.
Джед Даніельс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.