最近公司要求IPtables规则指定一台动态IP服务器通过访问,也就是一台动态IP的服务器可以通过访问另外一台服务器,通过设置来提高公司服务器的安全指数。由于服务器的IP是动态变动的,当在IPtables规则指定它的IP时,第二天动态IP地址又变了需要手动更改很麻烦,所以如何确定这台动态IP服务器的IP地址以及如何将确定好IP地址自动添加到IPtables规则中允许它访问本机服务器并crontab定时执行脚本,下面我将脚本和步骤贴出来提供网友们参考。
思路:将域名绑定动态IP,通过脚本解析域名获得动态IP地址,其次将获得IP地址自动替换到iptables当中(这个替换过程会有判断是否为最新的动态IP地址才执行),然后将解析域名获得动态IP地址保存到一个文件当中做替换判断,最后重启iptables服务生效。
第一步、创建sh文件
#vi abc.sh
脚本如下:
#!/bin/sh
ADDR=szy8706.xicp.net
T=`ping ${ADDR} -c 1 | sed '1{s/[^(]*(//;s/).*//;q}'`
echo ${T}
cat /root/1.txt | while read l
do
echo "$l"
if [ $T != $l ]; then
sed -i "s/${l}/${T}/g" /etc/sysconfig/iptables
sed -i "s/.*/${T}/g" /root/1.txt
/etc/init.d/iptables restart
fi
done
注解:
ADDR=szy8706.xicp.net 这里是绑定的域名(自己可以申请花生壳免费域名)
T=`ping ${ADDR} -c 1 | sed '1{s/[^(]*(//;s/).*//;q}'` 这里解析获取域名IP赋值给T
echo ${T} 输出查看确认IP--可以删除这条
cat /root/1.txt | while read l 获取文件中旧IP给变量l
echo "$l" 输出查看确认旧IP--可以删除这条
if [ $T != $l ]; then IF判断变量T值不等于变量l值,符合if条件就执行
sed -i "s/${l}/${T}/g" /etc/sysconfig/iptables 将文件iptables的变量l的值替换成变量T的值
sed -i "s/.*/${T}/g" /root/1.txt 将变量T值保存到1.txt文档当中做下次if判断
第二步、创建1.txt文件(保存旧IP)
#vi 1.txt (注意:这里的IP地址要和iptables里面IP相同)
210.154.365.77
第三步、修改iptables
清除原有规则
#iptables -F 清除预设表filter中的所有规则链的规则
#iptables -X 清除预设表filter中使用者自定链中的规则
#/etc/init.d/iptables save 保存清除规则配置
#/etc/init.d/iptables restart 重启iptables服务
#iptables -L -n 查看iptables规则
#vi /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp -m multiport --dports 22,3307,5000 -m state --state NEW -j ACCEPT
-A INPUT -s 210.154.365.77 -j ACCEPT
-A OUTPUT -s 210.154.365.77 -j ACCEPT
-I INPUT -s 101.19.20.155 -p tcp -m state --state NEW -m tcp -m multiport --dports 80,8080 -j ACCEPT
-A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT
-A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j ACCEPT
-A FORWARD -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT
COMMIT
第五步、crontab定时设置
#crontab -e (10分,*时,*日,*月,*星期,/iptables.sh运行命令)
10 * * * * /root/abc.sh
通过以上脚本和iptables、crontab设定就完成了SHELL脚本设置IPtables规则指定动态IP服务器通过访问。