开通防火墙的简单改进 (r6笔记第88天)

今天有个需求是开通防火墙,听起来任务难度不大吧,如果按照客户端和端口来细分,匹配下来需要开通的有近400多台。 所以任务艰巨,关键是提供的列表中含有多个环境的负责人,没有按照环境属主来分,所以如果从列表中一一查找,开通权限,那就得折腾一整天,眼睛熬得通红,而且还没啥技术含量。 而且还有个坑,因为列表中时不时会出来几个unix环境,开通的方式方法又不同,而且之前听说配置有误还导致服务器重启,所以对于unix开通防火墙都是规规矩矩,不敢越雷池一步。

这个时候如果放到批量脚本里,也还是不合适的,因为会有很多的隐患和不明确的地方。

所以拿到列表我没有马上开始忙活开通防火墙的事情,而是先梳理了一下环境。 列表是类似下面的这种格式 第一栏是db的ip 第二栏是需要开通的端口,第三栏是客户端的ip 10.12.5.111 1521 10.27.142.68 10.12.5.111 1528 10.27.142.68 10.12.5.112 1528 10.27.142.68 10.12.5.19 1523 10.12.142.16 10.12.5.23 1523 10.12.142.16 10.16.8.105 1521 10.27.142.68

所以根据提供的3个参数,需要连接到db服务器,然后查看是否有防火墙的配置,如果没有,就需要开通,开通完之后保存防火墙列表。

在细化之前,先看看环境 首先根据关键字solaris得到了相关的Unix列表,假设all.lst里面存放的都是所有服务器的明细信息 sh all.lst|grep -i solari|grep -v \#|awk '{print $1}'|sort|uniq 假设当前得到的列表为aa.lst,用下面的命令就可以发现其实涉及的服务器有大概40多台。 # cat aa.lst|awk '{print $1}'|sort|uniq|wc -l 43 然后用下面的方式得到了相关的服务器列表,类似下面的形式 cat aa.lst|awk '{print $1}'|sort|uniq|sed '/^$/d' 10.12.5.111 10.12.5.112 10.12.5.19 10.12.5.23 10.16.8.105 。。。 使用下面的两个命令得到了两个文件,后面需要进一步处理。 sh all.lst|grep -i solari|grep -v \#|awk '{print $1}'|sort|uniq|awk '{print "ssh "$1}'> test/sun_ip.lst cat aa.lst|awk '{print $1}'|sort|uniq|sed '/^$/d'|awk '{print "ssh "$1}' > test/all_ip.lst 这两个文件的意义就在于下面的形式,可以看到没有<,|的列都是存在重复的列,即服务器列表中的unix服务器,这些是需要排除在列表之外,手工开防火墙的。 # sdiff all* sun* ssh 10.1.14.18 < ssh 10.2.19.83 < ssh 10.2.13.11 < ssh 10.2.13.118 ssh 10.2.13.118 ssh 10.2.13.122 < ssh 10.2.13.128 ssh 10.2.13.128 ssh 10.2.13.13 | ssh 10.2.13.138 ssh 10.2.13.132 < ssh 10.2.13.14 < ssh 10.2.13.141 ssh 10.2.13.141 ssh 10.2.13.157 | ssh 10.2.13.144 ssh 10.2.133.16 | ssh 10.2.13.148 使用下面的方法来过滤得到纯linux的环境。 sdiff all* sun*|grep '<\||' ssh 10.1.14.18 < ssh 10.2.19.83 < ssh 10.2.13.11 < ssh 10.2.13.122 < ssh 10.2.13.13 | ssh 10.2.13.138 ssh 10.2.13.132 < ssh 10.2.13.14 < ssh 10.2.13.157 | ssh 10.2.13.144 ssh 10.2.133.16 | ssh 10.2.13.148 光得到列表还不行,得看看网卡的情况,还有能不能ping通,因为有些服务器可能在其它的网段,需要代理服务器跳转。 sdiff all* sun*|grep '<\||'|awk '{print $1" "$2" \"ifconfig |head -1\""}' ssh 10.1.14.18 "ifconfig |head -1" ssh 10.2.19.83 "ifconfig |head -1" ssh 10.2.13.11 "ifconfig |head -1" ssh 10.2.13.122 "ifconfig |head -1" ssh 10.2.13.13 "ifconfig |head -1" ssh 10.2.13.132 "ifconfig |head -1" ssh 10.2.13.14 "ifconfig |head -1" 或者设置超时限制也可以,不过我测试发现差别不大。 sdiff all* sun*|grep '<\||'|awk '{print $1" -o ServerAliveInterval=3 "$2" \"ifconfig |head -1\""}' 可以看到有些服务器确实不通,这些需要手工跳转到别的代理服务器去手工完成。 ssh: connect to host 10.2.13.122 port 22: Connection timed out ssh: connect to host 10.2.13.162 port 22: Connection timed out eth0 Link encap:Ethernet HWaddr 00:26:B9:2C:34:13 eth0 Link encap:Ethernet HWaddr 78:2B:CB:0D:DE:1E eth0 Link encap:Ethernet HWaddr 00:1D:09:1A:88:BD eth0 Link encap:Ethernet HWaddr 78:2B:CB:24:98:77 em1 Link encap:Ethernet HWaddr E0:DB:55:22:0E:90 eth0 Link encap:Ethernet HWaddr 78:2B:CB:24:82:C1 em1 Link encap:Ethernet HWaddr 78:2B:CB:3E:87:B7 eth0 Link encap:Ethernet HWaddr D4:AE:52:7A:84:D9 eth0 Link encap:Ethernet HWaddr 78:2B:CB:0D:1C:35 所以针对这个问题,我的思路就是写一个在db服务端可运行的脚本,然后在服务端运行,完成后退出。 服务端需要运行的脚本内容如下: ip_exists_flag=`iptables -nvL|grep -w $1|wc -l` echo $ip_exists_flag "ip address is founded from firewall list" if [ ${ip_exists_flag} -eq 0 ];then echo "iptables -I INPUT -s $1 -p tcp -m multiport --dports $2 -i `ifconfig |head -1|awk '{print $1}'` -j ACCEPT "; iptables -I INPUT -s $1 -p tcp -m multiport --dports $2 -i `ifconfig |head -1|awk '{print $1}'` -j ACCEPT echo "iptables -nvL|grep -w $1 "; iptables -nvL|grep -w $1 echo "service iptables save"; service iptables save else echo "nothing to do"; fi 而要在服务端运行,得把脚本传过去,可以用下面的脚本。 #!/usr/bin/expect set dbip_addr [lindex $argv 0] set dbip_port [lindex $argv 1] set ip_addr [lindex $argv 2] set timeout 5 spawn scp -r open_firewall_dep.sh $dbip_addr:/home send "exit \r" expect eof spawn ssh $dbip_addr send "sh /home/open_firewall_dep.sh $ip_addr $dbip_port \r" expect eof 所以两个脚本各司其职, 在服务端运行的结果如下,如果配置存在,直接退出 # sh /home/open_firewall_dep.sh 10.2.10.18 1521 1 ip address is founded from firewall list nothing to do 如果没有配置防火墙,就需要配置一下 # sh /home/open_firewall_dep.sh 10.2.12.165 1528 0 ip address is founded from firewall list iptables -I INPUT -s 10.2.12.165 -p tcp -m multiport --dports 1528 -i eth0 -j ACCEPT iptables -nvL|grep -w 10.2.12.165 0 0 ACCEPT tcp -- eth0 * 10.2.12.165 0.0.0.0/0 multiport dports 1528 service iptables save Saving firewall rules to /etc/sysconfig/iptables: [ OK ] 然后大概花了十多分钟的时间,整个过程就完成了,剩下的几个手工配置相对来说就轻松很多,不会有混乱的感觉了。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2015-10-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏禅林阆苑

