iptables和容器Docker命令详细解析--看完秒懂

iptables的规则表和链


    表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。

 


    链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。

 

目录

iptables的规则表和链

规则表之间的优先顺序

一、表(tables)

二、规则(rules)

1.规则(rules)

2.规则

三、iptables详细命令解析

三、iptables初始默认解析

四、Docker解析

1. Docker在iptables的filter表中的链在Docker 18.05.0(2018.5)及之后的版本中,提供如下4个chain:

 2.Docker中禁止修改iptables过滤表

3.docker帮助命令大全—help


 

 

 

 


规则表之间的优先顺序

规则表之间的优先顺序 raw——mangle——nat——filter。

 

一、表(tables)

mangle 矫正表
nat 地址转化
filter策略表
raw表只使⽤在PREROUTING链和OUTPUT链上,因为优先级最⾼,从⽽可以对收到的数据包在连接跟踪前进⾏处理。
filter表主要⽤于过滤数据包,该表根据系统管理员预定义的⼀组规则过滤符合条件的数据包。对于防⽕墙⽽⾔,主要利⽤在filter 表中指定的规则来实现对数据包的过滤。
nat表主要⽤于⽹络地址转换NAT,该表可以实现⼀对⼀,⼀对多,多对多等NAT ⼯作,iptables就是使⽤该表实现共享上⽹ 的。
mangle表主要⽤于对指定数据包进⾏更改。
规则表之间的优先顺序 raw——mangle——nat——filter。

 

二、规则(rules)

1.规则(rules)

规则(rules)
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给任何回应信息。
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息。
SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
DNAT:目标地址转换。
REDIRECT:在本机做端口映射。
LOG:在/var/log/messages文件中记录日志信息

2.规则

1.INPUT——进来的数据包应用此规则链中的策略
2.OUTPUT——外出的数据包应用此规则链中的策略
3.FORWARD——转发数据包时应用此规则链中的策略
4.PREROUTING——对数据包作路由选择前应用此链中的规则
(记住!所有的数据包进来的时侯都先由这个链处理)
5.POSTROUTING——对数据包作路由选择后应用此链中的规则

 

三、iptables详细命令解析

指令用法:
DOCKER 容器
-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
列如:删除INPUT链的第一条规则
          iptables -D INPUT 1

-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-L 列出(list)指定链中所有的规则进行查看
-E 重命名用户定义的链,不改变链本身
-F 清空(flush)
-N 新建(new-chain)一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链(delete-chain)
-P 设置指定链的默认策略(policy)
-Z 将所有表的所有链的字节和数据包计数器清零
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)
!可以将条件取反
列如:允许防火墙转发除ICMP协议以外的所有数据包
          iptables -A FORWARD -p ! icmp -j ACCEPT

参数

-P 匹配协议,! 表示取反
-s 匹配源地址
-D 匹配目标地址
-I 匹配入站网卡接口
-o 匹配出站网卡接口
-sport 匹配源端口
-dport 匹配目标端口
-src-range 匹配源地址范围
-dst-range 匹配目标地址范围
-limit 四配数据表速率
-mac-source 匹配源MAC地址
-sports 匹配源端口
-dports 匹配目标端口
-stste 匹配状态(INVALID、ESTABLISHED、NEW、RELATED)
-string 匹配应用层字串

 

 

三、iptables初始默认解析

 

iptables默认规则
*filter

#INPUT规则链默认策略是ACCEPT

:INPUT ACCEPT [0:0]

#FORWARD 规则链默认策略是ACCEPT

:FORWARD ACCEPT [0:0]

#OUTPU 规则链默认策略是ACCEPT
:OUTPUT ACCEPT [0:0]

 

# 允许我发出去的数据包入站
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

 

# 允许ICMP协议
-A INPUT -p icmp -j ACCEPT

 

# 允许回环网卡
-A INPUT -i lo -j ACCEPT

 

# 允许ssh连接
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

 

# 拒绝所有其他不符合上述任何一条规则的数据包。并且发送一条host prohibited的消息给被拒绝的主机
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

 

#表示提交前面的规则设置

COMMIT

 

四、Docker解析

Docker与iptables及实现bridge方式网络隔离与通信

原文链接:https://blog.csdn.net/ystyaoshengting/article/details/102651969

容器和虚拟机的区别对比

