草庐IT

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

十九遇你 九十与你 2023-08-25 原文

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

容器和虚拟机的区别对比

 

 

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阻止直到一个或多个容器停止,然后打印其退出代码

 

有关iptables和容器Docker命令详细解析--看完秒懂的更多相关文章

  1. Ruby 解析字符串 - 2

    我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  4. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  5. ruby-on-rails - 我更新了 ruby​​ gems,现在到处都收到解析树错误和弃用警告! - 2

    简而言之错误:NOTE:Gem::SourceIndex#add_specisdeprecated,useSpecification.add_spec.Itwillberemovedonorafter2011-11-01.Gem::SourceIndex#add_speccalledfrom/opt/local/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:91./opt/local/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/rails/gem_dependency.rb:275:in`==':und

  6. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  7. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  8. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  9. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

  10. ruby - 从 Ruby : capturing the output while displaying the output? 运行 shell 命令 - 2

    我有一个问题。我想从另一个ruby​​脚本运行一个ruby​​脚本并捕获它的输出信息,同时让它也输出到屏幕。亚军#!/usr/bin/envrubyprint"Enteryourpassword:"password=gets.chompputs"Hereisyourpassword:#{password}"我运行的脚本文件:开始.rboutput=`runner`putsoutput.match(/Hereisyour(password:.*)/).captures[0].to_s正如您在此处看到的那样,存在问题。在start.rb的第一行,屏幕是空的。我在运行程序中看不到“输入您的密

随机推荐