文章目录
-
目录
文章目录
前言
一.静态防火墙:iptables
iptables五链
iptables 四表
iptables控制类型
iptables命令配置
前言
这儿主要介绍Linux系统本身提供的软件防火墙的功能,即数据包过滤机制。 数据包过滤,也就是分析进入主机的网络数据包,将数据包的头部数据提取出来进行分析,以决定该连接为放行或抵挡的机制。由于这种方式可以直接分析数据包头部数据,包括硬件地址,软件地址,TCP、UDP、ICMP等数据包的信息都可以进行过滤分析,因此用途非常广泛。
一.静态防火墙:iptables
iptables 不是防火墙,而是客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的安全框架netfilter中。
iptables 特点:
- netfilter位于内核空间中,而iptables是控制netfilter的工具,位于用户空间。
- 通过iptables可以编写某些规则并保存到netfilter中,从而起到防护效果。
- netfilter/iptables组成Linux平台下的包过滤防火墙,可以完成包过滤,NAT等功能。
- iptables默认默认允许访问,需要拒绝的采取限制。
iptables五链
五链实际是五规则链的简称,而每个规则链由多个规则组成;每个数据包被iptables过滤时都要经过如下五个规则链的筛选:
规则链 | 位置 | 作用 | 场景 |
PREROUTING链 | 数据包进入网络接口后,路由决策前 | 可以用于修改数据包的目的地址(DNAT),改变数据包的路由路径 | 用户目标NAT |
INPUT链 | 数据包在被路由到本地系统之后 | 过滤进入本地服务器的数据包 | 防火墙规则,允许或拒绝进入本地系统的流量 |
FORWARD链 | 数据包在路由决策之后 | 控制通过本地系统转发的数据包 | 路由器或网关上,用于控制数据包的转发 |
OUTPUT链 | 数据包由本地系统产生,经过路由决策之前 | 控制本地系统发出的数据包 | 允许或拒绝本地系统发送的流量 |
POSTROUTING链 | 据包离开网络接口之前 | 可以用于修改数据包的源地址,改变数据包离开系统时的地址信息 | 用户源NAT |
iptables 四表
在Linux中的iptables中,表(tables)是用于组织规则链的结构。iptables包含四个主要的表,每个表专门用于不同类型的数据包处理。以下是主要的四个表:
表 | 功能 | 默认链 | 应用场景 | 作用 |
filter表 | 主要用于数据包过滤 | INPUT、FORWARD、OUTPUT | 根据定义的规则决定是否接受、拒绝或丢弃数据包 | 防火墙规则 |
nat表 | 用于网络地址转换(NAT) | PREROUTING、POSTROUTING、OUTPUT | 改数据包的源地址或目的地址,以实现地址映射和端口转发 | NAT |
mangle表 | 用于对数据包进行修改 | PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD | 可以修改数据包的TTL值等 | 需要对数据包的服务质量(QoS)进行控制或流量整形时 |
raw表 | 对数据包的状态跟踪机制 | PREROUTING、OUTPUT | 可以决定数据包是否被状态跟踪机制处理,通常用于实现高性能的处理 | 需要对状态跟踪机制进行细粒度控制时 |
数据包到达防火墙根据下图进行匹配:
iptables控制类型
iptables的每张表包含不同的控制类型,不同的控制类型允许管理员对数据包执行不同的操作。以下是iptables的主要控制类型:
- Accept:允许数据包通过
- Drop:丢弃数据包
- Reject:拒绝数据包通过
- Snat:修改数据包源IP
- Dnat:修改目标IP
- Masquerade:伪装成一个非固定的公网IP
- Log:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
iptables命令配置
基本语法:
iptables [选项] 命令 [链] [匹配条件] [目标]
iptables -t 表名 【参数】 规则链名 -p 协议名 -s 源IP --sport 源端口 -d 目标IP --dport 目标端口 -j 动作
参数:
-A:在指定链的末尾插入指定的规则
-D:在指定的链中删除 一个或多个指定规则
-I: 在指定链中的指定位置插入一条或多条 规则
-R: 替换/修改第几条规则
常见选项:
演示案例:
#允许所有IP访问3306端口
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
#允许指定IP访问3306端口
sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 3306 -j ACCEPT
#显示规则
iptables -L
#保存规则
#删除INPUT链表中的规则
iptables -D INPUT -p tcp --dport 3306 -j ACCEPT
注意:iptables的匹配规则是自上而下匹配,当遇见如下情况:如Mysql数据库的3306端口已经开放,但是仍然无法通过3306端口远程连接,此时可能是在开放3306的规则之前的某些规则阻止了连接。
上述情况解决办法如下:清空所有规则,唯独留下开放3306端口的规=规则,若成功连接则逐一排除阻止连接的规则
sudo iptables -F
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT