在接口上启用/禁用 OpenSSH 守护进程

在接口上启用/禁用 OpenSSH 守护进程

我有多个网络接口,如以太网、Wifi、WWAN 等。

我想阻止root除以太网接口之外的所有接口上的 SSH 登录。

是否有基于接口的配置sshd,例如 中的某些设置/etc/ssh/sshd_config

我在设置手册中找不到基于界面的设置: https://man.openbsd.org/sshd_config

在我的 WWAN 接口上,我受到了以下入侵者的攻击,我想避免这种情况:

systemd[1]: Condition check resulted in OpenSSH Key Generation being skipped.
systemd[1]: Started OpenSSH Per-Connection Daemon (195.133.18.24:45650).
sshd[704]: Invalid user user from 195.133.18.24 port 45650
sshd[704]: error: Could not get shadow information for NOUSER
sshd[704]: Failed password for invalid user user from 195.133.18.24 port 45650 ssh2
sshd[704]: Received disconnect from 195.133.18.24 port 45650:11: Normal Shutdown, Thank you for playing [preauth]
sshd[704]: Disconnected from invalid user user 195.133.18.24 port 45650 [preauth]
systemd[1]: [email protected]:22-195.133.18.24:45650.service: Succeeded.

答案1

SSH 守护进程是否有可能基于“接口”的配置,例如 /etc/ssh/sshd_config 中的某些设置?

是的,在 /etc/ssh/sshd_config 中,您可以指定 sshd 服务将侦听的接口。该设置称为“ListenAddress”。

如果配置中没有 ListenAddress 设置,则默认为侦听所有本地地址。

不幸的是,该设置不能采用接口名称,但它可以采用接口 IP 地址(和端口)——这可以解决您的问题。例子:

echo "ListenAddress 192.168.55.101:40022" >>/etc/ssh/sshd_config
/etc/rc.d/rc.sshd restart

答案2

使用防火墙规则 – 例如 nftables 或 iptables。 (Firewalld 也可以通过“区域”来做到这一点。)这是最通用的选项; nftables 和 iptables 都支持通配符,并且实际上都阻止连接不正确的接口(与互联网机器人无关,但在防范 wlan0 上的恶意本地用户时可能相关)。

  • 例如,在 nftables 中你可以这样写:

    table inet filter {
        chain input {
            [...]
            tcp dport 22 iifname "eth*" accept
            tcp dport 22 reject
            [...]
        }
    }
    
  • 在iptables.rules文件中,同样是:

    [...]
    -A INPUT -p tcp --dport 22 -i eth+ -j ACCEPT
    -A INPUT -p tcp --dport 22 -j REJECT
    [...]
    

您的系统使用每个连接的 sshd 实例(“inetd 样式”或“套接字激活”),而不是通常的独立守护进程。在这种模式下,监听地址不是由sshd决定,而是由supervisor(超级服务器)决定。

通过 systemd 套接字激活,运行systemctl edit --full sshd.socket以定义监听地址,将现有的 ListenStream= 选项替换为:

[Socket]
ListenStream=192.168.55.101:22

或者,您可以保留全局 ListenStream=,但将套接字仅绑定到特定接口(仅限确切名称,不允许使用通配符):

[Socket]
ListenStream=0.0.0.0:22
ListenStream=[::]:22
BindToDevice=eth0

然后,重新启动sshd.socket以应用更改。

请注意,通常不建议将这种 inetd 模式用于 sshd,因为暴力机器人可能会导致 systemd 的速率限制启动并阻止您建立合法的连接。您应该考虑禁用 sshd.socket 并启用“独立”sshd.service。 (这样做之后,监听地址将被/etc/ssh/sshd_config改为控制。)

相关内容