iptables简介
iptables 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
iptables基础
规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息 包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规 则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的 主要工作就是添加、修改和删除这些规则。
iptables和netfilter:
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
-
netfilter:netfilter组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
-
iptables:iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
iptables的规则表和链
表(tables):提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。
链(chains):数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。
规则链:
-
PREROUTING(路由前):对数据包作路由选择前应用此链中的规则,所有的数据包进来的时侯都先由这个链处理。
-
INPUT(输入队列):进来的数据包应用此规则链中的策略。
-
FORWARD(输出队列):转发数据包时应用此规则链中的策略。
-
OUTPUT(转发队列):外出的数据包应用此规则链中的策略。
-
POSTROUTING(路由后):对数据包作路由选择后应用此链中的规则,所有的数据包出来的时侯都先由这个链处理。
规则表:
-
Filter表:过滤数据包, 对应三个链INPUT、FORWARD、OUTPUT。
-
Nat表:用于网络地址转换(IP、端口),对应三个链PREROUTING、POSTROUTING、OUTPUT。
-
Mangle表:修改数据包的服务类型、TTL、并且可以配置路由实现QOS,对应五个链PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD。
-
Raw表:决定数据包是否被状态跟踪机制处理,对应两个链OUTPUT、PREROUTING。
同一链上的不同的表的规则的应用优先级(高–>低): raw——mangle——nat——filter
iptables的报文流向
1、当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
2、如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
3、如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
管理和设置iptables规则
iptables的基本语法格式:
iptables [-t table] SUBCOMMAND chain [matches...] [-j target] iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
命令选项:
链管理: -N:new,新增一条自定义链 -X:delete,删除自定义的空链 -P:policy,设置链的默认策略 ACCEPT:允许数据包通过 DORP:直接丢弃数据包,不给任何回应信息 REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息 -E:renname,重命名自定义的未被引用(引用计数为0)的链 规则管理: -A:append,追加,默认为最后一个 -I:insert,插入,默认为第一个 -D:delete,删除,指定链中的某一条规则,可以按规则序号和内容删除 -R:replace,替换,指定链中的某一条规则,可以按规则序号和内容替换 -F:flush,清空 -Z:zero,置0,将所有表的所有链的字节和数据包计数器清零 -S:selected,以iptables-save命令的格式显示链上的规则 查看: -L:list,列出规则 -n:numeric,以数字格式显示地址和端口 -v:verbose,详细信息,-vv,-vvv -x:exactly,显示计数器的精确值而非单位换算后的结果 --line-numbers:显示链上的规则编号 组合:-nvL
匹配条件:
基本匹配:netfilter自带的匹配机制 [!] -s:指定作为源地址匹配,这里不能指定主机名称,必须是IP IP | IP/MASK | 0.0.0.0/0.0.0.0 [!] -d:目标地址匹配 [!] -i:限制报文流入的接口,只能用于PRETOUTING,INPUT及FORWD [!] -o:限制报文流出的接口,只能用于OUTPUT,FORWARD及POSTROUTING 注:加"!"表示取反 扩展匹配:需要加载扩展模块,经由扩展模块引入的匹配机制,-m matchname 隐式扩展:可以不用使用-m选项专门加载相应模块,前提是要使用-p选项指明可匹配何种协议 [!] -p:限制协议,tcp,udp,icmp,icmpv6,esp,ah,sctp,mh or "all" tcp:隐含指明了"-m tcp",有专用选项: [!] --sport port[:port]:匹配报文中的tcp首部的源端口,可以是端口范围 [!] --dport port[:port]:匹配报文中的tcp首部的目标端口,可以是端口范围 [!] --tcp-flags mask comp:检查报文中的mask指明的tcp标志位,而这些标志位comp中必须为1 udp:隐含指明的"-m udp",有专用选项: [!] --sport port[:port]:匹配报文中的udp首部的源端口,可以是端口范围 [!] --dport port[:port]:匹配报文中的udp首部的目标端口,可以是端口范围 icmp:隐含指明了"-m icmp",有专用选项: [!] --icmp-type {type[/code]|typename} type/code: 0/0:echo reply 8/0:echo request 显式扩展:必须由-m选项专门加载相应模块 multiport:多端口匹配,以离散方式定义多端口匹配,最多可以指定15个端口 [!] --sports port[,port|,port:port]... [!] --dports port[,port|,port:port]... [!] --ports port[,port|,port:port]... 示例: iptables -I INPUT -s 0/0 -d 10.1.8.93 -p tcp -m multiport --dport 22,80 -j ACCEPT iprange:指明一段连续的ip地址范围作为源地址或目标地址匹配 [!] --src-range from[-to]:源地址范围 [!] --dst-range from[-to]:目标地址范围 string:对报文中的应用层数据做字符串匹配检测 --algo {bm|kmp}:(bm = Boyer-Moore, kmp = Knuth-Pratt-Morris) [!] --string pattern:给定要检查的字符串模式 [!] --hex-string pattern:给定要检查的字符串模式 示例: iptables -I OUTPUT -d 0/0 -s 10.1.8.93 -p tcp -m string -algo bm --string "old" -j REJECT time:根据收到的报文的时间/日期与指定的时间/日期范围进行匹配 --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]:起始日期时间 --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:结束日期时间 --timestart hh:mm[:ss]:起始时间 --timestop hh:mm[:ss]:结束时间 [!] --monthdays day[,day...]:匹配一个月中的哪些天 [!] --weekdays day[,day...]:匹配一周的哪些天 connlimit:根据客户端主机做并发连接数限制,及每客户端最多可同时发起的连接数量 --connlimit-upto n:连接数量小于等于n则匹配 --connlimit-above n:连接数量大于n则匹配 示例: iptables -A INPUT -s 0/0 -d 172.18.100.6 -p tcp --dport 23 -m connlimit --connlimit-upto 2 -j ACCEPT limit:基于令牌桶算法对报文的速率做匹配 -limit rate[/second|/minute|/hour|/day] --limit-burst number 示例: ptables -R INPUT 3 -d 172.18.100.6 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 3 -j ACCEPT
目标动作:
ACCERT DORP REJECT RETURN:返回调用的链 REDIRECT:端口重定向 LOG:日志 MARK:防火墙标记 DNAT:目标地址转换 SNAT:源地址转换 MASQERADE:地址伪装
规则的有效期限
iptables命令添加的规则,手动删除之前,其生效期限为kernel的生命周期。
保存规则:
CentOS 6:
# service iptables save
# iptables-save > /etc/sysconfig/iptables
# iptables-save > /PATH/TO/SOME_RULL_FILE
CentOS 7:
# iptables -S > /PATH/TO/SOME_RULL_FILE
# iptables-save > /PATH/TO/SOME_RULL_FILE
重载预存的规则:
# iptables-restore < /PATH/TO/SOME_RULL_FILE
CentOS 6:
service iptables restart
会自动从/etc/sysconfig/iptables文件中重载规则
自动生效规则文件中的规则:
1、把iptables命令放在脚本文件中,让脚本文件开机自动运行
/etc/rc.d/rc.local
/usr/bin/iptables.sh
2、用规则文件保存规则,开机自动重载命令
/etc/rc.d/rc.local
iptables-restore < /PATH/TO/SOME_RULL_FILE
原创文章,作者:641348038@qq.com,如若转载,请注明出处:http://www.178linux.com/68774
评论列表(1条)
很详细的iptables介绍,这部分很多同学缺少这样的总结,在工作实际中遇到问题就比较难排查,虽说实际工作通常关闭了,但是掌握这部分知识还是非常重要的,很赞。