一、iptables的四表五链
链是放在表中的,总共有四个表,每个表有不同的优化级:raw>mangle >nat> filter
1、四表
1.1、raw表
是自1.2.9以后版本的iptables新增的表,主要用于决定数据包是否被状态跟踪机制处理,一般在高并发时有可能会用到,来设置一些连接不跟踪状态,防止ip_conntrack文件被撑爆
很少用
1.2、mangle表
主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)指以及为数据包设置Mark标记,可以实现分流功能
很少用
1.3、nat表
主要用于修改数据包的IP地址、端口号等信息(网络地址转换,如SNAT、DNAT、MASQUERADE、REDIRECT),一般在作为网关服务器上会用到,搭建过openvpn的话,肯定会用到。
1.4、filter表
主要用于对数据包进行过滤,有DROP、ACCEPT、REJECT、LOG等,默认的规则是添加到filter表
2、五链
当数据包到达这些位置的时候会调用这些函数,在这些位置上我们可以对数据包的内容进行修改,达到控制的目的,这5个挂载点分别是PRE_ROUTING、INPUT、OUTPUT、FORWARD、POST_ROUTING。也就是我们常说的五条链。
每个表中都有对应的链,因此有个优先级,会以高优先级为准
链名 | 说明 |
---|---|
PREROUTING链 | 对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理) |
INPUT链 | 进来的数据包应用此规则链中的策略 |
FORWARD链 | 转发数据包时应用此规则链中的策略 |
OUTPUT链 | 外出的数据包应用此规则链中的策略 |
POSTROUTING链 | 对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理) |
二、iptables数据流生命
image.png三、iptbales说明
3.1 命令行配置格式
iptables [-t 表名] 管理选项 [链名] [匹配条件] [ -j 控制类型]
不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
-
选项、链名、控制类型使用大写字母,其余均为小写
image.png
3.1.1、控制类型
专有名词 | 作用 |
---|---|
ACCEPT | 允许数据通过 |
DROP | 直接丢弃数据包,不会给出回应信息 |
REJECT | 拒绝数据包通过,给出回应信息 |
SNAT | 修改数据包源地址 |
DNAT | 修改数据包目的地址 |
MASQUERADE | 伪装为一个非固定公网IP地址 |
LOG | /var/log/messages 文件中记录日志信息然后将包传递给下一条规则。只是一种辅助动作,并不会真正处理数据包 |
3.1.2、 常用管理选项
- -A ∶ 在指定链的末尾追加 (–append)一条新的规则
- -I ∶ 在指定链的开头插入(–insert)一条新的规则, 未指定序号时默认作为第一条规则
- -R ∶ 修改、替换(–replace)指定链中的某一条规则,可指定规则序号或具体内容
- -P ∶设置指定链的默认策略(–policy)
- -D ∶ 删除 (–delete)指定链中的某一条规则, 可指定规则序号或具体内容
- -F ∶ 清空(–flush)指定链中的所有规则,若未指定链名,则清空表中的所有链
- -L∶列出 (–list)指定链中所有的规则,若未指定链名,则列出表中的所有链
- -n ∶ 使用数字形式(–numeric)显示输出结果,如显示 IP 地址而不是主机名
- -v ∶ 显示详细信息,包括每条规则的匹配包数量和匹配字节数
- --line-numbers∶ 查看规则时,显示规则的序号
3.1.3、匹配条件
- -p :指定要匹配的数据包协议类型
- -s :指定要匹配的数据包源 IP 地址
- -d : 指定要匹配的数据包的目的 IP 地址
- -i :指定数据包进入本机的网络接口
- -o :指定数据包离开本机的网路接口
- -sport :指定源端口号
- --dport :指定目的端口号
四、iptables命令详解
1、查看
iptables -nL #默认查看filter表规则
iptables -nL -t filter #查看指定表 filter表规则
iptables -nL --line-numbers # 列出filter表规则并带上id
1、添加
命令格式
iptables [-t 表名 ] [-A |-I |-R] <链名><控制类型>
iptables -A INPUT -p22 ACCEPT #在filter表追加一条规则
iptables -I INPUT 1 -p22 ACCEPT #filter表id为1的插入一条规则id 为1
2、删除
命令格式
iptables [-t 表名 ] -D <链名><控制类型> 或者 iptables [-t 表名 ] -D <链名> [id]
#先列出iptables的id
iptables -nL --line-numbers
iptables -D INPUT xxx # 删除filter表下INPUT链id为xxx的规则
#也可以根据条件删除
iptables -t filter -D INPUT -p icmp -j REJECT #删除filter表下INPUT链上拒绝icmp协议的规则
4、设置默认规则
命令格式 iptlables [-t 表名 ] -P <链名><控制类型>
一般不会设置
iptables -P INPUT DROP #设置filter 表,INPUT 链默认控制类型为 DROP
iptables -P FORWARD DROP #设置 filter 表,foreword 链默认类型为 DROP
5、清空规则
iptables [-t 表名] -F [链名]
iptables -F # 删除默认表filter 的所有链规则
iptables -F INPUT #删除默认表filter的INPUT链规则
五、 SNAT 和 DNAT
在vpn搭建过程中要替换掉虚拟ip的网段,就要用到SNAT,因为安全组中会校验ip,所以这个是关键
条件
-
局域网各主机已正确设置IP地址、子网掩码、默认网关地址(一般情况下都设置好了,无需处理)
-
Linux网关开启IP路由转发
vim /etc/sysctl.conf net.ipv4.ip_forward = 1 #将此行写入配置文件,开启ipv4转发 sysctl -p #读取修改后的配置
demo
iptables -t nat -A POSTROUTING -s 192.168.23.0/24 -o ens33 -j SNAT --to 12.0.0.1 #将入口为网段ip为 192.168.23.0/24 转发到ens33网卡并替换ip为12.0.0.1
iptables -t nat -A POSTROUTING -s 192.168.23.0/24 -o ens33 -j MASQUERADE #将入口网段192.168.23.0/24转发到ens33网卡并随机伪装ip,这个在vpn 搭建过程中无法使用
网友评论