iptables 个人详解 从基础到精通

iptables
iptables:包过滤防火墙

firewall:防火墙,隔离工具:工作于主机或网络边缘,对于进出本主机或网络的报文根据事先定义好的检查规则做匹配检测,对于能够被规则所匹配到的报文做出相应处理的组件:
    主机防火墙
    网络防火墙

    ***检测系统(IDS):

        ·网络***检测系统  NIDS

        ·主机***检测系统  HIDS

        对于IDS常用的检测服务有:snort等

    ***防御系统(IPS),比如蜜罐

        部署一套***检测系统是非常麻烦的,因为必须检测网络任意一个位置

        对于IPS常用的检测服务有: tripwire 等

ipfw

ipchains

iptables/netfilter
    framework(内核中的网络报文过滤或处理框架):netfilter
        hook function(钩子函数)
    rule utils(规则管理工具):iptables

表功能:
    filter:过滤,防火墙:
    nat:网络地址转换(network address teanslation)
    mangle:拆解报文,做出修改,封装报文
    raw:关闭nat表上启用的连接追踪机制
链(内置):
    PREOUTING:路由角色发生之前
    INPUT:
    FORWARD:转发
    OUTPUT:
    POSTROUTING:路由角色发生之后

        PREOUTING,POSTROUTING:是tcp/ip协议栈上的功能

流入:PREOUTING --> INPUT
流出:OUTPUT --> POSTROUTING
转发:PREOUTING --> FORWARD --> POSTROUTING

表各功能的分别实现:
    filter:INPUT,FORWARD,OUTPUT
    nat:PREOUTING(DNAT),OUTPUT,POSTROUTING(SNAT)
    mangle:PREOUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
    raw:PREOUTING,OUTPUT

路由发生时刻:
    报文进入本机后
        判断目标主机
    报文发出之前
        判断经由那个接口送往下一跳   

iptables:四表五链
    添加规则时的考量点:
        (1)要实现那种功能,判断添加在那张表
        (2)报文流经的路径,判断添加在那个链上

    链:链上规则次序,即为检查次序,因此隐含一定的法则
        (1)同类规则(访问同一应用),匹配范围小的放上面
        (2)不同类规则(访问不同应用),匹配到报文频率较大的放上面
        (3)将那些可由一条规则描述的多个规则合并为一个
        (4)设置默认策略

    功能的优先级次序:raw --> mangle --> nat --> filter

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

        注意:报文不会经过自定义链,只能在内置链上通过规则进行引用后生效

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

    规则和链有计数器:
        pkgs:由规则或链所匹配到的报文的个数
        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

       iptables [-t table] SUBCOMMAND(子命令) CHAIN(链) CRETERIA(匹配标准) -j TARGET(处理动作)

       -t table
            filter,nat,mangle,raw

        链管理:
            -F:flush,清空规则链,省略链,表示清空表上的所有的链
            -N:new,创建新的自定义规则链
            -X:drop,删除用户自定义的空的规则链
            -Z:zero,清零,置零规则计数器
            -P:policy,为指定链设置默认策略:对filter表中的链而言,默认策略通常有ACCEPT,DROP,REJECT;
            -E:rEname,重命名自定义链,引用计数不为零的自定义链,无法删除,也无法改名

        规则管理命令
            -A:aappend,将新规则追加于指定链的尾部
            -I:insert,讲规则插入至指定链的指定位置
            -D:delete,删除指定链上的制定规则
                有两种方式
                    (1)制定匹配条件
                    (2)指定规则编号
            -R:replace,替换指定链上的制定规则

        查看:
            -L:list,列出指定链上的所有规则
                -n:numberic,以数字格式显示地址和端口号
                -v:verbose,显示详细信息
                    -vv,-vvv
                --line-numbers:显示规则编号
                -x:exactly,显示计数器技术结果的精确值

        匹配条件
            基本匹配:
                [!]-s,--src,--source IP|Netaddr:检查报文中源IP地址是否符合此处指定的地址范围
                [!]-d, --dst,--destination IP|Netaddr:检查报文中源IP地址是否符合此处指定的地址范围
                [!]-p, --protocol {tcp|udp|icmp(互联网报文控制协议)}:检查报文中的协议,即IP首部中的proctocols所表示的协议
                [!]-i, --in-interface IFACE:数据报文的流入接口,仅能用于PREOUTING,INPUT及FORWARD链上
                [!]-o,--out-interface IFACE:数据报文的流出接口,仅能用于FORWARD,OUTPUT及POSTROUTING链上

            扩展匹配:-m  macth_name(指明你的扩展名) --spec_options
                    例如:-m tcp --dport 22
                隐式扩展:对-p protocol指明的协议进行扩展,可省略-m选项
                    -p tcp
                        --dport(目的端口) PORT[-PORT]: 目标端口,可以是单个端口或连续多个端口
                        --sport(源端口)PORT[-PORT]
                        --tcp-flags LIST1 LIST2:检查LIST1所指明的所有标志位,且这其中,LIST2所表示出的所有标记位必须为1,而余下的必须为0;没有在LIST1中指明的,不做检查
                            SYN,ACK,FIN,RST,PSH,URG

                        例:  --tcp-flags SYN,ACK,FIN,RST  SYN
                            --syn:相当于例

                    -p udp
                        --dport
                        --sport

                    -p icmp
                        --icmp-type
                            可用数字表示其类型
                                0:echo-reply(回送应答)
                                8:echo-request(请求应答)

                显示扩展:必须使用-m选项指定使用的扩展

        目标:
            -j TARGET:jump(跳转)指定的TARGET(目标)
                ACCEPT:接受
                DROP:丢弃
                REJECT:拒绝
                RETURN :返回调用链
                REDIRECT:端口重定向
                LOG:记录日志
                MAKE:做防火墙标记
                DNAT:目标地址转换
                SNAT:源地址转换
                MASQUERADE:地址伪装
                ...
                自定义链:由自定义链上的规则进行匹配检查

