精华内容
下载资源
问答
  • iptables命令

    2019-10-23 16:40:41
    iptables命令 iptables包分析 ①查看iptables来源于哪个rpm包 [root@centos8-8 ~]# rpm -qf `which iptables` iptables-1.8.2-9.el8.x86_64 ②iptables包提供的工具: [root@centos8-8 ~]# rpm -ql iptables /usr...

    iptables命令

    iptables包分析

    ①查看iptables来源于哪个rpm包
    [root@centos8-8 ~]# rpm -qf `which iptables`
        iptables-1.8.2-9.el8.x86_64
    
    
    ②iptables包提供的工具:
    [root@centos8-8 ~]# rpm -ql iptables
        /usr/sbin/iptables
        /usr/sbin/iptables-restore              还原定义的防火墙规则的
        /usr/sbin/iptables-save                 保存已定义好的防火墙规则
    
    
    ③提供的功能模块:
    [root@centos8-8 ~]# rpm -ql iptables | grep .so
        /usr/lib64/xtables/libxt_string.so
        /usr/lib64/xtables/libxt_udp.so
        /usr/lib64/xtables/libxt_time.so
        ......
    ==>iptables的模块,扩展了iptables的功能。
    
    
    ④查看iptables命令的帮助获取:
    centos6上:直接man [8] iptables即可 既有iptables的基本功能也有iptables配合模块的功能使用
    [root@centos6-16 ~]#man iptables 
    
    centos7/8上: man iptables只有iptables的基本功能用法
    [root@centos7-17 ~]# man iptables
    
    模块的帮助:
    [root@centos7-17 ~]# man iptables-extensions
    

    iptables命令定义策略

    • iptables命令定义规则图示:

    • 规则格式:iptables [-t table] SUBCOMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]

    1.table

    • -t table:
      • raw, mangle, nat, [filter]默认

    2.SUBCOMMAND(子命令)

    • ㈠、链管理:
      • -N:new, 自定义一条新的规则链
      • -X:delete,删除自定义的空的规则链
      • -P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
        ACCEPT:接受
        DROP:丢弃
      • -E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除
    与自定义链相关的选项:
        -N:
        -E:
        -X:
    
    
    自定义链的使用
        ①定义自定义链:
            ~]#iptables -t filter -N web
        ②添加自定义链的规则
            .....
        ③自定义链的使用
            自定义链需要与默认的内置链(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING)关联才能使用
    
    ==> 自定义链相当于编程中函数。
    
    
    删除自定义链的步骤:
        ①删自定义链的关联
        ②清空自定义链的规则
        ③删除自定义空链
    
    • ㈡、查看:
      • -L:list, 列出指定鏈上的所有规则,本选项须置后
      • -n:numberic,以数字格式显示地址和端口号
      • -v:verbose,详细信息
      • -vv 更详细
      • -x:exactly,显示计数器结果的精确值,而非单位转换后的易读值
      • –line-numbers:显示规则的序号
    查看的常用组合:
        ①-vnL
        ②-vvnxL --line-numbers
        ③-S selected,以iptables-save命令格式显示链上规则
    
    
    ~]# iptables -vnL
    ~]# iptables -vnL  --line-numbers
    ~]# iptables -S
    
    
    ==>同一个表的同一链中:
        规则生效是按照num(序号),一旦前面的序号满足匹配条件,就执行相应的处理动作。
    
    • ㈢、规则管理:
      • -A:append,追加
      • -I:insert, 插入,要指明插入至的规则编号,默认为第一条
      • -D:delete,删除
        (1) 指明规则序号
        (2) 指明规则本身
      • -R:replace,替换指定链上的指定规则编号
      • -F:flush,清空指定的规则链
      • -Z:zero,置零
        iptables的每条规则都有两个计数器
        ● (1) 匹配到的报文的个数
        ● (2) 匹配到的所有报文的大小之和

    3、chain(链):PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

    • 说明:此处实验iptables设置防火墙规则均在centos7 192.168.38.17上设置
      NAT ip:192.168.38.17
      桥接 ip:172.18.2.2

    iptables的简单使用示例

    iptables命令示例:
    [root@centos7-17 ~]# iptables -t filter  -A INPUT  -s 192.168.38.8 -j DROP
    上述iptables规则详解:
        -t filter:filter表:用于过滤
        -A INPUT:INPUT链 ==>表示数据报文目标是本机,无论本机有几个ip,反正数据报文的dest是本机
        -s IP: 指数据报文的源地址
        -j DROP:表示明确拒绝访问
        -j, --jump target 跳到target  
        ==>说明:此处虽并未指明目标地址,但是规则加在的INPUT链上,指明目标地址是本机
            ==>INPUT链表明:只要数据报文是目标本机(目前实验192.168.38.17)的ip,均受到INPUT链'关卡'控制
            ==>实际上当前实验的centos7主机上还有一个桥接网卡的ip:172.18.2.2
    
    ==>综上:iptables -t filter  -A INPUT  -s 192.168.38.8 -j DROP这条规则定义了本机将拒绝192.168.38.8主机的访问。
        ==>但是没有标明192.168.38.8以怎样的方式发送数据报文至我本机,但是本机的均拒绝接收192.168.38.8的数据报文。
        ==>iptables此时的过滤的条件是ip地址,并不会在乎是什么样的数据报文。
    
    主机收到数据报文的默认策略===>ACCEPT:
    [root@centos7-17 ~]# iptables -t filter -vnL
    Chain INPUT (policy ACCEPT 440 packets, 40374 bytes)
                ==>默认策略:ACCEPT
    
    
    修改默认策略:-P选项
    [root@centos8-8 ~]# iptables -P INPUT DROP
    [root@centos8-8 ~]# iptables -t filter -vnL --line-number
    Chain INPUT (policy DROP 0 packets, 0 bytes)
    
    3        0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0
    但是一般不会修改默认的规则,如果清空策略,导致远程连接也失败,比较麻烦。
        一般定义白名单策略时,在最后添加一个拒绝所有,而不会修改默认策略。
    
    示例一:丢弃192.168.38.8的一切数据报文
    [root@centos7-17 ~]# iptables -t filter  -A INPUT  -s 192.168.38.8 -j DROP
    
    
    查看添加的规则:--line-number选项在规则有重叠时,或需要定义多个规则查询时附加此选项。
    [root@centos7-17 ~]# iptables -vnL --line-number    查看添加的规则
    Chain INPUT (policy ACCEPT 56 packets, 4145 bytes)
    num   pkts bytes target     prot opt in     out     source               destination         
    1        0     0 DROP       all  --  *      *       192.168.38.8         0.0.0.0/0
        
    
    iptables规则的匹配原则:
        同一个表中同一链中,以num为次序,规则一旦满足就不继续往下匹配。
    
    
    由于iptables的规则匹配原则:
        ==>定义规则的先后顺序:
        1、同类规则(访问同一应用),匹配范围小的放在前面,用于特殊处理。
        2、不同类的规则(访问不同应用),匹配范围大的放在前面。
        3、应该将那些可由一条规则能够描述的多个规则合并为一条。
        4、不相干的规则,访问频率高的往前放。
    
    示例二:DROP和REJECT的区别
    
    
    DROP:丢弃,通信对方不知道。
    [root@centos7-17 ~]# iptables -t filter  -A INPUT  -s 192.168.38.8 -j DROP
    
    
    使用192.168.38.8 ping 192.168.38.17
    [root@centos8-8 ~]# ping 192.168.38.17
    PING 192.168.38.17 (192.168.38.17) 56(84) bytes of data.
    ....
    
    
    在192.168.38.17主机上抓取数据包:
    [root@centos7-17 ~]# tcpdump -nn icmp
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
    19:24:33.145437 IP 192.168.38.8 > 192.168.38.17: ICMP echo request, id 7071, seq 319, length 64
    19:24:34.169550 IP 192.168.38.8 > 192.168.38.17: ICMP echo request, id 7071, seq 320, length 64
        ==>只看见从192.168.38.8主机过来的数据报文,但是由于规则匹配,从192.168.38.8来的数据报文全部DROP(丢弃),而192.168.38.8主机并不知道。
    
    
    
    
    REJECT:
    192.168.38.17 添加的iptables规则:
    [root@centos7-17 ~]# iptables -F
    [root@centos7-17 ~]# iptables -t filter  -F INPUT   清空一个表的一条链上的所有规则写法
    [root@centos7-17 ~]# iptables -t filter  -A INPUT  -s 192.168.38.8 -j REJECT
    [root@centos7-17 ~]# iptables -vnL
    Chain INPUT (policy ACCEPT 14 packets, 924 bytes)
     pkts bytes target     prot opt in     out     source               destination         
        0     0 REJECT     all  --  *      *       192.168.38.8         0.0.0.0/0            reject-with
    
    
    192.168.38.8 ping 192.168.38.17主机
    [root@centos8-8 ~]# ping 192.168.38.17
    PING 192.168.38.17 (192.168.38.17) 56(84) bytes of data.
    From 192.168.38.17 icmp_seq=1 Destination Port Unreachable
    From 192.168.38.17 icmp_seq=2 Destination Port Unreachable
    
    
    192.168.38.17的响应:
    [root@centos7-17 ~]# tcpdump -nn icmp
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
    19:27:47.888309 IP 192.168.38.8 > 192.168.38.17: ICMP echo request, id 7095, seq 8, length 64
    19:27:47.888353 IP 192.168.38.17 > 192.168.38.8: ICMP 192.168.38.17 protocol 1 port 27832 unreachable, length 92
        ==>192.168.38.17 响应192.168.38.8 本主机的端口和对应的协议均不可访问
    
    示例三:拒绝192.168.38.0/24这个网段访问
    
    [root@centos7-17 ~]# iptables -t filter -A INPUT -s 192.168.38.1 -j ACCEPT
    [root@centos7-17 ~]# iptables -t filter -A INPUT -s 192.168.38.0/24 -j DROP
    [root@centos7-17 ~]# 
    [root@centos7-17 ~]# iptables -vnL --line-number
    Chain INPUT (policy ACCEPT 6 packets, 914 bytes)
    num   pkts bytes target     prot opt in     out     source               destination         
    1      117  8476 ACCEPT     all  --  *      *       192.168.38.1         0.0.0.0/0           
    2        0     0 DROP       all  --  *      *       192.168.38.0/24      0.0.0.0/0 
    
    ==>由于我的实验是基于VMware 软件,因此必须先保证我的192.168.38.1(windows主机ip)可以访问,否则xshell 连接即将端开。
    
    • 注:生成环境工作时配置防火墙规则时一定不要将自己的远程连接都给拒绝
    • 可采取的措施:在配置策略时,策略比较复杂,可能导致将自己的远程连接给拒绝,把开始的策略做一个备份,然后定义一个计划任务,5min/10min自动还原开始的备份策略。
    示例四:删除iptables中的规则
    
    
    -F 清空规则
    清空一个表的一条链上的所有规则写法
    [root@centos7-17 ~]# iptables -t filter  -F INPUT   
    
    
    -D 删除某条规则
        (1) 指明规则序号
        (2) 指明规则本身
    [root@centos7-17 ~]# iptables -t filter -D INPUT 2
        ==>删除序号为2的规则时,后续规则的序号将往上调。
    
    示例五:-I:插入规则
    [root@centos7-17 ~]# iptables -vnL --line-number
    Chain INPUT (policy ACCEPT 47 packets, 6881 bytes)
    num  pkts bytes target     prot opt in     out     source               destination         
    1    675  49971 ACCEPT     all  --  *      *       192.168.38.1         0.0.0.0/0           
    2    0     0    DROP       all  --  *      *       192.168.38.0/24      0.0.0.0/0
    
    [root@centos7-17 ~]# iptables -t filter  -I INPUT 2  -s 192.168.38.7 -j ACCEPT
    
    示例六: -R:修改规则
    [root@centos7-17 ~]# iptables -vnL --line-number
    Chain INPUT (policy ACCEPT 47 packets, 6881 bytes)
    num  pkts bytes target     prot opt in     out     source               destination         
    1    675  49971 ACCEPT     all  --  *      *       192.168.38.1         0.0.0.0/0           
    2    0     0    DROP       all  --  *      *       192.168.38.17        0.0.0.0/0           
    3    0     0    DROP       all  --  *      *       192.168.38.0/24      0.0.0.0/0           
    
    [root@centos7-17 ~]# iptables -t filter  -R INPUT 2  -s 192.168.38.7 -j ACCEPT 
    

    iptables的基本匹配条件

    4.匹配条件

    • 匹配条件
      基本:通用的,PARAMETERS
      扩展:需加载模块,MATCH EXTENTIONS

    • (一)基本匹配条件:无需加载模块,由iptables/netfilter自行提供

      • [!] -s, --source address[/mask][,…]:源IP地址或范围

      • [!] -d, --destination address[/mask][,…]:目标IP地址或范围

      • [!] -p, --protocol protocol:指定协议,可使用数字如0(all)
        protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or “all”
        参看:/etc/protocols

      • [!] -i, --in-interface name:报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT、FORWARD、PREROUTING链

      • [!] -o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链

    iptables命令的基本语法示例如下:
    
    示例一:默认策略是ACCEPT,一般不改默认策略
        但是要使用白名单策略可采取的措施:
    [root@centos7-17 ~]# iptables -t filter -A INPUT -j REJECT
        到达本机的数据报文,默认全部拒绝。然后采取白名单策略。
    
    [root@centos7-17 ~]# iptables -vnL --line-number
    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
    num   pkts bytes target     prot opt in     out     source               destination         
    1     1606  119K ACCEPT     all  --  *      *       192.168.38.1         0.0.0.0/0           
    2       49  4956 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    
    
    此时:
    [root@centos7-17 ~]# ping 127.0.0.1
    PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
        ping 127.0.0.1 也ping不通的127.0.0.11
    
    [root@centos7-17 ~]# ping 192.168.38.17
    PING 192.168.38.17 (192.168.38.17) 56(84) bytes of data.
        自己ping 自己的ip也ping 不通
    
        ping 127.0.0.1也有走路由表,然后发到INPUT链上,默认策略是拒绝。
    
    ==>这样的策略不合理,自己将自己的数据报文都拒收了。
    
    [root@centos7-17 ~]# iptables -t filter -I INPUT 2 -i lo -j ACCEPT
        ==>插入这样一条策略:只要是回环网卡进来的数据报文,默认接收。、
    
    [root@centos7-17 ~]# ping 127.0.0.1
    PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
    64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.028 ms
    
    
    [!] -i, --in-interface name:报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT、FORWARD、PREROUTING链。
    
    • [!] -o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链
    示例二:
    [!] -o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链
    使用-o作为过滤条件时,filter表上设置相应链时:  
        在POSTROUTING是控制了所有从本机流出的报文,响应报文,转发报文等等。如果POSTROUTING拒绝所有,那么本机与其他主机的通信也将失败。
        在OUTPUT上设置的是从本机发出的响应报文(用户空间程序发出的响应报文)在INOUT'关卡'的处理情况。
    
    因此流出的控制,如果拒绝所有,再对特定的主机进行开放,但是防火墙一般是防止外面的数据报文进入本机,一般不会限制本机的数据报文流出。  
    
    • (二)扩展匹配条件:需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效
      • 查看帮助 man iptables-extensions
    (1)隐式扩展:在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块
    
    
    tcp协议的扩展选项
        [!] --source-port, --sport port[:port]:匹配报文源端口,可为端口范围
        [!] --destination-port,--dport port[:port]:匹配报文目标端口,可为范围
        [!] --tcp-flags mask comp
            mask 需检查的标志位列表,用,分隔
            例如 SYN,ACK,FIN,RST
            comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用,分隔
    

    iptables的扩展匹配条件

    (一)隐式扩展:

    • (1)隐式扩展:在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块。
      比如:tcp、udp、icmp协议名和模块名同名,因此可以直接使用-p指明对应的协议即可。
    • tcp协议的扩展选项
      • [!] --source-port, --sport port[:port]:匹配报文源端口,可为端口范围
        ==注:==此处的port必须是连续端口。

      • [!] --destination-port,–dport port[:port]:匹配报文目标端口,可为范围

      • [!] --tcp-flags mask comp
        mask 需检查的标志位列表,用,分隔
        例如 SYN,ACK,FIN,RST
        comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用,分隔
        –tcp-flags SYN,ACK,FIN,RST SYN 表示要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0
        –tcp-flags SYN,ACK,FIN,RST SYN,ACK
        –tcp-flags ALL ALL
        –tcp_flags ALL NONE

      • [!] --syn:用于匹配第一次握手相当于:–tcp-flags SYN,ACK,FIN,RST SYN

      • 注:[!]表示可以取反,但是一般不建议使用[!]

    示例一:隐式扩展 ☞ tcp协议
        协议+端口号就能确定是什么服务,比如:tcp 80 httpd服务。
    
    对httpd允许192.168.38.17访问:
        [root@centos8-8 ~]# iptables -t filter -I INPUT -s 192.168.38.17 -p tcp --dport 80 -j ACCEPT
        [root@centos8-8 ~]# iptables -t filter -vnL --line-number
        Chain INPUT (policy DROP 0 packets, 0 bytes)
        num   pkts bytes target     prot opt in     out     source               destination         
        1        6   396 ACCEPT     tcp  --  *      *       192.168.38.17        0.0.0.0/0            tcp dpt:80
        2     1186 79574 ACCEPT     all  --  *      *       192.168.38.1         0.0.0.0/0           
        3       65  7388 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    
        [root@centos8-8 ~]# iptables -t filter -I INPUT -s 192.168.38.17 -p tcp --dport 80 -j ACCEPT
            ==> -t filter:filter表中添加策略
                -A INOUT:filter表INPUT链添加策略,其中INPUT表名访问的是本机
                -s ip: 指明源地址 
                -p protocol:隐式扩展,指明协议
                --dport port:指明端口号
                -j action: 指明处理动作
    
    
    tcp协议相关的的隐式扩展
            --tcp-flags SYN,ACK,FIN,RST SYN 表示要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0
            --tcp-flags SYN,ACK,FIN,RST SYN,ACK 
            --tcp-flags ALL ALL   故障数据包
            --tcp_flags ALL NONE  故障数据包
        [!] --syn:用于匹配第一次握手相当于:--tcp-flags SYN,ACK,FIN,RST SYN
    
    可以直接将tcp三次握手的第一次握手就是直接进行拒绝。
    
    
    同时允许ip为192.168.38.17主机访问本的21-23端口:(连续多端口)
    [root@centos8-8 ~]# iptables -t filter  -I INPUT 2  -s 192.168.38.17  -p tcp --dport 21:23 -j ACCEPT
    [root@centos8-8 ~]# iptables -t filter -vnL --line-number
    Chain INPUT (policy DROP 0 packets, 0 bytes)
    num   pkts bytes target     prot opt in     out     source               destination         
    1     3257  237K ACCEPT     all  --  *      *       192.168.38.1         0.0.0.0/0           
    2       36  4481 ACCEPT     tcp  --  *      *       192.168.38.17        0.0.0.0/0            tcp dpts:21:23
    3       10   840 ACCEPT     icmp --  *      *       192.168.38.17        0.0.0.0/0            icmptype 0 code 0
    4      179 20704 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           
        但是--dport后面的多端口只能是连续端口,不练连续的端口开放,应该使用multiport模块。比如:Samba服务
    
    • ICMP
    • [!] --icmp-type {type[/code]|typename}
      • type/code ICMP协议用来区别是请求报文,还是响应报文
        0/0 echo-reply icmp应答
        8/0 echo-request icmp请求
    示例二:实现禁ping,但是本机能ping其他主机
        ping分析: 
        ping对方主机是: ping请求报文从本机OUTPUT出去  响应报文INPUT进入本机
        对方主机ping本机: ping的请求报文从INPUT进来  本机响应报文从OUTPUT出去
            ==> 单从数据报文的方向时无法限制的,但是ICMP的数据报文格式中的type类型
                8:请求报文
                0:响应报文
    
    [root@centos8-8 ~]# iptables -t filter -I INPUT 2  -p icmp --icmp-type 0/0 -s 192.168.38.17 -j ACCEPT
    [root@centos8-8 ~]# iptables -t filter -vnL --line-number
    Chain INPUT (policy DROP 0 packets, 0 bytes)
    num   pkts bytes target     prot opt in     out     source               destination         
    1     1713  118K ACCEPT     all  --  *      *       192.168.38.1         0.0.0.0/0           
    2        2   168 ACCEPT     icmp --  *      *       192.168.38.17        0.0.0.0/0            icmptype 0 code 0
    3       93 10098 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0
    
    • udp

      • [!] --source-port, --sport port[:port]:匹配报文的源端口或端口范围
      • [!] --destination-port,–dport port[:port]:匹配报文的目标端口或端口范围
        (二)显式扩展
    • 显式扩展:必须显式地指明使用的扩展模块进行的扩展

    • multiport扩展、iprange扩展、mac扩展、string扩展、time扩展、connlimit扩展、limit扩展、state扩展

    • ①multiport扩展
      以离散方式定义多端口匹配,最多指定15个端口

      • [!] --source-ports,–sports port[,port|,port:port]…指定多个源端口
      • [!] --destination-ports,–dports port[,port|,port:port]…指定多个目标端口
      • [!] --ports port[,port|,port:port]…多个源或目标端口
    示例一:multiport扩展模块:以离散的方式定义多端口
    
    让ip为192.168.38.17的主机可以访问本机的Samba服务:
        ==>Samba服务的监听端口: 
            smb服务的监听端口:TCP的445和139
            nmb服务的监听端口:UDP的137和138
    
    [root@centos8-8 ~]# iptables -t filter -I INPUT -s 192.168.38.17 -p tcp -m multiport --dports 139,445 -j ACCEPT 
    [root@centos8-8 ~]# iptables -t filter -vnL --line-number
    Chain INPUT (policy DROP 0 packets, 0 bytes)
    num   pkts bytes target     prot opt in     out     source               destination         
    1        0     0 ACCEPT     tcp  --  *      *       192.168.38.17        0.0.0.0/0            multiport dports 139,445
    2     4478  323K ACCEPT     all  --  *      *       192.168.38.1         0.0.0.0/0           
    3      240 26505 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0 
    
    • ②iprange扩展
      • 指明连续的(但一般不是整个网络)ip地址范围
      • [!] --src-range from[-to] 源IP地址范围
      • [!] --dst-range from[-to] 目标IP地址范围
    示例:
    ~]# iptables -A INPUT -d 172.16.1.100 -p tcp --dport 80 -m iprange --srcrange 172.16.1.5-172.16.1.10 -j DROP
    
    • ③mac扩展
      • 指明源MAC地址
        适用于:PREROUTING, FORWARD,INPUT chains
      • [!] --mac-source XX:XX:XX:XX:XX:XX
    示例:
    ~]# iptables -A INPUT -s 172.16.0.100 -m mac --mac-source  00:50:56:12:34:56 -j ACCEPT
    
    • ④string扩展
      • 对报文中的应用层数据做字符串模式匹配检测
        –algo {bm|kmp} 字符串匹配检测算法
        bm:Boyer-Moore
        kmp:Knuth-Pratt-Morris
      • –from offset 开始偏移
      • –to offset 结束偏移
      • [!] --string pattern 要检测的字符串模式
      • [!] --hex-string pattern要检测字符串模式,16进制格式
    示例:
    ~]# iptables -A OUTPUT -s 172.16.100.10 -d 0/0 -p tcp --sport 80 -m string - -algo bm --string "google" -j REJECT
    
    • ⑤time扩展
      • 根据将报文到达的时间与指定的时间范围进行匹配
      • –datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
      • –datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
      • –timestart hh:mm[:ss] 时间
      • –timestop hh:mm[:ss]
      • [!] --monthdays day[,day…] 每个月的几号
      • [!] --weekdays day[,day…] 星期几,1 – 7 分别表示星期一到星期日
      • –kerneltz:内核时区,不建议使用,CentOS7系统默认为UTC
      • 注意: centos6 不支持kerneltz ,–localtz指定本地时区(默认)
    示例:
    ~]# iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp --dport 80 -m time - -timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz -j DROP
    
    • ⑥connlimit扩展
      • 根据每客户端IP做并发连接数数量匹配
      • 可防止Dos(Denial of Service,拒绝服务)攻击
      • –connlimit-upto #:连接的数量小于等于#时匹配
      • –connlimit-above #:连接的数量大于#时匹配
      • 通常分别与默认的拒绝或允许策略配合使用
    示例:
    ~]# iptables -A INPUT -d 172.16.100.10 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
    
    • ⑦limit扩展
      • 基于收发报文的速率做匹配
      • 令牌桶过滤器
      • –limit #[/second|/minute|/hour|/day]
      • –limit-burst number
    示例:
    ~]# iptables -I INPUT -d 172.16.100.10 -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
    
    • ⑧state扩展
      根据”连接追踪机制“去检查连接的状态,较耗资源
      • conntrack机制:追踪本机上的请求和响应之间的关系

      • 状态有如下几种:
        NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
        ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
        RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系
        INVALID:无效的连接,如flag标记不正确
        UNTRACKED:未进行追踪的连接,如raw表中关闭追踪

        :只要是新建连接均为NEW,此处的连接状态与TCP的连接状态无关

    示例:
    # iptables -A INPUT -d 172.16.1.10 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
    # iptables -A OUTPUT -s 172.16.1.10 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT
    
    • 已经追踪到的并记录下来的连接信息库:/proc/net/nf_conntrack
    • 调整连接追踪功能所能够容纳的最大连接数量:/proc/sys/net/nf_conntrack_max
    • 不同的协议的连接追踪时长/proc/sys/net/netfilter/
    • 注意:CentOS7 需要加载模块: modprobe nf_conntrack_ipv4
    • iptables的链接跟踪表最大容量为/proc/sys/net/nf_conntrack_max,各种状态的超时链接会从表中删除;当模板满载时,后续连接可能会超时
      解决方法两个:
      ●(1) 加大nf_conntrack_max值
      ●(2) 降低 nf_conntrack timeout时间
    • ⑨开放被动模式的ftp服务
    (1) 装载ftp连接追踪的专用模块:
    跟踪模块路径:/lib/modules/kernelversion/kernel/net/netfilter
    vim /etc/sysconfig/iptables-config 配置文件
    IPTABLES_MODULES=“nf_conntrack_ftp"
    modproble nf_conntrack_ftp
    
    
    (2) 放行请求报文:
    命令连接:NEW, ESTABLISHED
    数据连接:RELATED, ESTABLISHED
    # iptables –I INPUT -d LocalIP -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
    # iptables -A INPUT -d LocalIP -p tcp --dport 21 -m state --state NEW -j ACCEPT
    
    
    (3) 放行响应报文:
    # iptables -I OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT
    

    iptables命令的处理动作

    • -j targetname [per-target-options]

      • 简单:ACCEPT,DROP
      • 扩展:REJECT:–reject-with:icmp-port-unreachable默认
        ● RETURN:返回调用链
        ● REDIRECT:端口重定向
        ● LOG:记录日志,dmesg
        ● MARK:做防火墙标记
        ● DNAT:目标地址转换
        ● SNAT:源地址转换
        ● MASQUERADE:地址伪装
        ● …
        ● 自定义链:
    • Target:

      • ACCEPT, DROP, REJECT, RETURN
      • LOG, SNAT, DNAT, REDIRECT, MASQUERADE,…
      • LOG:非中断target,本身不拒绝和允许,放在拒绝和允许规则前并将日志记录在/var/log/messages系统日志中
        ● --log-level level 级别: debug,info,notice, warning, error, crit, alert,emerg
        ● --log-prefix prefix 日志前缀,用于区别不同的日志,最多29个字符
    示例:
    # iptables -I INPUT -s 10.0.1.0/24 -p tcp -m multiport --dports 80,21,22,23 -m state --state NEW -j LOG --log-prefix "new connections: "
    
    展开全文
  • IPTABLES命令

    2019-09-13 00:09:32
    <pre name="code" class="plain">vim /etc/sysconfig/iptables 查看iptables规则 iptables -L -n iptables -L -n --line-numbers 添加规则 iptables -I INPUT ...
    <pre name="code" class="plain">vim /etc/sysconfig/iptables
    查看iptables规则
    iptables -L -n
    iptables -L -n --line-numbers
    
    添加规则
    iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
    iptables -I INPUT -p tcp --dport 22 -j ACCEPT
    
    iptables -I INPUT -p tcp --dport 8086 -j ACCEPT
    删除一条规则
    iptables -D INPUT 3 删除INUPT第三条规则 
    
    保存规则
    /etc/init.d/iptables save
    
    禁止所有进入的包
    iptables -P INPUT DROP
    
    允许所有出的包
    iptables -P OUTPUT ACCEPT
    
    iptables -P FORWARD DROP
    
    允许公网ping
    iptables -A INPUT -p icmp -j ACCEPT
    
    禁止某个IP访问
    iptables -I INPUT -s 222.186.30.161 -j DROP
    
    查看当前nat表的防火墙规则
    iptables -t nat -L -n --line-numbers
    
    删除命令
    iptables -t nat -D PREROUTING 1
    
    端口转发
    例:将对42000端口的连接转发到3306端口
    iptables -t nat -A PREROUTING -p tcp -i eth1 -d 10.1.1.5 --dport 42000 -j DNAT --to 10.1.1.6:3306
    iptables -t nat -A PREROUTING -p tcp -i eth0 -d 10.1.1.12 --dport 80 -j DNAT --to 10.1.1.2:8080


    转载于:https://my.oschina.net/direnjie/blog/542211

    展开全文
  • iptables 查看相关命令

    千次阅读 2020-02-02 11:04:56
    一些命令的总结 1、查看对应表的所有规则,-t 指定要操作的表,省略 "-t" 表名时,默认表示操作filter 表, "-L" 表示列出规则,即查看规则. iptables-t表名-L 2、查看指定表,指定链的规则 iptables-t表名-L链...

    参考:https://www.zsythink.net/archives/1493 

     一些命令的总结 

    1、查看对应表的所有规则,-t 指定要操作的表,省略 "-t" 表名时,默认表示操作filter 表,  "-L" 表示列出规则,即查看规则.

    iptables -t 表名 -L

    2、查看指定表,指定链的规则

    iptables -t 表名 -L 链名

    3、查看指定表的所有规则,并且显示更详细的信息(更多字段),-v 表示verbose,表示详细的,冗长的,当使用-v 选项时,会显示出计数器的信息 ,一般简写为 iptables  -t  表名  -vL 

    iptables -t 表名 -v -L

    4、查看表的所有规则 ,并且显示规则时,不对规则中的IP或端口进行名称反解,-n 选项表示不解析IP地址.

    iptables -t 表名 -n -L

    5、表示查看表的所有规则,并显示规则的序号,--line-numbers 表示显示规则的序号,注意,此选项为长选项,不能与其它短选项合并,不过此选项可以简写为--line,注意简写后仍然是两条横杠,仍然是长选项.

    iptables --line-numbers -t 表名 -L

    6、表示查看表中的所有规则,并显示更详细的信息(-v选项),不过,计数器中的信息显示为精确的计数值,而不是显示经过可读优化的计数值,-x 选项表示显示计数器的精确值

    iptables -t 表名 -v -x -L

    7、实际使用中,为了方便,往往会将短选项进行合并,所以,如果将上述选项都糅合到一起,可以写成如下命令,此处以filter表为例.

    iptables --line -t filter -nvxL

    当然也可以查看某张表中的某条链,此处以filter 表的INPUT链为例

    iptables --line -t filter -nvxL INPUT

     

    展开全文
  • iptables 命令

    2012-04-19 14:29:00
    查看iptables当前规则#iptables -L -n建立规则#iptables -A INPUT -s xxx.xxx.xxx.xx -p tcp --dport 80 -j DROP移除规则#iptables -D INPUT -s xxx.xxx.xxx.xx -p tcp --dport 80 -j DROP常用操作命令:-A 或 -...

    原文链接

    查看iptables当前规则

    #iptables -L -n

    建立规则
    #iptables -A INPUT -s xxx.xxx.xxx.xx  -p tcp --dport 80 -j DROP

    移除规则
    #iptables -D INPUT -s xxx.xxx.xxx.xx  -p tcp --dport 80 -j DROP

    常用操作命令: 

    -A 或 -append 在所选链尾加入一条或多条规则 

    -D 或 -delete 在所选链尾部删除一条或者多条规则 

    -R 或 -replace 在所选链中替换一条匹配规则 

    -I 或 -insert 以给出的规则号在所选链中插入一条或者多条规则. 如果规则号为1,即在链头部. 

    -L 或 -list 列出指定链中的所有规则,如果没有指定链,将列出链中的所有规则. 

    -F 或 -flush 清除指定链和表中的所由规则, 假如不指定链,那么所有链都将被清空. 

    -N 或 -new-chain 以指定名创建一条新的用户自定义链,不能与已有链名相同. 

    -X 或 -delete-chain 删除指定的用户定义帘,必需保证链中的规则都不在使用时才能删除,若没有指定链,则删除所有用户链. 

    -P 或 -policy 为永久帘指定默认规则(内置链策略),用户定义帘没有缺省规则,缺省规则也使规则链中的最后一条规则,用-L显示时它在第一行显示. 

    -C 或 -check 检查给定的包是否与指定链的规则相匹配. 

    -Z 或 -zero 将指定帘中所由的规则包字节(BYTE)计数器清零. 

    -h 显示帮助信息.

     

     

    设置链的默认策略。一般有两种方法。

    1)首先允许所有的包,然后再禁止有危险的包通过放火墙。

    #iptables -P INPUT ACCEPT

    #iptables -P OUTPUT ACCEPT

    #iptables -P FORWARD ACCEPT

    2)首先禁止所有的包,然后根据需要的服务允许特定的包通过防火墙。

    #iptables -P INPUT DROP

    #iptables -P OUTPUT DROP

    #iptables -P FORWARD DROP

     

     

    添加规则
    # iptables -A INPUT -p tcp –dport 22 -j ACCEPT
    # iptables -A OUTPUT -p tcp –sport 22 -j ACCEPT
    开启22端口, 允许SSH登录

     

    如开启80端口:
    # iptables -A INPUT -p tcp –dport 80 -j ACCEPT
    # iptables -A OUTPUT -p tcp –sport 80 -j ACCEPT

     

    禁止某个IP访问
    # iptables -I INPUT -s x.x.x.x -j DROP

     

    也可进行更细致的设置, 如只允许192.168.1.14的机器进行SSH连接:
    # iptables -A INPUT -p tcp –dport 22 -s 192.168.1.14 -j ACCEPT

    如果要允许或限制一段IP地址可用192.168.1.0/24 表示192.168.1.1-255端的所有IP.

     

    防止同步包洪水(Sync Flood)
    # iptables -A FORWARD -p tcp –syn -m limit –limit 1/s -j ACCEPT

     

    防止各种端口扫描
    # iptables -A FORWARD -p tcp –tcp-flags SYN,ACK,FIN,RST RST -m limit –limit 1/s -j ACCEPT

     

    Ping 洪水攻击(Ping of Death)
    # iptables -A FORWARD -p icmp –icmp-type echo-request -m limit –limit 1/s -j ACCEPT

     

     

    重启防火墙:

    service iptables restart

    转载于:https://www.cnblogs.com/wangkangluo1/archive/2012/04/19/2457063.html

    展开全文
  • iptables命令示例

    2020-04-12 08:35:07
    查看当前的iptables规则 命令iptables -vnL [root@centos ~]# iptables -vnL Chain INPUT (policy ACCEPT 4629K packets, 1620M bytes) pkts bytes target prot opt in out source destination ...
  • 详解Linux iptables 命令

    2021-01-20 15:33:32
    查看规则的命令格式为: iptables [-t tables] [-L] [-nv] -t :后面接 table ,例如 nat 或 filter ,若省略此项目,则使用默认的 filter -L :列出某个 table 的所有链或某个链的规则 -n :直接显示 IP,速度会快...
  • Linux iptables 命令

    2018-07-23 08:55:00
    iptables 是 Linux 管理员用来设置 IPv4 数据包过滤条件和 NAT 的命令行工具。iptables 工具运行在用户态,主要是...查看规则的命令格式为:iptables [-t tables] [-L] [-nv] -t :后面接 table ,例如 nat 或 filte...
  • linux之iptables命令

    2018-11-02 18:09:46
    linux之iptables命令 CentOS 6.5关闭/重启防火墙步骤 关闭命令: service iptables stop 永久关闭防火墙:chkconfig iptables off 两个命令同时运行,运行完成后查看防火墙关闭状态 service iptables status 重启...
  • linux - iptables命令

    2018-08-08 18:59:10
    iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。 查看iptables iptables -nvL 插入9300端口的input accept中: iptables -I INPUT -...
  • Iptables 命令格式

    2012-10-06 08:08:56
    iptables命令格式#iptables [-t表] -命令 匹配 操作1.表选项 表选项用于指定命令应用于哪个iptables内置表,iptables内置包括filter表、nat表和mangle表。2.命令选项命令 说明-P或--policy &lt;链名&gt...
  • iptables命令学习

    2014-05-21 11:29:40
    查看iptables当前规则 #iptables -L -n 建立规则 #iptables -A INPUT -s xxx.xxx.xxx.xx -p tcp --dport 80 -j DROP 移除规则 #iptables -D INPUT -s xxx.xxx.xxx.xx -p tcp --dport 80 -j DROP ...
  • 学习防火墙iptables命令使用 查看防火墙规则命令 [root@localhost ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source ...
  • iptables -nv -L 查看iptables列表 iptables -F 清空iptables规则 iptables-save > /etc/sysconfig/iptables 保存iptables规则到文件 service iptables restart 重启iptables   以下是我服务器的iptab
  • iptables 命令字典

    2017-06-23 20:03:07
    iptables的核心是netfilter, 工作再linux内核的网络层,netfilter的实现核心是常说的四表五链,这个网上搜索一大堆的。...下面是一张命令的字典图,需要用到的时候可以直接查看(有些版本有一些扩展匹配命令不能用)
  • linux iptables命令

    2018-05-04 00:03:10
    查看已添加的规则iptables -vnL --line-numbers-v: verbose mode 详细模式-n: numeric output of addresses and ports 地址和端口的数字输出-L: List the rules in a chain or all chains 列出链或所有链中的...
  • Iptables 命令实例

    2012-10-05 15:08:13
    iptables -h 查看iptables 帮组命令   -A Append to chain  -D Delete matching rule from chain -I Insert in chain as rulenum (default 1=first) -R Replace rule rulenum (1=first) -L List the rules ....
  • 一:安装iptables 安装命令iptables:yum install -y iptables-services ...运行iptables启动命令后,可以查看iptables是否启动成功,确保iptables启动成功 查看状态:systemctl status ip...
  • Linux-iptables命令详解

    2020-07-15 17:48:44
    iptables 命令 对网络上的一些包通过表的形式进行限定和一些规则的修改 表主要有三种: mangle:(用的少,只有在操作级别才会用) filter:对进入的包进行过滤(默认的表) nat:网络地址转换 filter: 查看filter表...
  • linux修改iptables命令

    2017-11-19 17:58:43
    1. 开放端口命令: /sbin/iptables -I INPUT -p tcp --dport 9876 -j ACCEPT   2.保存:/etc/rc.d/init.d/iptables save   3.重启服务:/etc/init.d/iptables restart   4.查看端口是否开
  • firewall命令: systemctl status firewalld #查看firewall防火墙状态 firewall-cmd --list-ports #查看firewall防火墙开放端口 systemctl start firewalld.service #打开firewall防火墙 systemctl stop ...
  • 如果你想看iptables命令的核心原理等,那么请不要浪费时间往下看了,这篇文章是我在做了devops一段时间后总结的一些基本命令和稍微深入一点的解析。对于大神来说是小儿科,但是对于我这种开发为主的同学应该还是...
  • 常用iptables命令整理

    2018-04-02 15:57:53
    常用术语 五个钩子函数(hook functions),也叫五个规则链。 1.PREROUTING (路由前) 2.INPUT (数据包流入口) 3.FORWARD (转发管卡) 4.OUTPUT(数据包出口) 5.POSTROUTING(路由后) ...1、查看命令 iptables [-t tab...
  • linux下iptables命令

    2016-01-04 15:45:54
    建立规则iptables -A INPUT -s xxx.xxx.xxx.xx -p tcp --dport 80 -j DROP移除规则iptables -D INPUT -s xxx.xxx.xxx.xx -p tcp --dport 80 -j DROP常用操作命令: (可以--help查看)-A 或 -append 在所选链尾加入一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,424
精华内容 969
关键字:

查看iptables命令