功能描述

使用iptables命令可以设置、维护和检查在Linux内核中的IPv4数据包过滤规则表。几个不同的表可以被定义。每个表含有一些内置的链,也可以含有用户自定义链。每条链是规则可匹配一组的包的列表。每个规则指定如何处理数据包匹配。这就是所谓的“目标”,其可以在同一表中跳转到一个用户定义的链。

命令语法

iptables [-t 表] {-A|-D} [链] [规则详述]
iptables [-t 表] -I [链] [规则号] [规则详述]
iptables [-t 表] -R [链] [规则号] [规则详述]
iptables [-t 表] -D [链] [规则号]
iptables [-t 表] -S [链] [规则号]
iptables [-t 表] {-F|-L|-Z} [链[规则号]] [选项]
iptables [-t 表] -N [链]
iptables [-t 表] -X [链]
iptables [-t 表] -P [链] [目标]
iptables [-t 表] -E [旧链名] [新链名]

操作命令是指执行iptables时所需的操作,比如添加、删除、插入、列出规则等。

 
操作命令 描述
-A 在指定链的链尾添加规则
-D 从指定链中删除匹配的规则
-R 在指定链中替换匹配的规则
-I 以指定规则号在所选链中插入规则
-L 列出指定链或所有链的规则
-S 显示指定链或所有链的规则
-F 在指定链或所有链中删除所有规则
-N 指定名称创建新的用户自定义链
-X 删除指定的用户自定义链
-P 在内置链上设置默认规则策略,用户自定义链不起作用
-Z 将指定链或所有链中所有规则的包字节计数器清零
-E 更改用户自定义链的名称
-v 输出详细信息
-n 数字输出,IP地址和端口号将以数字格式显示
-x 扩大数字,显示包和字节计数器的精确值

基本规则匹配器用于匹配数据包中的协议、IP地址、端口号、接口和ICMP类型等。
 
基本规则匹配器 描述
-p protocol 匹配协议,比如tcp、udp、icmp或all,all会匹配所有协议,前缀“!”为逻辑非,表示除该协议外的所有协议
-s address[/mask] 匹配源地址。地址可以是一个网络名、主机名、网络IP地址(带有/掩码),或者一个普通的IP地址
-d address[/mask] 匹配目的地址
--sport port[:port] 匹配源端口
--dport port[:port] 匹配目的端口
-o name 匹配将被发送数据包的接口名称(只适用于从FORWARD、OUTPUT和POSTROUTING链输出的数据包)。如果接口名称结尾有一个“+”,表示匹配所有此类接口
-i name 匹配数据包被接收的接口的名称(只适用于数据包进入INPUT、FORWARD和PREROUTING链)。如果接口名称结尾有一个“+”,表示匹配所有此类接口
-f 指定数据包的第二个和以后的IP碎片
-c packets bytes 使得管理员可以初始化规则的数据包和字节计数器(INSERT、APPEND和REPLACE操作)
--icmp-type {type[/code]typename} 匹配ICMP类型(使用iptables -p icmp -h命令查看有效的ICMP类型名)
--tcp-flags mask comp 匹配TCP标记。有两个参数,第一个参数提供检查范围,第二个参数提供被设置的条件(就是哪些位置1)。这个匹配操作可以识别以下标记:SYN、ACK、FIN、RST、URG、PSH。另外还有ALL和NONE。ALL是指选定所有的标记,NONE是指未选定任何标记

列出所有链的规则(默认为filter表)
[root@linuxlz.com~]# iptables -L


iptables -L列出所有防火墙规则

将IP地址和端口号以数字格式显示列出所有链的规则。
[root@localhost ~]# iptables -nL


列出所有IP和端口号防火墙规则

详细列出所有链的规则
[root@localhost ~]# iptables -vL


列出详细iptables规则

注意:
不能使用iptables -Lv命令,使用该命令会出现以下错误信息。
iptables: No chain/target/match by that name。
正确的命令应该是iptables -Lv


