iptables: 包过滤型防火墙
    
Firewall: 防火墙,隔离工具;工作于主机或网络的边缘,对于进出本主机或网络的报文根据事先定义好的检查规则作匹配检测,对于能够被规则所匹配到的报文做出相应处理的组件;可分为主机防火墙和网络防火墙,centos6中的配置文件为/etc/sysconfig/iptables
 
一. 基础介绍之4表5链
 
  1.   4表
        filter: 过滤,当防火墙;
        nat:  网络地址转换,包括地址和端口;
        mangle:拆解报文,做出修改,封装报文;
        raw:关闭nat表上启用的连接追踪机制;有追踪机制(其实就是记忆功能),才能完成NAT转换
 
  2.   5链(内置):
        PREROUTING
        INPUT
        FORWARD
        OUTPUT
        POSTROUTING
 
        流入报文经由路径:PREROUTING --> INPUT
        流出报文经由路径:OUTPUT --> POSTROUTING
        转发报文经由路径:PREROUTING --> FORWARD --> POSTROUTING
 
 3.   各功能可以实现的位置:
        filter:INPUT, FORWARD, OUTPUT
        nat: PREROUTING(DNAT), OUTPUT, POSTROUTING(SNAT)
        mangle:PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
        raw:PREROUTING, OUTPUT
 
 4.   路由发生的时刻:
        报文进入本机后,用于判断目标主机;       
        报文发出之前,判断经由哪个接口送往下一跳;
            
 5.   小结
      iptables:主要是四表五链
 
      1) 添加规则时的考量点:
            (1) 要实现哪种功能,用来判断添加在哪张表上;
            (2) 报文流经的路径,用来判断添加在哪个链上;
 
      2) 链:链上规则的次序,即为检查的次序;依据从上到下的顺序
            (1) 访问同一应用(比如都访问22端口),匹配范围小的放上面;
            (2) 访问不同应用,匹配到报文频率较大的放上面;
            (3) 尽量将多个规则合并为一个,进行优化;
            (4) 设置默认策略;
 
        功能的优先级次序:raw --> mangle --> nat --> filter
 
 
 6.   规则说明:
        组成部分:报文的匹配条件,匹配到之后处理动作
 
           1) 匹配条件:根据协议报文特征指定,比如tcp,  ip,udp等报文特征
                基本匹配条件
                扩展匹配条件
 
           2) 处理动作:
                内建处理机制,比如drop, reject
                自定义处理机制, 用于跳转到自定义链
 
          注意:报文不会经过自定义链,只能在内置链上通过规则进行引用后生效;
 
 
 
 
