设为首页 收藏本站
查看: 1206|回复: 0

[经验分享] Docker 快速验证保存 iptables 的转发策略

[复制链接]

尚未签到

发表于 2019-2-20 08:33:02 | 显示全部楼层 |阅读模式
故事和事故
  这里的故事都是来源于事故。当然处理好了是传说中的故事,处理不好就是惨痛的事故。

前言
  接上回(Docker快速验证tomcat单机多实例方案),解决非root账号不能绑定80端口,采用的是iptables转发的解决办法.这只能是个临时方案:

root@SuSE11:/etc/sysconfig$ iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8081
  这个方法有以下局限:


  • 重启服务器失效;
  • 重启防火墙失效: [root@tomcat7conf]# rcSuEfirewall2 restart
  • 每次都的申请root权限手工执行转发命令

背后的故事
  当时投产时间紧任务重,直接就投了。终于在第三次投产前,生产迁移扩容,重启后,趴了。因为部署在异地,电话支持后异地没了下文。晚一点儿客户直接电话过来,要求彻底解决。
  后来才知道这个命令失效了(为什么失效这里有故事,当然对运维来说就是事故:推测异地也是发现了这个结果,没辙了就给本地客户反馈,压力就到项目组来了)。
  第二天,客户建议在开发环境验证:先把防火墙关了看看行不行得通。虽然知道关了也不可能突然80就能被非 root 用户绑定了,但是还是安排工程师做了。一验证,出事了。防火墙关了之后,再也起不起来了(重启后,转发命令失效了)。咦~,有好戏了。
  反复查证之后,推测是客户运营部门在这个时间段内,出于某种考虑,逐个排查,“彻底”关闭了所有服务器的防火墙:因为是规定。我们开发环境一直没重启,所以,转发规则一直生效。现在被循循善诱主动关闭防火墙验证时,新的策略生效,防火墙趴了,转发命令当仁不让失效了。
  查证和推测过程以及解决方案如下,请各位参考。为什么推测,因为有些事情拿不到台面上,知道就好了,不必好为人师。尤其面对客户语焉不详时,给出解决方案就是了。大家心知肚明:乙方么,就是解决问题的。不管这个问题源头在哪儿,反正你的项目你碰上了,自己解决就是。

理论指导实践
  SuSE 11 Linux 中,使用 /etc/sysconfig/SuSEfirewall2 脚本来“简化” iptables 策略的构建。系统启动时,通过加载此脚本,来生成 iptables 策略。

还原和推测现场
  工程师的验证
大致也就这几个命令,最终结果就是,关闭了,验证80端口仍旧不能访问。再启动,运行了 iptables 转发命令,居然失效了。

# 关闭防火墙
root@SuSE11:/etc/sysconfig$ rcSuSEfirewall2 stop
# 启动防火墙
root@SuSE11:/etc/sysconfig$ rcSuEfirewall2 start
# 重启防火墙
root@SuSE11:/etc/sysconfig$ rcSuSEfirewall2 restart

  “彻底”关闭防火墙
推测是这么“彻底”关闭的。后来经过后续验证,证明推测是正确的。

root@SuSE11:/etc/sysconfig$ chkconfig SuSEfirewall2_init off
root@SuSE11:/etc/sysconfig$ chkconfig SuSEfirewall2_setup off
  被彻底关闭后,防火墙状态如下

root@SuSE11:/etc/sysconfig$ chkconfig --list | grep firewall
SuSEfirewall2_init 0:off 1:off 2:off 3:off 4:off 5:off 6:off
SuSEfirewall2_setup 0:off 1:off 2:off 3:off 4:off 5:off 6:off
  在这种情况下,传统办法重启前置防火墙是无效的,自然 iptables 的转发命令运行了也是无效的,感兴趣的童鞋,自行尝试。

root@SuSE11:/etc/sysconfig$ rcSuSEfirewall2 restart
root@SuSE11:/etc/sysconfig$ iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8081
  查看“前置”防火墙状态
╮(╯_╰)╭,貌似没啥用,仅记录下。

root@SuSE11:/etc/sysconfig$ cd /etc/sysconfig
root@SuSE11:/etc/sysconfig$ SuSEfirewall2 status | grep 80
  查看“底层”防火墙状态
正常状态如下,

root@SuSE11:/etc/sysconfig$ chkconfig --list | grep firewall
SuSEfirewall2_init 0:off 1:off 2:off 3:on 4:off 5:on 6:off
SuSEfirewall2_setup 0:off 1:off 2:off 3:on 4:off 5:on 6:off
  启动防火墙
如果防火墙被关闭,或者状态异常,使用如下命令启动

root@SuSE11:/etc/sysconfig$ chkconfig SuSEfirewall2_init on
root@SuSE11:/etc/sysconfig$ chkconfig SuSEfirewall2_setup on
验证和准备
  检查 firewall 的状态
正常状态如下,

