SSLH: Transparent Proxy, правила iptables, ip

Продолжаю настраивать vds, столкнулся с небольшой проблемой.

Установлен и настроен sslh всё работает, но программы не видят внешний IP соединений.

Например:
➤[Connected 23 Feb 2020, 09:11:18]
Last login: Sun Feb 23 08:13:05 2020 from 127.0.0.1
[[email protected] ~]$

В документации есть инструкция, необходимо применить следующие правила (сразу пишу с поправкой на свои реалии):
sudo iptables -t mangle -N SSLH
sudo iptables -t mangle -A  OUTPUT --protocol tcp --out-interface ens3 --sport 22 --jump SSLH
sudo iptables -t mangle -A OUTPUT --protocol tcp --out-interface ens3 --sport 443 --jump SSLH
sudo iptables -t mangle -A SSLH --jump MARK --set-mark 0x1
sudo iptables -t mangle -A SSLH --jump ACCEPT
sudo ip rule add fwmark 0x1 lookup 100
sudo ip route add local 0.0.0.0/0 dev lo table 100

После применения последней команды - сервер перестаёт принимать соединения.
Подозреваю, что нужно как-то поменять ранг таблицы или прописать как-то ип, но для меня маршрутизация - это тёмный лес, прошу вашей помощи.

Перед всеми действиями конфигурация сервера такая:
$ ip rule list
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default
$sudo iptables-save
*nat
:PREROUTING ACCEPT [8076:453873]
:INPUT ACCEPT [705:37884]
:OUTPUT ACCEPT [842:52367]
:POSTROUTING ACCEPT [176:9152]
-A POSTROUTING -o ens3 -j MASQUERADE
COMMIT
*filter
:INPUT DROP [7241:407167]
:FORWARD ACCEPT [44705:57871270]
:OUTPUT ACCEPT [288283:318921775]
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8388 -j ACCEPT
-A INPUT -p udp -m udp --dport 3963 -j ACCEPT
-A INPUT -p udp -m udp --dport 8388 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wg0 -j ACCEPT
COMMIT


$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP group default qlen 1000
    link/ether 52:54:00:02:48:4a brd ff:ff:ff:ff:ff:ff
    inet <my_IP_is_here>/24 brd <IP_gate_is_here> scope global ens3
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe02:484a/64 scope link
       valid_lft forever preferred_lft forever
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq state UNKNOWN group default qlen 100
    link/none
    inet 10.8.0.1/24 brd 10.8.0.255 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::be2c:6fd5:223b:842e/64 scope link stable-privacy
       valid_lft forever preferred_lft forever
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 10.66.66.1/24 scope global wg0
       valid_lft forever preferred_lft forever
    inet6 fd42:42:42::1/64 scope global
       valid_lft forever preferred_lft forever
Nebulosa
сервер перестаёт принимать соединения
По ssh не подключается?
Ошибки в тексте-неповторимый стиль автора©
Не подключается к порту 443, за которым спрятано несколько сервисов.

К порту 80, например, подключение идёт, всё ок.
Nebulosa
ну так всё правильно, вы просто не читали буквы?)

The firewalling tables also need to be adjusted as follow. The example connects to HTTPS on 4443 – adapt to your needs ; I don’t think it is possible to have httpd listen to 443 in this scheme – let me know if you manage that:

Note that these rules will prevent from connecting directly to ssh on the port 22, as packets coming out of sshd will be tagged. If you need to retain direct access to ssh on port 22 as well as through sslh, you can make sshd listen to 22 AND another port (e.g. 2222), and change the above rules accordingly.
Ошибки в тексте-неповторимый стиль автора©
То ли лыжи не едут... (с)

Текст перевёл через переводчик еще раз, может я что-то упустил, но нет, вроде всё как и прочитал с первого раза..

Еще, раз. У меня SSH доступен через порт 443. Через этот же порт работает openvpn. Все стандартные порты этих сервисов закрыты, открыт только 443. Всё работает, только сервисы видят соединение как внутреннее.

Применяю правила по инструкции (указывая при этом ens3 и порт 443), порт 443 перестаёт отвечать - SSH не соединяется, openvpn не работает.

Что я пропустил?..
Nebulosa
У меня SSH доступен через порт 443
бывает...

p.s. если вы хотите поизвращаться то более правильно взять взять домен, организовать десяток поддоменов на все случаи.
и организовать реверсивное proxy на nginx(ну или apache наверно тоже можно...) на разных поддоменнах.
можно даже локальные порты не занимать если использовать сокеты ещё красивее получится)

p.p.s. хотя с точки зрения стабильности, если ляжет nginx ляжет всё, но для вас это не критично...

p.p.p.s. секундочку, а смысл от sslh если у вас и так всё на одном порту весит?))
это вы наверно по умолчанию зачем-то в ssh указали 443, а в openvpn можно вроде указывать конструкцию что бы он был с чем-то на одном порту.
Ошибки в тексте-неповторимый стиль автора©
Подожду ещё ответы на, вроде бы, конкретный вопрос...
indeviral
p.p.p.s. секундочку, а смысл от sslh если у вас и так всё на одном порту весит?))
это вы наверно по умолчанию зачем-то в ssh указали 443, а в openvpn можно вроде указывать конструкцию что бы он был с чем-то на одном порту.

У меня там не только ssh и openvpn. 4 сервиса.

Почему вообще sslh - данная конфигурация свела на нет брутфорсы. Ранее штатно работал sshguard, но правила iptables и логи росли в арифметической прогрессии. После 4500 permban ip за набранных всего за пару месяцев установил это решение. Ну и плюс удобно прятать сервисы, если вы понимаете о чём я.
Nebulosa
Подожду ещё ответы на, вроде бы, конкретный вопрос…
Так я же вам написал ответ? Какой вам ещё нужен?
Нужен другой порт для sslh либо для ssh(в вашем случаи), ну и отдельный порт для openvpn.
ссылка, может так понятнее?
Ошибки в тексте-неповторимый стиль автора©
В общем, помедитировал ещё раз над всеми инструкциями, но ситуация не поменялась.

Понял, что проблема была в правиле:
sudo iptables -t mangle -A OUTPUT --protocol tcp --out-interface ens3 --sport 443 --jump SSLH

Насколько я понял, если есть несколько сервисов, то тут нужно прописать порты их всех, т.е, для SSH и Openvpn надо прописать:

sudo iptables -t mangle -A  OUTPUT --protocol tcp --out-interface ens3 --sport 22 --jump SSLH
sudo iptables -t mangle -A  OUTPUT --protocol tcp --out-interface ens3 --sport 1194 --jump SSLH

Но всё равно не помогло (остальные правила тоже прописал).

indeviral
Так я же вам написал ответ? Какой вам ещё нужен?
Нужен другой порт для sslh либо для ssh(в вашем случаи), ну и отдельный порт для openvpn.
Продолжаю продолжать... Все сервисы занимают свои порты (ssh - 22, openvpn 1194 и пр). Эти порты извне закрыты, наружу торчит только 443 (sslh) который уже работает с запросами. Всё настроено, всё работает, за исключением того, что все подключения (ip) сервисы видят как внутренние.
indeviral
ссылка, может так понятнее?
Схема хорошая, только у меня один хост, без роутера, sslh висит на 443 порту. Мне не нужен tsl доступ к серверу, так что у меня нет конфликта за порт 443. Моя схема в три раза проще, одинаковое лишь то, что каждый сервис на своём порту висит.
 
Зарегистрироваться или войдите чтобы оставить сообщение.