本文目录:
- 1、centos7 iptables启动失败,提示Failed to start IPv4 firewall
- 2、在iptables重启后Docker引擎下的容器网络不通
- 3、重启系统后iptables规则不生效,请求帮助解决
- 4、docker有自己的防火墙吗 docker有防火墙吗
- 5、iptables(一)链、表的简介和表的基本操作
centos7 iptables启动失败,提示Failed to start IPv4 firewall
centos7重启iptables时失败,通过systemctl status iptables.service查看错误信息,内容如下所示:
# *systemctl status iptables.service
上面的错误是在启动ipv4 firewall时失败,可尝试关闭firewalld服务在重启iptables:
除了使用上述的方法以外,启动失败的原因也可能是iptables的规则配置错误。
可以check下/etc/sysconfig/iptables文件。
在iptables重启后Docker引擎下的容器网络不通
$ sudo yum -y install docker iptables-services
$ sudo systemctl start docker
$ sudo docker run --rm centos bash -c "ping "
PING (162.242.195.82) 56(84) bytes of data.
64 bytes from docker.com (162.242.195.82): icmp_seq=1 ttl=61 time=114 ms
$ sudo systemctl restart iptables
$ sudo docker run --rm centos bash -c "ping "
ping: unknown host
恢复容器网络的方法是重启容器引擎
$ sudo systemctl restart docker
$ sudo docker run --rm centos bash -c "ping "
PING (162.242.195.82) 56(84) bytes of data.
64 bytes from docker.com (162.242.195.82): icmp_seq=1 ttl=61 time=114 ms
这是一个重大问题,该主机上所有容器的网络都不通了。
在docker引擎中需要修改什么以将加载的iptables规则将不会造成这个的网络问题?
评论1:认为这是个已知问题或缺陷,但不是docker引擎的问题。
当执行systemctl restart iptables时,并没有真正重新启动iptables,因为iptables始终处于开启状态(它内置于内核中),而是在清除或加载保存的IPtables规则集合。
docker引擎向iptables链中增加规则,当你清除链时,docker创建的规则将丢失。
针对这些,docker引擎无法做任何事情。你不能清除iptables chains。
如果使用的firewalld,而不是iptables,会有这样的问题嘛?
firewalld :-P 将没这个问题。不幸的是,有很多人使用iptables。
从两个方面解决这个问题:1) 让docker引擎依赖于iptables服务。假如iptables停止服务,docker引擎也会,但这不是大多数人所期望docker引擎会挂掉。有单独的服务依赖于iptables,当该服务启动后,ping下docker引擎并告诉它要恢复iptables规则。作为docker网络驱动的一部分,网络管理是一个单独的进程,可以代替docker引擎来停止或启动。这种方式容器仍会继续运行,但网络服务将会受到影响。2) 监控iptables并恢复规则假如规则被删除。没有任何统计界面用来查看更改,有很多规则时只能轮询,当有些规则丢失时将有短暂空白。
就像擦除 iptables 会破坏docker一样,擦除文件系统也会破坏docker,而docker不会阻止这种情况。 仅仅因为有一个方便的工具可以做到这一点并不意味着该工具的存在是 docker 应该处理的。
#!/bin/bash
today=$(date +"%Y%m%d")
iptables-save -t nat /etc/iptables/nat-${today}
iptables-save -t filter /etc/iptables/filter-${today}
Docker networking fails after iptables service is restarted
Docker的iptables规则在iptables重启后丢失
重启系统后iptables规则不生效,请求帮助解决
1、配置好后,注意保存
/etc/rc.d/init.d/iptables save
2、或者你直接编辑iptables 的配置文件,编辑好之后 ,保存重启,这样重启后,就不会还原了!
配置文件位置: /etc/sysconfig/iptables
docker有自己的防火墙吗 docker有防火墙吗
pre{overflow-x: auto}
docker有自己的防火墙吗?
有的,开启防火墙端口:firewall-cmd --zone=public --add-port=80/tcp --permanent。但是docker的部分网络功能是通过iptables转发来完成的,转发规则是docker进程启动后动态添加的,也就意味着如果你重启iptables,将会丢失docker的转发规则。
有两种解决办法:
1、动态添加iptables规则,然后保存到防火墙软件配置文件中
动态添加iptables规则可以使规则立即生效(重启失效)
sudo iptables -I INPUT 1 -p tcp --dport 46379 -j ACCEPT
这条命令会将规则添加到input规则的第一位 ,-I参数指定插入位置。不要使用-A参数,该参数会将规则添加到input的最后一条,一般原来的最后一条都是reject规则,所以新插入的规则无法生效。
sudo service iptables save
2、重启iptable后重新启动docker
影响:重启docker会导致全部容器重启,有可能造成短时间的业务故障。
此方法不建议使用,如果已经重启防火墙,导致docker业务故障,使用下面命令重启dcoker。
systemctl restart docker
它的基本操作是什么?
1、启动服务:systemctl start firewalld.service
2、关闭服务:systemctl stop firewalld.service
3、重启服务:systemctl restart firewalld.service
4、显示服务的状态:systemctl status firewalld.service
5、开机自动启动:systemctl enable firewalld.service
6、禁用开机自动启动:systemctl disable firewalld.service
7、查看版本: firewall-cmd --version
8、查看帮助: firewall-cmd --help
9、显示状态: firewall-cmd --state
10、查看所有打开的端口: firewall-cmd --zone=public --list-ports
11、更新防火墙规则: firewall-cmd --reload
12、查看区域信息: firewall-cmd --get-active-zones
13、查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
14、拒绝所有包:firewall-cmd --panic-on
15、取消拒绝状态: firewall-cmd --panic-off
16、查看是否拒绝: firewall-cmd --query-panic
iptables(一)链、表的简介和表的基本操作
PREROUTING链——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
INPUT链——进来的数据包应用此规则链中的策略
OUTPUT链——外出的数据包应用此规则链中的策略
FORWARD链——转发数据包时应用此规则链中的策略
POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)
filter表——用于存放所有与防火墙相关操作的默认表。通常用于过滤数据包。
nat表——用于网络地址转换
mangle表——用于处理数据包
raw表——用于配置数据包,raw 中的数据包不会被系统跟踪。
PREROUTING: raw - mangle - nat
INPUT: mangle - filter
FORWARD: mangle - filter
OUTPUT: raw - mangle - nat - filter
POSTROUTING: mangle - nat
raw 表:PREROUTING,OUTPUT
mangle表:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat 表:PREROUTING,OUTPUT,POSTROUTING
filter 表:INPUT,FORWARD,OUTPUT
ACCEPT: 允许数据包通过
DROP:直接丢弃数据包,不给任何回应信息
REJECT:拒绝数据包通过,需要时会给数据发送端一个相应信息
SNAT:原地址转换,解决内网用户用同一个公网地址上网的问题
MASQUERADE:是 SNAT 的一种特殊形式,适用于动态的、临时会变的 ip 上
DNAT:目标地址转换
REDIRECT:在本机做端口映射
LOG:在/var/log/messages 文件中记录日志信息。然后将数据包传递给下一条规则。也就是只记录不做任何操作。
示例:
比如,我想要将主动连接22号端口的报文的相关信息都记录到日志中,并且把这类记录命名为"want-in-from-port-22",则可以使用如下命令
如果公网IP是动态获取的,不是固定的,则可以使用MASQUERADE进行动态的SNAT操作。
查看表中规则 iptables -t table_name -L [chain_name]
示例:
上面示例可以看到有哪些链是支持过滤的
在不指定表时默认查询 filter 表 iptables -L [chain_name] (注意大小写)
示例:
示例:
这个时候在192.168.55.132这个主机上 ping 测试机是不通的。此时在表的首部在添加一个允许的操作
这个时候在192.168.55.132这个主机上 ping 测试机发现可以 ping 通
所以规则的顺序很重要
示例:
示例:
关于链默认规则说明
不能省略 -s 如果省略效果如下
source 变为0.0.0.0/0 表示所有网段都被 ACCEPT
示例
默认情况下添加的规则都是临时的,当重启 iptables 或者重启系统时规则将丢失
示例:
【重启iptables】的内容来源于互联网,如引用不当,请联系我们修改。
网友留言: