iptables 详解

概述

iptables是一个在用户空间运行的应用软件,通过控制Linux内核netfilter模块来管理网络数据包的流动与转发。在大部分Linux系统上面,iptables是使用/usr/sbin/iptables来操作。通常,iptables都需要内核级的模块来配合运行,主要是在内核层级里面通过iptables API 来执行功能的模块。由于相关操作上的需要,iptables的操作需要用到超级用户的权限。

iptables 结构图

+--------------------+         +--------------------+         
| system-config-firewall |         | firewall-config      |         
+---------+----------+         +---------+----------+         
          |                             |                           
          |                             |                           
          v                             v                           
+--------------------+         +--------------------+         
|  iptables service  |         | firewall-cmd       |         
+---------+----------+         +---------+----------+         
          |                             |                           
          v                             v                           
+----------------------------+         +------------------------+    
|         iptables command   |         | firewalld daemon&service |   
+---------------+------------+         +---------+----------+       
                |                                  |                
                v                                  v                
+----------------------------+         +------------------------+    
|      kernel netfilter      |         |      kernel netfilter   |    
+----------------------------+         +------------------------+    

iptables与其他防火墙服务及工具的关系。

iptables 语法

iptables [-t 表名] 命令选项 链名 条件选项 [-j 控制类型]
  • 若不指定表名,默认使用filter表。
  • 命令选项、链名、控制类型必须大写,其他选项小写。

控制类型

  1. ACCEPT: 允许数据包通过
  2. REJECT: 拒绝并返回信息
  3. DROP: 丢弃数据包,无反馈信息
  4. LOG: 记录日志,并传递到下一条规则
  5. SNAT: 源地址转换
  6. DNAT: 目标地址转换
  7. MASQUERADE: 地址伪装
  8. REDIRECT: 重定向数据包

常用命令选项

  1. -A: 添加规则到链末尾
  2. -I: 插入规则到链的指定位置(默认第一条)
  3. -L: 列出所有规则
  4. -D: 删除指定规则
  5. -F: 清空链中所有规则
  6. -P: 设置默认策略(仅适用于ACCEPTDROP
  7. -R: 替换规则
  8. -X: 删除用户自定义链
  9. -N: 新建自定义链
  10. -n: 以数字格式显示
  11. --line-number: 显示规则编号

条件选项

  1. 通用匹配:

    • -s: 源地址
    • -d: 目标地址
    • -p: 协议
    • -i: 入接口
    • -o: 出接口
    • !: 取反
  2. 隐含匹配:

    • --sport: 源端口
    • --dport: 目标端口
    • --tcp-flags: TCP 标记
    • --icmp-type: ICMP 类型(如echo-requestecho-reply

开启转发功能

  1. 永久生效:

    # vim /etc/sysctl.conf
    net.ipv4.ip_forward=1
    # sysctl -p
  2. 临时生效:

    # sysctl -w net.ipv4.ip_forward=1
    # echo "1" > /proc/sys/net/ipv4/ip_forward

显示配置

  • 多端口匹配:

    -m multiport --sports 源端口列表
    -m multiport --dports 目标端口列表
  • IP 范围匹配:

    -m iprange --src-range IP范围
  • MAC 地址匹配:

    -m mac --mac-source MAC地址
  • 状态匹配:

    -m state --state 连接状态

举例说明

  1. 查看防火墙规则

    # iptables -nvL
  2. 插入一条规则,拒绝发送给本机使用的ICMP协议的数据包

    # iptables -t filter -I INPUT -p icmp -j REJECT
  3. 允许 TCP 端口 25, 110, 143 的访问

    # iptables -A INPUT -p tcp -m multiport --dport 25,110,143 -j ACCEPT
  4. 禁止源地址位于 192.168.1.100 到 192.168.1.200 之间的 TCP 数据包转发

    # iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP
  5. 删除 filter 表 INPUT 链中的第一条规则

    # iptables -D INPUT 1
  6. 清空指定链中的所有防火墙规则

    # iptables -F INPUT
  7. 清空 filter、nat、mangle 表中的所有规则

    # iptables -F
    # iptables -t nat -F
    # iptables -t mangle -F

本文由mdnice多平台发布


逼格高的汤圆
10 声望2 粉丝