iptables和容器Docker命令详细解析--看完秒懂_第1张图片

 iptables和容器Docker命令详细解析--看完秒懂_第2张图片

 

1. Docker在iptables的filter表中的链
在Docker 18.05.0(2018.5)及之后的版本中,提供如下4个chain:

DOCKER
DOCKER-ISOLATION-STAGE-1
DOCKER-ISOLATION-STAGE-2
DOCKER-USER
目前,Docker默认对宿主机的iptables设置规则完整一览,在/etc/sysconfig/iptables文件中

##地址转发表nat中的规则链及默认
*nat
#PREROUTING规则链默认策略是ACCEPT
:PREROUTING ACCEPT [0:0]
#INPUT规则链默认策略是ACCEPT
:INPUT ACCEPT [0:0]
#OUTPUT规则链默认策略是ACCEPT
:OUTPUT ACCEPT [4:272]
#POSTROUTING规则链默认策略是ACCEPT
:POSTROUTING ACCEPT [4:272]
#DOCKER规则链默认策略是ACCEPT
:DOCKER - [0:0]

#规则表中的链及默认策略
*filter
:INPUT DROP [4:160]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [59:48132]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:DOCKER-USER - [0:0]
#在FORWARD规则链中添加的规则
#数据包全部指定到DOCKER-USER链
-A FORWARD -j DOCKER-USER
 

 2.Docker中禁止修改iptables过滤表


dockerd启动时,参数--iptables默认为true,表示允许修改iptables路由表。

要禁用该功能,可以有两个选择:

设置启动参数--iptables=false
修改配置文件/etc/docker/daemon.json,设置"iptables": "false";然后执行systemctl reload docker重新加载

3.docker帮助命令大全—help

命令帮助文档:Reference documentation | Docker Documentation

命令 描述
docker attach 将本地标准输入、输出和错误流附加到正在运行的容器
docker build 从泊坞文件构建映像
docker builder 管理生成
docker checkpoint 管理检查点
docker commit 根据容器的更改创建新映像
docker config 管理容器配置
docker container 管理容器
docker context 管理上下文
docker cp 在容器和本地文件系统之间复制文件/文件夹
docker create 创建新容器
docker diff 检查对容器文件系统上的文件或目录所做的更改
docker events 从服务器获取实时事件
docker exec 在正在运行的容器中运行命令
docker export 将容器的文件系统导出为 tar 存档
docker history 显示图像的历史记录
docker image 管理图像
docker images 列出图像
docker import 从压缩包导入内容以创建文件系统映像
docker info 显示系统范围的信息
docker inspect 返回有关 Docker 对象的低级信息
docker kill 终止一个或多个正在运行的容器
docker load 从焦油存档或 STDIN 加载映像
docker login 登录到泊坞站注册表
docker logout 从泊坞站注册表注销
docker logs 获取容器的日志
docker manifest 管理 Docker 映像清单和清单列表
docker network 管理网络
docker node 管理群节点
docker pause 暂停一个或多个容器中的所有进程
docker plugin 管理插件
docker port 列出容器的端口映射或特定映射
docker ps 列出容器
docker pull 从注册表中拉取映像或存储库
docker push 将映像或存储库推送到注册表
docker rename 重命名容器
docker restart 重新启动一个或多个容器
docker rm 删除一个或多个容器
docker rmi 删除一张或多张图片
docker run 在新容器中运行命令
docker save 将一个或多个图像保存到 tar 存档(默认情况式传输到 STDOUT)
docker search 在泊坞站中心搜索映像
docker secret 管理泊坞站机密
docker service 管理服务
docker stack 管理泊坞站堆栈
docker start 启动一个或多个已停止的容器
docker stats 显示容器资源使用情况统计信息的实时流
docker stop 停止一个或多个正在运行的容器
docker swarm 管理蜂群
docker system 管理容器
docker tag 创建引用SOURCE_IMAGE的标记TARGET_IMAGE
docker top 显示容器的运行进程
docker trust 管理对 Docker 映像的信任
docker unpause 取消暂停一个或多个容器中的所有进程
docker update 更新一个或多个容器的配置
docker version 显示泊坞版本信息
docker volume 管理卷
docker wait 阻止直到一个或多个容器停止,然后打印其退出代码

 

你可能感兴趣的:(Linux,iptables,docker,linux,docker,iptables)