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

相关推荐

  • Linux源程序包相关概念整理

    一、      Linux源程序包介绍 1)    linux源程序包基础 1.         遵循常用开源协议:BSD、Apache Licence 2.0、GPL、LGPL、MIT 2.&nbs…

    系统运维 2015-09-22
  • 马哥教育网络班22期第二周课程练习1-未闻花名

    1、Linux管理文件和目录的命令 命令 功能 命令 功能 pwd 显示当前目录 ls 查看目录下的内容 cd 改变所在目录 cat 显示文件的内容 grep 在文件中查找某字符 cp 复制文件 touch 创建文件 mv 移动文件 rm 删除文件 rmdir 删除目录 1.1 pwd命令 该命令的英文解释为print working directory(打…

    Linux干货 2016-08-22
  • N25第四周总结(lvm)

    lvm 详解 大纲:    1、什么是lvm     2、为什么要使用lvm     3、如何实现lvm     4、lvm各项命令详解   1、什么是lvm:        lmv (Logical Volume Manager…

    Linux干货 2016-12-22
  • linux开机启动流程

    linux开机启动流程:   一、BIOS 加电自检 当你按电源开关开机时,电脑会首先去启动BIOS(基本输入输出系统),BIOS一般是集成在主板上的. BIOS 的工作 1.检测连接硬件,比如显卡,内存,磁盘等等,检测的目的是以后把这些设备信息提供给操作系统 2.寻找启动磁盘,每一种BIOS都会有开机启动菜…

    Linux干货 2016-09-14
  • 新的篇章

    第一天,linux,努力,奋斗!

    Linux干货 2017-07-11
  • vim必掌握用法

    vim最入门用法大全

    Linux干货 2017-12-03

评论列表(2条)

  • stanley
    stanley 2015-10-27 23:19

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

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

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