Iptables 被分为两部分,一部分被称为核心空间, 另一部分成为用户空间, 在核心空间,iptables从底层实现了数据包过滤的各种功能, 比如NAT、状态监测以及高级数据包的匹用户空间,iptables为用户提供了控制核心空间工作状态的命令集。iptables是采用规则堆栈的方式来进行过滤,在数据报文出入主机时在TCP/IP协议栈对数据报文进行拦截并执行对应netfilter架构中防火墙的五个拦截点,称为hook function(钩子函数)。整个netfilter/iptables框架是由四个表和五个链构成。
下面介绍iptablesd的基本命令:
iptables命令格式
iptables的基本语法格式使用iptables命令设置防火墙规则时,其基本的命令格式如下:
iptables [ -t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
其中,表名、链名用于指定iptables命令所操作的表和链,若未指定表名,将默认使用filter表;命令选项用于指定管理iptables规则的方式,如插入、增加、删除以及查看等;条件对符合什么样条件的数据包进行处理;目标动作或跳转用于知道数据包的处理方式,如允许通过、拒绝、丢弃或跳转(jump)给其他链进行处理等。
iptables [-t 表] -命令 匹配 [-j 操作]
一. 表
iptables具有Filter, NAT, Mangle, Raw四种内建表:
1. Filter表
Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:
INPUT链 – 处理来自外部的数据。
OUTPUT链 – 处理向外发送的数据。
FORWARD链 – 将数据转发到本机的其他网卡设备上。
2. NAT表
NAT表有三种内建链:
PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address), 通常用于DNAT(destination NAT)。
POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于 SNAT(source NAT)。
OUTPUT链 – 处理本机产生的数据包。
3. Mangle表
Mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。Mangle表具有5个内建链:
PREROUTING
OUTPUT
FORWARD
INPUT
POSTROUTING
4. Raw表
Raw表用于处理异常,它具有2个内建链:
PREROUTING chain
OUTPUT chain
表名、链名用于指定iptables命令所操作的表和链,若未指定表名,将默认使用filter表;
二. 命令
用于指定iptables的执行方式,包括插入规则,删除规则和添加规则
P (policy) 定义默认策略L (list) 查看iptables规则列表
A (append) 在规则列表的最后增加一条规则I (insert) 在指定位置插入
D (delete) 在规定列表中删除
R (replace) 替换规则列表中的某条规则
F (flush) 删除表中所有规则(清空)
Z(zero) 将表中数据包计数器和流量计数器归零
X(delete-chain)删除自定义链
n(numeric)使用数字形式显示输出结果
v(verbose)查看规则表详细信息的信息。
h(help)获取帮助
三、匹配规则
指定数据包与规则匹配所具有的特征,包括源地址,目的地址,传输协议和端口号。(即指定包信息)
i -in-inerface
o out-interface
p proto 协议类型
s source 源IP地址或子网
sport 源端口号
dport 目的端口号
m match匹配的模块
四、操作
目标动作或用于跳转时指导数据包的处理方式,如允许通过、拒绝、丢弃或跳转(jump)给其他链进行处理等。
ACCEPT 允许数据包通过
DROP 直接丢弃数据包,不再对比其他规则,中断过滤程序。
REJECT 阻拦数据包,并通知对方。
下面是几条例子语句:
1、 iptables -A INPUT -p tcp -j LOG --log-prefix "input packet"
LOG 在/var/log/messages文件中记录日志信息,继续比对其它规则。
即在日志中记录来客访问行为
2、 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8081
REDIRECT 将封包重新导向到另一个端口(PNAT),然后继续比对其它规则。这个功能可以用来作透明代理或保护web 服 务器。
即可以使得外部网络只能知道对外说明的开放发端口号,而不知内部主机开发的真实端口号。
3 、iptables -t nay -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 192.168.10.1-10.0.8.68:2100-3200
SNAT 改写封包来源 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将直接跳往下一个 规则链(mangle:postrouting)。
即将内部网要出去的数据包更改IP范围与端口范围,例子,从内部网络经过防火墙出去时私有IP改为公有IP。