[适用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") - 更新规则成功"
注意事项
- 规则顺序:ptables 的-A 参数能保证插入的规则在 规则集的最下面,需要确认规则是否能生效
- Hackl0us/GeoIP2-C 项目仅支持IPV4 ,笔者也正在寻找IPV6的解决方法
- 对OpenWrt端口转发的规则不生效,只能拦截针对OpenWrt的扫描行为(效果甚微)