iptables 从其使用的三个表(filter、nat、mangle)而得名,
对包过滤只使用filter 表, filter 还是默认表,无需显示说明.
操作命令: 即添加、删除、更新等。
链:对于包过滤可以针对filter 表中的INPUT、OUTPUT、FORWARD 链,也可以操作用
户自定义的链。
规则匹配器:可以指定各种规则匹配,如IP 地址、端口、包类型等。
目标动作:当规则匹配一个包时,真正要执行的任务,
常用的有: ACCEPT 允许包通过 、DROP 丢弃包

一些扩展的目标:
REJECT 拒绝包,丢弃包同时给发送者发送没有接受的通知
LOG 包有关信息记录到日志
TOS 改写包的TOS值
-A 或-append 在所选链尾加入一条或多条规则
-D 或-delete 在所选链尾部删除一条或者多条规则
-R 或-replace 在所选链中替换一条匹配规则
-I 或-insert 以给出的规则号在所选链中插入一条或者多条规则. 如果规则号为1,即在链头
部.
-L 或-list 列出指定链中的所有规则,如果没有指定链,将列出链中的所有规则.
-F 或-flush 清除指定链和表中的所由规则, 假如不指定链,那么所有链都将被清空.
-N 或-new-chain 以指定名创建一条新的用户自定义链,不能与已有链名相同.
-X 或-delete-chain 删除指定的用户定义帘,必需保证链中的规则都不在使用时才能删除,若
没有指定链,则删除所有用户链.
-P 或-policy 为永久帘指定默认规则(内置链策略),用户定义帘没有缺省规则,缺省规则也使
规则链中的最后一条规则,用-L 显示时它在第一行显示.
-C 或-check 检查给定的包是否与指定链的规则相匹配.
-Z 或-zero 将指定帘中所由的规则包字节(BYTE)计数器清零.
-h 显示帮助信息.

常用匹配规则器:
-p , [!] protocol 指出要匹配的协议,可以是tcp, udp, icmp, all, 前缀!为逻辑非,表示除该协议
外的所有协议.
-s [!] address[/mask] 指定源地址或者地址范围.
-sport [!] port[:port] 指定源端口号或范围,可以用端口号也可以用/ETC/SERVICES 文件中的
名子.
-d [!] address[/mask] 指定目的地址或者地址范围.
-dport [!] port[:port] 指定目的端口号或范围,可以用端口号也可以用/ETC/SERVICES 文件中的名子.
-icmp-type [!] typename 指定匹配规则的ICMP 信息类型(可以使用iptables -p icmp -h 查看
有效的ICMP 类型名)
-i [!] interface name[+] 匹配单独或某种类型的接口,此参数忽略时,默认符合所有接口,接口可
以使用"!"来匹配捕食指定接口来的包.参数interface 是接口名,如eth0, eht1, ppp0 等,指定一
个目前不存在的接口是完全合法的,规则直到接口工作时才起作用,折中指定对于PPP 等类似
连接是非常有用的."+"表示匹配所有此类型接口.该选项只针对于INPUT,FORWARD 和
PREROUTING 链是合法的.
-o [!] interface name[+] 匹配规则的对外网络接口,该选项只针对于
OUTPUT,FORWARD,POSTROUTING 链是合法的.
[!] --syn 仅仅匹配设置了SYN 位, 清除了ACK, FIN 位的TCP 包. 这些包表示请求初始化的
TCP 连接.阻止从接口来的这样的包将会阻止外来的TCP 连接请求.但输出的TCP 连接请求
将不受影响.这个参数仅仅当协议类型设置为了TCP 才能使用. 此参数可以使用"!"标志匹配
已存在的返回包,一般用于限制网络流量,即只允许已有的,向外发送的连接所返回的包.
如何制定永久规则集:
/etc/sysconfig/iptables 文件是iptables 守护进程调用的默认规则集文件.

/sbin/iptables-save > /etc/sysconfig/iptables 保存执行过的 IPTABLES命令
/sbin/iptables-restore < /etc/sysconfig/iptables 恢复原来的规则库

iptables 命令和route 等命令一样,重启之后就会恢复,所以:
[root@qyroot]# service iptables save
将当前规则储存到 /etc/sysconfig/iptables: [ 确定 ]
令一种方法是 /etc/rc.d/init.d/iptables 是 IPTABLES的启动脚本,所以:
[root@qyroot]# /etc/rc.d/init.d/iptables save
将当前规则储存到 /etc/sysconfig/iptables: [ 确定 ]
以上几种方法只使用某种即可.
若要自定义脚本,可直接使用iptables 命令编写一个规则脚本,并在启动时执行:
例如若规则使用脚本文件名/etc/fw/rule, 则可以在/etc/rc.d/rc.local 中加入以下代码:
if [-x /etc/fw/rule]; then /etc/fw/sule; fi;
这样每次启动都执行该规则脚本,如果用这种方法,建议NTSYSV 中停止IPTABLES.

实例:
链基本操作:

iptables -L -n

(列出表/链中的所有规则,包过滤防火墙默认使用的是filter 表,因此使用此命令将列出filter
表中所有内容,-n 参数可加快显示速度,也可不加-n 参数。)
iptables -F
(清除预设表filter 中所有规则链中的规则)
iptables -X
(清除预设表filter 中使用者自定义链中的规则)
ptables -Z
(将指定链规则中的所有包字节计数器清零)

设置链的默认策略,默认允许所有,或者丢弃所有:

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

(以上我们在不同方向设置默认允许策略,若丢弃则应是DROP,严格意义上防火墙应该是
DROP 然后再允许特定)

向链中添加规则,下面的例子是开放指定网络接口(信任接口时比较实用):

iptables -A INPUT -i eth1 -j ACCEPT

iptables -A OUTPUT -o eth1 -j ACCEPT

iptables -A FORWARD -i eth1 -j ACCEPT

iptables -A FORWARD -o eth1 -j ACCEPT

使用用户自定义链:

iptables -N brus

(创建一个用户自定义名叫brus 的链)

iptables -A brus -s 0/0 -d 0/0 -p icmp -j DROP

(在此链中设置了一条规则)

iptables -A INPUT -s 0/0 -d 0/0 -j brus

(向默认的INPUT 链添加一条规则,使所有包都由brus 自定义链处理)

基本匹配规则实例:
匹配协议:
iptables -A INPUT -p tcp
(指定匹配协议为TCP)
iptables -A INPUT -p ! tcp
(指定匹配TCP 以外的协议)
匹配地址:
iptables -A INPUT -s 192.168.1.1
(匹配主机)
iptables -A INPUT -s 192.168.1.0/24
(匹配网络)
iptables -A FORWARD -s ! 192.168.1.1
(匹配以外的主机)
iptables -A FORWARD -s ! 192.168.1.0/24
(匹配以外的网络)

匹配接口:
iptables -A INPUT -i eth0
iptables -A FORWARD -o eth0
(匹配某个指定的接口)
iptables -A FORWARD -o ppp+
(匹配所有类型为ppp 的接口)

匹配端口:
iptables -A INPUT -p tcp --sport www
iptables -A INPUT -p tcp --sport 80
(匹配单一指定源端口)
iptables -A INPUT -p ucp --dport 53
(匹配单一指定目的端口)
iptables -A INPUT -p ucp --dport ! 53
(指定53 端口以外)
iptables -A INPUT -p tcp --dport 22:80
(指定端口范围,这里实现的是22 到80 端口)

指定 IP碎片的处理:

iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.1.234 --dport 80 -j ACCEPT

iptables -A FORWARD -f -p tcp -s 192.168.1.0/24 -d 192.168.1.234 --dport 80 -j ACCEPT

iptables -L

Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 192.168.1.0/24 192.168.1.234 tcp dpt:http
ACCEPT tcp -f 192.168.1.0/24 192.168.1.234 tcp dpt:http
Chain OUTPUT (policy ACCEPT)
target prot opt source destination

设置扩展的规测匹配:
(希望获得匹配的简要说明,可使用: iptables -m name_of_match --help)
iptables -A INPUT -p tcp -m multiport --source-port 22,53,80
(匹配多个源端口)
iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80
(匹配多个目的端口)
iptables -A INPUT -p tcp -m multiport --port 22,53,80
(匹配多个端口,无论是源还是目的端口)
TCP匹配扩展:
iptables -A INPUT -p tcp --tcp-flags SYN,FIN,ACK SYN
(表示SYN、ACK、FIN 的标志都要被检查,但是只有设置了SYN 的才匹配)
iptables -A INPUT -p tcp --tcp-flags ALL SYN,ACK
(表示ALL:SYN、ACK、FIN、RST、URG、PSH 的标志都被检查,但是只有设置了SYN
和ACK 的才匹配)
iptables -p tcp --syn
(选项--syn 是以上的一种特殊情况,相当于“--tcp-flags SYN,RST,ACK SYN”的简写)

limit速率匹配扩展:

iptables -A FORWARD -m limit --limit 300/hour

(表示限制每小时允许通过300 个数据包)

iptables -A INPUT -m limit --limit-burst 10

(--limit-burst 指定触发时间的值(默认为5),用来比对瞬间大量数据包的数量。)
(上面的例子用来比对一次同时涌入的数据包是否超过十个,超过此上限的包将直接被丢
弃)

iptables -A FORWARD -p icmp -m limit --limit 3/m --limit-burst 3

(假设均匀通过,平均每分钟3 个,那么触发值burst 保持为3。如果每分钟通过的包的数
目小于3,那么触发值busrt 将在每个周期(若每分钟允许通过3 个,则周期数为20 秒)后加
1,但最大值为3。每分钟要通过的包数量如果超过3,那么触发值busrt 将减掉超出的数值,
例如第二分钟有4 个包,那么触发值变为2,同时4 个包都可以通过,第三分钟有6 个包,
则只能通过5 个,触发值busrt 变为0。之后,每分钟如果包数量小于等于3 个,则触发值
busrt 将加1,如果每分钟包数大于3,触发值busrt 将逐渐减少,最终维持为0)
(即每分钟允许的最大包数量等于限制速率(本例中为3)加上当前的触发值busrt 数。任何情
况下,都可以保证3 个包通过,触发值busrt 相当于是允许额外的包数量)

基于状态的匹配扩展(连接跟踪):
每个网络连接包括以下信息:源和目的地址、源和目的端口号,称为套接字对(cocket pairs);
协议类型、连接状态(TCP 协议)和超时时间等。防火墙把这些叫做状态(stateful)。能够监测
每个连接状态的防火墙叫做状态宝过滤防火墙,除了能完成普通包过滤防火墙的功能外,还
在自己的内存中维护一个跟踪连接状态的表,所以拥有更大的安全性。
其命令格式如下:
iptables -m state --state [!] state [,state,state,state]
state 表示一个用逗号隔开的的列表,用来指定的连接状态可以有以下4 种:
NEW:该包想要开始一个连接(重新连接或将连接重定向)。
RELATED:该包属于某个已经建立的连接所建立的新连接。例如FTP 的数据传输连接和控
制连接之间就是RELATED 关系。
ESTABLISHED:该包属于某个已经建立的连接。
INVALID:该包不匹配于任何连接,通常这些包会被DROP。
例如:

iptables -A INPUT -m state --state RELATED,ESTABLISHED

(匹配已经建立的连接或由已经建立的连接所建立的新连接。即匹配所有的TCP 回应包)

iptables -A INPUT -m state --state NEW -i ! eth0

(匹配所有从非eth0 接口来的连接请求包)

下面是一个被动(Passive)FTP 连接模式的典型连接跟踪

iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j

ACCEPT

iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state

ESTABLISHED,RELATED -j ACCEPT
下面是一个主动(Active)FTP 连接模式的典型连接跟踪

iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT

日志记录:
格式为: -j LOG --log-level 7 --log-prefix "......"

iptables -A FORWARD -m tcp -p tcp -j LOG

iptables -A FORWARD -m icmp -p icmp -f -j LOG

iptables -A FORWARD -s 192.168.1.0/24 -d 10.10.10.0/24 -p tcp --sport 80 -j LOG

iptables -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-prefix "INPUT packet

died:"

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New net syn:"

查看iptables中NAT表

iptables -L -v -n -t nat

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code