二.     iptables命令:
 
   它是一个规则生成器,相关操作有添加、修改、删除、显示等;
 
   规则和链有计数器:
            pkts:由规则或链所匹配到的报文的个数;
            bytes:由规则或链匹配到的所有报文大小之和;
 
    iptables命令:
       iptables [-t table] {-A|-D} chain rule-specification
       iptables [-t table] -I chain [rulenum] rule-specification
       iptables [-t table] -R chain rulenum rule-specification
       iptables [-t table] -D chain rulenum
       iptables [-t table] -S [chain [rulenum]]
       iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
       iptables [-t table] -N chain
       iptables [-t table] -X [chain]
       iptables [-t table] -P chain target
       iptables [-t table] -E old-chain-name new-chain-name
 
       -t table包括:filter, nat, mangle, raw
               
         1.  链管理:
               -F:flush,清空规则链;省略链,表示清空指定表上的所有的链;
               -N:new, 创建新的自定义规则链;
               -X:drop, 删除用户自定义的空的规则链;
               -Z:zero,清零,置零规则计数器;
               -P:Policy,为指定链设置默认策略;对filter表中的链而言,默认策略通常有ACCEPT, DROP, REJECT;
                      例如:iptables -P INPUT DROP
                                 iptables -P OUTPUT DROP
                                 iptables -P FORWARD ACCEPT
                                 设定INPUT、OUTPUT的默认策略为DROP,FORWARD为ACCEPT。
               -E: rEname,重命令自定义链;引用计数不为0的自定义链,无法改名,也无法删除;
 
         2.  规则管理:
               -A:append,将新规则追加于指定链的尾部;
               -I:insert,将新规则插入至指定链的指定位置;
               -D:delete,删除指定链上的指定规则;有如下两种指定方式:
                       (1) 指定匹配条件;
                       (2) 指定规则编号;
               -R:replace,替换指定链上的指定规则;
 
         3.  查看:
               -L:list,列出指定链上的所有规则,后面还可以跟如下的子参数来显示更详细的内容;
                     -n: numberic,以数字格式显示地址和端口号;
                     -v: verbose,显示详细信息;
                        -vv, -vvv
                     --line-numbers:显示规则编号;
                     -x: exactly, 显示计数器计数结果的精确值;
 
         4.  匹配条件:
 
             1)基本匹配:
                   [!] -s, --src, --source IP|Netaddr:检查报文中源IP地址是否符合此处指定的地址范围,!表示取反;
                   [!] -d, --dst, --destination IP|Netaddr:检查报文中目的IP地址是否符合此处指定的地址范围;
                   -p, --protocol {tcp|udp|icmp}:检查报文中的协议,即ip首部中的protocols所标识的协议;
                   -i, --in-interface IFACE:数据报文的流入接口;仅能用于PREROUTING, INPUT及FORWARD链上;
                   -o, --out-interface IFACE:数据报文的流出接口;仅能用于FORWARD, OUTPUT及POSTROUTING链上;
 

                    例1:允许别人ping我(本机地址:172.16.100.9)
                              iptables -A INPUT -d 172.16.100.9 -p icmp -j ACCEPT
                              iptables -A OUTPUT -s 172.16.100.9 -p icmp -j ACCEPT
                   
                    例2:对流入流出接口进行限制,只允许eth0进行流入流出
                             iptables -A INPUT -d 172.16.100.9 -i eth0 -j ACCEPT
                             iptables -A OUTPUT -s 172.16.100.9 -o eth0 -j ACCEPT
 
       
        5.  目标:
               -j  TARGET:jump至指定的TARGET,目标如下
                   ACCEPT: 接受
                   DROP: 丢弃
                   REJECT: 拒绝
                   RETURN: 返回调用链
                   REDIRECT:端口重定向
                   LOG: 记录日志
                   MARK:做防火墙标记
                   DNAT:目标地址转换
                   SNAT:源地址转换
                   MASQUERADE:地址伪装
                   ...
                   自定义链:由自定义链上的规则进行匹配检查
 
 
 
 
三.  匹配条件之扩展匹配
 
       扩展匹配:包括隐式扩展,显示扩展,基本格式为-m macth_name --spec_options,例如 -m tcp --dport 22
 

