# iptables **Repository Path**: tang-gitee-hh/iptables ## Basic Information - **Project Name**: iptables - **Description**: iptables笔录 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-01-31 - **Last Updated**: 2024-01-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README iptables基础 ============ 概述:ip包过滤系统,实际由netfilter和iptables组成
netfilter/iptables关系: - netfilter是内核的一部分,由包过滤表组成,这些表包含内核用来控制包过滤处理的规则集 - iptables是用户空间的一种工具,简化插入、修改、删除包过滤表中的规则 ```diff iptables内置三表filter,nat,mangle五链postrouting,prerouting,input,output,forward,所有规则配置后立即生效 ``` ### 三表 - filter:负责过滤数据包,包扩input,output,forward三个规则链 - nat:负责网络地址转换,包括prerouting,postrouting,output三个规则链 - mangle:负责修改数据包内容,用于流量整形,给数据包打标,默认包括五链 ```diff + iptables中还有一个raw表,用于处理异常,包括prerouting,output两个规则链,使用较少 ``` ### 五链 - input:匹配目标IP是本机的数据 - forward:匹配流经本机的数据 - prerouting:修改DIP,用于外网访问内网,做DNAT。路由判断之前的nat,地址转换后再匹配路由表,此表通常自动配合postrouting使用 - postrouting:修改SIP,用于内网访问外网,做SNAT。路由判断之后的nat,只有先匹配到目的路由之后才会做地址转换,做了SNAT后数据包回来时会自动做DNAT - output:出口数据包 补充:在私有主机普及的情况下解决ipv4上网的方案只有两种:nat 和 proxy
示例:查看nat表 ```shell # iptables -t nat -L -t:指定要查看的表 -L:表示list ``` iptables过滤封包流程 ------------------- ```shell --> PREROUTING --> [ROUTE] --> FORWARD --> POSTROUTING --> mangle | mangle ↑ mangle nat | filter | nat ↓ | INPUT OUTPUT |mangle ↑ |filter |mangle | | nat ↓----> local ---->|filter ``` 整体数据包分两类: 1. 发送给防火墙本身的数据包 此类数据包将经过**除了forward链**以外的四个链,可以通过在不同的位置调整不同的表中的规则对数据包设置规则 2. 经过防火墙的包 经过防火墙的包不会经过input和output两个链 ```diff - 既然一个链可以在多个表中生效,那么四个表必然有优先顺序: - raw > mangle > nat > filter ``` #### 链间的匹配顺序(根据过滤封包流程看) - 入站数据:prerouting、input - 出站数据:output、postrouting - 转发数据:prerouting、forward、postrouting #### 链内的匹配顺序 - 自上向下按顺序匹配规则,匹配到相应规则即停止 - 链内无相匹配的规则时,按照该链的默认策略处理(未修改情况下,默认策略为允许) #### iptables命令语法格式 iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转] 注:iptables命令区分大小写 ```diff - 不指定表名时,默认为filter表 - 不指定链名时,默认为该表内所有链 - 除非设置规则链的缺省策略,否则需要指定匹配条件 ```