iptables配置
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
netfilter/iptables IP 信息包过滤系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
iptables包含4个表,5个链。其中表是按照对数据包的操作区分的,链是按照不同的Hook点来区分的,表和链实际上是netfilter的两个维度。
4个表:filter,nat,mangle,raw,默认表是filter(没有指定表的时候就是filter表)。表的处理优先级:raw>mangle>nat>filter。
filter:一般的过滤功能
nat:用于nat功能(端口映射,地址映射等)
mangle:用于对特定数据包的修改
raw:有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能
5个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。
PREROUTING:数据包进入路由表之前
INPUT:通过路由表后目的地为本机
FORWARDING:通过路由表后,目的地不为本机
OUTPUT:由本机产生,向外转发
POSTROUTIONG:发送到网卡接口之前。如下图:
INPUT/OUTPUT/FORWARD只用于-t filter
INPUT 如果包的目标就是本机,则包直接进入INPUT链,再被本地正在等待该包的进程接OUTPUT 两类包走OUTPUT,一类是INPUT入的包,一类是主机本身产生的包
FORWARD 如果包的目标不是本机,而是穿过本机的包,则进入FORWARD链,FORWARD既不走INPUT,也不走OUTPUT
POSTROUTING/PREROUTING只用于-t nat
PREROUTING 进入路由之前进行,最先进行,DNAT
POSTROUTING 进入路由之后进行,最后进行,SNAT
FOWARD是基于两个接口的,不象INPUT,OUTPUT都是基于单一接口的
-i, --in-interface 匹配包的入口
-i只适用于INPUT、FORWARD、PREROUTING链中,而用在OUTPUT POSTROUTING都会出错。
-i eth+:可以用通配符,表示匹配从所有的以太接口进入的数据包
可以用去反符号“!”来标示”除了”被列出的接口的所有接口。
-o, --out-interface 匹配包的出口
-o 适用于OUTPUT、FORWARD,POSTROUTING,而用来INPUT,PREROUTING会出错
-i -o 同时匹配入口和出口的,只有非NAT的FORWARD链
#iptables –A FORWORD –i eth0 –o eth1 –p tcp –j ACCEPT
凡是从eth0接口进入,从eth1接口流出的tcp数据流被允许通过
-p, --protocol [!] protocol两种方式
-p name,可以是tcp, udp, icmp, or all
-p all
-p all只表示tcp、udp、icmp这三种协议,而不包括RFC1340(/etc/protocol)中的所有协议。其他协议,要用数字
缺省是-p all,即:不写-p时, 相当于-p all,相当于tcp,udp,icmp
-p 数字,必须符合RFC1340(/etc/protocol)
-A INPUT -p 50 -j ACCEPT
-A INPUT -p 51 -j ACCEPT
-p 0相当于-p all
-p tcp --sport,-p tcp --source-port
-p tcp --dport,-p tcp --destination-port
缺省(无--sport),表示匹配所有端口
--sport 135
单端口
--sport TELNET
单个服务名,服务名必须在/etc/services 文件中进行标注
--sport 135:139
连续端口
匹配源端口从135到139
--sport 1024: 匹配源端口从1024到65535
--sport !1032
表示除了该端口以为的其他所有端口
--sport,--dport不支持逗号枚举端口
注意--sport,--dport可以单个端口,可以连续端口,但不支持逗号枚举端口,逗号枚举必须加-m multiport参数
-p tcp -m multiport --sport/--dport
iptables -A FORWARD –i eth0 –p tcp –m multiport --dports 25,80,110,443,1863 –j ACCEPT --ports用于源、目的端口相同时
-p tcp下的子参数—tcp-flags --syn
-p tcp --tcp-flags [!] flag
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN
[!] –syn
It is equivalent to --tcp-flags SYN,RST,ACK SYN.
主要用于匹配和连接有关的数据包
-p icmp --icmp-type ...
icmp-type类型的指定可以取数字或名字:
数字数字在RFC792中有定义
icmp echo-reply -p icmp –icmp-type:0
icmp echo-request -p icmp –icmp-type:8
name name 可以用iptables --p icmp --help 查看
[root@demo1 ~]# /sbin/iptables -p icmp -h
iptables options:
--icmp-type [!] typename match icmp type