1. 隐式扩展:对-p protocol指明的协议进行的扩展,可省略-m选项,按协议分类如下;

               1)  -p tcp
                           --dport PORT[-PORT]:目标端口,可以是单个端口或连续多个端口;
                           --sport PORT[-PORT]
                           --tcp-flags LIST1 LIST2:检查LIST1所指明的所有标志位,且这其中,LIST2所表示出的所有标记位必须为1,而余下的必须为0;没有LIST1中指明的,不作检查                                                                 
                              比如:  --tcp-flags SYN,ACK,FIN,RST SYN   可以简写为--syn,表示检查tcp连接的第一次请求
                                             6个标志位: SYN, ACK, FIN, RST, PSH, URG(请求同步,确认号有效,断开请求,重置连接,推送,紧急指令)
 
                           例1:打开22端口,允许远程管理。(设定了很多的附加条件:管理机器IP必须是250,并且必须从eth0网卡进入)
                                  iptables -A INPUT -i eth0 -s 192.168.100.250 -d 192.168.100.1 -p tcp --dport 22 -j ACCEPT
                                  iptables -A OUTPUT -o eth0 -d 192.168.100.250 -s 192.168.100.1 -p tcp --sport 22 -j ACCEPT
                 
               2)  -p udp
                           --dport
                           --sport
                
                     例子:对于基于udp的dns服务,使用以下命令开启端口服务
                                iptables -A OUTPUT -o eth2 -p udp --dport 53 -j ACCEPT
                                iptables -A INPUT -i eth2 -p udp --sport 53 -j ACCEPT
 
               3)   -p icmp
                           --icmp-type
                               可用数字表示其类型:
                                   0:echo-reply
                                   8: echo-request
                    
                           例1:允许ping别人,不允许别人ping我(本机地址:172.16.100.9)                
                                    iptables -A OUTPUT -d 172.16.100.9 -p icmp --icmp-type 8 -j ACCEPT
                                    iptables -A INPUT -d 172.16.100.9 -p icmp --icmp-type 0 -j ACCEPT
 
                           例2:在所有网卡上打开ping功能,便于维护和检测
                                   iptables -A INPUT -i eth+ -p icmp --icmp-type 8 -j ACCEPT
                                   iptables -A OUTPUT -o eth+ -p icmp --icmp-type 0 -j ACCEPT

 
 
   2. 显式扩展: 必须显式指明使用的扩展模块(rpm -ql iptables | grep "\.so")
           
        CentOS 6: man iptables
        CentOS 7: man iptables-extensions
 
      1) multiport扩展
            以离散方式定义多端口匹配;最多指定15个端口;
            [!] --source-ports,--sports port[,port|,port:port]...:指明多个离散的源端口,22:25表示连续的端口;
            [!] --destination-ports,--dports port[,port|,port:port]...:指明多个离散的目标端口;
            [!] --ports port[,port|,port:port]... :源和目标都行,很少用
           ~]# iptables -I INPUT -s 172.16.0.0/16 -d 172.16.100.9 -p tcp -m multiport --dports 22,80 -j ACCEPT
           ~]# iptables -I OUTPUT -d 172.16.0.0/16 -s 172.16.100.9 -p tcp -m multiport --sports 22,80 -j ACCEPT
 
      2) iprange扩展
            指明连续的(但一般是不能扩展为整个网络)ip地址范围时使用;
            [!] --src-range from[-to]:指明连续的源IP地址范围;
            [!] --dst-range from[-to]:指明连续的目标IP地址范围;
            ~]# iptables -I INPUT -d 172.16.100.9 -p tcp -m multiport --dports 22:23,80 -m iprange --src-range 172.16.100.1-172.16.100.120 -j ACCEPT
            ~]# iptables -I OUTPUT -s 172.16.100.9 -p tcp -m multiport --sports 22:23,80 -m iprange --dst-range 172.16.100.1-172.16.100.120 -j ACCEPT      
  
      3)string扩展
           检查报文中出现的字符串;
           --algo {bm|kmp},2种比对算法
             bm = Boyer-Moore
             kmp = Knuth-Pratt-Morris
 
             [!] --string pattern,从头到尾进行检查
             ~]# iptables -I OUTPUT -m string --algo bm --string 'movie' -j REJECT (对网页中有'movie‘字符的禁止访问---允许请求此网页,但是回应不能到达本机)
 
      4)time扩展
           根据报文到达的时间与指定的时间范围进行匹配;
          --datestart
          --datestop
          --timestart
          --timestop
          --monthdays
          --weekdays
          iptables -I INPUT -d 172.16.100.9 -p tcp --dport 80 -m time --timestart 14:00 --timestop 16:00 -j REJECT (UTC格式时间)
 
      5)connlimit扩展
           根据每客户端IP(也可以是地址块)做并发连接数数量匹配;
           --connlimit-above n:连接的数量大于n,后面一般跟REJECT
           iptables -I INPUT -p tcp --dport 22 -m connlimit --conlimit-above 3 -j REJECT
 
           --connlimit-upto n: 连接的数量小于等于n,后面一般跟ACCEPT
 
      6)limit扩展
           基于收发报文的速率做检查;
 
           基于令牌桶过滤器来实现速率匹配,理解为发令牌给人去办事,只有办完事还了令牌,才能发给下一个人去办事
           --limit rate[/second|/minute|/hour|/day]
           --limit-burst number(峰值,不是必须的,就是空闲的时候不限速率,先最多给几个)
          
           例1:
           iptables -A INPUT -d 172.16.100.9 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit 30/minute -j ACCEPT
           iptables -A OUTPUT -s 172.16.100.9 -p icmp --icmp-type 0  -j ACCEPT
 
           例2:Dos攻击防范
           iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
           --limit 25/minute表示每分钟限制最大连接数为25
           --limit-burst 100指定当总连接数超过100时,启动limit/minute限制
 
      7)state扩展--重要
 
           根据连接追踪机制检查连接的状态;(在指定时间内,比如6秒,记忆连接记录,需要用内核内存空间)
           调整连接追踪功能所能够容纳的最大连接数量:/proc/sys/net/nf_conntrack_max  
           已经追踪到并记录下的连接:/proc/net/nf_conntrack            
           不同协议或连接类型追的时长:/proc/sys/net/netfilter/
            
           可追踪的连接状态:
             NEW:新发出的请求;连接追踪模板中不存此连接相关的信息条目,因此,将其识别为第一次发出的请求;
             ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信的状态;
             RELATED:相关的连接;如ftp协议的命令连接与数据连接之间的关系;
             INVALIED:无法识别的连接;
 
            例子1
            iptables -I INPUT -d 172.16.100.9 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
            iptables -I OUTPUT -s 172.16.100.9 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
 
            例子2:  PING只响应别人
            iptables -A INPUT -d 172.16.100.9 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
            iptables -A OUTPUT -s 172.16.100.9 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT
 
            例子3: 配置web流量均衡
            把一台服务器作为前段服务器,利用iptables进行流量分发,配置方法如下        
            iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:80
            iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.102:80
            iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.103:80
 
 
        问题:如何开放被动模式的ftp服务?
            (1) 装载ftp追踪时的专用的模块:
                # modprobe nf_conntrack_ftp
            (2) 放行请求报文:
                命令连接:NEW, ESTABLISHED,通过21端口
                数据连接:RELATED, ESTABLISHED,随机端口
                # iptables -A INPUT -d LocalIP -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
                # iptables -A INPUT -d LocalIP -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
            (3) 放行响应报文:
                ESTABLISEHD
                # iptables -A OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT
 
 
 
 
