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

相关推荐

  • sed对比grep之理解

    sed对比grep之理解 很多时候回车按下,没有结果,或是报错。 检查发现都是低级错误,关键是习惯刚学完grep,有写习惯没改过来。 sed语法很重要。script语法写对了,就成功了一大半,剩下的就是正则表达式的问题了。 sed与grep的区别是 grep是个行过滤器,筛选符合条件的行。也可以只显示每行匹配到的文本(-o选项),不对文本进行编辑,只是显示查…

    Linux干货 2016-08-10
  • 网络第21期第七周作业

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; [root@localhost ~]# fdisk /dev/sdb WARNING: DOS-compatible m…

    Linux干货 2016-10-09
  • zabbix low-level discover 监控端口

    zabbix通过调用jason格式的输出,实现数据的收集 获取端口的shell脚本   #!/bin/bash port_array=(`netstat -tnl|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]…

    Linux干货 2016-06-09
  • 马哥教育N22期第六周作业

    关于vim编辑器使用方法整理 编辑器分为文本编辑器、全屏编辑器、模式化编辑器 vim是最常用的编辑器之一,是vi的增强版 基本模式分为编辑模式、命令模式、输入模式、末行模式 下面我们介绍一下vim编辑器常用方法: 打开文件 vim +#:打开文件后,直接光标处于第#行行首 +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配 +…

    Linux干货 2016-10-09
  • tomcat配置详解

    主程序: ·tomcat ·tomcat-admin-webapps ·tomcat-webapps ·tomcat-docs-webapp ·java-1.8.0-openjdk 配置文件: 配置文件目录:/etc/tomcat 主配置文件:server.xml webapps存放位置:/var/lib/tomcat/webapps/ webapps的根目…

    2017-08-08
  • Linux命令学习总结:cp命令

    Linux命令学习总结:cp命令 命令简介:      cp命令用来复制文件或目录。指令英文原义:copy,copy files and directories      指令所在路径:/bin/cp 命令语法: cp [OPTION]… [-T]   SO…

    Linux干货 2017-07-23