我是那个问复杂问题的人,没有看到简单的答案。
为了快速解释,我有一堆服务器(在debian 9上),有2个物理networking接口,一个前端(用于应用程序)和一个后端(用于pipe理目的)。 因为我想locking一切,我决定拒绝ssh从前端界面访问服务器,而对于“其他”的原因,不能只是阻止端口22.复杂的部分是,我不能只是把ip地址在sshd config(ListenAddress)中的服务器后端networking,因为ip是dynamic的。
我没有在网上find任何东西只是说ssh“只使用该接口”,所以现在我做了一个脏的修复sshd服务的systemd启动,看起来像这样:
[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
的重要组成部分。 它基本上用sshd启动之前的eth1接口的实际ipreplacesshd config中的ip。 我真的不喜欢那个,想知道是否有一个“更清洁”的方式。
我什么都不知道,用我的玩具来操作,所以如果这很愚蠢的话,我很抱歉失去了时间。 我更像是一个pipe理员,也是一个法国人,对于你stream血的眼睛感到抱歉。
谢谢阅读 !
为什么不在调用sshd
时使用-oListenAddress=<ipaddress>
?
可以用来给出configuration文件中使用的格式的选项。 这对于指定没有单独的命令行标志的选项很有用。 有关选项的详细信息及其值,请参见sshd_config(5)
我同意你应该绑定到你想听的地址。 但是,如果这不是一个解决scheme,你可以尝试iptables:
iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j DROP
我不是100%肯定有关的语法,因为我通常不做原始iptables,但我敢肯定有人会指出我的错误。