iptables使用详解@(linux)[iptables]
前言最近买了一个VPS,并在上面搭了DOCKER , 然后再DOCKER中安装Mysql 。但只要将网络端口映射到宿主机上,那么外部网络就可以直接访问该数据 。属实吓人 。为此,我们需要使用防火墙 。
说到防火墙,CentOS有FirewallD,Ubuntu有ufw。它们的用法和语法不尽相同,但有一点却是一致的,那就是他们底层都使用了iptables 。所以为了在不同发行版的linux下都能安全管理我们的服务器,教练,我想学这个iptables
由于FirewallD和ufw本质都是基于iptables的 , 那么它们都会在iptables中添加一些规则,甚至定义一些链 , 为了不跟往后我们自己定义的规则相冲突,第一件事 , 便是停止并卸掉FirewallD和ufw对应的服务 。
停掉FirewallD
sudo systemctl stop firewalld //停止FirewallDsudo systemctl disable firewalld //让FirewallD 不要随系统启动而启动
停掉ufw
sudo ufw disable //停止并在系统启动时不启动ufw
iptables是啥iptables是一个linux下的防火墙工具 , 它能帮助我们基于规则进行网络流量控制 。它可以做到 , 但不限于以下功能:
- 允许/拒绝某种协议的链接建立,比如TCP,UDP
- 允许/拒绝 来自某个ip的访问
- 允许/拒绝某个端口被访问
- ...
来自192.168.2.31的访问,就要将其拒绝
,这即是一条规则链(chain)往往我们的安全策略不只一条规则 , 除了
来自192.168.2.31的访问,就要将其拒绝
这条规则之外,我们还有其它规则,比如:来自192.168.43.22的访问,也要将其拒绝
甚至,我们可能还有多个互斥的规则,这多个规则,哪个规则先执行? 这就涉及到链这个概念 。简单来讲,链就是将多个规则从上大小串起来的一个集合单位 。规则按从上倒下依次进行匹配 。
![iptables使用详解](http://img.zhejianglong.com/231018/1310293304-0.png)
文章插图
表(table)链条可以有多个 。将多个链条再规整在一起的集合,叫做表 。
![iptables使用详解](http://img.zhejianglong.com/231018/13102940Y-1.png)
文章插图
总览在iptables中,有四张表:
- filter:这里面的链条,规则,可以决定一个数据包是否可以到达目标进程端口
- mangle: 这里面的链条,规则,可以修改数据包的内容 , 比如ttl
- nat:这里面的链条,规则 , 可以修改源和目标的ip地址,从而进行包路由 。
- raw:这里面的链条,规则,能基于数据包的状态进行规则设定
- INPUT:对路由策略分派过来的包到达目标进程端口之前进行匹配并处理,后续会讲到细节- FORWARD:对路由策略分派过来的包进行路由转发,后续会讲到细节- OUTPUT:判断,从本地的目标进程端口处理好的包如何返回/要不要返回给请求方
mangle表中的链有:PREROUTING:包在到达网口时,进行规则匹配INPUT:含义同filterFORWARD: 含义同filterOUTPUT: 含义同filterPOSTROUTING: 包离开网口的时候匹配
nat表中的链有:PREROUTING:含义同mangleOUTPUT:含义同filterPOSTROUTING:含义同mangle
raw表中的链有:PREROUTING:含义同mangleOUTPUT:含义同filter注意,虽然不同的表中有同名的链,但他们并不是同一个链 , 并且一个链只能引用同一个表中的链,不能跨表引用 。,平时我们的防火墙策略配置,即是在上述各个表的各个链中配置具体的规则
规则生效顺序虽然一个链中的规则是从上到下依次匹配,但多个表中的多个链,甚至同名链的之间的匹配优先顺序是啥?这就要看下图了
![iptables使用详解](https://www.huyubaike.com//bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2ltZzIwMjIuY25ibG9ncy5jb20vYmxvZy8yMDA3MjY4LzIwMjIxMC8yMDA3MjY4LTIwMjIxMDAxMTY0MzAyMjI4LTg2NzAyMDk5NC5wbmc=.jpg)
文章插图
PREROUTING 链PREROUTING 链是最先生效的,当数据包到达网口时 , 即开始工作 。同时由于其在raw, mangle, nat表中都存在,其执行的优先顺序是:raw(PREROUTING) ----> mangle(PREROUTING)----> mangle(nat)
PREROUTING 一般用作对包进行目标地址修改 。比如将该包的目标地址,修改为非本机的另外的网络ip , 一般通过
DNAT
规则进行修改 。路由决策(Routing Decision)决定一个包该走哪个链 。如果上述PREROUTING 链对包进行了目标网络ip更改 。那么决策会觉得这个是一个需要转发的数据包,于是会将该包转发给 FORWARD 链 。
推荐阅读
- 渐变维度 使用 Apache Hudi 实现 SCD-2
- 华为车载智慧屏值得买吗_华为车载智慧屏使用评测
- Pytest进阶使用
- RAID5 IO处理之条带读代码详解
- RAID5 IO处理之写请求代码详解
- RAID5 IO处理之重构代码详解
- RAID5 IO处理之replace代码详解
- 如何使用 pyqt 读取串口传输的图像
- 数据科学学习手札144 使用管道操作符高效书写Python代码
- 你们觉得华为手机卡不卡,使用体验如何(华为加装nm卡缺点)