列出INPUT链的规则
[root@localhost ~]# iptables -L INPUT

列出INPUT链的1号规则
[root@localhost ~]# iptables -L INPUT 1

显示所有链的规则
[root@localhost ~]# iptables -S

详细显示所有链的规则
[root@localhost ~]# iptables -vS

注意:
不能使用iptables -vS命令,使用该命令会出现以下错误信息。
iptables: No chain/target/match by that name。
正确的命令应该是 iptables -vS

显示INPUT链的规则
[root@localhost ~]# iptables -S INPUT

显示INPUT链的1号规则
[root@localhost ~]# iptables -S INPUT 1

清除所有链的规则(默认为filter表)
[root@localhost ~]# iptables -F

清除INPUT链的所有规则
[root@localhost ~]# iptables -F INPUT

将所有链中的规则的包字节计数器清零
[root@localhost ~]# iptables -Z

将INPUT链中的规则的包字节计数器清零
[root@localhost ~]# iptables -Z INPUT

将INPUT链中的1号规则的包字节计数器清零
[root@localhost ~]# iptables -Z INPUT 1

在INPUT、OUTPUT和FORWARD链上设置默认规则策略为DROP(拒绝所有数据包)
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -P OUTPUT DROP
[root@localhost ~]# iptables -P FORWARD DROP

在INPUT、OUTPUT和FORWARD链上设置默认规则策略为ACCEPT(允许所有数据包)
[root@localhost ~]# iptables -P INPUT ACCEPT
[root@localhost ~]# iptables -P OUTPUT ACCEPT
[root@localhost ~]# iptables -P FORWARD ACCEPT

在INPUT链上添加规则,协议为tcp,目标端口号是21。
[root@localhost ~]# iptables -A INPUT -p tcp --dport 21

在INPUT链上插入规则,协议为tcp,目标端口号是23,规则号是1
[root@localhost ~]# iptables -I INPUT 1 -p tcp --dport 23

在INPUT链上替换规则号1的iptables规则,将目标端口号更改为24
[root@localhost ~]# iptables -R INPUT 1 -p tcp --dport 24

在INPUT链上删除规则号是1的iptables规则
[root@localhost ~]# iptables -D INPUT 1

创建用户自定义WWW
[root@localhost ~]# iptables -N WWW

更改用户自定义链WWW名称为OOO
[root@localhost ~]# iptables -E WWW OOO

删除用户自定义链OOO
[root@localhost ~]# iptables -X OOO

删除所有的用户自定义链
[root@localhost ~]# iptables -X

指定协议配置iptables
[root@localhost ~]# iptables -A INPUT -p tcp  -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p udp  -j ACCEPT

指定ICMP类型配置iptables
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

指定IP地址配置iptables
[root@localhost ~]# iptables -A INPUT -s 192.168.0.5 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT

指定接口配置iptables
[root@localhost ~]# iptables -A INPUT -i eth0 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -o eth0 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -o ppp+ -j ACCEPT

指定端口号配置iptables
[root@localhost ~]# iptables -A INPUT -p tcp --sport www -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --sport 80 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --sport 22:80 -j ACCEPT

指定IP碎片配置iptables
[root@localhost ~]# iptables -A  FORWARD -p tcp -s 192.168.0.0/24 -d 192.168.1.200 --dport 80 -j ACCEPT
[root@localhost ~]# iptables -A  FORWARD -f -s 192.168.0.0/24 -d 192.168.1.200 -j ACCEPT

指定TCP标记配置iptables
[root@localhost ~]# iptables -A  FORWARD -p tcp --tcp-flage ALL NONE -j ACCEPT
[root@localhost ~]# iptables -A  FORWARD -p tcp --tcp-flage ALL SYN,ACK -j ACCEPT
[root@localhost ~]# iptables -A  FORWARD -p tcp --tcp-flage SYN,ACK,FIN,RST SYN  -j ACCEPT