Назад | Перейти на главную страницу

Разрешить доступ по ssh через один порт Ethernet

Я тот парень, который задает сложные вопросы и не видит простого ответа.

Чтобы быстро объяснить, у меня есть несколько серверов (на Debian 9) с двумя физическими сетевыми интерфейсами, интерфейс (для приложения на нем) и сервер (для целей администрирования). Поскольку я хочу заблокировать все, я решаю отказать в доступе по ssh к серверу из внешнего интерфейса, и по «другой» причине не могу просто заблокировать порт 22. Сложность в том, что я не могу просто поставить ip внутренней сети сервера в конфигурации sshd (ListenAddress), потому что ip преднамеренно динамические.

Я не нашел ничего в сети, чтобы просто сказать ssh «используйте только этот интерфейс», так что прямо сейчас я сделал грязное исправление при запуске systemd службы sshd, которое выглядело так:

[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=AdmNetIp=$(echo `ifconfig eth1 2>/dev/null|awk '/inet / {print $2}'`); sed -i "s/\(^#\)\{0,1\}ListenAddress .*/ListenAddress $AdmNetIp/" /etc/ssh/sshd_config
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify

[Install]
WantedBy=multi-user.target
Alias=sshd.service

Важная часть ExecStartPre. он в основном заменяет ip в конфигурации sshd на фактический ip интерфейса eth1 перед запуском sshd. Мне это действительно не нравится, и я хотел бы знать, есть ли более «чистый» способ.

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

Спасибо за прочтение !

Почему бы просто не использовать -oListenAddress=<ipaddress> при звонке sshd?

Может использоваться для указания параметров в формате, используемом в файле конфигурации. Это полезно для указания параметров, для которых нет отдельного флага командной строки. Для получения полной информации о параметрах и их значениях см. sshd_config (5)

Я согласен, что вам, вероятно, следует просто привязать к адресам, которые вы хотите слушать. Но если это не решение, вы можете попробовать iptables:

iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

Я не уверен на 100% в синтаксисе, так как обычно я не использую raw iptables, но уверен, что кто-то укажет на мои ошибки.