如何用CentOS iptables阻止IP

要使用 CentOS 的 iptables 阻止特定 IP 地址,可以按照以下步骤操作。请注意,执行这些命令需要具有 root 权限或使用 sudo

1. 阻止单个 IP 地址

临时阻止(重启后失效):

sudo iptables -A INPUT -s 192.168.1.100 -j DROP

说明:

  • -A INPUT:在 INPUT 链追加规则。
  • -s 192.168.1.100:指定要阻止的源 IP 地址。
  • -j DROP:丢弃匹配的数据包。

永久阻止(重启后仍然有效):

CentOS 7 及以上版本使用 firewalld 作为默认防火墙,推荐使用 firewalld 来管理防火墙规则。如果需要使用 iptables 持久化规则,可以安装 iptables-services 并保存规则。

# 安装 iptables-services
sudo yum install iptables-services

# 启动并启用 iptables 服务
sudo systemctl start iptables
sudo systemctl enable iptables

# 添加规则
sudo iptables -A INPUT -s 192.168.1.100 -j DROP

# 保存规则
sudo service iptables save

对于 CentOS 6 或其他不支持 iptables-services 的版本,可以使用 service iptables save 命令,但具体方法可能因系统而异。

2. 阻止多个 IP 地址

临时阻止:

sudo iptables -A INPUT -s 192.168.1.100 -j DROP
sudo iptables -A INPUT -s 192.168.1.101 -j DROP
sudo iptables -A INPUT -s 192.168.1.102 -j DROP

使用通配符或范围(例如,阻止 192.168.1.100 到 192.168.1.110):

sudo iptables -m iprange --src-range 192.168.1.100-192.168.1.110 -j DROP

3. 阻止整个子网

临时阻止:

sudo iptables -A INPUT -m iprange --src-range 192.168.1.0-192.168.1.255 -j DROP

4. 查看当前的 iptables 规则

sudo iptables -L -n -v

5. 删除已添加的规则

如果需要删除特定的规则,可以使用 iptables -D 命令。例如,删除阻止 192.168.1.100 的规则:

sudo iptables -D INPUT -s 192.168.1.100 -j DROP

6. 使用 firewalld 进行更灵活的管理(推荐)

firewalld 提供了更直观和动态的方式来管理防火墙规则,并支持区域(zone)的概念。

查看 firewalld 状态:

sudo firewall-cmd --state

查看所有开放端口:

sudo firewall-cmd --list-all

阻止单个 IP:

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" reject'

重新加载 firewalld 配置:

sudo firewall-cmd --reload

删除规则:

sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.100" reject'

注意事项

  1. 备份现有规则: 在修改 iptables 规则之前,建议备份当前的规则,以便在需要时恢复。

    sudo iptables-save > /etc/iptables/rules.v4
    
  2. 顺序重要性: iptables 规则是按顺序匹配的,确保更具体的规则放在前面,以避免被更通用的规则覆盖。

  3. 测试规则: 在应用规则后,使用 pingtelnet 等工具测试目标 IP 是否已被成功阻止。

  4. 权限: 修改 iptables 规则通常需要 root 权限,确保使用 sudo 或以 root 用户身份执行相关命令。

  5. 持久化方法: 不同的 CentOS 版本可能有不同的持久化方法,推荐使用 firewalld 进行管理,尤其是在 CentOS 7 及以上版本中。

通过以上步骤,您应该能够在 CentOS 系统中使用 iptables 或 firewalld 成功阻止指定的 IP 地址。如有进一步的问题,欢迎继续提问!