基础知识Iptables

一、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 搭建过程中无法使用

你可能感兴趣的:(基础知识Iptables)