iptables总结

iptables简称为包过滤型防火墙一般分为2种:
    1,主机防火墙:主机防火墙是用来防止本主机内的应用服务被攻击所需要保护的防火墙
    2,网络防火墙:做为想路由功能的防火墙凡是进过此服务器的数据包都要进行规则匹配
iptables的架构由功能和链组成
    功能:
        filter:过滤,防火墙;
        nat:地址转换nerwork address translation
        mangle:拆解报文,做出修改,封装报文
        raw:关闭nat表示启用的连接追踪功能(此功能非常消耗CPU)
    每一种功能都会内置几种链:
        PREROUTING-->路由前
        INPUT-->输入一段
        FORWARD-->由本机转发
        OUTPUT-->本机内部发出
        POSTROUTING-->在第二次路由决策

在iptables上每一种功能的实现机制都是基于上诉的几种链接:
    流入:PREROUTING-->INPUT
    流出:OUTPUT-->POSTROUTING
    转发:PEROUTING-->FORWARD-->POSTROUTING

在功能上每一种功能都会内置几种连接
    filter(过滤):INPUT,FORWARD,OUTPUT
    nat(地址转换):PERROUTING(DNAT),OUTPUT,POSTROUTING(SNAT)
    mangle(拆解报文,做出修改,封装报文):PEROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
    raw(关闭nat表示启用的连接追踪功能):PREROUTING,OUTPUT

功能优先级:raw>mangle>nat>filter

规则:
    组成部分:报文的匹配条件,匹配到之后处理动作
        匹配条件:根据协议报文特征指定匹配条件
            基本匹配条件
            扩展匹配条件

        处理动作:
            内建处理机制
            自定义处理机制

iptables:规则管理工具
    添加,修改,删除,显示等

iptables命令:查看linux上man配置手册里面会有详细的解释
    iptables -t (按照自己的修改查看自己需要找的几个表默认为filter)
    例如:
    [root@localhost ~]# iptables -t mangle -L -n
    Chain PREROUTING (policy ACCEPT)
    target     prot opt source               destination         

    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         

    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         

    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         

    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination

上诉为查看iptables中mangle规则         