四.    如何保存及重载规则:
 
          保存规则至指定文件:iptables-save > /PATH/TO/SOMEFILE           
          从指定文件重载规则:iptables-restore < /PATH/FROM/SOMEFILE
            
        CentOS 6:
            service iptables save 相当于iptables-save > /etc/sysconfig/iptables                
            service iptables restart 相当于iptables-restore < /etc/sysconfig/iptables
                
 
        CentOS 7:
            引入了新的iptables前端管理服务工具:firewalld
                firewalld-cmd
                firewalld-config
 
       其实centos7中也可以使用iptables,那么需要先禁用firewalld,方法如下
         禁止firewall开机启动:systemctl disable firewalld.service
         关闭firewall: systemctl stop firewalld.service
         启动iptables: service iptables start
 
 
 
 
五.  回顾和练习:
 
    iptables/netfilter
        netfilter: kernel framework,
        iptables
        四表:filter, nat, mangle, raw
        五链:PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
  
        子命令:
            链:-F, -X, -N, -E, -Z, -P, -L
            规则:-A, -I, -D, -R
        -j TARGET:
            ACCEPT, DROP, REJECT, RETURN, LOG, MARK, DNAT, SNAT, MASQUEARDE, ...
 
        匹配标准:
 
            通用匹配:-s, -d, -p, -i, -o
 
            扩展匹配
                隐含扩展:
                    -p tcp: --dport, --sport, --tcp-flags, --syn (--tcp-flags SYN,ACK,FIN,RST SYN)
                    -p udp: --dport, --sport
                    -p icmp: --icmp-type
                显式扩展: -m
 
 
    练习:
        主机防火墙:
            放行telnet, ftp, web服务;
            放行samba服务;
            放行dns服务(查询和区域传送);
 
        网络防火墙:
            放行telnet, ftp, web服务;
            放行samba服务;
            放行dns服务(查询和区域传送)

