linux之netfilter与 iptables学习

Linux之netfilter与iptables学习

一、为什么我们的主机需要防火墙

二、Linux下防火墙如何实现

三、四表五链学习

四、主机防火墙

五、网络防火墙

六、iptables命令学习

七、主机防火墙规则备份与恢复

======================================

一、为什么我们的主机需要防火墙?

    1、防止不合理的用户,通过不合理的手段登录系统搞破坏,

    2、企图通过攻击手段组织其继续为用户提供服务,

    3、尤其当我们的主机需要提供互联网服务的时候,安全性就不言而喻,

二、Linux下防火墙如何实现?

    1、iptables,这个只是方便用户编写各类规则交由netfilter处理执行。

    2、一部分是基于TCP/IP协议栈的netfilter安全框架,通过“数据报文进入主机,内核处理完成,

        交由用户空间处理,在由内核处理完成并响应给客户”,

        数据报文的处理路径设置了各种规则链,根据规则链的顺序或者特点,

        又在规则链中增加功能表,通过在不同的功能表中设置具体的规则,来达到安全访问。

    那么netfilter的规则定义是如何来达到安全访问的效果呢?

    首先我们应该知道主机之间的通信是数据流,是参考OSI七层模型来包装用户的数据,OSI七层包括了

    应用层,表示层,会话层,传输层,网络层,数据链路层,物理层,每一层都有其自己的功能,

    netfilter就是通过识别每一层功能中的数据是否符合我们定义的规则,从而达到监控,修改,丢弃,转发的目录。

34.png

    我们学习的防火墙主要部分是监控网络层,传输层,少部分应用层数据。如上图类似主机间通信的数据。

三、四表五链:

    四表:

        1、raw:          关闭NAT,ip_conntrack(连接跟踪)

        2、mangle:    拆开数据,修改数据,封装数据

        3、nat:           源,目的IP地址转换

        4、filter:         过滤

             执行的优先级顺序是:1 > 2 > 3 >4

    五链(数据报文处理路径上的五个钩子):

        1、PREROUTING:         路由前链

        2、INPUT:                    进入用户空间链

        3、FORWARD:              转发链

        4、OUTPUT:                 用户空间出去链

        5、POSTROUTING:       路由后链

四、主机防火墙:

    对于主机防火墙而言(主机就是报文的响应方,处理完成之后,主机在发送响应给请求方),四表五链工作模型(默认情况下并不是所有的链上都必须要有所有的功能规则表,这是设计者精巧设计):

35.png

说明(数据包经过防火墙被处理):

    1、数据包经过网络传输,到达主机网卡缓冲区,接着被内核加载到内核内存空间,

    2、数据报文经过PREROUTING链,

        1、规则表匹配顺序raw–>mangle–>nat,

        2、每个规则表中有N多规则,

    3、被PREROUTING链处理过后的数据将会转发给INPUUT链

        1、规则表匹配顺序mangle–>filter,

        2、通常需要阻止别人访问,或者开放服务给用户都是在此filter规则表中设定

    4、用户空间:程序运行时生成的进程监听在某个套接字(端口)上,内核拆分数据报文到传输层时(TCP/UDP),检查数据报文的目的端口,进而转交给其监控的进程处理。

         用户空间处理完数据包之后,会将需要返回给用户的数据重新打包,交给内核,由内核将数据封装(封装传输层,网络层,数据链层报文头部),

        这里的封装就会参考OUTPUT链与POSTROUTING链,

    5、数据报文到达OUTPUT链

        1、规则表匹配顺序:raw–>mangle–>nat–>filter

    6、数据报文被OUTPUT链处理完毕之后接着交给POSTROUTING

        1、规则表匹配顺序:mangle–>nat

五、网络防火墙:

    网络防火墙的意思是提供数据包转发,数据报文的最终目的地址并不是本机防火墙,需要开启forward功能

36.png

    网络防火墙管控修改数据包源,目的IP地址与过滤数据报文。

六、IPTABLES命令学习(编写规则表):iptables并不是服务,没有进程,是工作在内核

命令学习:

链管理: 规则管理: 查看:
-F Flush 清空规则链 -A Append 将规则追击到指定链的最后 -L List 列出指定链的规则
-N New 创建新的自定义规则链 -I Insert 插入一条规则,不给序号就是第一条 -n Number数字显示IP与端口号
-X 删除用户自定义链 -D Delete 删除规则 -v,-vv,-vvv 显示详细信息
-Z Zero 清零,规则计数器重置为零 -R Replace 替换规则 –line-numbers 显示规则编号
-P Policy 为指定的规则链设置默认策略 -x 显示计数结果精确值
-E rEname 重命名自定义链
-j 指定被规则匹配后所要执行的动作,ACCEPT(允许),DROP(丢弃),REJECT(拒绝),RETURN(返回),REDIRECT(重定向),LOG(记录日志),MARK(标记),DNAT(目的地址转换),SNAT(源地址转换),MASQUERADE(地址伪装)

