在Debian服务器上实现屏蔽过滤海外IP来源
编辑
24
2025-01-29
在Debian服务器上实现该需求,可通过iptables
+ipset
方案实现。以下是分步指南:
一、基础环境准备
# 安装依赖
sudo apt update
sudo apt install -y iptables ipset curl
# 创建ipset集合(中国IP段)
sudo ipset create china hash:net
二、获取中国IP段列表
# 下载最新中国IP段(示例来源,需确认可用性)
sudo curl -k -L http://www.ipdeny.com/ipblocks/data/countries/cn.zone |\
xargs -I {} sudo ipset add china {}
建议通过cron每周自动更新:
# 创建更新脚本 /usr/local/bin/update_china_ipset.sh
#!/bin/bash
URL="http://www.ipdeny.com/ipblocks/data/countries/cn.zone"
TMPFILE=$(mktemp)
curl -k -s -L $URL > $TMPFILE
if [ -s "$TMPFILE" ]; then
ipset flush china
grep -v '^#' $TMPFILE | xargs -I {} ipset add china {}
fi
rm -f $TMPFILE
# 添加可执行权限
sudo chmod +x /usr/local/bin/update_china_ipset.sh
# 每周自动更新
echo "0 3 * * 1 root /usr/local/bin/update_china_ipset.sh" | sudo tee /etc/cron.d/update_china_ipset
三、配置防火墙规则
默认模式(允许所有访问)
# 清空现有规则
sudo iptables -F
# 创建专用链
sudo iptables -N GEO_BLOCK
# 基础规则:允许中国IP(永久放行)
sudo iptables -A INPUT -m set --match-set china src -j ACCEPT
# 本地回环和已建立连接放行
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 其他流量转入GEO_BLOCK链
sudo iptables -A INPUT -j GEO_BLOCK
# 默认模式:GEO_BLOCK链允许所有(海外可访问)
sudo iptables -A GEO_BLOCK -j ACCEPT
# 保存规则(安装iptables-persistent)
sudo apt install -y iptables-persistent
sudo netfilter-persistent save
防御模式脚本 /usr/local/bin/enable_geo_block.sh
#!/bin/bash
# 清空GEO_BLOCK链
sudo iptables -F GEO_BLOCK
# 设置防御规则:
# 1. 拒绝所有ICMP(包括ping)
sudo iptables -A GEO_BLOCK -p icmp --icmp-type echo-request -j DROP
# 2. 拒绝其他所有协议
sudo iptables -A GEO_BLOCK -j DROP
# 保存配置
sudo netfilter-persistent save
恢复默认脚本 /usr/local/bin/disable_geo_block.sh
#!/bin/bash
# 清空GEO_BLOCK链
sudo iptables -F GEO_BLOCK
# 恢复允许所有
sudo iptables -A GEO_BLOCK -j ACCEPT
# 保存配置
sudo netfilter-persistent save
四、使用说明
日常模式:所有IP均可访问
sudo /usr/local/bin/disable_geo_block.sh
防御模式:仅允许中国IP+拒绝海外ping
sudo /usr/local/bin/enable_geo_block.sh
五、验证测试
# 查看当前规则
sudo iptables -L -n -v
# 查看ipset内容
sudo ipset list china
注意事项
SSH保护:建议在
iptables
中添加SSH端口白名单,避免误封sudo iptables -I INPUT -p tcp --dport 22 -j ACCEPT
应急恢复:若配置错误导致失联,可通过服务商控制台的VNC登录恢复。
性能优化:ipset使用哈希存储,对性能影响极小,可支持百万级IP段。
数据源可靠性:建议使用官方IP分配数据(如APNIC),本文示例数据源可能需要替换。
- 0
- 0
-
分享