iptables:

显示扩展:必须显示指明使用的扩展模块(rpm -ql iptables |grep "\.so")

    centos6:man iptables
    centos7:man iptables-extensions

常用:
    1、multiport扩展
        以离散方式定义多端口匹配:最多指定15个端口

         [!] --source-ports,--sports port[,port|,port:port]...  :指明多个源端口
         [!] --destination-ports,--dports port[,port|,port:port]...  :指明多个离散的目标端口
         [!] --ports port[,port|,port:port]...    :既可以匹配源也可以匹配目标

    例子:
        iptables -I INPUT -s 172.16.0.0/24 -d172.16.100.9 -p tcp -m multiport --dports 22,80 -j ACCERT
        iptables -I OUTPUT -d 172.16.0.0/24 -s 172.16.100.9 -p tcp -m multiport --sports 22,80 -j ACCERT

    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.168.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.168.100.1-172.16.100.120 -j ACCEPT

    3、string扩展
        检查报文中出现的字符串

        --algo {bm|kmp} (指明所要使用的字符串比对算法)
            bm = Boyer-Moore
            kmp = Knuth-Pratt-Morris
         [!] --string pattern   (从头到尾进行检查)
         例:
            iptables -I OUTPUT -m string --algo bm --string ‘moviie‘ -j REJECT

         [!] --hex-string pattern   (基于16进制编码以后字符串检查)

    4、time扩展

        --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]   (起始日期)
        --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]     (停止日期 )

        例:(以时间为例)
            iptables -I INPUT -d 172.16.100.8 -p tcp --dport 80 -m time --timestart 14:00 --timestop 16:00 -j REJECT
            根据报文到达的时间与指定的时间范围进行匹配

    5、connlimit扩展
        根据每客户端IP(也可以是地址块)做并发连接数数量匹配

        [!] --connlimit-above n   (对超过的连接数做规则:一般是拒绝)
        [!] --connlimit-upto n    (连接数量小于n:一般是放行)

    6、limit扩展
        基于收发报文的速率做检查:

        令牌桶过滤器:

        --limit rate[/second|/minute|/hour|/day]
        --limit-burst number

    7、state扩展
        根据连接追踪机制,来检查连接件的状态

        调整连接追踪功能所能够容纳的最大连接数量
            /proc/sys/net/nf_conntrack_max

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

        不同协议或链接类型追踪的时长
            /porc/sys/net/netfilter/

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

        问题:如何开放被动模式的ftp服务

            (1)装载ftp追踪时
                进入:cd /lib/modules/2.6.32-431.el6.x86_64/kernel/net/netfilter/
                手动装载模块:modprobe nf_conntrack_ftp
                查看:lsmod
            (2)放行请求报文
                命令链接:NEW,ESTABLISHED
                数据连接:RELATED,ESTABLISHED

                # iptables -A INPUT -d 192.168.132.186 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
                # iptables -A INPUT -d 192.168.132.186 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT

            (3)放行响应报文
                ESTABLISHED
                # iptables -A OUTPUT -s 192.168.132.186 -p tcp -m state --state ESTABLISHED -j ACCEPT

    如何保存和重载规则:
        保存规则至指定文件:iptables-save > /PATH/TO/SOMEFILE

        从指定文件重载规则:iptables-restore < /PATH/FROM/SOMEFILE

    centos 6 :
        service iptables save (也可直接保存)
        service iptables restart(重载)

    centos 7 :
        引入了新的iptables前端管理服务工具:firewalld
            firewalld-cmd
            firewalld-config 

