Intereting Posts
Grub2 потерян в новой установке Linux-дистрибутива Проблемы с отправкой X11 – неправильная аутентификация Действительно ли `dd` действительно необходимо клонировать диск? Различные сайты на разных интерфейсах с использованием агрегации ссылок Как я могу полностью * стереть метаданные MP3? Помощь с предоставлением групповых разрешений другим файлам пользователя Печать эха в файле и запрос параллельно Что искать в файлах журналов, если я думаю, что ограниченная память или дисковое пространство вызывает сбой Способ перечислить все запущенные шины сеанса dbus? Почему файлы, созданные через Samba, получают разные разрешения ACL (маска) в зависимости от клиентской ОС? PulseAudio в Debian 9: Как настроить уровень громкости звука по умолчанию? Выйдите из php-скрипта, но сохраните его Что установлено как / on initramfs, когда указанный корень недоступен? Можно ли перенаправить системные звуковые сигналы на обычный звук? Выполнение команд после событий, основанных на событиях

iptables localhost redirect просто повторяет

Я пытаюсь перенаправить трафик, поступающий из Интернета, в туннель SSH на локальном хосте с iptables порт 2025. По какой-то причине redirect не работает.

Я подключился к нему через telnet и он почему-то отсылает ответ, но не показывает баннер с SMTP-сервера, на который он перенаправляется. Если я использую telnet в системе, это redirect включено, на порт 2025 я немедленно получаю приветствие от SMTP-сервера.

Подключение из внешнего мира и нажатие случайных клавиш:

 $ telnet infantile.xyz 25 Trying 94.156.189.160... Connected to infantile.xyz. Escape character is '^]'. cfvghnjdfghdfgh 

Это эхом отдает случайные ключи.

Подключение к системе, где происходит redirect, показывает, как я хочу, чтобы все работало для посторонних в Интернете …

 # telnet localhost 2025 Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 infantile.xyz ESMTP Postfix (Debian/GNU) 

Мой iptables выглядит следующим образом:

 Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 252M 124G ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 270K 16M ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 308 12340 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID 8988 612K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 8 ctstate NEW 2277K 462M UDP udp -- * * 0.0.0.0/0 0.0.0.0/0 ctstate NEW 3204K 147M TCP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x17/0x02 ctstate NEW 2277K 462M REJECT udp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 2914K 130M REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with tcp-reset 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-proto-unreachable Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 1855 packets, 447K bytes) pkts bytes target prot opt in out source destination Chain TCP (1 references) pkts bytes target prot opt in out source destination 22104 1144K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 4976 265K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 2585 145K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 95 4836 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:587 Chain UDP (1 references) pkts bytes target prot opt in out source destination 

Правила NAT для этого набора правил, в котором я создал redirect:

 Chain PREROUTING (policy ACCEPT 3813 packets, 465K bytes) pkts bytes target prot opt in out source destination 2954 174K DNAT tcp -- * * 0.0.0.0/0 94.156.189.0/24 tcp dpt:25 to:127.0.0.1:2025 Chain INPUT (policy ACCEPT 3 packets, 110 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 6798 packets, 408K bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 11177 packets, 583K bytes) pkts bytes target prot opt in out source destination 

Странно, что он принимает соединение и отображает эхо, но никак не отвечает, что служба на другом конце (postfix) могла бы.

Изначально я настроил iptables с помощью этого руководства: https://wiki.archlinux.org/index.php/simple_stateful_firewall

Вот что я пытался использовать для перенаправления:

 iptables -t nat -I PREROUTING -i eth0 -p tcp -d 94.156.189.160 --dport 25 -j DNAT --to-destination 127.0.0.1:2025 

Я включил следующие параметры sysctl:

 net.ipv4.conf.all.forwarding = 1 net.ipv4.conf.all.route_localnet = 1 

Чтобы перенаправить порт через этот брандмауэр, вам потребуются некоторые правила iptables в цепочке TCP и изменение политики цепочки FORWARD .

Форвардная цепочка должна быть на приёмке:

 # iptables -P FORWARD ACCEPT 

Вы должны разрешить redirect порта и его цели:

 # iptables -A TCP -p tcp --dport 25 -j ACCEPT # iptables -A TCP -p tcp --dport 2025 -j ACCEPT 

Это правило POSTROUTING …

 # iptables -t nat -A POSTROUTING -j MASQUERADE # iptables -t nat -I PREROUTING -i eth0 -p tcp -d 94.156.189.160 --dport 25 -j DNAT --to-destination 127.0.0.1:2025 

С этими правилами iptables теперь перенаправляет входящие пакеты через порт 25 в туннель SSH на локальный хост-порт 2025. Правило маскарада позволяет пакетам возвращаться обратно.