iptables的规则表和链
表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。
链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。
目录
1. Docker在iptables的filter表中的链在Docker 18.05.0(2018.5)及之后的版本中,提供如下4个chain:
规则表之间的优先顺序
规则表之间的优先顺序 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
容器和虚拟机的区别对比
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 | 阻止直到一个或多个容器停止,然后打印其退出代码 |