basic
iptabls 是一个配置Linux内核防火墙的命令行工具.是netfilter项目一部分.
- iptables 用于ipv4
- ip6tables 用于ipv6
iptables 可以检测,修改,转发,重定向和丢弃ipv4数据包.
iptables 对从任何端口进入的数据包都采用相同的处理方式.可以定义规则使用iptables采用不同的方式对待从不同端口进入的数据包.
table->链->顺序规则->谓词 > next table…
下面的图片中:
- 一些数据包是用于本地进程的,因此在图中表现为从顶端进入,到Local Process停止
- 一些数据包是由本地进程生成的,因此在图中表现为从Local Process发出,一直向下.最后输出到NetWork
tables
iptables 包含5张表tables :
- raw 用于配置数据包,raw中的数据不会被系统跟踪
- filter 用于存放所有与防火墙相关操作的默认表
- nat 用于网络地址转换,例如:端口转发
- mangle 用于对特定数据包的修改
- security 用于强制访问控制网络规则.例如:SELinux.
Chains
表由链组成.链是一些按顺序排列的规则的列表.
- filter 默认规则链
- INPUT 处理输入数据包
- OUTPUT 处理输出数据包
- FORWARD 处理转发数据包
- nat 默认规则链
- PREROUTING 用于目标地址转换(DNAT)
- POSTROUTING 用于源地址转换(SNAT)
- OUTPUT
- 默认情况下,任何链中都没有规则。可以向链中添加自己想用的规则。
- 链的默认规则通常设置为 ACCEPT,如果想确保任何包都不能通过规则集,那么可以重置为 DROP。
- 默认的规则总是在一条链的最后生效
Rules
数据包的过滤基于规则。规则由一个目标(数据包包匹配所有条件后的动作)和很多匹配条件(导致该规则可以应用的数据包所满足的条件)指定。
目标使用-j或者–jump指定.
+ 可以是用户定义的链
+ 可以是内置的目标
– ACCEPT
– DROP
– QUEUE
– RETURN
+ 可以是一个目标的扩展
– REJECT
– LOG
- 如果目标是内置目标,数据包的命运会立刻被决定并且在当前表的数据包的处理过程会停止。
- 如果目标是用户定义的链,并且数据包成功穿过第二条链,目标将移动到原始链中的下一个规则。
- 目标扩展可以被终止(像内置目标一样)或者不终止(像用户定义链一样)
Traversing Chains
图片描述了在任何接口上收到的网络数据包是按照怎样的顺序穿过表的规则链
- 第一个路由策略包括决定数据包的目的地是本地主机(这种情况下,数据包穿过 INPUT 链),还是其他主机(数据包穿过 FORWARD 链);
- 中间的路由策略包括决定给传出的数据包使用那个源地址、分配哪个接口;
- 最后一个路由策略存在是因为先前的 mangle 与 nat 链可能会改变数据包的路由信息.
command
- 查看当前规则和匹配数
iptables -vnL
- 刷新和重置iptables到默认状态
iptables -F
-F 没有其他参数: 命令在当前表中刷新所有链
iptables -X
-X 命令删除表中所有非默认链
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -t raw -F
iptables -t raw -X
iptables -t security -F
iptables -t security -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
- 编辑规则,有两种方式添加规则
- 一种是在链上附加规则
- 一种是将规则插入到链上某个特定位置
logging
The LOG target can be used to log packets that hit a rule. Unlike other targets like ACCEPT or DROP, the packet will continue moving through the chain after hitting a LOG target. This means that in order to enable logging for all dropped packets, you would have to add a duplicate LOG rule before each DROP rule.
reference
文章内容来自于:archlinux iptables
图片来自于:iptables-tutorial
常用命令来自:iptables命令