Я тот парень, который задает сложные вопросы и не видит простого ответа.
Чтобы быстро объяснить, у меня есть несколько серверов (на 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, но уверен, что кто-то укажет на мои ошибки.