Я пытаюсь использовать 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
Что мне интересно, так это то, что примеров успешного REDIRECT
s в моем журнале (например, только 1 для этого хоста), несмотря на то, что хосты успешно отправляют тысячи и тысячи сообщений, тогда как кажется, что REJECT
строка для каждого сообщения, которое отправляет отклоненный хост. Также интересно, что для многих хостов, которые сейчас отклоняются, они перенаправлялись и принимались вплоть до перезапуска брандмауэра, когда мы пытались добавить новое правило (указанное правило с тех пор было удалено, но у нас все еще есть те же проблемы. ). Все текущие сообщения поступают по UDP, но правила должны работать для обоих протоколов.
(Также интересно то, что использование tcpdump
, Я вижу, что ответы ICMP «порт недоступен» отправляются некоторым отклоненным хостам, но не отправляются другим. Я понятия не имею, что это значит.)
Моя теория заключается в том, что сообщения от отклоненных хостов по какой-то причине рассматриваются как часть ESTABLISHED
или RELATED
подключение по iptables и поэтому не сопоставляются ни с чем в SECTION NEW
; однако это единственный раздел, где REDIRECT
или DNAT
правила могут быть установлены, так что если это проблема, я не знаю, как ее решить. (Я также не знаю, как подтвердить или опровергнуть эту теорию.)
Я пробовал использовать DNAT
(с участием $FW::5000
в DEST
столбец) вместо REDIRECT
, однако результаты были идентичны. Я также пробовал добавить ACCEPT
правила для порта 514, но это не повлияло на то, кто или не был перехвачен REDIRECT
правила.
Как мне настроить Shorewall так, чтобы правильно перенаправлять все подключения к заданному порту из указанных сетей (зон), а не только кажущиеся случайными хосты в них?