首页
视频
资源
登录
原
Iptables
4061
人阅读
2022/5/31 21:37
总访问:
2263622
评论:
0
收藏:
0
手机
分类:
容器编排
 >#Iptables [TOC] Iptables简介 ------------ tn2>iptables它是一个通过netfilter网络安全框架对内核空间的网络操作的一个用户空间下的一个软件。 它们的关系如下图所示:  tn2>它就相当于防火墙的一个应用可以通过一些表在内核空间下实现: 黑名单。 内核转发。 ip有规则的过滤。<br/> PREROUTING一般来讲用来转发端口的,比如你在主机的一个端口对应docker容器里面的一个端口。 ForWard就是做转发的,如果不是本机的包将会做转发,但需要开启本地的forward为1. INPUT和OUTPUT一个是进口规则,一个是出口规则。 从OUTPUT出去的PREROUTING一般是做地址转换的功能。 >### 表规则过滤 tn2>我们把具有相同功能的规则的集合叫做“表”,所以说,不同功能的规则,我们可以放置在不同的表中进行管理,而 iptables已经为我们定义了4种表,每种表对应了不同的功能,而我们定义的规则也都逃脱不了这4种功能的范围。其 中包含:<br/> **filter**表:负责过滤功能,防火墙;内核模块:iptables_filter。 **nat**表:network address translation,网络地址转换功能;内核模块:iptable_nat。 **mangle**:拆解报文,做出修改,并重新封装的功能;iptable_mangle。 **raw**表:关闭nat表上启用的连接追踪机制;iptable_raw。 >### target处理动作 tn2>处理动作在iptables中被称为target,动作也可以分为基本动作和扩展动作。 此处列出一些常用的动作,之后的文章会对它们进行详细的示例与总结: <br/> 1.**ACCEPT**:允许数据包通过。 2.**DROP**:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会 有反应。 3.**REJECT**:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。 4.**SNAT**:源地址转换,解决内网用户用同一个公网地址上网的问题。 5.**MASQUERADE**:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。 6.**DNAT**:目标地址转换。 7.**REDIRECT**:在本机做端口映射。 8.**LOG**:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对 数据包做任何其他操作,仍然让下一条规则去匹配。 iptables 规则之命令讲解 ------------ ```bash iptables -[ACD] chain rule-specification [options] iptables -I chain [rulenum] rule-specification [options] iptables -R chain rulenum rule-specification [options] iptables -D chain rulenum [options] iptables -[LS] [chain [rulenum]] [options] iptables -[FZ] [chain] [options] iptables -[NX] chain iptables -E old-chain-name new-chain-name iptables -P chain target [options] iptables -h (print this help information) ``` tn2>iptables的概念中已经提到过,在实际操作iptables的过程中,是以“表”作为操作入口的。iptables为我们预定义了4张 表,它们分别是raw表、mangle表、nat表、filter表,不同的表拥有不同的功能。 ```bash # 列出filter表的所有规则。 iptables -t filter -L ``` | 参数 | 描述 | | ------------ | ------------ | | `-t` | 指定要操作的表.(省略-t选项时,默认操作filter表) | | `-L` | 查看`-t`选项对应的表的规则, 列出规则。 | | `-v`(verbose) | 表示详细的,冗长的,当使用-v选项时,会显示出"计数器"的信息。 | | `-n` | 不解析IP地址。 | | `--line-numbers`(简写:`--line`) | 显示规则的序号。 | | `-x` | 显示计数器的精确值。 | | `-A` | 在对应链的末尾添加规则。 | | `-I` | 在对应链的开头添加规则。 | | `-j` | 动作。 | | `-D` | 删除对应链中的规则。 | | `-F` | 清空对应链中的规则。 | | `-s` | 指定的ip。匹配条件。(忽略默认为:`0.0.0.0/0`) | | `-R` | 修改规则中的动作。 | >### 查询 ```bash # 查看指定表的指定链中的规则。 iptables [-t table] -L chain # 查看指定表的所有规则,并且显示更详细的信息(更多字段)。(简写:-vL) iptables [-t table] -v -L # 表示查看表的所有规则,并且在显示规则时,不对规则中的IP或者端口进行名称反解。 iptables [-t table] -n -L # 表示查看表的所有规则,并且显示规则的序号 iptables --line-numbers -t 表名 -L # 表示查看表中的所有规则,并且显示更详细的信息,不过,计数器中的信息显示为精确的计数值,而不是显示为经过可读优化的计数值 iptables -t 表名 -v -x -L # 实际使用中,为了方便,往往会将短选项进行合并,所以,如果将上述选项都糅合在一起,可以写成如下命令,此处以filter表为例。 iptables --line -t filter -nvxL # 也可以只查看某张表中的某条链,此处以filter表的INPUT链为例 iptables --line -t filter -nvxL INPUT # 查看帮助 iptables -h | man iptables ```  >### 添加 ```bash # 在指定表的指定链的首部添加一条规则 iptables -t 表名 -A 链名 匹配条件 -j 动作 iptables -t filter -A INPUT -s 192.168.1.1 -j DROP # 在指定表的指定链的指定位置添加一条规则 iptables -t 表名 -I 链名 匹配条件 -j 动作 iptables -t filter -I INPUT -s 192.168.1.1 -j ACCEPT # 设置指定表的指定链的默认策略(默认动作),并非添加规则。 iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作 iptables -t filter -I INPUT 5 -s 192.168.1.1 -j REJECT ``` >### 删除 tn2>按照规则序号删除规则,删除指定表的指定链的指定规则。如果没有保存规则,删除规则时请慎重。 ```bash # 表示删除filter表中INPUT链中序号为3的规则。按照具体匹配条件与动作删除规则,删除指定表的指定链指定规则。 iptables -t 表名 -D 链名 规则序号 iptables -t filter -D INPUT 3 # 表示删除filter表中INPUT链中源地址为192.168.1.146并且动作为DROP的规则,删除指定表的指定链中的所有规则. iptables -t 表名 -D 链名 匹配条件 -j 动作 iptables -t filter -D INPUT -s 192.168.1.146 -j DROP # 删除指定表中的所有规则,执行时需三思。 iptables -t 表名 -F 链名 iptables -t filter -F INPUT ``` >### 修改 tn2>如果使用-R选项修改规则中的动作,那么必须指明原规则中的原匹配条件,例如源IP,目标IP等。修改指定表中指 定链的指定规则,-R选项表示修改对应链中的规则,使用-R选项时要同时指定对应的链以及规则对应的序号,并且 规则中原本的匹配条件不可省略。 ```bash # 表示修改filter表中INPUT链的第3条规则,将这条规则的动作修改为ACCEPT iptables -t filter -R INPUT 3 -s 192.168.1.146 -j ACCEPT # 表示将filter表中FORWARD链的默认策略修改为ACCEPT。 iptables -t filter -P FORWARD ACCEPT ``` Demo ------------ tn2>准备2台可以通信的机器,我这里是:`10.0.0.7`和`10.0.0.6`,我们在`10.0.0.6`上操作操作如下: ```bash # 清理iptables中的规则(切勿在生产中使用) iptables -t filter -F INPUT # 从filter末尾添加一条进来的规则,设置ip来自10.0.0.7的请求不可访问 iptables -t filter -A INPUT -s 10.0.0.7 -j DROP # 查看filter表中的相关项 iptables --line -t filter -nvxL INPUT # 接着我们来到客户端(10.0.0.6)ping主机,发现ping不通了 ping 10.0.0.6 ```  tn2>接着我们从filter头部添加一条进来的规则,设置ip来自`10.0.0.7`的请求可访问,我们可以从表中看到有两条记录了,一般进来的请求按顺序进行匹配,匹配到合适的便不会向下去找其他规则了。 添加好后,我们发现又可以进行请求了。 ```bash iptables -t filter -I INPUT -s 10.0.0.7 -j ACCEPT ```  tn2>删除我们添加的允许来自`10.0.0.7`数据包通过那项。再次尝试我们发现它又ping不通了。 tn>当有多个规则匹配允许来自`10.0.0.7`数据包通过时,需要一条一条删除。 ```bash iptables -t filter -D INPUT -s 10.0.0.7 -j ACCEPT ```  tn2>修改我们DROP为ACCEPT。我们发现又可以ping通了。 ```bash iptables -t filter -R INPUT 1 -s 10.0.0.7 -j ACCEPT ``` 
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}
尘叶心繁
这一世以无限游戏为使命!
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.net后台框架
164篇
linux
17篇
linux中cve
1篇
windows中cve
0篇
资源分享
10篇
Win32
3篇
前端
28篇
传说中的c
4篇
Xamarin
9篇
docker
15篇
容器编排
101篇
grpc
4篇
Go
15篇
yaml模板
1篇
理论
2篇
更多
Sqlserver
4篇
云产品
39篇
git
3篇
Unity
1篇
考证
2篇
RabbitMq
23篇
Harbor
1篇
Ansible
8篇
Jenkins
17篇
Vue
1篇
Ids4
18篇
istio
1篇
架构
2篇
网络
7篇
windbg
4篇
AI
17篇
threejs
2篇
人物
1篇
嵌入式
2篇
python
9篇
HuggingFace
8篇
pytorch
1篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2023
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术