iptables:

    nat : Network Adress Translation 安全性, 网络层+传输层
    proxy:代理,应用层 

    nat:
        SNAT:只修改请求报文的源地址
        DNAT:只修改请求报文的目标地址

    nat表:
        PREROUTING: DNAT
        OUTPUT:
        POSTROUTING:SNAT

源地址转换:iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNET -j SNAT --to-source 外部IP(ExtIP)
           iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNET -j MASQUERADE

目标地址转换:iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --to-destination InterSeverIP[:PORT]

    iptables的链接跟踪表最大容量为/proc/sys/net/ipv4/ip(nf)_conntrack_max,链接碰到各种状态的超时后就会从表中删除。

    解决方法一般有两个:
    (1)加大ip_conntrack_max的值
        vi /etc/susctl.conf
        net.ipv4.ip_conntrack_max=393216
        net.ipv4..netfilter.ip_conntrack_max=393216
    (2)降低ip_conntrack timeout时间
        vi /etc/sysctl.conf
        net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 300
        net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
        net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
        net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120

        iptables -t nat -L -n

    #补充:利用iptables的recent模块来抵御DOS×××:22,建立一个列表,保存由所有访问过指定的服务的客户端IP

tcp_wrapper:tcp包装器

对于给予tcp协议kaifa并提供服务的应用程序,提供的一层访问控制工具:
基于库调用实现其功能:
    libwrap

判断服务是否能够由tcp_wrapper进行访问控制:
    (1)动态编译:ldd命令  例:ldd `which sshd`
    (2)静态编译;strings命令查看应用程序文件,其结果如果出现
        host.allow
        host.deny
        则表示支持,否则不支持

在配置文件中为各服务分别定义访问控制规则实现访问控制:
    /etc/host.allow
    /etc/host.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
            UNKNOEN
            PARANOID

        EXCEPT:除了
        hosts.allow
            vsftp:172.16. EXCEPT 172.16.100.0/255.255.255.0 EXCEPT 172.16.100.1

        [:Options]
            deny:拒绝,主要用于host.allow文件中
            allow:允许用于host.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

原文地址:http://blog.51cto.com/13214087/2130787

时间: 2024-11-09 10:07:03

iptables 个人详解 从基础到精通的相关文章

Python基础知识详解 从入门到精通(七)类与对象

