iptables基础及模块高级应用.ppt

上传人:sccc 文档编号:5335771 上传时间:2023-06-27 格式:PPT 页数:49 大小:375.01KB
返回 下载 相关 举报
iptables基础及模块高级应用.ppt_第1页
第1页 / 共49页
iptables基础及模块高级应用.ppt_第2页
第2页 / 共49页
iptables基础及模块高级应用.ppt_第3页
第3页 / 共49页
iptables基础及模块高级应用.ppt_第4页
第4页 / 共49页
iptables基础及模块高级应用.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《iptables基础及模块高级应用.ppt》由会员分享,可在线阅读,更多相关《iptables基础及模块高级应用.ppt(49页珍藏版)》请在三一办公上搜索。

1、ChinaUNIX技术沙龙iptables基础及模块高级应用,marsaber2009.6.20 西安,主 题 大 纲,一、防火墙的作用及分类二、iptables概述三、iptables流程图四、iptables语法五、iptables模块应用六、实例分析,说明,参考文档:CU_platinum的2 小时玩转 iptables 讲义企业版 v1.5.4 http:/指南 1.1.19 http:/iptables-5.3(kernel-2.6.27、iptables-1.4.1.1),一、防火墙的作用,作用:过滤两个网络间流入流出的数据包,由预先制定的策略来控制访问行为。,防火墙种类(一),1

2、、简单包过滤防火墙;优点:速度快、性能高,对应用程序透明;缺点:只检查报头,不检查数据区,不建立连接状态表,安全性低,应用控制层很弱;2、状态检测包过滤防火墙;优点:安全性高,性能高,缺点:只检查报头,但建立连接状态表,不检查数据区,安全性高,应用控制层很弱;,防火墙种类(二),3、应用代理防火墙;优点:安全性高,提供应用层的安全;缺点:性能差,只支持有限的应用,不透明,不检查报头,不建立连接状态表,检查数据区,网络层保护较弱;4、核检测防火墙;优点:重组并检查会话内容,建立连接状态表;网络层保护强、应用层保护强、会话保护强;缺点:性能差,不透明。,二、iptables概述,Kernel 0.

3、01(1991.9)Kernel 2.0(1994.3.14)ipfwadmKernel 2.2(1999.1.25)ipfwadmKernel 2.4(2001.1.4)Netfilter/iptablesKernel 2.6(2003.12.17)Netfilter/iptables,三、iptables流程图,PREROUTINGRouteFORWARDPOSTROUTING INPUT OUTPUT-local-,四、iptables基本语法,iptables基本语法:iptables-t table command match target1、table,表,filter、nat、m

4、angle、raw;2、command,iptables最重要的部分;3、match,匹配数据包的特征;4、target,对匹配的数据包进行的操作;,4.1、表,filter,用于一般的数据包过滤,针对本机;iptables默认的表;链:INPUT、FORWARD、OUTPUT;nat,仅用于NAT,也就是转换数据包的源地址或目标地址;链:PREROUTING、POSTROUTING、OUT;mangle,用来修改流经防火墙的数据包内容,不能做任何NAT,它只是改变数据包的 TTL,TOS或MARK,而不是其源目地址。强烈建议你不要在这个表里做任何过滤;链:PREROUTING、POSTROU

5、TING、OUTPUT、INPUT和 FORWARD;raw,负责加快数据包穿越防火墙的速度,借此提高防火墙的性能;,4.2、命令(1),-L:查看规则;iptables-L iptables-L-niptables-t nat-L-niptables-L-n-line-numberiptables-t nat-L-n-line-number-P:修改默认规则;iptables-P INPUT DROP备注:为链设置默认的target(可用的是DROP 和ACCEPT),做为最后一条规则被执行,4.2、命令(2),-A:追加规则,做为最后一条规则;iptables-A INPUT-p tcp-

6、dport 22-j ACCEPTiptables-t nat-A PREROUTING-i eth0-p tcp-dport 2222-J DNAT-to 192.168.0.1:22-I:插入规则,不写规则数,默认第1条;iptables-I INPUT 1-p icmp-j ACCEPTiptables-I INPUT 3-p tcp-dport 22-j ACCEPTiptables-t nat-I PREROUTING-i eth0-p tcp-dport 2222-J DNAT-to 192.168.0.1:22,4.2、命令(3),-D:删除规则;iptables-D INPUT

7、 3iptables-D INPUT-s 192.168.0.1-j DROP-R:修改规则;iptables-R INPUT 3-s 192.168.0.1-j ACCEPTiptables-t nat-R POSTROUTING 1-s 192.168.0.1/24,4.2、命令(4),-F:清空规则;iptables-Fiptables-F INPUTiptables-t nat-Fiptables-t nat-F POSTROUTING-Z:把指定链的所有计数器归零;iptables-Ziptables INPUT-Ziptables-t nat-Ziptables-t nat POS

8、TROUTING-Z,4.3 匹配条件,出、入接口(-o、-i)源、目的地址(-s、-d)协议类型(-p)源、目的端口(-sport、-dport),4.3 匹配条件(1),按网络接口匹配-o 匹配数据流出的网络接口iptables-A INPUT-o eth0-j DROPiptables-A INPUT-o ppp0-j DROP备注:将接口eth0、ppp0流出的数据DROP掉;-i 匹配数据流入的网络接口iptables-A INPUT-i eth0-j DROPiptables-A INPUT-i ppp0-j DROP备注:将流入到接口eth0、ppp0的数据DROP掉;,4.3

9、匹配条件(2),按地址匹配-s 匹配源地址iptables-A INPUT-s 192.168.0.1-j DROP#将来自192.168.0.1的任何请求DROP掉;-d 匹配目的地址iptables-A INPUT-d 192.168.0.1-j DROP#将本机发往192.168.0.1的任何请求DROP掉;备注:可以是单个IP(192.168.0.1)、网段(192.168.0.1/24)、域名(),不设则表示任何地址;,4.3 匹配条件(3),按协议类型匹配-p 匹配协议类型iptables-A INPUT-s 192.168.0.1/24-p tcp-dport 22-j DROP

10、#禁止192.168.0.1/24的客户机连接本机22端口iptables-A INPUT-p icmp-j DROP#禁pingiptables-A INPUT-p 1-icmp-type 8-j DROP#可以ping通其他客户机,但是其他客户机ping不通该机;备注:第三条规则中1对应的协议类型是icmp,详情请参照/etc/protocols,4.3 匹配条件(4),按端口匹配-sport 匹配源端口iptables-A INPUT-p tcp-sport 80-j DROP#将来自80端口的请求DROP掉(比如,我向发出请求,回应后,遇到该规则后回应就被拒绝掉);-dport 匹配目

11、的端口iptables-A INPUT-s 192.168.0.1/24-p tcp-dport 80-j DROP#将来自192.168.0.1/24的针对本机80端口的请求DROP掉;备注:1、-sport、-dport必须配合参数-p使用;2、可以指定某个端口,也可以是端口范围,比如:2000(2000以下端口)、2000:3000(2000-3000端口)、3000:(3000以上端口),4.4处理方式(1),ACCEPT 这个target没有任何选项和参数,使用也很简单,指定-j ACCEPT即可。一旦数据包满足了指定的匹配条件,就会被ACCEPT,并且不会再去匹配当前链中的其他规则

12、或同一个表内的其他规则;iptables-P INPUT ACCEPT#修改INPUT的默认规则为ACCEPTiptables-A INPUT-s 192.168.0.1/24-j ACCEPT#允许来自192.168.0.1/24的所有针对本机的所有请求;,4.4处理方式(2),DROP 如果包符合条件,这个target就会把它丢掉,也就是说包的生命到此结束,不会再向前走一步,效果就是包被阻塞了。在某些情况下,这个target会引起意外的结果,因为它不会向发送者返回任何信息,也不会向路由器返回信息,这就可能会使连接的另一方因苦等回音而亡,解决这个问题的较好办法较好的办法是使用REJECT(除

13、了丢弃数据包之外,还向发送者返回错误信息);iptables-A INPUT-s 192.168.0.1-j DROP#将来自192.168.0.1的请求全部DROP掉;iptables-A INPUT-s 192.168.0.1-j REJECT#将来自192.168.0.1的请求全部DROP掉,并向请求者返回错误信息;,4.4处理方式(3),-SNAT 这个target是用来做源网络地址转换的,就是重写包的源IP地址。先在内核里打开ip转发功能,然后再写一个SNAT规则,就可以把所有从本地网络出去的包的源地址改为Internet连接的地址了。SNAT target的作用就是让所有从本地网出

14、发的包看起来都是从一台机子发出的,这台机子一般就是防火墙。iptables-t nat-A POSTROUTING-o eth0-j SNAT-to 1.2.3.4iptables-t nat-A POSTROUTING-s 192.168.0.1/24-j SNAT-to 1.2.3.4备注:eth0为外网网卡接口,192.168.0.1/24为内网网段;,4.4处理方式(4),-j DNAT-to IP-IP:port(nat表的PREROUTING链)用来做目的网络地址转换的,就是重写包的目的IP地址。如果一个包被匹配了,那么和它属于同一个流的所有的包都会被自动转换,然后就可以被路由到正

15、确的主机或网络。iptables-t nat-A PREROUTING-d 1.2.3.4-p tcp-dport 80-j DNAT-to 192.168.1.1:80#把所有发往地址1.2.3.4(端口80)的请求都转发到一个LAN使用的私有地址中,即192.168.1.1到 192.168.1.10iptables-t nat-A PREROUTING-d 1.2.3.4-p tcp-dport 80-j DNAT-to 192.168.1.1-192.168.1.10#把所有发往地址1.2.3.4(端口80)的请求都转发到一段LAN使用的私有地址中,即192.168.1.1到 192.

16、168.1.10备注:也就是将内网的服务器映射到外网,通俗点就是端口映射;,4.4处理方式(5),-j MASQUERADE 和SNAT target的作用是一样的,区别就是它不需要指定-to-source,被专门设计用于那些动态获取IP地址的连接的,如果你有固定的IP地址,还是用SNAT target吧。当接口停用时,MASQUERADE不会记住任何连接,这在我们kill掉接口时是有很大好处的。如果我们使用SNAT target,连接跟踪的数据是被保留下来的,而且时间要好几天,这可是要占用很多连接跟踪的内存的。一般情况下,这种处理方式对于拨号上网来说是较好的。即使你有静态的IP,也可以使用M

17、ASQUERADE,而不用SNAT。不过,这不是被赞成的,因为它会带来额外的开销,而且以后还可能引起矛盾。iptables-t nat-A POSTROUTING-o eth0-j MASQUERADEiptables-t nat-A POSTROUTING-s 192.168.0.1/24-j MASQUERADE备注:eth0为外网网卡接口,192.168.0.1/24为内网网段;,4.5规则的匹配方式,规则由第1条开始依次匹配,如果第1条规则不匹配,则匹配第2条规则,如果第2条规则还不匹配则匹配第3条规则,依次论之;如果数据包被第N条规则所匹配,则数据包的存活将由该规则决定;如果规则规定

18、将数据包丢弃,那么数据包就会被丢弃,不会管后面的规则如何如何;不论链中有多少个规则,默认规则(Default Policy)永远都在每一个链的最底端,最后被执行;每个链的默认规则各自独立,且只有一种状态,要么是ACCEPT,要么是DROP;,4.6 备注,规则配置文件/etc/sysconfig/iptablesiptables-saveiptables-restoreservice iptables save#将目前iptables规则保存到/etc/sysconfig/iptables;chkconfig iptables onchkconfig-level 35 iptables on,

19、五、iptables模块应用,很 好!很 强 大!,5.1 iptables模块应用,comment模块iptables-A FORWARD-s 192.168.0.254-j DROP-m comment-comment“DataServer“iptables-A FORWARD-d 192.168.0.254-j DROP-m comment-comment“DataServer“#不允许数据库服务器192.168.0.254访问外网/被外网访问;备注:1、允许你增加一个备注给任何规则,以提高规则的可读性和理解性;2、备注最多支持256个字符。,5.2 iptables模块应用,connl

20、imit模块iptables-A INPUT-p tcp-dport 80-m connlimit-connlimit-above50-j DROP#只允许每个IP同时发起50个80端口的请求,超过的请求将被丢弃;备注:1、很有效的一个模块,确实不错;2、-connlimit-above n 限制为多少个;-connlimit-mask n 这组主机的掩码,默认是connlimit-mask 32,即一个IP;3、可以对付synflood这样的攻击,对于DDoS无效;,5.3 iptables模块应用,iprange模块iptables-A FORWARD-m iprange-src-rang

21、e 192.168.0.3-192.168.0.61-j DROP#不允许内网客户机192.168.0.3-192.168.0.61通过网关上网;备注:1、-src-range源IP;2、-dst-range目的IP;,5.4 iptables模块应用,layer7模块iptables-A FORWARD-m layer7-l7proto qq-j DROP#禁QQiptables-A FORWARD-m layer7-l7proto xunlei-j DROP#禁迅雷iptables-A FORWARD-m layer7-l7proto bittorrent-j DROP#禁BTiptabl

22、es-A FORWARD-m layer7-l7proto edonkey-j DROP#禁电驴备注:Layer7支持的封禁,参照/etc/l7-protocols/protocols/,5.5 iptables模块应用,limit模块iptables A INPUT-m limit-limit 20/second-j DROPiptables A INPUT-m limit limit-burst 10-j DROP备注:1、-limit,为limit match设置最大平均匹配速率,也就是单位时间内limit match可以匹配几个包。它的形式是一个数值加一个时间单位,可以是/second

23、/minute/hour/day。默认值是每小时3次(用户角度),即3/hour,也就是每20分钟一次(iptables角度);2、-limit-burst,定义的是limit match的峰值,就是在单位时间(这个时间由上面的-limit指定)内最多可匹配几个包(由此可见,-limit-burst的值要比-limit的大),默认值是5;,5.6 iptables模块应用,mac模块iptables A INPUT-m mac-limit mac-source XX:XX:XX:XX:XX:XX-j DROP备注:基于包的MAC源地址匹配包,地址格式只能是XX:XX:XX:XX:XX:XX,当

24、然它也可以用英文感叹号取反;,5.7 iptables模块应用,muluiport模块iptables A INPUT-p tcp-m muluiport-dport 21,22,25,80,110-j DROPiptables A INPUT-p tcp-m muluiport-source-port 21,22,25,80,110-j DROPiptables A INPUT-p tcp-m muluiport-destination-port 21,22,25,80,110-j DROP备注:1、-source-port 源端口多端口匹配,最多可以指定15个端口,以英文逗号分隔,注意没有

25、空格;2、-destination-port 目的端口多端口匹配,使用方法和源端口多端口匹配一样,唯一的区别是它匹配的是目的端口;3、-dport 同端口多端口匹配,意思就是它匹配的是那种源端口和目的端口是同一个端口的包,比如:端口80到端口80的包、110到110的包等。使用方法和源端口多端口匹配一样。,5.8 iptables模块应用,owner模块iptables-A OUTPUT-p tcp-dport 22-m owner-uid-owner 500-j DROPiptables-A OUTPUT-p tcp-dport 22-m owner-gid-owner 500-j DROP

26、备注:1、比对来自本机的封包,是否为某特定使用者/组所产生的,这样可以避免服务器使用 root 或其它身分将敏感数据传送出去,可以降低系统被骇的损失,这里的-uid-owner和-gid-owner可以跟用户名、组名、用户ID、组ID;2、没有-pid-owner、-cmd-owner;,5.9 iptables模块应用,recent模块iptables-A INPUT-p tcp-dport 22-syn-m recent-rcheck seconds3600-hitcount 3-rttl-name SSH-rsource-j DROPiptables-A INPUT-p tcp-dpor

27、t 22-syn-m recent-set-name SSH-rsource-j ACCEPTiptables-A INPUT-p tcp-dport 22-j ACCEPT#同一个 IP 在一个小时内只允许建立(或尝试)三次 SSH 联机;备注:请注意 rule 顺序:先设置 recent 条件-j DROP,再设置 recent-set-j ACCEPT,5.10 iptables模块应用,state模块iptables-A INPUT-m state-state ESTABLISHED,RELATED-j ACCEPT备注:1、包状态依据IP所包含的协议不同而不同,但在内核外部,也就是用

28、户空间里,只有4种状态:NEW,ESTABLISHED,RELATED 和INVALID。2、NEW:这个包是我们看到的第一个包;3、ESTABLISHED:已经注意到两个方向上的数据传输,而且会继续匹配这个连接的包;只要发送并接到应答,连接就是ESTABLISHED的了 4、RELATED:当一个连接和某个已处于ESTABLISHED状态的连接有关系时,就被认为是RELATED的了;5、INVALID:数据包不能被识别属于哪个连接或没有任何状态。有几个原因可以产生这种情况,比如,内存溢出,收到不知属于哪个连接的ICMP 错误信息。一般地,我们DROP这个状态的任何东西;,5.11 iptab

29、les模块应用,string模块iptables-A FORWARD-m string-algo bm-string sex-j DROPiptables-A FORWARD-m string-algo bm-string qq-j DROP#过滤关键字;备注:1、String字符串匹配,可以用做内容过滤;2、通过一些模式匹配策略,用这个模块匹配给定的一个字符串。要求:内核版本不能低于2.6.14;,5.12 iptables模块应用,time模块iptables-A FORWARD-m time-timestart 8:00-timestop 18:00-weekdays Mon,Tue,W

30、ed,Thu,Fri-datestop 2010-j ACCEPT备注:1、-timestart value(开始时间):只是匹配在这个值之后的(包括格式HH:MM;默认 00:00);2、-timestop value(结束时间):只是匹配在这个值之前的(包括格式HH:MM;默认 23:59);3、-weekdays listofdays(星期):只是匹配已经给出的天,格式Mon,Tue,Wed,Thu,Fri,Sat,Sun,默认每天,非days;4、-datestart date(开始日期):只是匹配这个开始日期值之后的(包括,格式:YYYY:MM:DD:hh:mm:ss h,m,s s

31、tart from 0,默认是1970;5、-datestop date(结束日期):只是匹配这个开始日期值之前的(包括,格式:YYYY:MM:DD:hh:mm:ss h,m,s start from 0,默认是2037;,六、实例分析,前言:写规则前须先理清思路,明白需求,不可盲目执行规则/脚本(比如远程时,不慎将ssh的22端口DROP掉了);建议将iptables规则写成脚本(方便修正、方便管理);从点点滴滴做起,做好每一件事,养成一个好习惯;,6.1 ftp服务器,#!/bin/bashMOD=/sbin/modprobeIPT=/usr/local/sbin/iptables$MOD

32、 ip_conntrack_ftp$IPT-F$IPT-X$IPT-P INPUT DROP$IPT-A INPUT-i lo-j ACCEPT$IPT-A INPUT-m state-state RELATED,ESTABLISHED-j ACCEPT$IPT-A INPUT-p tcp-sport 21-j ACCEPT$IPT-A INPUT-p tcp-dport 22-j ACCEPT,备 注,1、FTP的主动连接模式,21为监听/响应端口,20为数据传输端口;2、FTP的被动连接模式,21为监听/响应端口,数据传输端口为随机端口;3、该脚本适合客户端(FlashFXP或IE浏览器)

33、被动模式下的连接;4、ip_conntrack_ftp该模块很重要,不加载该模块、依旧使用被动连接的话,vsftpd为例,配置文件中添加:pasv_min_port=9001pasv_max_port=9999防火墙规则中需添加:$IPT-A INPUT-p tcp-dport 9001:9999-j ACCEPT,6.2 网关服务器,#!/bin/bashMOD=/sbin/modprobeIPT=/usr/local/sbin/iptables$MOD ip_conntrack_ftp$MOD ip_nat_ftpecho 1/proc/sys/net/ipv4/ip_forward$IP

34、T-F$IPT-t nat-F$IPT-X$IPT-t nat-X$IPT-t nat-A POSTROUTING-o eth0-j MASQUERADE,备 注,1、这差不多应该是最简单的网关脚本了,这里只是举例,没有一成不变的规则,根据自己的需要写吧!2、开启数据转发功能echo“1”/proc/sys/net/ipv4/ip_forward;3、开启数据转发功能的另外一种办法【推荐】:编辑/etc/sysctl.conf,net.ipv4.ip_forward=14、eth0为外网网卡接口;5、关于MASQUERADE,参照4.4处理方式(5),或者使用man;6、如果有自己的外网固定I

35、P,可以将最后一行规则改成:$IPT-t nat-A POSTROUTING-o eth0-j SNAT-to 1.2.3.4 也可以写成:$IPT-t nat-A POSTROUTING-s 192.168.0.1/24-j SNAT to 1.2.3.4,6.3 对内网用户的控制,#!/bin/bashMOD=/sbin/modprobeIPT=/usr/local/sbin/iptables$MOD ip_conntrack_ftp$MOD ip_nat_ftpecho 1/proc/sys/net/ipv4/ip_forward$IPT-F$IPT-t nat-F$IPT-X$IPT-

36、t nat-X$IPT-t nat-A POSTROUTING-o eth0-j MASQUERADE$IPT-A FORWARD-s 192.168.1.1-j DROP$IPT-A FORWARD-d-j DROP,备 注,1、$IPT-A FORWARD-s 192.168.1.1-j DROP#不允许内网客户机192.168.1.1访问外网;2、$IPT-A FORWARD-d-j DROP#不允许内网客户机访问这个网站,会被解析成IP再去匹配的;/etc/resolv.conf中要有能使用的DNS服务器,否则报错;3、尽管FORWARD默认规则是ACCEPT,但是默认规则永远都是作为

37、最后一条规则被执行的;4、$IPT-A FORWARD-s 192.168.1.1-d-j DROP#不允许内网客户机192.168.1.1访问,访问其他网站、收发邮件等都是被允许的;,6.4 映射内网服务器,#!/bin/bashMOD=/sbin/modprobeIPT=/usr/local/sbin/iptables$MOD ip_conntrack_ftp$MOD ip_nat_ftpecho 1/proc/sys/net/ipv4/ip_forward$IPT-F$IPT-t nat-F$IPT-X$IPT-t nat-X$IPT-t nat-A POSTROUTING-o eth0

38、-j MASQUERADE$IPT-t nat-A PREROUTING-d 1.2.3.4-p tcp-dport 80-j DNAT-to 192.168.0.250:80,备 注,1、这也就是所谓的端口映射了;2、可以指定IP,-d 1.2.3.4,也可以指定网络接口比如,-i eth0;3、另外提供回流问题的解决办法:$IPT-t nat-A PREROUTING-d 1.2.3.4-p tcp-dport 80-j DNAT-to192.168.0.250:80$IPT-t nat-A POSTROUTING-s 192.168.0.1/24-d 192.168.0.250 p tcp-dport 80-j SNAT-to 192.168.0.254小注:192.168.0.254为192.168.0.1/24的网关IP;192.168.0.250为提供web服务的服务器;,谢 谢!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号