[适用OpenWrt] 通过iptables实现防火墙拦截境外ipv4流量

[适用OpenWrt] 通过iptables实现防火墙拦截境外ipv4流量

vate_room 50 2024-06-25

[适用OpenWrt] 通过iptables实现防火墙拦截境外ipv4流量

github仓库:

https://github.com/vatebur/GeoIP2_For_Firewall

创建规则集合

ipset create china_ips hash:net

创建对应的iptables跪着

iptables -A INPUT -4 -m set --match-set china_ips src -j ACCEPT
iptables -A INPUT -4 -j DROP

编写自动更新脚本

#!/bin/bash

# 在OpenWrt的防火墙 - 自定义规则添加
# iptables -A INPUT -4 -m set --match-set china_ips src -j ACCEPT
# iptables -A INPUT -4 -j DROP

#添加集合
#ipset create china_ips hash:net


#URL="https://raw.githubusercontent.com/Hackl0us/GeoIP2-CN/release/CN-ip-cidr.txt"
URL="https://cdn.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/CN-ip-cidr.txt"
V_IPSET_NAME=china_ips
DESTINATION="/root"


# 下载中国IP段数据
curl -LR -f -o "$DESTINATION/CN-ip-cidr.txt" "$URL"
if [ $? -ne 0 ]; then
        echo "$(date +"%Y-%m-%d %H:%M:%S") - 下载URL失败" >> $DESTINATION/log
        exit 1
fi
# 清空现有的ipset集合
ipset flush china_ips

# 添加自定义规则
#ipset add china_ips 192.168.xx.xx/24


# 将新的IP地址导入到ipset集合
while read -r line; do
    ipset add $V_IPSET_NAME $line
done < ~/CN-ip-cidr.txt

echo "$(date +"%Y-%m-%d %H:%M:%S") - 更新规则成功"

注意事项

  1. 规则顺序:ptables 的-A 参数能保证插入的规则在 规则集的最下面,需要确认规则是否能生效
  2. Hackl0us/GeoIP2-C 项目仅支持IPV4 ,笔者也正在寻找IPV6的解决方法
  3. 对OpenWrt端口转发的规则不生效,只能拦截针对OpenWrt的扫描行为(效果甚微)