iptables总结的更多相关文章

  1. iptables

    一.在服务器上打开 22.80.9011端口: iptables -A INPUT -p tcp --dport 9011 -j ACCEPT iptables -A OUTPUT -p tcp -- ...

  2. 浅谈iptables 入站 出站以及NAT实例

    --------------本文是自己工作上的笔记总结,适合的可以直接拿去用,不适合的,适当修改即可!--------------- iptbales默认ACCEPT策略,也称通策略,这种情况下可以做 ...

  3. Failed to stop iptables.service: Unit iptables.service not loaded.

    redhat 7 [root@lk0 ~]# service iptables stop Redirecting to /bin/systemctl stop iptables.service Fai ...

  4. CentOS7安装iptables防火墙

    CentOS7默认的防火墙不是iptables,而是firewalle. 安装iptable iptable-service #先检查是否安装了iptables service iptables st ...

  5. linux iptables常用命令之配置生产环境iptables及优化

    在了解iptables的详细原理之前,我们先来看下如何使用iptables,以终为始,有可能会让你对iptables了解更深 所以接下来我们以配置一个生产环境下的iptables为例来讲讲它的常用命令 ...

  6. CentOS系统配置 iptables防火墙

    阿里云CentOS系统配置iptables防火墙   虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT.OUTPUT和FO ...

  7. /etc/sysconfig/下找不到iptables文件解决方法

    时间:2014-12-19 01:17来源:csdn 作者:大智 举报 点击:5639次 本想做些防火墙策略.防火墙策略都是写在/etc/sysconfig/iptables文件里面的.可我发现我也没 ...

  8. docker通过iptables修改或新增镜像映射端口

    443 8088 22 端口是初始映射端口 [root@SERVER ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAM ...

  9. lnmp 预设iptables设置

    「LNMP」iptables初始配置   首先使用命令iptables -P INPUT ACCEPT允许所有连接,否则容易把自己关在外边.然后使用iptables -F;iptables -X;ip ...

  10. 关闭SELinux和iptables防火墙

    1.关闭SELinux: 编辑SELinux配置文件: [root@Redis selinux]# vim /etc/selinux/config 修改SELINUX配置项为disable SELIN ...

随机推荐

  1. linux系统文件的链接

    一. 硬链接(实际链接) (以linux系统为例) 1. 文件的索引节点inode 假设我们在硬盘当前目录下建立了一个名为mytext文本文件,其内容只有一行:This is my file. (1) ...

  2. requests对象

    属性 0.HttpRequest.scheme 表示请求方案的字符串(通常为http或https) 1.HttpRequest.body 一个字符串,代表请求报文的主体.在处理非 HTTP 形式的报文 ...

  3. Ubuntu14.04-LTS 从系统安装到配置可用

    1.安装Ubuntu14.04LTS-64bit 使用U盘安装很方便快捷,可以使用老毛桃使用iso模式制作一个U盘启动盘,然后分区安装. 如果使用硬盘安装的话需要注意的问题是: 如果电脑上以前有Lin ...

  4. python 网络编程 TCP/IP socket UDP

    TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...

  5. jQuary总结3: jQuery语法1

    1.jQuery样式操作 1.1 设置或者修改样式,操作的是style属性. 单样式语法: jQuery对象.css('属性名', '属性值') //html <div id="box ...

  6. POJ 1985 Cow Marathon (树形DP,树的直径)

    题意:给定一棵树,然后让你找出它的直径,也就是两点中的最远距离. 析:很明显这是一个树上DP,应该有三种方式,分别是两次DFS,两次BFS,和一次DFS,我只写了后两种. 代码如下: 两次BFS: # ...

  7. 重装ubuntu

    重装前 需要备份软件.配置文件等,重装系统时,最好不要重新给/home分区,也不要格式化,要不你需要备份很多东西,重装后也需要做很多设置.也就是说/home不格式化,整个重装系统都是很快的.最多花10 ...

  8. Reactor模式和NIO(转载二)

    本文可看成是对Doug Lea Scalable IO in Java一文的翻译. 当前分布式计算 Web Services盛行天下,这些网络服务的底层都离不开对socket的操作.他们都有一个共同的 ...

  9. Android-bindService远程服务(Aidl)-传递对象

    之前上一篇讲解到本地服务,本地服务只能在自身APP中Activity访问Service,调用Service里面到方法等操作 如果想A应用访问B应用里面的方法,属于跨进程调用,如果Android不特供这 ...

  10. SharpMap入门教程

    SharpMap是一个基于.NET Framework 4,采用C#开发的地图渲染引擎,非常易于使用.本教程针对SharpMap入门及开发,讲述如何基于SharpMap组件渲染Shapefile数据. ...