docker容器内彻底移除iptables服务的实现方法

背景

我创建的容器使用的是centos6的标准镜像,所以内置了iptables服务。容器启动后iptables服务默认就启动了。iptables设置的规则默认是所有流量都无法通行。而对于服务器的管理使用的是宿主机的防火墙。这样就导致在实现用iptables动态给容器添加端口映射时不成功的现象,后来发现是容器内的防火墙阻断了。因为容器的防火墙和宿主机的防火墙会同时起作用,在设置防火墙有关的规则时经常会遇到问题,需要将容器内外的防火墙都进行设置。甚至会造成防火墙管理上的混乱。即使将防火墙设置为开机不自启,也关闭了防火墙服务。但是无法保证人为手动重启过防火墙或某些进程会重启防护墙,从而导致防火墙管理的规则出现问题。所以最好的办法就是干掉防火墙。

 

分析

iptables 是 Linux 操作系统中用于配置和管理网络防火墙规则的工具。它允许管理员定义规则集,以控制网络流量的传入、传出和转发。iptables 主要用于实现网络安全策略,如阻止未经授权的访问、过滤恶意流量、实现端口转发等。

 

iptables是Linux内置的工具,iptables管理的系统的防火墙使用了一个iptables的伪服务程序(真服务程序是后台常驻的,这个没有常驻)。所以在卸载上会比较麻烦。iptables服务只是一组脚本而已。关于防火墙服务的概念的理解,请阅读《一文讲明白iptables和firewall的区别》。

 

iptables的服务的配置文件在:/usr/lib/systemd/system/iptables.service

文件内容:

[Unit]                                                                                                                                                                                                              

Description=IPv4 firewall with iptables

After=syslog.target

AssertPathExists=/etc/sysconfig/iptables

 

[Service]

Type=oneshot

RemainAfterExit=yes

ExecStart=/usr/libexec/iptables/iptables.init start

ExecReload=/usr/libexec/iptables/iptables.init reload

ExecStop=/usr/libexec/iptables/iptables.init stop

Environment=BOOTUP=serial

Environment=CONSOLETYPE=serial

 

[Install]

WantedBy=basic.target

iptables这里的服务使用的是/usr/libexec/iptables/iptables.init 脚本。因为iptables只是使用这个脚本模拟的服务的操作,所以感觉似乎iptables服务是真实的,但是iptables并没有常驻的后台进程。

 

换句话说,iptables的服务只是操作上和服务一样,便于操作和管理。iptables有一个二进制的命令文件。再配合这个模拟的服务配置iptables.service ,这个配置里使用了iptables.init 脚本,实现了服务的启停等操作。

 

所以,我们要彻底停止iptables服务,不能像卸载软件那样来操作。

 

彻底移除iptables服务的方法:

1. 停止已运行的iptables服务

systemctl stop iptables  # centos7

service iptables stop  # centos6

停止iptables服务并不是真停止iptables服务,而是通过iptables解除内核的防火墙钩子,取消对流量的过滤功能。如果不先取消,直接移除服务,其实防火墙钩子没有解除,依然会对流量进行过滤。

 

2.禁止服务开机启动

systemctl disable iptables # centos7

rm -f /etc/systemd/system/basic.target.wants/iptables.service  # centos6

iptables的开机启动是在/etc/systemd/system/basic.target.wants目录中添加了一个软链文件:

/etc/systemd/system/basic.target.wants/iptables.service -> /usr/lib/systemd/system/iptables.service

这个软链指向了/usr/lib/systemd/system/iptables.service,就是开头说的服务配置文件。

centos6中没有systemctl命令,service不支持disable,所以直接手动删除一下即可,效果一样。

禁止开启启动是免得每次开机都有报错。

 

3.移除iptables服务的配置文件

mv /usr/lib/systemd/system/iptables.service /usr/lib/systemd/system/iptables.service.bak

你可以使用rm命令删除,也可以使用mv命令更换名字。反正只要默认的标准文件名称的文件不存在就行了。

 

这样操作之后,再也启动不了iptables服务了,查看服务的状态:

c5ed66d7998c436fbfc0c08c8f58ccf8.png

 

 

服务的启动状态为fail。当然这个并不影响iptables命令的执行,因为它是二进制文件。我们只要断开了iptables操作系统内核的防火墙钩子就行了,不必删除iptables命令。

 

现在就再也不怕手动不小心启动了iptables服务,也不怕其他进程启动了防火墙了。那么我们只需要管理宿主机的防火墙即可。

 

总结

容器和宿主机都有防护墙,不仅会增加管理的复杂度,而且很容易出错。不仅如此,在设置防火墙规则给容器做动态端口映射时,还会被容器内的防护墙阻断。所以为了彻底规避这个问题,避免因为容器重启后或者其他进程启动了防火墙,我们直接彻底移除iptables防火墙,就可以防患于未然了。


原文地址: http://www.yu7s.com/article/20240418111446390.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/568455.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于C++STL的总结(基础使用和底层原理)

STL是什么? STL即(Standard Template Library)标准模板库,提供了常见的数据结构和算法函数等,其下共包含六大组件: 容器算法迭代器仿函数适配器空间配置器 本篇重点介绍容器的使用和简单的底层实现原理&…

推荐六款图片编辑软件

图片编辑、抠图、拼图、压缩、放大、加字体、转格式等各种功能应有尽有,收藏这一篇就够了! 综合编辑:图片编辑助手 这是一款电脑软件,里面有超多图片处理功能,压缩图片到指定大小、消除任意位置的图片水印、按指定大小…

【C++】---STL之vector的模拟实现

【C】---STL之vector的模拟实现 一、vector在源码中的结构:二、vector类的实现:1、vector的构造2、析构3、拷贝构造4、赋值运算符重载5、迭代器6、operator[ ]7、size()8、capacity()9、reserve()10、resize()11、empty()12、push_back()13、pop_back()1…

如何在PostgreSQL中设置自动清理过期数据的策略

文章目录 方法一:使用临时表和定期清理步骤:示例代码:创建临时表:定期清理脚本(bash psql): 方法二:使用分区表和定期清理步骤:示例代码:创建分区表&#xf…

《内向者优势》:不要低估一个内向的人

#世界读书日 作者主页: 🔗进朱者赤的博客 精选专栏:🔗经典算法 作者简介:阿里非典型程序员一枚 ,记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法(公众号同名) ❤…

Redis篇:缓存更新策略最佳实践

前景: 缓存更新是redis为了节约内存而设计出来的一个东西,主要是因为内存数据宝贵,当我们向redis插入太多数据,此时就可能会导致缓存中的数据过多,所以redis会对部分数据进行更新,或者把他叫为淘汰更合适&a…

Vue3的监听属性watch和计算属性computed

监听属性watch 计算属性computed 一、监听属性watch watch 的第一个参数可以是不同形式的“数据源,watch 可以监听以下几种数据: 一个 ref (包括计算属性)、 一个响应式对象、 一个 getter 函数、 或多个数据源组成的数组 watch 的参数:监视的回调&…

代码随想录算法训练营第三十五天|860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球

860. 柠檬水找零 思路: 只需要维护三种金额的数量,5,10和20。 有如下三种情况: 情况一:账单是5,直接收下。情况二:账单是10,消耗一个5,增加一个10情况三:…

好友关注-实现分页查询收邮箱

9.5好友关注-实现分页查询收邮箱 需求:在个人主页的“关注”卡片中,查询并展示推送的Blog信息: 具体操作如下: 1、每次查询完成后,我们要分析出查询出数据的最小时间戳,这个值会作为下一次查询的条件 2…

考研党打印资料怎么使用云打印服务?

对于准备考研的同学们来说,在备考的时候需要准备许多资料,这些资料的打印费用成为了考研党的巨额支出。那么在生活费有限的情况下,考研党打印资料最好是选择云打印服务,因为易绘创云打印服务低至5分钱/页还包邮。那么考研党打印资…

Pytest精通指南(28)钩子函数-测试报告(pytest-html)

文章目录 前言应用场景插件安装参数分析使用方法拓展-定制化报告 前言 在软件开发过程中,测试是确保代码质量的关键环节。 而测试报告则是测试过程中不可或缺的输出物,它为我们提供了关于测试用例执行情况的详细信息,帮助我们快速定位和解决问…

服务器(AIX、Linux、UNIX)性能监视器工具【nmon】使用介绍

目录 ■nmon简介 1.安装 2.使用简介 3.使用(具体使用的例子【CPU】【内存】) 4.采集数据 5.查看log(根据结果,生成报表) 6.分析结果 ■nmon简介 nmon("Nigels performance Monitor"&…

比特币成长的代价

作者:Jeffrey Tucker,作家和总裁。曾就经济、技术、社会哲学和文化等话题广泛发表演讲。编译:秦晋 2017 年之后参与比特币市场的人遇到了与之前的人不同的操作和理想。如今,没有人会太在意之前的事情,说的是 2010-2016…

SL3038 耐压150V恒压芯片 60V降24V 72V降12V降压IC

SL3038 是一款恒压芯片,其耐压值为 150V。这意味着它可以在高达 150V 的电压下工作而不会损坏。现在,让我们来讨论您提到的两个降压应用:从 60V 降到 24V 和从 72V 降到 12V。 1. 60V 降到 24V: 输入电压:60V 输出电…

02 IO口的操作

文章目录 前言一、IO的概念1.IO接口2.IO端口 二、CPU和外设进行数据传输的方法1.程序控制方式1.1 无条件1.2 查询方式 2.中断方式3.DMA方式 一、方法介绍和代码编写1.前置知识2.程序方式1.1 无条件方式1.1.1 打开对应的GPIO口1.1.2 初始化对应的GPIO引脚1.1.2.1 推挽输出1.1.2.…

【Hadoop】-Hive部署[12]

目录 思考 VMware虚拟机部署 规划 步骤1:安装MySQL数据库 步骤2:配置Hadoop 步骤3:下载解压Hive 步骤4:提供MySQL Driver包 步骤5:配置Hive 步骤6:初始化元数据库 步骤7:启动Hive&…

TDSQL同一个所属Set显示3个备份节点

欢迎关注“数据库运维之道”公众号,一起学习数据库技术! 本期将为大家分享《TDSQL同一个所属Set显示3个备份节点》的处置案例。 关键词:分布式数据库、TDSQL、备份节点 1、问题描述 登录赤兔管理平台,单击左侧导航栏“实例管理/集群管理”…

漫谈-AI 时代的信息模型

模型化- 数字化转型的重要基石 在各行各业推行数字化转型过程中,构建信息化模型十分重要,它是数字化转型的基石。事实上,数字化转型的核心是“万物皆模型”,在工业领域,以德国为主导的工业4.0 发展进程中,…

Access denied for user ‘zabbix‘@‘localhost‘ (using password: NO)

现象 排查过程 进入数据库show grants for zabbixlocalhost;select host,user from mysql.user;cat /etc/zabbix/zabbix_server.conf | grep DB | grep -vE ‘#|$’cat /etc/zabbix/web/zabbix.conf.php | grep DB 解决办法 mysql 8.0以下 DPassword123.com mariadb -e "…

java多线程-并发和并行

进程 并发 进程中的线程是由CPU进行调度的,但是CPU能够处理的进程数量有限为了保证所有的线程都在运行,CPU会快速切换,给外界的感觉就是所有的线程都在运行,这就是并发。 并行