root@SuSE11:/etc/sysconfig$ chkconfig --list | grep firewall
SuSEfirewall2_init 0:off 1:off 2:off 3:on 4:off 5:on 6:off
SuSEfirewall2_setup 0:off 1:off 2:off 3:on 4:off 5:on 6:off
  如果不正常,则:
  启动防火墙

root@SuSE11:/etc/sysconfig$ chkconfig SuSEfirewall2_init on
root@SuSE11:/etc/sysconfig$ chkconfig SuSEfirewall2_setup on
  验证 iptables 的转发

root@SuSE11:/etc/sysconfig$ iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8081
  查看 iptables 的转发是否生效
iptables-save 这个命令也好用的很,用于检查已有策略(无论是临时的还是永久的)
  当有如下结果

root@SuSE11:/etc/sysconfig$ iptables-save -t nat | grep 80
-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8081
  重启防火墙
iptables 应失效

root@SuSE11:/etc/sysconfig$ rcSuSEfirewall2 restart
root@SuSE11:/etc/sysconfig$ iptables-save -t nat | grep 80
保存 iptables 策略
  有多种办法,其中之一就是:用户添加自定义规则。还有一种办法就是导出iptables里的策略到一个文件,系统启动时,加载这个策略(见参考链接)。此处使用的是前者。
  修订自定义函数

root@SuSE11:/etc/sysconfig$ cd /etc/sysconfig/scripts/
root@SuSE11:/etc/sysconfig$ cp SuSEfirewall2-custom SuSEfirewall2-custom20171111bak
root@SuSE11:/etc/sysconfig$ vi SuSEfirewall2-custom
# 找到fw_custom_after_antispoofing函数,在函数内“true”上面一行加入
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8081
# 保存,退出
root@SuSE11:/etc/sysconfig$ more SuSEfirewall2-custom | grep 8081
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8081
  加载自定义函数

root@SuSE11:/etc/sysconfig$ cd /etc/sysconfig
root@SuSE11:/etc/sysconfig$ vi SuSEfirewall2
# 找到FW_CUSTOMRULES="",修订为
FW_CUSTOMRULES="/etc/sysconfig/scripts/SuSEfirewall2-custom"
# 保存,退出
# 验证防火墙脚本是否加载自定义函数
root@SuSE11:/etc/sysconfig$ more SuSEfirewall2 | grep FW_CUS
FW_CUSTOMRULES="/etc/sysconfig/scripts/SuSEfirewall2-custom"
  验证

root@SuSE11:/etc/sysconfig$ rcSuSEfirewall2 restart
root@SuSE11:/etc/sysconfig$ iptables-save -t nat | grep 80
-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8081
root@SuSE11:/etc/sysconfig$ crul localhost:8081
感谢和参考
  感谢以下网友的分享:SuSE的网上资料能用的不多,像这样的认真的笔记已经不多了。

参考


  • SuSE IPTABLES 用法
  • iptables 的备份、恢复及防火墙脚本的基本使用
  • 在 suse 上折腾 iptables
  后续
2017.12.18 Update:
  这个方案也是个过渡方案:甚至都没能投产。
  因为客户这边的奇怪规定,一律要彻底关闭防火墙。
  具体见下一篇笔记:不通过转发让tomcat绑定80端口。

docker + k8s
  此课程为网络直播课程,一共 10 个课时,每周上一个全天,历时两个多月。附加:录播视频+笔记+除课堂外的答疑时间(7次+)2019-1-13 开课,原价 5800 ,现在周年活动 100 定金抵 800


  课程主讲师:GY 老师
10 年一线软件开发经验,先后经历了传统安全公司,以及多家互联网公司;在安全开发方面,曾开发过 Linux 防火墙、web 应用防火墙、Linux 安全内核加固,基于大流量的 Web 安全威胁分析等项目;在互联网公司工作时,曾基于 DPDK 高性能网络开发框架开发过基于全流量的网络流量分析平台和基于 Sflow 网络流量分析平台,基于Golang 开发SmartDNS 等;开发语言也是从C -> python -> golang 的转变过程?现从事基于 K8S 和 Docker在私有云平台建设方面的研发工作;具备丰富的Linux系统开发经验、网络开发经验以及项目管理经验;目前开发工作90+% 都在用 Golang,Golang 是一门简洁、高效、强大且灵活的编程语言。
  关于课程的具体内容想要了解的, 添加加小助手WeChat:17812796384 咨询了解
  本文由作者:蛮大人 授权发布
链接:https://opsdev.fun/2017/12/19/O1-8-06-Docker%E5%BF%AB%E9%80%9F%E9%AA%8C%E8%AF%81%E4%BF%9D%E5%AD%98iptables%E7%9A%84%E8%BD%AC%E5%8F%91%E7%AD%96%E7%95%A5/
著作权归作者所有。
转载请联系作者获得授权。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-674636-1-1.html 上篇帖子: 如何将自己的镜像上传到docker hub上面 下篇帖子: 基于docker搭建redis
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表