利用NextCloud配置私有云 【原创】

利用NextCloud配置私有云 Write By CS逍遥剑仙 我的主页: www.csxiaoyao.com GitHub: github...

2.6K80
来自专栏.Net移动开发

关于发布IOS的方法(本人亲身经历折腾很久终于成功)

前情提要:这位.NET程序员兄弟使用Smobiler开发了一个APP,尽管Smobiler云平台已经最大限度的简化了iOS应用的打包操作,但仍绕不开苹果公司强制...

17310
来自专栏散尽浮华

完整部署CentOS7.2+OpenStack+kvm 云平台环境(5)--问题解决

一、 [root@openstack-server ~]# nova list ERROR (CommandError): You must provide a...

41450
来自专栏云计算教程系列

如何在FreeBSD 10.1上使用Sendmail通过外部SMTP服务发送电子邮件

设置新的Web服务器时最常见的需求之一是发送电子邮件。最安全,最简单的方法是将服务器连接到SendGrid或Amazon SES等邮件服务。使用外部服务将帮助您...

24700
来自专栏维C果糖

DbVisualizer 破解教程

DbVisualizer 是一个完全基于 JDBC 的跨平台数据库管理工具,内置 SQL 语句编辑器(支持语法高亮),凡是具有 JDBC 数据库接口的数据库都可...

52670
来自专栏iOS122-移动混合开发研究院

借助 frp 随时随地访问自己的树莓派

前言 看了知乎上的一个「树莓派」是什么以及普通人怎么玩? 的高票回答,双十一时间,果断买了一个树莓派 3. 周一(11.13) 到的货.我目前只想实现一个简单...

72790
来自专栏bboysoul

部署包安装zabbix

昨天给树莓派安装上了一个温度传感器,今天想使用zabbix去统计监控树莓派上温度传感器的数据,所以我就开始在我的一台不怎么用的阿里云服务器上安装zabbix了 ...

18320
来自专栏云计算

在Debian 8上使用Varnish和NGINX通过SSL和HTTP提供WordPress服务

Varnish是一个功能强大且灵活的缓存HTTP反向代理。它可以安装在任何Web服务器的前方来缓存其内容,这将提高速度并减少服务器负载。当客户端请求网页时,Va...

25820
来自专栏Java学习123

Linux下打开ISO文件两种方法

方法一、Linux下用mount挂载命令 在网上下载的软件盘是iso格式的,不刻成光盘就可以读取里面的文件。不用解压。 在终端用mount -o loop /m...

4.8K50
来自专栏黑泽君的专栏

UltraEdit(UE)如何设置去掉.bak备份文件?

使用UltraEdit(UE)打开文件,修改保存后,会产生.bak备份文件,感觉很不爽,如何去掉呢?

10410

扫码关注云+社区

领取腾讯云代金券