Linux系统中,限制IP登录是增强服务器安全性的重要措施之一,通过限制特定IP地址或IP范围的访问,可以有效防止未经授权的访问和潜在的安全威胁,以下是几种在Linux中限制IP登录的常用方法:
使用/etc/hosts.allow
和/etc/hosts.deny
文件
这种方法基于TCP封装(TCP Wrappers)机制,适用于多种服务,包括SSH。hosts.allow
文件中的规则优先级高于hosts.deny
。
-
白名单方式:只允许特定IP或IP段登录
- 编辑
/etc/hosts.allow
文件,添加允许的IP或IP段,允许168.0.1
和168.0.10
登录:sshd: 192.168.0.1, 192.168.0.10
- 或者允许
168.0.0/24
网段的所有IP登录:sshd: 192.168.0.
- 在
/etc/hosts.deny
文件中,可以设置拒绝所有其他IP:sshd: ALL
- 编辑
-
黑名单方式:拒绝特定IP登录
- 在
/etc/hosts.deny
文件中,添加需要拒绝的IP,拒绝168.0.1
登录:sshd: 192.168.0.1
- 在
修改/etc/ssh/sshd_config
文件
通过配置SSH服务的配置文件,可以更灵活地控制IP访问。
-
AllowUsers:允许特定用户从特定IP登录
- 允许用户
username
从168.0.100
和168.0.101
登录:AllowUsers username@192.168.0.100 username@192.168.0.101
- 也可以使用通配符,例如允许
username
从168.0.
登录:AllowUsers username@192.168.0.
- 允许用户
-
DenyUsers:拒绝特定用户从任何IP登录
- 拒绝用户
zhangsan
和aliyun
登录:DenyUsers zhangsan aliyun
- 拒绝用户
-
PermitRootLogin:限制root用户登录
- 禁止root用户通过密码登录,但允许使用密钥登录:
PermitRootLogin without-password
- 完全禁止root用户登录:
PermitRootLogin no
- 禁止root用户通过密码登录,但允许使用密钥登录:
使用防火墙工具(如iptables
或firewalld
)
防火墙是控制网络访问的强大工具,可以基于IP地址、端口等条件进行精细化控制。
-
iptables
- 允许特定IP访问SSH端口(22):
iptables -A INPUT -p tcp --dport 22 -s 192.168.0.100 -j ACCEPT
- 拒绝特定IP访问SSH端口:
iptables -A INPUT -p tcp --dport 22 -s 192.168.0.101 -j REJECT
- 保存规则并重启服务:
iptables-save > /etc/iptables/rules.v4 systemctl restart iptables
- 允许特定IP访问SSH端口(22):
-
firewalld
- 允许特定IP访问SSH端口:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.100" port protocol="tcp" port="22" accept' firewall-cmd --reload
- 拒绝特定IP访问SSH端口:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.101" port protocol="tcp" port="22" reject' firewall-cmd --reload
- 允许特定IP访问SSH端口:
结合多种方法
在实际场景中,可以结合多种方法来实现更严格的IP访问控制。
- 使用
/etc/hosts.allow
和/etc/hosts.deny
文件进行初步过滤。 - 通过
sshd_config
文件进一步限制用户和IP。 - 使用防火墙工具阻止未授权的IP访问。
注意事项
- 规则顺序:在
iptables
中,规则的顺序非常重要,先匹配的规则会优先执行。 - 权限:修改系统配置文件和防火墙规则通常需要root权限。
- 测试:在应用新规则后,务必进行测试,确保合法用户可以正常访问,而非法用户被正确阻止。
以下是一个简单的对比表格,归纳了上述方法的特点:
方法 | 优点 | 缺点 |
---|---|---|
/etc/hosts.allow |
简单易用,无需重启服务 | 规则不够灵活,适用于少量IP |
/etc/hosts.deny |
简单易用,无需重启服务 | 规则不够灵活,适用于少量IP |
/etc/ssh/sshd_config |
灵活性高,支持用户和IP级别的控制 | 需要重启SSH服务,配置复杂 |
iptables |
功能强大,支持复杂的规则 | 配置复杂,规则顺序重要 |
firewalld |
现代化工具,支持动态规则管理 | 需要熟悉命令行操作 |
FAQs
如何允许整个子网访问SSH?
- 在
/etc/hosts.allow
文件中,可以使用通配符,允许168.0.
子网的所有IP访问:sshd: 192.168.0.
- 或者在
sshd_config
中使用AllowUsers
:AllowUsers user@192.168.0.
如何临时允许一个被拒绝的IP访问?
- 如果使用
iptables
或firewalld
,可以直接添加一条允许规则,使用iptables
:iptables -I INPUT -p tcp --dport 22 -s 192.168.0.101 -j ACCEPT
- 如果使用
/etc/hosts.deny
,可以将该IP从黑名单中移除,或者在/etc/hosts.allow
中
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/54587.html