Сократите правила брандмауэра вдвое - одно правило 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
Big McLargeHuge
источник

Ответы:

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, но и любой другой протокол. Из справочной страницы iptables -p:

Указанный протокол может быть одним из tcp, udp, icmp или all или может представлять собой числовое значение, представляющее один из этих протоколов или другой. Имя протокола из / etc / protocol также разрешено.

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

Отказ от ответственности: команды iptables находятся на моей голове; У меня нет доступа к ящику для проверки их банкомата.

s.co.tt
источник
Это очень элегантное решение, которое не оставляет брандмауэр открытым без необходимости.
Big McLargeHuge
4
Но этот метод создания новой цепочки потерпит неудачу, если фильтрация выполняется по номеру порта назначения. Кто-нибудь может подсказать, как преодолеть вышеуказанную проблему?
Amor
@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», что безрассудно, если не опасно.
Джед Дэниелс