之前用GPT撸的那个UFW脚本,虽然说可用,但是导入大量规则系统占用过多,中国IP范围太大,导致几十个小时都无法完整导入规则。经过搜索,发现可以使用ipset这个工具来创建iptables列表。实现快速导入规则的效果。
shell#!/bin/bash
# 下载中国 IP 列表
wget -O /tmp/chnroute.txt https://raw.githubusercontent.com/mayaxcn/china-ip-list/master/chnroute.txt
# 创建一个名为 china_ips 的 IPSet,用于存储中国 IP 地址
ipset create china_ips hash:net
# 将中国 IP 列表中的 IP 地址添加到 china_ips 中
while IFS= read -r line; do
ipset add china_ips "$line" || true
done < /tmp/chnroute.txt
# 清除现有的 iptables 规则
iptables -F
iptables -X
# 设置默认策略为 DROP
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
#允许SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#放行DNS查询
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
#解决无法访问外网
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# 允许来自中国 IP 地址的访问到 443 端口
iptables -A INPUT -m set --match-set china_ips src -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -m set --match-set china_ips src -p tcp --dport 80 -j ACCEPT
# 保存 iptables 规则
#iptables-save > /etc/iptables/rules.v4
# 清理临时文件
rm /tmp/chnroute.txt
exit 0
将上面的脚本保存到/etc/init.d/
目录中,取名cnipok
,并chmod +x cnipok
添加运行权限
将rc.local
设为开机运行
systemctl enable rc.local
systemctl start rc.local
设置启动项
update-rc.d cnip.sh defaults
删除启动项
update-rc.d -f cnip.sh remove
shell#!/bin/sh
### BEGIN INIT INFO
# Provides: cnip
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: cnip
# Description: cnip
### END INIT INFO
# 下载中国 IP 列表
wget -O /tmp/chnroute.txt https://raw.githubusercontent.com/mayaxcn/china-ip-list/master/chnroute.txt
# 创建一个名为 china_ips 的 IPSet,用于存储中国 IP 地址
ipset create china_ips hash:net
# 将中国 IP 列表中的 IP 地址添加到 china_ips 中
while IFS= read -r line; do
ipset add china_ips "$line" || true
done < /tmp/chnroute.txt
# 清除现有的 iptables 规则
iptables -F
iptables -X
# 设置默认策略为 DROP
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
#允许SSH
iptables -A INPUT -p tcp --dport 22985 -j ACCEPT
#放行DNS查询
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
#解决无法访问外网
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# 允许来自中国 IP 地址的访问到 443 端口
iptables -A INPUT -m set --match-set china_ips src -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -m set --match-set china_ips src -p tcp --dport 80 -j ACCEPT
# 保存 iptables 规则
#iptables-save > /etc/iptables/rules.v4
# 清理临时文件
rm /tmp/chnroute.txt
exit 0