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 23:15
下一篇 2015-10-27 23:20

相关推荐

  • 文件查找相关:whereis、find和locate

        本文将对find和locate进行详细讲解 命令简介 名称:whereis     功能:定位文件所在的目录     用法:whereis shell命令     注意:whereis是根据环境变量PATH来查找文件的,而PATH通常设置成存放命令的那些路径,如/bin、…

    Linux干货 2016-04-05
  • 笔记整理:权限管理3-ACL

    ACL 访问控制列表,并不是所有的Linux文件系统,都支持ACL。FAT文件系统也不支持ACL   ACL文件系统中,不支持chmod等命令。同时不能更改文件权限。不存在文件权限。 问题提出 只让wang用户,对该文件不能够访问,同时不影响其他任何用户对该文件的操作。   ACL特点 针对单一用户或群组,单一文件或目录,进行rwx权限设…

    Linux干货 2016-08-05
  • 最简单的Linux系统——更加深入了解Linux启动过程

    自制一个最简单的Linux: 1、有一个新的磁盘,并创建分区 2、挂载分区,创建目录 3、拷贝内核文件 4、创建MBR和grub.conf文件 5、创建/etc/fstab文件,设置开机自动挂载 6、拷贝一个bash程序 7、卸载分区,以新磁盘重启系统

    Linux干货 2016-09-11
  • Linux文件查找之locate、find详解

     locate命令详解 locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库文件,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updat…

    Linux干货 2016-08-16
  • bash的基础特性之一

    bash的基础特性之一 命令历史:shell进程会保存会话中此前用户使用过的命令; history:命令的用法 history 【-c】【-d #】 【n】或者【文件名】     -c:清空命令历史     -d 【#】:删除指定的命令历史…

    Linux干货 2016-12-18
  • 马哥教育网络19期+第十三周课程练习

    1、建立samba共享,共享目录为/data,要求:(描述完整的过程)   1)共享名为shared,工作组为magedu;   2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;   3)添加s…

    Linux干货 2016-08-12

评论列表(2条)

  • stanley
    stanley 2015-10-27 23:19

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

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

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