在Linux系统中,指定IP访问是提升服务器安全性的重要手段,可防止未授权访问、抵御网络攻击,并精确控制服务访问权限,以下是三种主流实现方法,根据实际需求选择:
使用iptables防火墙(推荐)
原理:通过内核级防火墙规则过滤流量,支持端口级控制。
适用场景:全局网络访问控制(如SSH、Web服务)。
操作步骤:
-
允许特定IP访问SSH(22端口)
sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 22 -j DROP # 禁止其他IP访问
-
允许IP段访问Web服务(80端口)
sudo iptables -A INPUT -p tcp --dport 80 -s 192.168.1.0/24 -j ACCEPT
-
保存规则(避免重启失效)
sudo iptables-save > /etc/iptables/rules.v4 # Debian/Ubuntu sudo service iptables save # CentOS/RHEL
验证命令:sudo iptables -L -n -v
注意:错误配置可能导致无法远程连接,建议先在本地测试。
通过TCP Wrappers(hosts.allow/hosts.deny)
原理:基于服务的轻量级访问控制,依赖libwrap库(如sshd, vsftpd)。
适用场景:支持TCP Wrappers的服务。
操作步骤:
-
编辑配置文件
sudo nano /etc/hosts.deny
添加:
ALL: ALL # 默认拒绝所有访问
-
添加允许的IP
sudo nano /etc/hosts.allow
按需添加规则:
sshd: 192.168.1.100 # 允许单个IP访问SSH vsftpd: 192.168.1.0/24 # 允许IP段访问FTP
生效方式:规则实时生效,无需重启服务。
验证:尝试从非授权IP访问服务(如ssh user@服务器IP
)。
服务自身配置(以Nginx/SSH为例)
Nginx指定IP访问
sudo nano /etc/nginx/sites-available/default
在server
段添加:
location / { allow 192.168.1.100; allow 10.0.0.0/8; deny all; # 拒绝其他IP }
重启服务:sudo systemctl restart nginx
SSH服务指定IP
sudo nano /etc/ssh/sshd_config
添加:
AllowUsers *@192.168.1.100 # 仅允许该IP登录AllowGroups admin@192.168.1.0/24
重启服务:sudo systemctl restart sshd
注意事项
- 优先级问题
- iptables规则自上而下匹配,首条匹配规则生效。
- TCP Wrappers中
hosts.allow
优先级高于hosts.deny
。
- 备份配置
修改前备份文件(如cp /etc/iptables/rules.v4 ~/backup/
)。 - 多级防护
重要服务建议组合使用iptables+服务配置(如Nginx+iptables)。 - IPv6支持
iptables需用ip6tables
,TCP Wrappers支持IPv6地址格式(如[2001:db8::1]
)。
常见问题解决
- 误封自己IP:通过本地控制台删除规则或使用IP白名单工具临时解锁。
- 服务不生效:
- 检查服务是否支持TCP Wrappers:
ldd /usr/sbin/sshd | grep libwrap
。 - 确认iptables未禁用(
systemctl status iptables
)。
- 检查服务是否支持TCP Wrappers:
- 规则冲突:使用
iptables -L --line-numbers
查看规则顺序,必要时调整。
引用说明参考Linux官方文档(iptables、TCP Wrappers)及Nginx/OpenSSH配置手册,确保方法可靠性,实际部署请结合系统版本测试(如CentOS 7+或Ubuntu 20.04+)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/8902.html