##########################
## IP白名单(iptables + ipset :允许国内ip + 自定义ip 访问系统udp端口)
##########################
1、安装 ipset
yum install ipset
#创建china 国内ip集
ipset create china hash:net hashsize 10000 maxelem 1000000
#查看china 国内ip集
ipset list china
2、
添加国内ip集合
mkdir /var/ipset/ #创建目录
touch /var/ipset/callcenter.zone #创建callcenter.zone(自定义ip集存放文件)
#上传本地国内ipset集合china.zone
#上传脚本文件
ipset_china.sh #更新加载国内ip集
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
cd /var/uncall/ipset/
#加载内部ipset
for i in `cat china.zone`
do
ipset add china $i
done
#更新国内ip集合
rm cn.zone -f
wget http://www.ipdeny.com/ipblocks/data/countries/cn.zone
for i in `cat cn.zone`
do
ipset add china $i
done
upIpsetFornSql.php #加载callcenter数据库数据到callcenter.zone
略
check_callcenter_ipset.sh #加载callcenter数据库数据到callcenter.zone(调用upIpsetFornSql.php),并同步callcenter.zone 到callcenter的ip集
#!/bin/bash
####
#同步数据库的ip集到/var/uncall/ipset/callcenter.zone;更新ipset中callcenter的ip集
####
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
package=/var/uncall/ipset/callcenter.zone
# 检测的文件是否变化
# 记录 md5值的文件
md5=package_md5
# 创建新的md5信息
package_md5_new=$(md5sum -b $package | awk '{print $1}'|sed 's/ //g')
# 创建md5的函数
function creatmd5()
{
echo $package_md5_new > $md5
}
#同步callcenter数据库中的ip集到 /var/uncall/ipset/callcenter.zone
/var/uncall/ipset/upIpsetFornSql.php
# 判断文件是否存在
if [ ! -f $md5 ] ; then
echo "md5file is not exsit,create md5file......."
creatmd5
exit
fi
# 读取旧的md5信息
package_md5_old=$(cat $md5|sed 's/ //g')
echo $package_md5_new
echo $package_md5_old
# 判断callcenter.zone是否变化,变化则更新callcenter的ip集
if [ "$package_md5_new" == "$package_md5_old" ];then
echo "md5 is not changed"
else
echo "md5 is changed"
creatmd5
ipset destroy callcenter
ipset create callcenter hash:net hashsize 10000 maxelem 1000000
for i in `cat /var/uncall/ipset/callcenter.zone`
do
ipset add callcenter $i
done
fi
#修改执行权限
chmod +x ipset_china.sh upIpsetFornSql.php check_callcenter_ipset.sh
3、
开机启动:开机加载china 国内ip集
/var/ipset/ipset_china.sh > /dev/null &
定时脚本: 同步呼叫中心ip集(每分钟同步一次);联网更新国内ip集(每天23:59更新)
* * * * * root /var/ipset/check_callcenter_ipset.sh > /dev/null &
59 23 * * * root /var/ipset/ipset_china.sh > /dev/null &
4、创建基本iptables规则
vim /etc/sysconfig/iptables
*filter
-A INPUT -p udp -m set --match-set china src -j ACCEPT
-A INPUT -p udp -m set --match-set callcenter src -j ACCEPT
-A INPUT -p udp -j DROP
COMMIT
5、导入表iptables_white.sql;上传web文件;配置菜单
略
6、重启iptables 、 crond
service iptables restart
service crond restart
参考链接: