iptables

一、前言

什么是iptables?当我们启动iptables时,使用service命令可以启动iptables。但是并非使用service启动的iptables就能说明其是一个服务。Iptables是一个便以我们写规则的工具,真正起作用的是内核中的netfilter一个框架。Netfilter内置了5个hook函数,当一个数据包交由此机器时,经过这5个hook函数的其中某个才能进入用户空间,或者转发出去。

二、netfilter工作原理

netfilter2.png

当数据包到达目标主机时,经过PREROUTING链,经路由之后决定是否转发,不转发则进入INPUT链,到达用户空间。进程对外通信时,经由OUTPUT链出去,路由之后到达POSTROUTING链,经网卡出去。当一数据包经过PREROUTING链发现其不是到达本主机,那么数据包经过FORWARD链,到达 POSTROUTING链转发出去。本机进程对发送数据时,经由OUTPUT链路由之后进入POSTROUTING链出去。iptables匹配规则时,是自上而下匹配的,匹配到第一条规则时既跳出,否则一直往下匹配,没有则使用默认规则。

五个hook函数分别是PREROUTING,INPUT ,OUTPUT,POSTROUTING,FORWARD,我们把这五个钩子函数称为链,Netfilter实现了几功能,raw ,mangle,nat,filter。我们一般把这几个功能称为表,表之间有优先级关系,从低到高为filter—-nat—-mangle—-raw,表与链之间有对应关系,具体见图表。

filter INPUT FORWARD OUPUT
nat PREROUTING(DNAT) POSTROUTING(SNAT) OUTPUT
mangle PREROUTING INPUT FORWARD OUTPUT POSTROUTING
raw PREROUTING OUTPUT

iptables规则建立时,首先需要确定功能(表),确定报文流向,确定要实现的目标,确定匹配条件。iptables时,尽量遵循以下规则:尽量减少规则条目,彼此间无关联,访问条目大放上面,有关联(同一功能),规则更严格的放上面

三、基本语法

iptables [-t TABLE] COMMAND CHAIN  CRETIRIA -j TARGET

-t TABLE :  TABLE为nat,mangle,raw,filter中的一个,默认为filter

                  COMMAND 

                    链 : -F 清空规则链

                            -N 自建一条链

                            -X 删除一条自定义空链

                            -Z 计数器归零

                            -P 设置默认策略

                            -E 重命名自定义链

iptables –t nat -F                  
iptables –t filter –N web_services                   
iptables –t filter  –X web_services 
iptables –t filter   -Z 
iptables –t filter  –P DROP                     
iptables –t filter  –E web_services www_services

                         规则:

                            -A 在规则链最后添加一条规则

                            -I 在规则链中插入一条规则,默认为第一条

                            -D 删除一条规则链

                            -R 替换规则链

               
iptables –t filter –A www_services –p tcp –-dport 80 –j ACCEPT                   
iptables –t filter –I www_services –p tcp –-dport 22 –j ACCEPT 
iptables –t filter –D www_services –p tcp –-dport 22 –j ACCEPT
iptables –t filter –D www_services 1                    
iptables –t filter –R www_services –p tcp –dport 22 –j DROP

                         查看:

                            -L: List

                        子选项:

                                -n: numeric

                                -v, -vv, -vvv

                                -x: eXactly

                                –line-numbers

                              iptables –t filter –L –n –v

                 CRETIRIA

                         通用匹配

                                -s, –src, –source:

                                -d, –dst, –destination:

                                -p {tcp|udp|icmp}:

                                -i IN_IF:

                                -o OUT_IF:

                            扩展匹配:

                        调用netfilter额外模块实现特殊检查机制,(使用到相关功能,要使用iptables命令的-m选项来指定调用哪个模块)

                                隐式扩展:

                                  -p tcp [-m tcp]

                                  –sport PORT[-PORT]

                                  –dport

                                  –tcp-flag 要检查标志位列表(用逗号分隔)  必须为1的标志位列表(逗号分隔)

                                  -p icmp [-m icmp]

                                    –icmp-type

                                     0: echo-reply, ping响应

                                     8: echo-request, ping请求

iptables -t filter -A INPUT -p icmp --icmp-type 8 -j DROP                        
iptables -t filter -A INPUT -p tcp --tcp-flags syn,ack,rst,fin syn -j DROP               
iptables -t filter -A INPUT -p tcp --dport 80 --tcp-flags all none -j DROP

                           显式扩展:

                                -m 扩展模块名称

                          模块:iptables,netfilter各拥有一部分代码

                                   multiport: 多端口匹配,可用于匹配非连续或连续端口;最多指定15个端口;

                                            –source-ports, –sports port[,port,port:port]

                                            –destination-ports, –dports

                                            –ports

iptables -I INPUT -d 192.168.19.128 -p tcp -m multiport --dports 22,80 -j ACCEPT           
iptables -I OUTPUT -s 192.168.19.128 -p tcp -m multiport --ports 22,80 -j ACCEPT

                                   iprange: 匹配指定范围内的地址,匹配一段连续的地址而非整个网络时有用;

                                            [!] –src-ragne IP[-IP]

                                            [!] –dst-range

iptables -A INPUT -d 192.168.19.128 -p tcp --dport 23 -m iprange --src-range 192.168.19.129-192.168.19.135 -j ACCEPT                  
iptables -A OUTPUT -s 192.168.19.128 -p tcp --sport 23 -m iprange --dst-range 192.168.19.129-192.168.19.135 -j ACCEPT

                                    string: 字符串匹配,能够检测报文应用层中的字符串

                                            –algo {kmp|bm}

                                            –string "STRING"

                                            –hex-string "HEX_STRING": HEX_STRING为编码成16进制格式的字串;

                                              iptables -I OUTPUT -m string –algo bm –string "sex" -j DROP

                                    time: 基于时间做访问控制

                                            –datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]

                                            –datestop

                                 –timestart hh:mm[:ss]

                                            –timestop hh:mm[:ss]

                                            –weekdays day[,day]

                                               iptables -I INPUT -d 192.168.19.128 -p tcp –dport 80 -m time –timestart 08:20 –timestop 18:00 –weekdays Mon,Tue,Thu,Fri -j REJECT

                                    connlimit: 连接数限制,对每IP所能够发起并发连接数做限制;

                                            [!] –connlimit-above [n]

                                              iptables -A INPUT -d 172.16.100.7 -p tcp –dport 22 -m connlimit –connlimit-above 2 -j DROP

                                    limit: 速率限制

                                            –limit n[/second|/minute|/hour|/day]

                                            –limit-burst n

                                               iptables -A INPUT -d 192.168.19.128 -p icmp –icmp-type 8 -m limit –limit 20/minute –limit-burst 5 -j ACCEPT

                                    state: 状态检查

                                            –state

                                             连接追踪中的状态:

                                               NEW: 新建立一个会话

                                               ESTABLISHED:已建立的连接

                                               RELATED: 有关联关系的连接

                                               INVALID: 无法识别的连接

                                     iptables -t filter -A OUTPUT -p tcp –sport 22 -m state –state NEW -j DROP 

                                     放行被动模式下的FTP服务:

                                                 1、装载模块/lib/modules/KERNEL_VERSION/kernel/net/netfilter/

                                                 模块:nf_conntrack_ftp

modprobe nf_conntrack_ftp                                    
lsmod | grep nf_conntrack_ftp                            
nf_conntrack_ftp       12913  0                             
nf_conntrack                            
79758  3 nf_conntrack_ftp,nf_conntrack_ipv6,xt_state

                                                 2、放行请求报文:

                                                 (1)放行NEW状态对21端口请求的报文;

                                        iptables -A INPUT -p tcp –dport 21 -m –state NEW -j ACCEPT

                                                  (2) 放行ESTABLISHED以及RELATED状态的报文

                                        iptables -A INPUT -m –state ESTABLISHED,RELATED -j ACCEPT

                                                 3、放行响应报文:

                                                  (1) 放行ESTABLISHED以及RELATED状态的报文

                                         iptables -A OUTPUT -m –state ESTABLISHED,RELATED -j ACCEPT

                                                 由于系统对调整连接追踪功能所能容纳的连接有最大数目,视具体清空调整最大连接数目,或者不启用此功能

                                                 cat /proc/sys/net/nf_conntrack_max

                                     65536

                                                 其中当前追踪的所有连接在/proc/net/nf_conntrack中

                                                 /proc/net/nf_conntrack

                                                  不同协议或连接类型追踪时的属性,/proc/sys/net/netfilter目录:

              TARGET: (-j target)

                                   ACCEPT, REJECT, DROP, SNAT, DNAT, MASQERADE, RETURN, LOG, REDIRECT, MARK

                                SNAT:

                                –to-source SIP

                                    DNAT

                                –to-destination

iptables -t nat -A POSTROUTING -p tcp --dport 23210 -j SNAT --to-source 192.168.19.129       
iptables -t nat -A PREROUTING -p tcp --dport 23220 -j DNAT --to-destination 192.168.19.129     
iptables -A INPUT -d 192.168.19.128 -p tcp --dport 80 -j LOG --log-prefix "from iptables: "

四、 案例

4.1、实验拓扑图

iptables实验拓扑.png

4.2、配置过程

搭建环境

在firewall添加一块网卡,同时网络连接为自定义–VMnet3,webserver和client的网络连接也自定义在VMnet3上

  blob.png

Firewall配置ip,其中eth1网卡ip地址是自动获取的

blob.png

Webserver

blob.png

添加网关

blob.png

Client

blob.png

添加网关

blob.png

为了不让已有iptables规则对实验产生影戏,先清空规则链

在所有主机上执行这些命令

blob.png

此时在webserverclient 上无法ping通外网

blob.png 

当需要使用转发功能时,需要打开网络转发功能

Vim /etc/sysctl.conf

Net.ipv4.ip_forward=1

Sysctl –p

blob.png 

配置SNAT

blob.png

或者

blob.png

测试,在webserver上测试

blob.png

远程主机返回应答的包到目标主机时,没有在防火墙上做地址转换,却依然能把数据包转发给webserver,这是因为防火墙那台主机上维持了一张转换或的IP或端口对应表,故无需人为去添加转换规则。

在防火墙上添加DNAT

blob.png

在物理机上访问172.16.0.2的网站

blob.png

五、总结

iptables可做主机防火墙和网络防火墙,做为网络防火墙时需要打开转发功能,iptables规则顺序很重要,其自上而下匹配的规则链,故需要一条一条检查规则链,故常用规则,特别是匹配次数大的放在上边,同一规则更严格的条目放在上面。

原创文章,作者:成吉思汗,如若转载,请注明出处:http://www.178linux.com/8950

(2)
成吉思汗成吉思汗
上一篇 2015-10-27
下一篇 2015-10-27

相关推荐

  • Linux下使用screen协同作业

    1)screen应用场景(拷贝自网络): 来自产品工程的高级维护用户 David 打电话说:“为什么我不能在您部署的这些新机器上编译 supercode.c”。 您会问他:“您运行的是什么机器?” David 答道:“ Posh”。(这个虚够的公司将它的 5 台生产服务器以纪念 Spice Girls 的方式命名)。这下您可以大显身手了,另一台机器由 Dav…

    系统运维 2016-08-15
  • 负载调度器:调度算法

    调度算法(ipvs scheduler) 起点公平:平均分配,不管分别干的怎么样。 结果公平:谁现在还剩下的在处理的少,就分配给谁。      根据其调度时是否考虑各RS当前的负载状态,可分为静态方法和动态方法两种: 静态方法 静态方法:仅根据算法本身进行调度; RR      …

    2016-10-28
  • Linux基础知识之压缩、解压、归档工具

    压缩、解压、归档工具     压缩格式:gz,bz2,xz,zip,Z 压缩算法不同,压缩比也会不同     1.compress/uncompress (.Z) compress [-dfvcVr] [-b maxbits] [file …] -d: 解压缩,相当于 -c: 结果输出至标准输出, 不删除原…

    Linux干货 2016-08-19
  • N21_第5周作业find

    第5周作业 1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; [root@iZ28zld7ztoZ ~]# grep '^[[:space:]]' /boot/grub/grub.conf [root@iZ28zld7ztoZ ~]# grep&nbsp…

    Linux干货 2016-08-08
  • sed命令及vim编辑器

    sed[option]… 'script' inputfile…选项:-n:不输出模式空间内容的自动打印-e: 多点编辑-f /PATH/TO/SCRIPT_FILE: 从指定文件中读取编辑脚本-r: 支持使用扩展正则表达式-i: 原处编辑script:'地址命令' 1.地址定界:(1) 不给地…

    Linux干货 2016-08-11

评论列表(2条)

  • stanley
    stanley 2015-10-27 23:19

    赞,已置顶,有机会可以给大家分享写blog经验

    • 成吉思汗
      成吉思汗 2015-10-30 17:26

      @stanley谢谢,新手不敢造次呀