如果宅|网络工程师培训

Shell 脚本实现iptables添加域名黑白名单

如果宅|网络工程师培训 http://www.ifzhai.com 2019-04-17 09:01 出处:网络 编辑:PinG
使用前因:         笔者公司的linux服务器中病毒,之前一直采用在出口防火墙限制该服务器对外网的访问,后来此服务器对外网访问的需求越来越大,每次都需要网络人员在防火
(如果本文中的图片看不清,可按住键盘Ctrl键+鼠标滚轮上键)


使用前因:

        笔者公司的linux服务器中病毒,之前一直采用在出口防火墙限制该服务器对外网的访问,后来此服务器对外网访问的需求越来越大,每次都需要网络人员在防火墙上进行设置。后来为了简化,采用服务器iptables控制,但由于操作人员对linux并不太熟悉,所以采用脚本的方式傻瓜化执行白名单。


1、域名白名单。

a、由于iptables 只能对IP进行控制,所以想控制对外访问的域名,还是要将域名转换为IP,这里我们新建脚本 getip.sh

Shell 脚本实现iptables添加域名黑白名单

#!/bin/bash

function gethostip(){

result=`dig +short $1 | awk 'NR==1{print $0}'`

url=$1

#echo $result

num=`echo $result | grep -E "^(([0-2]*[0-9]+[0-9]+)\.([0-2]*[0-9]+[0-9]+)\.([0-2]*[0-9]+[0-9]+)\.([0-2]*[0-9]+[0-9]+))$" | wc -l`

#echo $num


if [ $num -eq 0 ];then

#echo "This is CNAME"

gethostip $result

else

dig +short $url

fi

}

gethostip $1


b、赋予getip.sh 执行权限,为了简便,我这里使用 chmod 777 getip.sh 命令。执行脚本测试一下 

./getip.sh www.baidu.com

Shell 脚本实现iptables添加域名黑白名单

c、新建脚本yuming.sh ,对getip.sh脚本进行进一步的格式化和iptables命令执行

Shell 脚本实现iptables添加域名黑白名单

a=/ip/getip.sh

b=`$a $1 | sed -n '1p'`

c=`$a $1 | sed -n '2p'`

d=`$a $1 | sed -n '3p'`

e=`$a $1 | sed -n '4p'`

iptables -I OUTPUT 1 -d $b -j ACCEPT

iptables -I OUTPUT 1 -d $c -j ACCEPT

iptables -I OUTPUT 1 -d $d -j ACCEPT

iptables -I OUTPUT 1 -d $e -j ACCEPT


这里的b/c/d/e函数是因为有的域名解析出来可能对应4个IP,我们这里以4个IP为最大值进行配置,如有需求可以自行修改条目。

给yuming.sh 赋予执行权限,为了简便,我这里使用chmod 777 yuming.sh命令。

测试一下

先查看一下当前iptables表项

Shell 脚本实现iptables添加域名黑白名单

然后添加www.baidu.com白名单

./yuming.sh www.baidu.com

发现www.baidu.com对应的IP 已经添加到iptables中了。

Shell 脚本实现iptables添加域名黑白名单


2、IP白名单

新建ip.sh脚本

iptables -I OUTPUT 1 -d $1 -j ACCEPT

保存退出,赋予权限 为了简单直接 chmod 777 ip.sh

然后测试 ./ip.sh 223.5.5.5

即可

这个比较简单不过多讲解。

这个也可以直接用于域名白名单,(比如 ./ip.sh www.baidu.com)比第一种方法简单,第一种方法主要记录获取IP的过程。


====================================================================

修改:在yuming.sh和ip.sh脚本的最后应该加上 service iptables save

进行配置保存。完整代码如下

yuming.sh

a=/ip/getip.sh

b=`$a $1 | sed -n '1p'`

c=`$a $1 | sed -n '2p'`

d=`$a $1 | sed -n '3p'`

e=`$a $1 | sed -n '4p'`

iptables -I OUTPUT 1 -d $b -j ACCEPT

iptables -I OUTPUT 1 -d $c -j ACCEPT

iptables -I OUTPUT 1 -d $d -j ACCEPT

iptables -I OUTPUT 1 -d $e -j ACCEPT

service iptables save


ip.sh

iptables -I OUTPUT 1 -d $1 -j ACCEPT

service iptables save



(转载请注明出处:如果宅www.ifzhai.com)

0