Вопрос или проблема
У меня есть сервер, который получает трафик syslog. Многие мои устройства могут отправлять трафик только на порт по умолчанию udp/514. Мой сервер syslog не может работать на портах <1024 и работает на 5000. У меня есть NAT PREROUTING REDIRECT на системе, и это работает отлично.
У меня есть несколько контроллеров Aruba, которые я хочу направить на другой порт. Я пытаюсь перенаправить пакеты с исходным адресом 10.5.5.0/24 на порт 5008. Вот полная конфигурация.
*mangle
:PREROUTING ACCEPT [53851:21198923]
:INPUT ACCEPT [53851:21198923]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1227:8988526]
:POSTROUTING ACCEPT [1227:8988526]
COMMIT
# Завершено в Thu Sep 30 14:52:43 2021
# Сгенерировано iptables-save v1.8.4 в Thu Sep 30 14:52:43 2021
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -s 10.5.5.0/24 -p udp -m udp --dport 514 -j REDIRECT --to-ports 5008
-A PREROUTING -p udp -m udp --dport 514 -j REDIRECT --to-ports 5000
COMMIT
# Завершено в Thu Sep 30 14:52:43 2021
# Сгенерировано iptables-save v1.8.4 в Thu Sep 30 14:52:43 2021
*filter
:INPUT ACCEPT [53852:21199096]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1234:8990186]
-A INPUT -s 10.0.0.0/8 -p udp -m udp --dport 514 -j ACCEPT
COMMIT
Перенаправление на udp/5000 работает отлично, но всё перенаправляется на 5000. Трафик Aruba с 10.5.5.0/24 не перенаправляется на udp/5008.
Если я выполняю команду:
iptables -t nat -L -n -v --line-number
. Это подтверждает, что ноль байт попадает на Линию 1, и всё попадает на Линию 2.
Я считаю, что порядок важен, и более специфичная строка должна быть выше общей (как показано выше). Я пытался поменять их местами, но это не помогло.
Syslog на UDP является однонаправленным и не имеет состояния, поэтому вы думаете, что это будет самый простой NAT в мире.
Кто-нибудь делал такую конфигурацию? Это всё на одной машине, и я просто пытаюсь отделить мои входящие сообщения Aruba syslog от всех остальных.
Спасибо!
Перенаправление порта 514 на 5000 и его работа на локальной машине
Если вы создаете правило iptables на вашем сервере syslog, используйте следующую команду:
iptables -t nat -A OUTPUT -o lo -p tcp --dport 514 -j REDIRECT --to-port 5000
или
iptables -A PREROUTING -t nat -i eth0<Incoming-interface> -p tcp --dport 514 -j REDIRECT --to-port 5000
Перенаправление входящего подключения на другой IP-адрес на определённом порту
Если вы пытаетесь выполнить пересылку портов на другой IP, а ваш сервер (я называю его firewall), который получает UDP/514, находится за клиентом и сервером Syslog, как в сценарии на моём github, вы должны выполнить пересылку порта iptables с тремя шагами:
Простой пример сценария:
| client:10.5.5.0/24 | --> | 10.5.5.1:enp0s8 firewall enp0s3:192.168.2.1 | --> | 192.168.2.2:enp0s3 Syslog |
1- Включите пересылку IP
sudo sysctl -w net.ipv4.ip_forward=1
2- PREROUTING для входящего трафика на firewall
sudo iptables -t nat -A PREROUTING -d 10.5.5.1 -i enp0s8 -p tcp --dport 514 -j DNAT --to-destination 192.168.2.2:5000
3- POSTROUTING для исходящего трафика на сервер Syslog
sudo iptables -t nat -A POSTROUTING -o enp0s3 -p tcp --dport 514 -d 192.168.2.2 -j SNAT --to-source 192.168.2.1
Ответ или решение
Когда речь идет о конфигурации iptables для перенаправления трафика NAT REDIRECT, важно учитывать, как пакетные фильтры и правила NAT могут быть использованы для направления трафика от одного порта к другому. В вашем сценарии, задача заключается в том, чтобы распределять трафик syslog, поступающий на стандартный порт udp/514, на различные порты в зависимости от источника трафика.
Теория
iptables — это утилита командной строки для конфигурирования и поддержания таблиц правил фильтрации пакетов в ядре Linux. Одна из мощных возможностей iptables заключается в способности перенаправления, или NAT (сетевой трансляции адресов), который позволяет изменять адреса, указанные в заголовках IP, для магистрального маршрутизации пакетов с изменением исходного или назначенного адреса.
В контексте NAT, REDIRECT используется для перенаправления входящих подключений к другому локальному порту. Это полезно, когда необходимо, чтобы служба, которая не может принимать соединения через определенные порты, все же могла принимать их за счет перенаправления.
Пример
У вас есть сервер, который принимает syslog трафик, но не может слушать на портах меньше 1024 из-за ограничений Linux. Ваш сервер настроен для прослушивания порта 5000; однако устройства могут отправлять сообщения только на стандартный порт 514. Вы хотите перенаправить весь трафик с устройства на порт 514 к порту 5000, за исключением трафика от Aruba-контроллеров из сетевого диапазона 10.5.5.0/24, который должен направляться к порту 5008.
Ваша текущая конфигурация iptables выглядит следующим образом:
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -s 10.5.5.0/24 -p udp -m udp --dport 514 -j REDIRECT --to-ports 5008
-A PREROUTING -p udp -m udp --dport 514 -j REDIRECT --to-ports 5000
COMMIT
Применение
Первая линия в конфигурации предусматривает перенаправление трафика к порту 5008 именно от адресов, принадлежащих диапазону 10.5.5.0/24. Вторая линия перенаправляет все остальные соединения к порту 5000. Однако ваша проблема заключается в том, что весь трафик перенаправляется только к порту 5000, и нет активности на первой строке.
Возможные причины и решения:
-
Проверка порядка правил: Как вы правильно заметили, порядок правил crucial. Более специфическое правило должно идти до более общего, и у вас это соблюдено.
-
Проверка соответствия правил: Убедитесь, что пакет удовлетворяет всем условиям первого правила. Обычно это происходит из-за того, что iptables имеет сложности с определением правила в том случае, если условия в нем сформулированы неправильно или есть другие правила на других уровнях, которые препятствуют работе данного правила.
-
Ошибки в IP-адресации: Убедитесь, что ваши сетевые настройки соответствуют правилу. Проверьте, что устройства в диапазоне 10.5.5.0/24 действительно отправляют трафик через корректные сетевые пути и что диапазон перекрывается с тем, что вы ожидаете.
-
Спецефика UDP: Поскольку UDP — это протокол без установления соединения, убедитесь, что NAT, который вы используете, применим для UDP, поскольку часто это не так просто, как в случае с TCP.
Для диагностики и исправления проблемы:
- Проверьте ваши сетевые среды на предмет правильности маршрутов и отправку указанных пакетов от 10.5.5.0/24 к конкретным интерфейсам.
- Используйте сетевые сканеры, такие как tcpdump или Wireshark, чтобы увидеть, какая часть правил не выполняется и почему.
- Экспериментируйте с временным добавлением правил логирования в iptables для проверки того, попадают ли пакеты на соответствующие гайки правил.
Эти шаги должны помочь вам завершить настройку. Обеспечив, чтобы правила iptables были правильно сформулированы и применены, вы сможете разрешить ваш трафик на Aruba нацелить на соответствующий порт назначения.