Я тот парень, который задает сложные вопросы и не видит простой ответ.
Чтобы быстро объяснить, у меня есть группа серверов (на Debian 9) с 2 физическими сетевыми интерфейсами, Поскольку я хочу заблокировать все, я решаю отказать в доступе по 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 =
при вызове 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% в синтаксисе, так как обычно не использую исходные iptables, но я уверен, что кто-то укажет на мои ошибки .