Мы работаем с ПЛК (далее phoenix plc), который подключается к сети profinet (и profibus). Из-за отсутствия инструментов и невозможности перемонтировать вещи в соответствии с нашими потребностями (ПЛК встроен в нашу машину), мы ищем разные способы доступа к некоторому веб-серверу https на мастере profibus.
Итак, с некоторого расстояния у нас есть ПК с Windows. Этот ПК подключен через коммутатор к ПЛК. Этот ПЛК работает на дистрибутиве Linux. ПЛК подключен к ведущему устройству profinet и ведущему устройству profibus.
- WinPC (192.168.192.200)
- Внешний сетевой адаптер ПЛК (192.168.192.202)
- Внутренний сетевой адаптер ПЛК (192.168.2.2)
- Мастер Profinet (192.168.2.3)
- Мастер Profibus (192.168.2.4)
Что было бы совершенно блестящим, если бы мы могли открыть веб-браузер на ПК с Windows и подключиться к мастеру profibus (где ПЛК просто транслировал бы пакеты на мастер profibus).
У меня есть root-доступ к ПЛК, поэтому я подумал, что смогу справиться с этим, используя iptables
. Поскольку мы вообще не заботимся о безопасности, я установил для всех политик принятие (INPUT, OUTPUT, FORWARD). Единственный шаг, который я должен предпринять (наивный я...), - это NAT пакета к месту назначения. К сожалению, это не работает.
мой текущий результат iptables -S
root@axcf3152:/opt/plcnext/# iptables -S
-P ВВОД ПРИНЯТЬ
-P ВПЕРЕД ПРИНЯТЬ
-P ВЫВОД ПРИНЯТЬ
и мой физ стол
root@axcf3152:/opt/plcnext/# iptables -t nat -L
Цепь PREROUTING (политика ПРИНЯТЬ)
целевая защита выбор источника назначения
DNAT icmp -- куда угодно на: 192.168.2.4
DNAT tcp -- в любом месте tcp dpt:6666 to:192.168.2.4:443
DNAT tcp -- в любом месте tcp dpt:5555 to:192.168.2.3:443
DNAT tcp -- в любом месте tcp dpt:4444 to:192.168.2.3:80
DNAT tcp -- в любом месте tcp dpt:3333 to:192.168.2.4:80
DNAT tcp -- в любом месте tcp dpt:6666 to:192.168.2.4:443
В общем, все, что я сделал, кроме установки для всех политик ACCEPT, — это добавил несколько правил для nat:
iptables -t nat -A PREROUTING -p tcp --dport 6666 -j DNAT --назначение 192.168.2.4:443
И то для обоих вкусов (http(80), https(443)), и для profinet master (192.168.2.3) и profibus master (192.168.2.4)
Если я понимаю все, что я прочитал об iptables сегодня вечером, мне не нужно возиться с добавлением правил для таблицы фильтров «ВПЕРЕД», поскольку я принимаю все (очень небезопасно, но нас не волнует эта тестовая установка).
Единственное, в чем я не уверен, так это в том, нужно ли (или когда) мне еще и nat POSTROUTING.
В любом случае, когда я открываю веб-страницу https://192.168.192.202:6666 или любой из его вариантов, страница не может загрузиться (отказано в соединении).
Любая помощь будет ОЧЕНЬ оценена!!
ОБНОВИТЬ:
выдача следующих команд позволяет мне пропинговать мастер profibus (Я ДУМАЮ)
iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT
iptables -t nat -A PREROUTING -p icmp -j DNAT --to-destination 192.168.2.4
iptables -t filter -A FORWARD -p icmp -d 192.168.2.4 -j ПРИНЯТЬ
iptables -t nat -A POSTROUTING -j MASQUERADE
когда я теперь пингую на ПК с Windows до 192.168.192.202, я получаю ответы. я также вижу iptables -t nat -L -v
увеличьте статистику по этому правилу (количество пакетов + байт увеличивается, когда я отправляю новые команды ping).
Я думаю, это доказывает, что мастер profinet отвечает на пинг (поскольку я теперь отклоняю icmp на самом ПЛК)
Вопросы:
- Нужно ли мне правило FORWARD? Или мое предположение было правильным, что я все разрешаю и это правило избыточно?
- Нужно ли добавлять МАСКАРАД? Мне все еще трудно понять, что это на самом деле делает (как и многие другие, судя по количеству вопросов в Интернете)
- Что-то отсутствует в моем эксперименте с iptables, что могло бы объяснить, почему https не перенаправляется? Или все выглядит нормально, и проблема будет в фактическом мастере profibus (а не в размещении там веб-сервера, как утверждает поставщик, например)
ОБНОВЛЕНИЕ2:
Правило icmp работает время от времени. Когда я удаляю все правила из iptables и пытаюсь воспроизвести шаги, у меня не всегда получается. iptables сложнее, чем я думал...