本篇主要是介绍python,内容可先看目录其他基础知识详解,欢迎查看本人的其他文章Python基础知识详解 从入门到精通(一)介绍Python基础知识详解 从入门到精通(二)基础Python基础知识详解 从入门到精通(三)语法与函数Python基础知识详解 从入门到精通(四)列表.元组.字典.集合Python基础知识详解 从入门到精通(五)模块管理Python基础知识详解 从入门到精通(六)文件操作PS:很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此

linux下IPTABLES配置详解 (防火墙命令)

linux下IPTABLES配置详解 -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 24000 -j ACCEPT-A RH-Firewall-1-INPUT -s 121.10.120.24 -p tcp -m tcp --dport 18612 -j ACCEPT 如果你的IPTABLES基础知识还不了解,建议先去看看. 开始配置 我们来配置一个filter表的防火墙. (1)查看本机关于IPTABLES的

Linux iptables防火墙详解 + 配置抗DDOS攻击策略实战

inux iptables防火墙详解 + 配置抗DDOS攻击策略实战 Linux 内核中很早就实现了网络防火墙功能,在不同的Linux内核版本中,使用了不同的软件实现防火墙功能.在2.0内核中,防火墙操作工具叫:ipfwadm在2.2内核中,防火墙操作工具叫:ipchains在2.4以后的内核,防火墙操作工具叫:iptables ipfwadm 和 ipchains 比较老,已成历史版本,本章主要介绍Iptables 一.iptable 操作命令参数详解 -A  APPEND,追加一条规则(放到

SharedPreferences详解(一)——基础知识

我们在开发软件的时候,常需要向用户提供软件参数设置功能,例如我们常用的微信,用户可以设置是否允许陌生人添加自己为好友.对于软件配置参数的保存,如果是在window下通常我们会采用ini文件进行保存.如果是J2EE下面,我们会采用properties属性文件或者xml进行保存.在我们的Android应用中又适合采用什么方式保存软件配置参数呢?Android平台给我们提供了一个SharedPreferences类,它是一个轻量级应用程序内部轻量级的存储方案,特别适合用于保存软件配置参数,比如bool

iptables的详解

来自But_Bueatiful,原文:http://blog.chinaunix.net/uid-26495963-id-3279216.html 一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP.数据进行检测. 目前市面上比较常见的有3.4层的防火墙,叫网络层的防火墙,还有7层的防火

Linux iptables 防火墙详解

0x00 iptables介绍 linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组件组成. netfilter 组件也称为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集. iptables 组件是一种工具,也称为用户空间,它使插入.修改和除去信息包过滤表中的规则变得容易. 0x01 iptables的结构 iptables的结构: iptables -> Tables -> Chains ->

iptables防火墙详解

iptables常用命令 iptables -nv -L 查看iptables列表 iptables -F 清空iptables规则 iptables-save > /etc/sysconfig/iptables 保存iptables规则到文件 以下是我服务器的iptables配置 # Generated by iptables-save v1.4.7 on Tue Jul 5 12:06:29 2016 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [

iptables之iptables命令详解

#iptables [OPTION] COMMAND CHAIN 匹配标准 -j TARGET     [OPTION]        -t TABLENAME  不指定默认为filter        -j 指定TARGET COMMAND        管理规则            -A 在链的尾部添加一条规则            -I  CHAIN [NUM] 在CHINA链上插入第NUM条规则,不指定NUM表示插入为第一条            -D CHAIN [NUM] 删除CH

JS表格组件神器bootstrap table详解(基础版)

这篇文章主要介绍了JS表格组件神器bootstrap table,bootstrap table界面采用扁平化的风格,用户体验比较好,更好兼容各种客户端,需要了解更多bootstrap table的朋友可以参考下 一.Bootstrap Table的引入 关于Bootstrap Table的引入,一般来说还是两种方法: 1.直接下载源码,添加到项目里面来.由于Bootstrap Table是Bootstrap的一个组件,所以它是依赖Bootstrap的,我们首先需要添加Bootstrap的引用.