使用iptables或firewalld可限制IP访问,如iptables -A INPUT -s 192.168.1.100 -p tcp –dport 22 -j DROP禁止SSH访问,firewalld通过rich rule拒绝指定IP,也可通过/etc/hosts.deny限制服务级访问。
在Linux系统中,可以通过防火墙工具来限制某个IP访问特定服务。最常用的方式是使用 iptables 或 firewalld。以下是具体操作方法。
使用 iptables 限制IP访问
iptables 是 Linux 内核中强大的网络包过滤工具,可以直接控制进出系统的网络流量。
假设要禁止 IP 地址 192.168.1.100 访问本机的 SSH 服务(端口 22),可以执行以下命令:
- 禁止特定IP访问指定端口:
iptables -A INPUT -s 192.168.1.100 -p tcp –dport 22 -j DROP - 允许特定IP访问(白名单):
iptables -A INPUT -s 192.168.1.100 -p tcp –dport 22 -j ACCEPT - 查看当前规则:
iptables -L -n -v - 删除规则(例如删除INPUT链第3条规则):
iptables -D INPUT 3
注意:DROP 表示直接丢弃数据包,对方无响应;REJECT 会返回拒绝信息。
使用 firewalld 限制IP(适用于CentOS/RHEL/Fedora)
firewalld 是动态防火墙管理工具,支持区域(zone)概念,便于管理不同来源的访问策略。
将特定IP加入受信任区域之外,或直接拒绝其访问:
- 拒绝某个IP访问所有服务:
firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4″ source address=”192.168.1.100″ reject’ - 拒绝某个IP访问特定端口(如22):
firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4″ source address=”192.168.1.100″ port protocol=”tcp” port=”22″ reject’ - 重新加载配置:
firewall-cmd –reload - 查看已添加的规则:
firewall-cmd –list-all
通过服务自身配置限制(如SSH)
某些服务支持在配置文件中设置访问控制,例如SSH服务可通过 /etc/hosts.deny 和 /etc/hosts.allow 控制。
- 编辑文件 /etc/hosts.deny,添加:
sshd: 192.168.1.100 - 若要允许某些IP,可在 /etc/hosts.allow 添加:
sshd: 192.168.1.50
注意:/etc/hosts.allow 优先级高于 .deny 文件。
基本上就这些常用方法。选择哪种方式取决于你使用的系统和防火墙工具。iptables 更底层灵活,firewalld 更适合动态管理,服务级限制则适用于特定场景。关键是确保规则生效并测试效果,避免误封自己。不复杂但容易忽略。