iptables是与最新的 2.6.x 版本Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。iptables 的一个重要优点是,它使用户可以完全控制防火墙配置和信息包过滤。您可以定制自己的规则来满足您的特定需求,从而只允许您想要的网络流量进入系统。另外,iptables 是免费的,这对于那些想要节省费用的人来说十分理想,它可以代替昂贵的防火墙解决方案,并且其性能不输于一些专业的硬件防火墙。
iptables的管理命令介绍:
1、iptables中含有五个钩子函数:
INPUT
OUTPUT
FORWARD
PREROUTING
POSTROUTING
2、iptables中的表:
filter:过滤,可以有的链:INPUT、OUTPUT、FORWARD
nat:转换,可以有的链:OUTPUT、PREROUTING、POSTROUTING
mangle:拆开,可以有的链:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
raw:可以有的链:OUTPUT、PREROUTING
表的优先级:先mangle后filter,先mangle后nat最后filter,其中raw的优先级最高
3、iptables命令的操作对象包括:
规则表(table):由规则链的集合组成,不同的规则表用于实现不同的功能
规则链(chain):由规则的集合组成,保存在规则表中;不同规则链代表了不同的数据包流向。
规则(rule):用于对防火墙策略进行设置,流经某个数据链的数据将按照先后顺序进行过滤。
一条完整的iptables命令由以下几个部分组成:
iptables [-t 表名] <命令> [链名] [规则号] [规则] [-j 目标]
-t选项用于指定所使用的表,iptables防火墙默认有filter、nat和mangle这3张表,也可以是用户自定义的表。表中包含了分布在各个位置的链,iptables命令所管理的规则就是存在于各种链中的。该选项不是必需的,如果未指定一个具体的表,则默认使用的是filter表。命令选项是必须要有的,它告诉iptables要做什么事情,是添加规则、修改规则还是删除规则。有些命令选项后面要指定具体的链名称,而有些可以省略,此时,是对所有的链进行操作。还有一些命令要指定规则号。具体的命令选项名称及其与后续选项的搭配形式如下所示。
●针对规则链<命令>的操作有:
-L 列出链中所有的规则
-F 清除链中的所有规则
-P 设置链的默认动作(ACCEPT/REJECT/DROP)
-Z 计数器清零每一条规则都有两个计数器,一个用于记录被本条规则所匹配到的包的个数,另一个用于记录所有匹配到包的体积之和)
-N 定义一个新的规则链
-X 删除定义的规则链
-E 重命名一条链
●针对规则<命令>的操作有:
-A 追加一个规则
-I 插入一个规矩
-D 删除一个规则
-R 在指定的链中用新的规则置换掉某一规则号的旧规则
●针对视图<命令>的操作有:
-L 列出显示出来
查看时的子命令和专用选项
-n 加速,不反向解析,类似route -n
-v 详细信息[也可-vv,-vvv]
-x 显示精确值,不做单位换算
--line-numbers 显示行号
- #iptables -t filter -L 显示filter表的规则
- #iptables -t filter -L INPUT 显示filter表中的INPUT链的规则
- #iptables -t filter -L INPUT -v 显示filter表中的INPUT链的规则详细信息
- #iptables -t filter -L INPUT -v -x 显示filter表中的INPUT链的规则详细信息并且不做单位换算
●针对目标<命令>的操作有:
-j ACCEPT
ACCEPT:允许
DROP:拒绝
RELATED:有关联的,有联系的(用于FTP协议)
INVALID:无法识别的状态
●针对规则<命令>的操作有:
通用匹配:源地址,端口,协议
-s ! IP/NETWORK:指定源地址或ip地址,可取反
-d ! IP/NETWORK:指定目标地址
-p {四层协议:tcp|udp|icmp}:定义匹配的协议
-i (input interface):网络接口,一般不用在output和postrouting
-o (output interface):不能用到INPUT和prerouting
- #iptables -A INPUT -s !172.16.4.0/16 -d 172.16.4.1 -p tcp --dport 80 -j DROP
- 在INPUT链上插入一条拒绝非172.16.4.0/16网络内的主机访问172.16.4.1主机上的监听在tcp协议的80端口的服务的规则
扩展匹配:
隐式扩展:一般指对-p选项中指定的协议进行的扩展
-p tcp
--sport 源端口
--dport 目标端口
--tcpflags 要检查的标记,必须为1 的标记(剩余的位必须为0)
用法:--tcpflags SYN,ACK,RST,FIN (检查4个,只SYN为1)
--syn 同--tcpflags一样,在TCP三次握手中的标志位:syn=1;ack=syn=1;ack=1
-p udp
--sport
--dport(可跟连续端口如80-90)
-p icmp
--icmp-type
常用类型:echo-reply:0响应
echo-request:8请求
- #iptables -A -I INPUT 1 -s 172.16.0.0/16 -d 172.16.4.1 -p icmp --icmp-type 8 -j ACCEPT
- 在INPUT链上插入位置为1的一条规则:允许来自于172.16.0.0/16网络内的主机对172.16.4.1主机发起ping请求。
显示扩展:一般指必须适应-m选项明确指定要加载扩展
◆-m state
--state
NEW:新发起的请求
ESTABLISHED:表示所有已经建立的连接
- #iptables -A OUTPUT -o eth1 -m state --state NEW -j DROP
- 拒绝从eth1网卡出的所有新的网络请求
- #iptables -P OUTPUT DROP 修改OUTPUT链默认规则为DROP
- #iptables -A OUTPUT -s 172.16.100.1 -p tcp --dport 80 -m state --state ESTABLISHED -j ACCEPT
- 仅允许来自于172.16.100.1发起的tcp协议80端口已经建立的网络连接
◆-m(mport|multiport) 不连续的多端口的匹配,可以使用!取反
--source-ports 源端口
--destination-ports 目的端口
--ports 即指源也指目的
- #iptables -A OUTPUT -s 172.16.100.1 -p tcp -m multiport --destination 80,22,23,110,143 -j ACCEPT
- 允许来自于172.16.100.1发起的在TCP协议的80,22,23,110,143的连接
◆-m iprange IP地址范围的扩展,可以使用!取反
--src-range ip-ip
--dst-range ip-ip
- #iptables -A INPUT -d 172.16.100.1 -m iprange --src-range 192.168.1.10-192.168.1.200 -p tcp -m state --state NEW ESTABLISHED -j ACCEPT
- 允许来自于源地址是192.168.1.10--192.168.1.200范围内的主机对172.16.100.1主机的TCP协议的新的建立请求和已经建立的请求
◆-m connlimit --connlimit-above <n>用于限制客户端到一台主机的TCP并发连接总数,n是一个数值。限制某个地址上并发连接的请求的个数
--connlimit-above n 超过n个并发请求,一般取反使用
◆-m limit limit 做数据包的发送速率限制,流控:令牌桶过滤器
--limit rate 1/sec /minute /hour /day
--limit-burst number 峰值,一次性处理的上限
- #iptables -A INPUT -d 172.16.100.1 -p tcp -dport 80 -m limit --limit 1/sec --limit-burst 3 -j ACCEPT
- 允许172.16.100.1主机上的TCP协议80端口上的访问每秒只能1个请求,最大同时处理3个请求
◆-m time 指定某个时间段生效的审计
--timestart value
--timestop value
--days Mon,Tue,Wed....
--datestart date
--datestop date YY:MM:DD:HH:MM:SS
- #iptables -A INPUT -d 172.16.4.1 -p tcp -dport 22 -m time --timestart 09:00 --timestop 18:00 ! -days sat,sun -j ACCEPT
- 允许每周的周1到周5的09:00-18:00到172.16.4.1主机的TCP协议的22号端口发起请求
◆-m string 做字符串的匹配,一起使用
--algo bm|kmp 编码算法
--string pattern
由于iptables其实是内核中的一个模块,因此其生效时间是立即生效,而当关机后,定义的所有规则就不存在了。
因此我们可以将其保存起来:
#service iptables save 将定义的规则保存起来,默认保存至/etc/sysconfig/iptables文件
也可自定义保存的位置:
#iptbales-save > /etc/sysconfig/iptables-test1
导出保存的iptables规则
#iptbales-restore < /etc/sysconfig/iptables-test1