一、只允许指定网段连接ssh端口
这里提供3种方法:
1. 使用sshd配置,/etc/ssh/sshd_config文件中添加AllowUsers字段;
2. 使用linux系统默认启用的TCP Wrappers(libwrap
)服务,通过编辑系统文件/etc/hosts.allow和/etc/hosts.deny;
3. 使用iptables规则。对于云环境来说,一台主机上会有很多iptables规则,不方便常看,并且也不方便维护。
第一种方法: 编辑 /etc/ssh/sshd_config
文件,添加如下一行
AllowUsers user1@192.168.1.100 user2@192.168.1.101
这意味着只允许来自 192.168.1.100
和 192.168.1.101
的用户分别以 user1
和 user2
登录。
或者,使用 IP 限制不区分用户:
AllowUsers *@192.168.1.100 *@192.168.1.101
第二种方法,利用多数linux系统默认启用的TCP Wrappers(libwrap
)服务,通过编辑系统文件/etc/hosts.allow和/etc/hosts.deny。
1. 打开 /etc/hosts.allow
文件进行编辑
sshd: 192.168.1.0/24 192.168.2.0/24
这行的意思是,允许 192.168.1.0/24
和 192.168.2.0/24
网络段的所有主机通过 SSH 服务连接到本机。保存并退出编辑器。
2. 打开 /etc/hosts.deny
文件进行编辑
sshd: ALL
这行的意思是,默认拒绝所有主机通过 SSH 服务连接到本机。保存并退出编辑器。
配置顺序:/etc/hosts.allow
的规则会覆盖 /etc/hosts.deny
中的规则。所以如果 /etc/hosts.allow
中允许了某些主机连接,即使 /etc/hosts.deny
中拒绝了 ALL
,这些主机也能连接。
你可以为其他服务(如 sshd
)使用类似的方法进行访问控制。如果要控制其他服务的访问,确保服务名称正确。例如,对于 ssh
,你使用的是 sshd
服务名称。
配置完成后不需要重启任何程序,自动生效。
OpenEuler等操作系统没有默认启用 TCP Wrappers(libwrap
)服务。TCP Wrappers 依赖于这两个文件来控制服务的访问,因此如果这些文件不存在,系统就不会使用它们来进行访问控制。需要手动启用 TCP Wrappers。
第三种方法:使用iptables规则来控制 SSH 等服务的访问:
# 允许 192.168.1.0/24 和 192.168.2.0/24 访问 SSH(端口 22)
sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp -s 192.168.2.0/24 --dport 22 -j ACCEPT
# 默认拒绝所有其他 IP 地址访问 SSH
sudo iptables -A INPUT -p tcp --dport 22 -j REJECT
# 保存配置(确保重启后生效)
sudo service iptables save
二、延迟登录
通过 PAM(Pluggable Authentication Modules),可以增加登录延迟,防范暴力破解。编辑 /etc/pam.d/sshd
文件,添加如下内容:
# PAM configuration for the Secure Shell service
# 在认证失败时增加延迟5s
auth required pam_faildelay.so delay=5000000
# 在认证成功后执行 sleep 10,即延迟 10 秒
account required pam_exec.so /bin/sleep 10
三、多次失败尝试后暂时封禁 IP
使用 fail2ban
提高登录安全,配置 fail2ban
,在多次失败尝试后暂时封禁 IP。首先需要安装 fail2ban服务:
sudo apt install fail2ban
然后创建自定义配置文件:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
编辑 jail.local
,启用 sshd
规则:
[sshd]
enabled = true
maxretry = 3
bantime = 10m
findtime = 10m
最后启动该服务:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban