一:IPTABLES语法入门:
iptables 是建立在 netfilter 架构基础上的一个包过滤管理工具
用户通过 /sbin/iptables 命令来管理 iptables,和 route 命令相同,iptables 命令的效果在重新启动以后就不再有效。
可以使用 /etc/rc.d/init.d/iptables save 将当前 iptables 规则写到 /etc/sysconfig/iptables 文件中,那么每次开机时/etc/rc.d/init.d/iptables start 命令会使 /etc/sysconfig/iptables 中的规则生效。
iptables 可以操纵3 个表:filter 表,nat 表,mangle 表。NAT 和一般的 mangle 用 -t 参数指定要操作哪个表。filter 是默认的表,如果没有 -t 参数,就默认对 filter 表操作。
Rule 规则:过滤规则,端口转发规则等,例如:禁止任何机器 ping 我们的服务器,可以在服务器上设置一条规则:
bash> iptables -A INPUT -s ! 127.0.0.1 -p icmp -j DROP
从 –s 开始即是一条规则,-j 前面是规则的条件,-j 开始是规则的行为(目的)。整条命令解释为,在filter 表中的 INPUT 规则链中插入一条规则,所有源地址不为 127.0.0.1 的 icmp 包都被抛弃。
Chain 规则链:由一系列规则组成,每个包顺序经过 chain 中的每一条规则。chain 又分为系统 chain
和用户创建的 chain。下面先叙述系统 chain。
filter 表的系统 chain: INPUT,FORWAD,OUTPUT
nat 表的系统 chain: PREROUTING,POSTROUTING,OUTPUT
mangle 表的系统 chain: PREROUTING,OUTPUT
每条系统 chain 在确定的位置被检查。比如在包过滤中,所有的目的地址为本地的包,则会进入INPUT 规则链,而从本地出去的包会进入 OUTPUT 规则链。
所有的 table 和 chain 开机时都为空,设置 iptables 的方法就是在合适的 table 和系统 chain 中添加相应的规则。
用户可以创建新的chain。用户 chain 只有作为某个系统 chain 的目的才有作用。比如创建一个名叫AAA 的规则链,想让 icmp 包通过它的检验。
bash> iptables -A INPUT -p icmp -j AAA
上述命令将用户创建的规则链 AAA 作为了一条系统 chain(INPUT)中的规则 “-p icmp” 的目的。
对每条 chain 有一个默认策略,也就是对包的默认的行为。可以设为抛弃(DROP)或接受(ACCEPT)。系统启动的时候所有的默认策略都是 ACCEPT。当包通过了 chain 所有的规则(不符合所有的规则的条件)的时候,系统按默认策略处理这个包。
iptables 命令
针对表的操作
查看:iptables -t table_name -L
刷新:
1、清除所有的规则和用户创建的chain
iptables -t table_name -F
2、清除所有的记数(符合规则的包的数目)
iptables -t table_name -Z
针对链的操作(注意以下都省略了 -t table_name)
查看:iptables -L chain_name
刷新:iptables -F chain_name
清除记数:iptables -Z chain_name
创建新链:iptables -N chain_name
删除链:iptables -X chain_name
重命名:iptables -E chain_old_name chain_new_name
设置策略:iptables -P chain_name policy
针对规则的操作
添加一条规则:iptables -A chain_name rule-spec
插入一条规则:iptables -I chain_name 规则号 new_rule_spec (插入后的规则号为命令中指定的
号,原来存在的规则号顺延)。
删除一条规则:有两种方法删除规则:通过指定规则号删除一条规则或通过指定规则的内容来删除一
条规则。每个规则链中的规则号从1 开始记数。
iptables -D chain_name 规则号
iptables -D chain_name 规则内容
修改一条规则:iptables -R chain_name 规则号 new_rule_spec
----------------------------------------------------------------------------------
二,IPTABLES举例:
1,链的基本操作:
清除预设表filter中所有规则链中的规则:
iptables -F
清除预设表filter中使用者自定链中的规则:
iptables -X
将指定链中所有规则的包字节计数器清零:
iptables -Z
--------------------------------
2,设置链的默认规则:
首先允许所有包的规则:
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
首先禁止所有包的规则:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
--------------------------------
3,列出表/链中的规则:
列出表/链中的所有规则
iptables -L
若显示较慢可以使用
iptables -L -n
--------------------------------
4,向链中添加规则:
如:
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -j ACCEPT
iptables -A FORWARD -o eth0 -j ACCEPT
注:由于本地进程不会经过FORWARD链,因此lo环回接口只在INPUT和OUTPUT两个链上工作。
--------------------------------
5,使用用户自定义链:
iptables -N 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
此例子的意思是:
第一句建立了一个叫做brus的用户自定义链;
第二句用-A参数添加了一条用户自定义的封堵规则;
第三句向默认的INPUT链添加一条新规则,使所有的包都由brus自定义链处理。
---------------------------------
6,设置默认的匹配规则:
匹配指定的协议:
iptables -A INPUT -p tcp
匹配指定协议之外的所有协议:
iptables -A INPUT -p ! tcp
-------------
指定地址匹配:
指定匹配的主机
iptables -A INPUT -s 192.168.1.1
指定匹配的网络
iptables -A INPUT -s 192.168.1.0/24
指定匹配主机之外的地址
iptables -A FORWARD -s ! 192.168.0.1
指定匹配网络之外的网络
iptables -A FORWARD -s ! 192.168.0.0/24
-----------------
指定网络接口匹配:
指定单一的网络接口匹配
iptables -A INPUT -i eth0
iptables -A FORWARD -o eth0
指定同类型的网络接口
iptables -A FORWARD -o eth+
-------------
指定端口匹配:
指定单一端口匹配
iptables -A INPUT -p tcp --sport www
iptables -A INPUT -p tcp --sport 80
iptables -A INPUT -p udp --sport 53
iptables -A INPUT -p udp --dport 53
匹配指定端口以外的端口
iptables -A INPUT -p tcp --sport ! 22
匹配指定的端口范围
iptables -A INPUT -p tcp --sport 22:80
匹配ICMP端口和ICMP类型
iptables -A INPUT -p icmp --icmp-type 8