例子:

    ~]# iptables -t nat -L    #查看nat表中规则链与规则

匹配条件:

    基本匹配:

    [!]    -s    -src    –source    [ip|network]        数据报文源地址匹配,[!]表示取反

    [!]    -d    -dst    –destination    [ip|network]        数据报文目的地址匹配,[!]表示取反

    -p    –protocol    [tcp|udp|icmp]        传输层协议

    -i    –in-interface    指定数据报文入接口    ##仔细想想只能用在PREROUTING,FORWARD,INPUT链上

    -o    –out-interface    指定数据报文This test Page abcdefgh出接口    ##仔细想想只能用在OUTPUT,FORWARD,POSTROUTING链上

    隐含扩展匹配:

    -p tcp {–sport,–dport,–tcp-flage,–sync}

        例:–tcp-flage SYN,ACK,FIN,RST SYN     表示匹配TCP数据报文中TCP首部SYN,ACK,FIN,RST四个关键字位置,并且只有SYN为1,能可以,其它三个位置必须为0(TCP三次握手的第一次)

    -p udp {–sport,–dport}

    -p icmp –icmp-type    icmp类型有很多,常用就是类型为0的表示ping应答(Echo reply) 类型8为ping请求(Echo request)

    显示扩展:使用-m macth_name –spec_options,必须指明使用的扩展模块(重点)

    一、multiport:指定多端口

            使用方法:

            [!] –source-ports,–sports port[,port|,port:port]…

                ~]# iptables -A INPUT -d 192.168.3.21 -p tcp -m multiport –dports 53:80,111 -j ACCEPT        

                #没有指定源IP地址,表示任意源IP地址访问本机192.168.3.31这个IP的TCP协议,目的端口是53~80的所有端口,加上111这个端口

            [!] –destination-ports,–dports port[,port|,port:port]…

            [!] –ports port[,port|,port:port]…

                ~]# iptables -A INPUT -d 192.168.3.21 -p tcp -m multiport –dports 22,80,443 -j ACCEPT        #此规则类似,

    二、iprange:指定IP地址范围

            使用方法:

            [!] –src-range from[-to]

                ~]# iptables -A INPUT -d 192.168.3.21 -p tcp –dport 443 -m iprange –src-range 192.168.3.1-192.168.3.50 -j ACCEPT        

            [!] –dst-range from[-to]
    三、string:指定的字符

            使用方法:

            –algo {bm|kmp}    bm与kmp是匹配字符串的算法

                ~]# iptables -A OUTPUT -s 192.168.3.21 -p tcp –sport 80 -m string –algo bm –string "abcdefg" -j DROP   

                #当192.168.3.21这台web服务器网页上出现abcdefg字符,网站就不能被访问了

    四、time:访问时间控制

            使用方法

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

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

            –timestart hh:mm[:ss]

            –timestop hh:mm[:ss]

                ~]#iptables -A OUTPUT -s 192.168.3.10 -p tcp –sport 80 -m time –timestart 07:00 –timestop 23:00 -j ACCEPT       

                #每天的早上7点到晚上23点才能访问

            [!] –monthdays day[,day…]

            [!] –weekdays day[,day…]    Mon,  Tue,  Wed,  Thu,  Fri,  Sat,  Sun, or values from 1 to 7,

                ~]#iptables -A OUTPUT -s 192.168.3.10 -p tcp –sport 80 -m time ! –weekdays 6,7  -j ACCEPT       

                #星期6,星期7取反,也就是只能星期一到星期五访问

    五、conntlimit:连接限制

            使用方法:

            [!] –connlimit-above n

                ~]# iptables -I INPUT -d 192.168.3.10 -p tcp –dport 22 -m connlimit –connlimit-above 3 -j DROP

                #表示对连接22端口限制最大连接数为3,在规则生效时,在线的ssh服务,不算,之后退出重新连接就算

            –connlimit-mask

              ~]# iptables  -p  tcp  –syn  –dport  80  -m connlimit –connlimit-above 16 –connlimit-mask 24 -j REJECT

                #这个有点意思,限制C类网络地址(掩码是24的),http并发连接不超过16个,

                #假如说我们的客户端地址是192.168.3.0/24,我们这个网段内的所有地址一起发起http请求并发,不能超过16个,

    六、limit:报文速率限制

            使用方法:

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

            –limit-burst number

              ~]# iptables -I INPUT -d 192.168.3.10 -p tcp –dport 443 -m limit –limit 100/minute -j DROP

                 #每分钟限制100个报文,多的会DROP掉

    七、state:连接状态追踪,nf_conntrack

            有了状态连接之后,我们可以在OUTPUT方向只放行已经建立连接的数据(在没有启用state功能是,对于规则的编写要考虑到进出两个方向),

            状态类别有:

                NEW:新建连接

                ESTABLISHED:正在建立连接

                RELATED:相关连接(FTP被动模式的控制连接与数据连接)

                INVALID:无效的连接

            [!] –state state:

                ~]# iptables -A OUTPUT -m state –state ESTABLISHED -j ACCEPT    

                    #已经建立的连接OUTPUT方向直接放行流量

                ~]# iptables -I INPUT -d 192.168.3.10 -p tcp -m multiport –dports 22,80,53 -m state –state NEW,ESTABLISHED -j ACCEPT

                    #对于访问192.168.3.10的22,80,53服务,新建或者已经建立连接的流量直接放行

    八、还有很多显示扩展的高级功能,我们需要多多man iptables

七、主机防火墙规则备份与恢复:

    规则保存:~]# iptables-save > iptables-rules

    规则恢复:~]# iptables -restore < iptables-rules


FTP特殊放行:需要加载单独对FTP放行的模块

/lib/modules/2.6.32-573.el6.x86_64/kernel/net/netfilter/nf_conntrack_ftp.ko    模块位置

~]# modprobe nf_conntrack_ftp    #加载模块
~]# iptables -A INPUT -d 192.168.3.10 -p tcp –dport 21 -m state –state NEW,ESTABLISHED -j ACCEPT

~]# iptables -A INPUT -d 192.168.3.10 -p tcp -m state –state RELATED -j ACCEPT

~]# iptables -I INPUT -s 192.168.3.10 -p tcp -m state –state ESTABLISHED -j ACCEPT

原创文章,作者:nice_neo_linux,如若转载,请注明出处:http://www.178linux.com/18952

赞 (0)
nice_neo_linuxnice_neo_linux
上一篇 2016-06-23 11:01
下一篇 2016-06-23 11:02

相关推荐

  • Lvm基本应用,扩展及缩减实现

    什么是LVM LVM是Logical Volume Manager的简写。其是Linux环境下对磁盘分区进行管理的一种机制。LVM由Heinz Mauelshagen在Linux 2.4内核上实现。其主要作用是在不损坏磁盘数据的情况下对磁盘空间进行增加,缩减。LVM的做法是将几块物理硬盘通过软件的方式组合成一块空间相对大的Volume Group,简称VG,…

    Linux干货 2016-09-08
  • 什么是文件系统

    文件系统:层级结构;有索引; /: 原初起点; 倒置树状结构; /dev/pts/2: 最左侧/: 表示根目录 其它的/: 表示路径分隔符 Linux的路径分隔符是/ Windows的是\ 文件的路径表示: 绝对路径:从根开始表示出的路径  相对路径:从当前位置开始表示出的路径 文件名使用法则: 严格区分字符大小写:file1, File1, FI…

    Linux干货 2016-10-29
  • N25第四周总结(lvm)

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

    Linux干货 2016-12-22
  • LAMP编译安装

    所谓的LAMP是指构建在Linux之上经典的一种web架构方式,其中L指的是Linux,A指的是Apache的httpd,M指的是Mysql或MariaDB,P指的是PHP,这种组合方式的基本工作模式是有httpd负责接收和相应用户的请求,然后将需要处理的php页面交由后端的php应用程序处理,而php应用程序处理php页面时的数据存储在Mysql数据库中,…

    Linux干货 2016-12-19
  • 基于rsync+inotify实现数据实时同步传输

    前言 与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,但随着文件数量的增大和实时同步的要求,rsync已不能满足需求,随之rsync+inotify便应运而生。本文将讲解rsync的基础知识和如何基于rsync+inotify实现数据实时同步传输。 rsync相关介…

    Linux干货 2015-04-27
  • LVM逻辑卷管理练习

         小编今天要讲的内容是如何创建逻辑卷,然后扩展它、缩减它。LVM 的重点就在于可以弹性的调整文件系统的容量!所以,下面练习开始。 1、创建一个至少有两个PV组成的大小为20G的名为testvg的 VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻 辑卷testlv;挂载至/users目录。 ①准备两个10G的…

    2017-08-26