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
下一篇 2016-06-23

相关推荐

  • 马哥教育网络班22期+第1周课程练习

    一、计算机组成部分及其功能:硬件系统和软件系统     1、计算机的硬件系统组成及其功能:         运算器:处理数据的算术运算及逻辑运算即数据加工处理;         控制器:根据…

    Linux干货 2016-08-15
  • CentOS 系统自动化安装

    CentOS 系统自动化安装 概述:     系统安装过程     配置anaconda     自动化安装系统 CentOS 系统安装: 1.启动流程: bootloader–>kernel(initrd)–>rootfs–>anaconda(…

    Linux干货 2016-09-21
  • Linux发展史

    简 述 Linux是一套自由加开放源代码的类Unix操作系统,诞生于1991年10月5日(第一次正式向外公布),由芬兰学生Linus Torvalds和后来陆续加入的众多爱好者共同开发完成。 Linux是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议,可支持32位和64位硬件。…

    2016-10-14
  • 堡垒机-麒麟开源堡垒机苹果 Mac支持版本发布

      近日,麒麟开源堡垒机团队开发测试了支持Mac OS苹果操作系统的Web插件,苹果系统用户可以直接和Windows用户一样,登录到Web平台,使用点击的方式调动运维工具并且登录到目标系统进行操作运维。 Mac OS插件支持ssh、telnet、rdp、vnc、x11、sftp、ftp、应用发布等所有协议。   注:麒…

    Linux干货 2016-05-19
  • mysql并发控制

    并发控制: 锁:Lock 1、锁类型 : 读锁:共享锁,可被多个读操作共享; 写锁:排它锁,独占锁; 2、锁粒度: 表锁:在表级别施加锁,并发性较低; 行锁:在行级另施加锁,并发性较高; 3、锁策略:在锁粒度及数据安全性之间寻求一种平衡机制; 存储引擎:级别以及何时施加或释放锁由存储引擎自行决定; MySQL Server:表级别,可自行决定,也允许显式请求…

    2016-11-18
  • 计算机浅谈及Linux简谈

    一、计算机浅谈: 电子计算机(英语:computer),亦称电脑,是一种利用电子学原理,根据一系列指令对数据进行处理的工具。 在现代,机械计算机的应用已经完全被电子计算机所替换,其所相关的技术研究叫计算机科学,而“计算机技术”指的是将计算机科学的成果应用于工程实践所派生的诸多技术性和经验性成果的总合。“计算机技术”与“计算机科学”是两个相关而又不同的概念,它…

    Linux干货 2016-11-29