Назад | Перейти на главную страницу

Правило перенаправления Shorewall работает только для некоторых хостов в одной сети

Я пытаюсь использовать Shorewall's REDIRECT действие для перехвата трафика, предназначенного для порта 514 брандмауэра (TCP и UDP) на порт 5000 (также TCP и UDP), при этом также разрешая прямой трафик на последний порт. (Причины не важны, но краткая версия состоит в том, что мы запускаем агрегатор журналов как непривилегированный пользователь, но демон не поддерживает удаление привилегий root, поэтому он не может прослушивать привилегированные порты; в то же время у нас есть много более старых реализаций системного журнала, которые не позволяют отправлять на альтернативные порты.)

Помимо самого брандмауэра, определены 3 зоны: loc (10.0.0.0/8), dmz (172.16.0.0/16) и net (все остальное); последний существует в первую очередь для того, чтобы запретить / отбросить все из «ненадежных» сетей.

Соответствующие правила выглядят так:

#ACTION         SOURCE          DEST            PROTO   DEST
#                                                       PORT
SECTION NEW
REDIRECT:info   loc             5000            tcp,udp 514
REDIRECT:info   dmz             5000            tcp,udp 514
ACCEPT:info     loc             $FW             tcp,udp 5000
ACCEPT:info     dmz             $FW             tcp,udp 5000

Все идет нормально. (Существуют и другие правила, такие как разрешение подключений SSH и HTTP, но это единственные правила, относящиеся к портам 514 или 5000.) Политика по умолчанию: REJECT для loc и dmz, и DROP для сети.

Проблема в том, что у меня очень много случаев отклонения хостов, в то время как соседние хосты в той же сети перенаправляются и принимаются. Например, 172.16.0.194 настолько быстро загружает сообщения в наш агрегатор, насколько это возможно, но 172.16.0.166 отклоняет все пакеты. Аналогичным образом 10.140.88.150 принимается, а 10.192.253.4 отклоняется. Вот примеры сообщений системного журнала для последней пары:

Shorewall:loc_dnat:REDIRECT:IN=eth0 OUT= MAC=/*anon*/:08:00 SRC=10.140.88.150 DST=10.1.25.14 LEN=134 TOS=0x00 PREC=0x00 TTL=253 ID=9092 PROTO=UDP SPT=62162 DPT=514 LEN=114
Shorewall:loc2fw:REJECT:IN=eth0 OUT= MAC=/*anon*/:08:00 SRC=10.192.253.4 DST=10.1.25.14 LEN=164 TOS=0x00 PREC=0x00 TTL=254 ID=58464 PROTO=UDP SPT=514 DPT=514 LEN=144

Что мне интересно, так это то, что примеров успешного REDIRECTs в моем журнале (например, только 1 для этого хоста), несмотря на то, что хосты успешно отправляют тысячи и тысячи сообщений, тогда как кажется, что REJECT строка для каждого сообщения, которое отправляет отклоненный хост. Также интересно, что для многих хостов, которые сейчас отклоняются, они перенаправлялись и принимались вплоть до перезапуска брандмауэра, когда мы пытались добавить новое правило (указанное правило с тех пор было удалено, но у нас все еще есть те же проблемы. ). Все текущие сообщения поступают по UDP, но правила должны работать для обоих протоколов.

(Также интересно то, что использование tcpdump, Я вижу, что ответы ICMP «порт недоступен» отправляются некоторым отклоненным хостам, но не отправляются другим. Я понятия не имею, что это значит.)

Моя теория заключается в том, что сообщения от отклоненных хостов по какой-то причине рассматриваются как часть ESTABLISHED или RELATED подключение по iptables и поэтому не сопоставляются ни с чем в SECTION NEW; однако это единственный раздел, где REDIRECT или DNAT правила могут быть установлены, так что если это проблема, я не знаю, как ее решить. (Я также не знаю, как подтвердить или опровергнуть эту теорию.)

Я пробовал использовать DNAT (с участием $FW::5000 в DEST столбец) вместо REDIRECT, однако результаты были идентичны. Я также пробовал добавить ACCEPT правила для порта 514, но это не повлияло на то, кто или не был перехвачен REDIRECT правила.

Как мне настроить Shorewall так, чтобы правильно перенаправлять все подключения к заданному порту из указанных сетей (зон), а не только кажущиеся случайными хосты в них?