允许单个以太网端口上的 ssh 访问

允许单个以太网端口上的 ssh 访问

我就是那种总是问复杂问题却找不到简单答案的人。

简单解释一下,我有一堆服务器(在 Debian 9 上),带有 2 个物理网络接口,一个前端(用于其上的应用程序)和一个后端(用于管理目的)。因为我想锁定所有内容,所以我决定拒绝从前端接口对服务器的 ssh 访问,并且由于“其他”原因,不能只阻止端口 22。复杂的部分是,我不能只将服务器后端网络的 IP 放在 sshd 配置(ListenAddress)中,因为 IP 是故意动态的。

我在网上没有找到任何可以告诉 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 接口的实际 ip 替换 sshd 配置中的 ip。我真的不喜欢那样,想知道是否有“更干净”的方法。

我真的什么都不懂,而且总是玩弄超出我能力范围的东西,所以如果这只是很愚蠢的话,我很抱歉浪费了时间。我更像是一个修补匠,而不是管理员……也是法国人,很抱歉你的眼睛流血了。

谢谢阅读 !

答案1

为什么不直接使用-oListenAddress=<ipaddress> 当调用sshd

可用于以配置文件中使用的格式提供选项。这对于指定没有单独命令行标志的选项很有用。有关选项及其值的完整详细信息,请参阅sshd_配置(5)

答案2

我同意你应该只绑定到你想要监听的地址。但如果这不是解决方案,你可以尝试 iptables:

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

我对语法不是 100% 确定,因为我通常不做原始 iptables,但我确信有人会指出我的错误。

相关内容