iptables命令分为2种链管理,规则管理
    链管理:
        -F:flush,清空规则链,省略链表示清空指定表上所有的链;
        -N:new,创建新的自定义规则链;
        [root@localhost ~]# iptables -t filter -N IN_public
        [root@localhost ~]# iptables -L -n
        Chain INPUT (policy ACCEPT)
        target     prot opt source               destination         

        Chain FORWARD (policy ACCEPT)
        target     prot opt source               destination         

        Chain OUTPUT (policy ACCEPT)
        target     prot opt source               destination         

        Chain IN_public (0 references)
        target     prot opt source               destination         
        -X:drop,删除用户自定义的规则链,必须是空链
        [root@localhost ~]# iptables -X IN_public
        [root@localhost ~]# iptables -L -n
        Chain INPUT (policy ACCEPT)
        target     prot opt source               destination         

        Chain FORWARD (policy ACCEPT)
        target     prot opt source               destination         

        Chain OUTPUT (policy ACCEPT)
        target     prot opt source               destination         

        -Z:zero,置零:置零规则计数器;
        -P:policy,为指定链设置默认处理策略;对filter表中的链而言,默认策略通常有accept(放行),drop(丢弃),reject(拒绝)
        [root@localhost init.d]# iptables -P FORWARD DROP
        [root@localhost init.d]# iptables -L -n
        Chain INPUT (policy ACCEPT)
        target     prot opt source               destination         

        Chain FORWARD (policy DROP)
        target     prot opt source               destination         

        Chain OUTPUT (policy ACCEPT)
        target     prot opt source               destination       
        -E:rename:重命名自定义链:引用计数器不为0的自定义链无法改名,也无法删除;
        [root@localhost ~]# iptables -E IN_public hello
        [root@localhost ~]# iptables -L -n
        Chain INPUT (policy ACCEPT)
        target     prot opt source               destination         

        Chain FORWARD (policy ACCEPT)
        target     prot opt source               destination         

        Chain OUTPUT (policy ACCEPT)
        target     prot opt source               destination         

        Chain hello (0 references)
        target     prot opt source               destination     
    规则管理:
        -A:append,将新规则追加于指定链的尾部;
        -I:insert,将新规则插入至指定链的指定位置;
        -D:delete,删除指定链上的指定规则;
            有两种指定方式:
            (1)指定匹配条件;
            (2)指定规则编号;
        -R:replace,替换指定链上的指定规则:
    查看:
        -L:list,列出指定链上的所有规则;
            -n:numberic,以数字格式显示地址和端口号;
            -v:verbose,显示详细信息
            --line-numbers:显示规则编号;
            -x:exactly,显示计数器计数结果的精确值;
    匹配条件:
        基本匹配:
            [!]-s,--src,--source IP|Netaddr:检查报文中源IP地址是否符合此处的指明的地址范围;
            [!]-d,--dst,--destination IP|Netaddr检查报文中源IP地址是否符合此处指定的地址范围;
            [!]-p,--protocol{tcp,udp,icmp}:检查报文中的协议,即ip首部中的protocols所标识的协议
            -i,--ininterface IFACE:数据报文的流入接口:仅能用于PREROUTING, INPUT及FORWARD链上;
            -o, --out-interface IFACE:数据报文的流出接口;仅能用于FORWARD, OUTPUT及POSTROUTING链上;
    目标:
        -j TARGET:jum至指定的TARGET
            ACCEPT:接受
            DROP:丢弃
            REJECT:拒绝
            RETURN:返回调用链
            REDIRECT:端口重定向
            LOG:记录日志
            MARK:做防火墙标记
            DNAT:目标地址转换
            SNAT:源地址转换
            MASQUERADE:地址伪装
            自定义链:由自定义链上的规则进行匹配检查
        例如:放行本机TCP协议
        [root@localhost ~]# iptables -t filter -A INPUT -d 172.16.0.46 -p tcp -j ACCEPT
        [root@localhost ~]# iptables -L -n
        Chain INPUT (policy ACCEPT)
        target     prot opt source               destination         
        ACCEPT     tcp  --  0.0.0.0/0            172.16.0.46         

        Chain FORWARD (policy ACCEPT)
        target     prot opt source               destination         

        Chain OUTPUT (policy ACCEPT)
        target     prot opt source               destination         
        [root@localhost ~]# iptables -t filter -A OUTPUT -s 172.16.0.46 -p tcp -j ACCEPT
        [root@localhost ~]# iptables -L -n -v
        Chain INPUT (policy ACCEPT 6 packets, 468 bytes)
         pkts bytes target     prot opt in     out     source               destination         
          203 14998 ACCEPT     tcp  --  *      *       0.0.0.0/0            172.16.0.46         

        Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
         pkts bytes target     prot opt in     out     source               destination         

        Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
         pkts bytes target     prot opt in     out     source               destination         
           30  3168 ACCEPT     tcp  --  *      *       172.16.0.46          0.0.0.0/0 
    如果我将INPUT和OUTPUT关闭之后任然可以进行访问
    [root@localhost ~]# iptables -P INPUT DROP
    [root@localhost ~]# iptables -P OUTPUT DROP
    [root@localhost ~]# iptables -P FORWARD DROP
    [root@localhost ~]# iptables -L -n
    Chain INPUT (policy DROP)
    target     prot opt source               destination         
    ACCEPT     tcp  --  0.0.0.0/0            172.16.0.46         

    Chain FORWARD (policy DROP)
    target     prot opt source               destination         

    Chain OUTPUT (policy DROP)
    target     prot opt source               destination         
    ACCEPT     tcp  --  172.16.0.46          0.0.0.0/0           

扩展匹配:-m指明扩展匹配(指明扩展名)--spec_options
    例如:-m tcp --dport 22
    隐式扩展:对-p protocol指明的协议进行扩展,可省略-m选项;
        -p tcp
            --dport PORT[-PORT]:目标端口,可以是单个端口或连续多个端口
            --sport PORT[-PORT]:
            --tcp-flages:

        -p udp
        -p icmp
            --icmp-type
        例如本地可以ping通任意地址,而其他主机无法ping通
        ]# iptables -A INPUT -d 172.16.0.46 -p icmp --icmp-type 0 -j ACCEPT
        ]# iptables -A OUTPUT -s 172.16.0.46 -p icmp --icmp-type 8 -j ACCEPT
    !!!!!!这里需要提醒一下在放行http80端口的时候如果php的安装是基于fpm模式编译安装的话需要对本地的9000端口做双向的认证否则http无法调用php的fpm功能:
    root@localhost etc]# iptables -L -n
    Chain INPUT (policy DROP)
    target     prot opt source               destination         
    ACCEPT     tcp  --  0.0.0.0/0            172.16.0.46         tcp dpt:22 
    ACCEPT     tcp  --  0.0.0.0/0            172.16.0.46         tcp dpt:80 
    ACCEPT     icmp --  0.0.0.0/0            172.16.0.46         icmp type 0 
    ACCEPT     tcp  --  127.0.0.1            0.0.0.0/0           tcp spt:9000 
    ACCEPT     tcp  --  0.0.0.0/0            127.0.0.1           tcp dpt:9000 

    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         

    Chain OUTPUT (policy DROP)
    target     prot opt source               destination         
    ACCEPT     tcp  --  172.16.0.46          0.0.0.0/0           tcp spt:22 
    ACCEPT     tcp  --  172.16.0.46          0.0.0.0/0           tcp spt:80 
    ACCEPT     icmp --  172.16.0.46          0.0.0.0/0           icmp type 8 
    ACCEPT     tcp  --  127.0.0.1            0.0.0.0/0           tcp spt:9000 
    ACCEPT     tcp  --  0.0.0.0/0            127.0.0.1           tcp dpt:9000 

    显示扩展:必须使用-m选项指定使用的扩展    
    CentOS 6: man iptables
    CentOS 7: man iptables-extensions
    1,multiport扩展
        以离散方式定义多端口匹配:最多匹配15个端口;
        ]# iptables -I INPUT -d 172.16.0.46 -p tcp -m multiport --dport 22,80 -j ACCEPT
        ]# iptables -I OUTPUT -s 172.16.0.46 -p tcp -m multiport --sport 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扩展
        检查报文中出现的字符串;
        ~]# iptables -I OUTPUT -m string --algo bm --string 'movie' -j REJECT

    4、time扩展
        根据报文到达的时间与指定的时间范围进行匹配;
        --datestart 
        --datestop
        --timestart
        --timestop
        --monthdays
        --weekdays
    5,state扩展
        根据连接追踪机制检查连接间的状态
        调整连接追踪功能所能够容纳的最大连接数量:
        /proc/sys/net/nf_conntrack_max

        已经追踪到并记录下的连接:
        /proc/net/nf_conntrack

        不同协议或连接类型追的时长:
        /proc/sys/net/netfilter/

        可追踪的连接状态:
            NEW:新发出的请求;连接追踪模板中不存此连接相关的信息条目,因此,将其识别为第一次发出的请求;
            ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信的状态;
            RELATED:相关的连接;如ftp协议的命令连接与数据连接之间的关系;
            INVALIED:无法识别的连接;

iptables放行被动模式下的ftp服务:
    (1)装载ftp追踪时专用的模块在
    [root@localhost netfilter]# pwd
    /lib/modules/2.6.32-358.el6.x86_64/kernel/net/netfilter
    (1) 装载ftp追踪时的专用的模块:
        # modprobe nf_conntrack_ftp
    (2) 放行请求报文:
        命令连接:NEW, ESTABLISHED
        数据连接: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的nat的功能
    如需要开启linux上的路由功能做为路由器需要开启linux的核心转发功能
    [root@ns1 ~]# sysctl -w net.ipv4.ip_forward=1
    net.ipv4.ip_forward = 1
    [root@ns1 ~]# cat /proc/sys/net/ipv4/ip_forward 
    1
    iptables:

    nat:网络地址转换,网络层以及传输层实现
    proxy:代理,应用层实现

    nat:
        SNAT:至修改请求报文的源地址;
        DNAT:至修改请求报文的目标地址;
        MASQUERADE:基于拨号的模式进行伪装

    nat表:
        PREROUTING:DNAT
        OUTPUT
        POSTROUTING:SNAT
    ]# iptables -t nat -A POSTROUTING -s 192.168.56.0/24 ! -d 192.168.56.0/24 -j SNAT --to-source 172.16.0.53

tcp_wrapper:tcp包装器
    对于基于TCP协议开发并且基于TCP协议提供服务应用程序,提供的一层访问控制工具:
    基于库调用其功能:
        库名称:libwrap
    判断服务是否能够由tcp_wrapper进行访问控制:
        (1)动态编译:ldd命令:
        (2)静态编译:strings命令查看应用程序文件,其结果中出现下述文件:
        hosts.allow
        hosts.deny
    在配置文件在为各服务分别定义访问控制规则实现访问控制:
    /etc/hosts.allow
    /etc/hosts/deny

    配置文件语法:
    daemon_list:client_list [:options]
    daemon_list:
        应用程序的文件名称。而非服务名:
        应用程序文件名称列表。彼此间使用逗号分割:
            例如:sshd,vsftpd
                ALL:表示所有服务:
    client_list:
        IP地址:
        主机名:
        网络地址:必须使用完整格式的掩码,不使用前缀格式掩码,所以类似于172.16.0.0/16不合法:
        简短格式的网络地址:例如:172.16.表示172.16.0.0/255.255.0.0;
        ALL:所有主机:
        KNOWN:所有解析的主机
        UNKNOWN:所有解析不到的主机
        PARANOID:主机名的正反解不匹配

    例如:vsftpd服务不允许172.16.100.1访问:
    EXCEOT:除了
        host.allow
        vsftpd: 
    [:options]
    deny: 拒绝,主要用于hosts.allow文件中
    allow:允许,用于hosts.deny文件,实现allow的功能
    spawn: 启动额外应用程序:
    vsftpd: ALL :spawn /bin/echo `date` login attempt from %c to %s, %d >> /var/log/vsftpd.deny.log
    %c: client ip
    %s: server ip
    %d: daemon name

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

(0)
wostopwostop
上一篇 2016-12-05 17:05
下一篇 2016-12-05 17:05

相关推荐

  • 从Code Review 谈如何做技术

    (这篇文章缘由我的微博,我想多说一些,有些杂乱,想到哪写到哪) 这两天,在微博上表达了一下Code Review的重要性。因为翻看了阿里内部的Review Board上的记录,从上面发现Code Review做得好的是一些比较偏技术的团队,而偏业务的技术团队基本上没有看到Code Review的记录。当然,这并不能说没有记录他们就没有做Code Review…

    Linux干货 2016-08-15
  • 随笔—git的基本命令

    git是一个非常优秀的版本控制系统,可以对各类大小的项目进行源代码管理,  #git的常用功能如下: 1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。 2、在本地仓库上根据不同的开发目的,创建分支,修改代码。 3、在本机上向自己创建的分支上提交代码。 4、在本机上合并分支。 5、将本地仓库代码和分支推送到服务器上的远程仓库 在官网…

    Linux干货 2016-07-04
  • ls 命令浅谈

           LS命令是Linux中最常用的命令,ls是list的缩写,通过ls命令不仅可以查看Linux文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限),查看目录信息等等。ls命令在日常的Linux操作中用的很多。(这里只是介绍了一部分)       命令格式:ls …

    2017-07-15
  • DNS 的搭建 子域授权及转发(正向解析)

           dns(名称解析服务).它的作用就是将主机名解析成ip地址的过程,同时它是一个分布式,分层次的主机名管理架构。为了我们能更好的了解与理解,实验才是更好的。     安装部署DNS服务: 一.首先安装DNS服务器软件 bind,还有其他相关的软件包,有bind-libs(库文件),bin…

    2017-07-31
  • 小型网站MYSQL问题二:Percona Xtrabackup实现数据库备份和恢复

    故事背景:前面大胆的选择了innodb,接下来就要考虑数据库的备份和恢复。俗话说“常在河边走,哪能不湿鞋“,自从接触数据这块,使我一直对它保持敬畏之心。在这里使用了percona公司的xtrabckup工具来实现数据库备份和恢复。操作步骤记录如下: 1、安装软件仓库(不要问我为什么不用源码安装,好吧,其实我懒。) wget https://www.…

    数据库运维 2015-12-19
  • N21_第四周

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 # cp -a /etc/skel/ /home/user1/ && chmod -R 7000 /home/user…

    Linux干货 2016-08-02