IPTables是基于Netfilter基本架构实现的一个可扩展的数据报高级管理系统或核外配置工具,利用table、chain、rule三级来存储数据报的各种规则。Netfilter-iptables由两部分组成,一部分是Netfilter的"钩子",另一部分则是知道这些钩子函数如何工作的一套规则--这些规则存储在被称为iptables的数据结构之中。钩子函数通过访问iptables来判断应该返回什么值给Netfilter框架。
iptables的结构:
表名包括(4张表):
raw:高级功能,如:网址过滤。
mangle:数据包修改(QOS),用于实现服务质量。
nat:地址转换,用于网关路由器。
filter:包过滤,用于防火墙规则。 (默认)
规则链名包括(5条链):
INPUT链:处理输入数据包。
OUTPUT链:处理输出数据包。
PORWARD链:处理转发数据包。
PREROUTING链:用于目标地址转换(DNAT)。
POSTOUTING链:用于源地址转换(SNAT)。
动作包括:
ACCEPT:接收数据包。
DROP:丢弃数据包(无返回值)。
REJECT:拒绝(有返回值)。
SNAT:源地址转换。
DNAT:目标地址转换。
LOG:日志记录。
iptables命令输入格式:
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
语法格式:
iptables(选项)(参数)
选项:
-t <表>:指定要操纵的表;(没有这个 "-t <table>"参数的话,默认使用 “filter”表!)
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-I:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:匹配来源地址IP/MASK,加叹号"!"表示除这个IP外;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。
-m <模块名> <匹配该模块下的某一项> : 使用扩展模块来进行数据包的匹配
删除已添加的iptables规则:
1 将所有iptables以序号标记显示,执行: 2 iptables -L -n --line-numbers 3 4 比如要删除INPUT里序号为8的规则,执行: 5 iptables -D INPUT 8
实例:
1 iptables -I INPUT -p tcp --dport 80 -j ACCEPT (这里没有 -t <table>,默认为“-t filter”) 2 iptables -A INPUT -p tcp --dport 22:25 -j ACCEPT #允许访问22--25之间的端口 3 iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即从123.45.6.1到123.45.6.254的命令 4 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #使用模块 “state” 下的 “--state” 规则,允许已建立的或相关连的通行