使用iptables防火墙拒绝国外IP/屏蔽国外IP访问服务器

  1. 下载IP地址段文件 访问网址 http://www.ipdeny.com/ipblocks/data/countries/cn.zone ,另存为国内IP地址段,然后将文件上传到服务器; 也可以直接在服务器上执行如下命令直接下载文件到服务器:
wget http://www.ipdeny.com/ipblocks/data/countries/cn.zone
  1. 使用以下脚本将cn.zone中的IP地址添加到iptables规则中:
#!/bin/bash
# 清空已有规则
iptables -F
iptables -X

# 设置默认策略为拒绝所有入站流量
iptables -P INPUT DROP
iptables -P FORWARD DROP

# 设置默认策略为允许所有出站流量
iptables -P OUTPUT ACCEPT

# 允许来自本地回环接口的数据包
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# 允许已建立的连接和相关数据包通过
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 读取 cn.zone 文件,将其中的 IP 地址添加到防火墙规则中
while read ip; do
  iptables -A INPUT -s $ip -j ACCEPT
done < cn.zone

# 保存 iptables 规则
iptables-save > /etc/iptables/rules.v4
  1. 运行脚本,将IP地址添加到iptables规则中:
chmod +x add_blocked_ips.sh
./add_blocked_ips.sh
  1. 重启iptables服务以应用新规则:
service iptables restart
  1. 要在每次重启服务器时自动运行上述规则,你可以将脚本添加到系统的启动脚本中。

    • 创建一个名为 iptables_china.sh 的文件,并将上述脚本内容复制到其中。

    • 使用文本编辑器打开 /etc/sysconfig/network-scripts/ifcfg-eth0 文件(假设你使用的是 eth0 网络接口,如果不是,请替换为正确的接口名称)。

    • ONBOOT 参数后面添加以下行,以在网络接口启动之前运行脚本:

      pre-up /path/to/iptables_china.sh
    • 保存并关闭文件。

    • 为脚本添加可执行权限:

      chmod +x /path/to/iptables_china.sh
    • 重启网络服务或重启服务器以应用更改:

      systemctl restart network
      # 或者
      reboot