iptables简单教程
【概述】
netfilter/iptables是linux系统自带的免费防火墙,能够实现防火墙、NAT(网络地址翻译)和数据包分割功能
netfilter工作在内核层,iptables工作在用户层,可以方便用户定义规则集的表结构。
【iptables选项介绍】
netfilter的用户控制命令是iptables,通过iptables建立适当的规则添加到内核中实现信息数据包的过滤。
iptables的一般语法如下:
iptalbes [-t table] command [match] [target]
一条iptables规则包含4个基本元素,
1)表(table)
[-t table] 选项允许使用标准表之外的任何表。有三种可以使用的表选项:filter、nat和mangle。
2)命令(command)
command部分是iptables命令的最重要部分,它告诉iptables命令要做什么,例如,插入规则、将规则添加到
链的末尾或删除规则。主要有如表1所示的命令。
表1 iptables常用命令
-A或--append 该命令将一条规则附加到链的末尾
-D或--delete 通过用-D指定要匹配的规则或者指定规则在链中的位置编号,该命令从链中删除该规则
-P或--policy 该命令设置链的默认目标,即策略。所有与链中任何规则都不匹配的信息包都将被强制使
用此链的策略
-N或--new-chain 用命令中所指定的名称创建一个新链
-F或--flush 如果指定链名,该命令删除链中的所有规则,如果未指定链名,该命令删除所有链中的所
有规则。此参数用于快速清除
-L或--list 列出指定链中的所有规则
-R或--replace 替换指定链中一条匹配的规则
-X或--delete-chain 删除指定用户的的定义链,若没有指定链,则删除所有的用户链
-C或--check 检查数据包是否与指定链的规则相匹配
-Z或--zero 将指定链中所有规则的byte计数器清零
3)匹配(match)
iptables命令的可选match部分指定信息包与规则匹配所应具有的特征(如源和目的地地址、协议等)。匹配分为
两大类:通用匹配和特定于协议的匹配。这里,将研究可用于采用任何协议的信息包的通用匹配。下面是一些重
要的且常用的通用匹配及其说明,如表2所示。
表2 通用匹配说明
通用匹配 说 明
-p或--protocol 该通用协议匹配用于检查某些特定协议。协议示例有TCP、UDP、ICMP、用逗号分隔的任何这三
种协议的组合列表以及ALL(用于所有协议)ALL是默认匹配。可以使用!符号表示不与该项匹配
-s 或 --source 该源匹配用于根据信息包的源IP地址来与它们匹配。该匹配还允许对某一范围内的IP地址进行匹
配,可以使用!符号,表示不与该项匹配。默认源匹配与所有IP地址匹配
-d 或 --destination 该目的地匹配用于根据信息包的目的地IP地址来与它们匹配。该匹配还允许对某一范围内IP
地址进行匹配,可以使用!符号表示不与该项匹配
--sport 指定匹配规则的源端口或端口范围
--dport 指定匹配规则的目的端口或端口范围
-i 匹配单独的网络接口或某种类型的接口设置过滤规则
4)目标(target)
前面已经讲过,目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。除了允许用户定义的目标之
外,还有许多可用的目标选项。下面是常用的一些目标及其示例和说明,如表3所示。
表3 目标项说明
目 标 项 说 明
ACCEPT 当信息包与具有ACCEPT目标的规则完全匹配时,会被接受(允许它前往目的地)
DROP 当信息包与具有DROP目标的规则完全匹配时,会阻塞该信息包,并且不对它做进一步处理。该目标被
指定为-j DROP
REJECT 该目标的工作方式与DROP目标相同,但它比DROP好。和DROP不同,REJECT不会在服务器和客户机上
留下死套接字。另外,REJECT将错误消息发回给信息包的发送方。该目标被指定为-j REJECT
RETURN 在规则中设置的RETURN目标让与该规则匹配的信息包停止遍历包含该规则的链。如果链是如INPUT之
类的主链,则使用该链的默认策略处理信息包。它被指定为-jump RETURN
LOG 表示将包的有关信息记录入日志
TOS 表示改写数据包的TOS值
【iptables使用实例】
实际使用规则如下:
只允许某个ip访问某个端口
#iptables -A INPUT -p tcp -s 61.145.251.36 --dport 16322 -j ACCEPT
-A 在INPUT链中增加,
-p 表示协议
-s 表示源地址
--dport 表示目的端口
-j 目标操作
其他的ip都拒绝
#iptables -A INPUT -p tcp --dport 16322 -j REJECT
删除一条规则(删除INPUT链中第一条规则,具体可以man iptables)
#iptalbes -D INPUT 1
插入一条规则(插入到INPUT链中第二条规则)
#iptables -I INPUT 2 -p tcp -s 61.145.251.63 --dport 16322 -j ACCEPT
限制某个网口的访问(eth0 的端口访问插入一条规则)
#iptables -I INPUT 3 -p tcp -s 61.145.251.66 -i eth0 --dport 16322 -j ACCEPT
#iptables -I INPUT 4 -p udp -s 61.145.251.66 -i eth0 --dport 16322 -j ACCEPT
限制某个网段的访问
#iptables -I INPUT 5 -p tcp -s 192.168.0.0/16 -i eth1 --dport 3306 -j REJECT
对于iptables的一些其他选项可以查看使用手册:man iptables
和iptables并行的还有iptables-save和iptables-restore命令,分别用来保存和恢复规则
保存规则到iptables-save.txt
#iptables-save > iptables-save.txt
从保存文件中恢复
#iptables-restore < iptables-save.txt
对于已经含有规则的表格,可以先iptables-save,然后做修改,最后再iptables-restore。