zoukankan      html  css  js  c++  java
  • iptables详解(4):iptables匹配条件总结之一

    基本匹配条件

    -s  匹配条件 源地址

    ①  一次性指定多个ip源地址,用“逗号”隔开,多个特定ip地址

    iptables -t filter -I INPUT -s 192.168.23.242,192.168.23.47 -j DROP
    

       

    ②  指定特定网段

     iptables -I INPUT -s 192.168.23.0/24 -J DROP
    

      

    ③  匹配取反条件

    iptables -t filter -A INPUT ! -s 192.168.23.246 -j ACCEPT

    意思为不是23.246的包就可以接受 但是没有指明23.246的包如何处理

    所以23.246的包应该是没有匹配规则之后就会执行默认的规则也就是accpet规则所以取反规则相当于无效。

    -d 匹配条件目标地址

    我们可以用如下规则去查看我们当前机器的地址总共有多少

    ifconfig | awk '/inet addr/{print $1,$2}'

    比如当前机器有多个网络出口,当前我只对某个接口进行接口的生效作用,当我个更换机器的的网络出口的时

    该网络协议包还是可以正常运作,以路由器为例

    当前路由器有蜂窝LTE出口ip、wlan出口ip、wan口出口ip、lan口出口ip等等


    ①指定不接收某个指定 ip 地址,指定不接收wan口请求相关的ping包等

     

    iptables -I INPUT -s 192.168.23.46 -d 192.168.23.44 -j DROP

    则当前规则生效

    ②一次性指定多个ip地址和-s一样

    -p 协议类型

    ①只想拒绝 tcp请求  

     iptables -t filter -I INPUT -s 192.168.23.246 -d 192.168.23.44 -p tcp -j DROP  

    当前ping还是可以ping通 但是ssh失败了失去响应 说明当前的防火墙规则生效

    在centos6中,-p支持的协议类型有

    tcp、udp、udplite、icmp、esp、ah、sctp

    centos7中除了上面的协议外 还支持 icmpv6、mh

    当不适用-p则默表示所有类型的协议都会被匹配到,与使用-p all的效果相同

    -i  网卡接口

    -i 用于匹配报文流入的网卡, 从网卡出去的报文是不会用到-i选项的

     -i  一般用于PREROUTING、INPUT链、FORWARD链

    当主机有多块网卡时,可以使用-o选项,匹配报文将由哪块网卡流出,-o和-i是相对的,-i用于匹配报文从哪个网卡流入。-o 匹配从哪个网卡流出

    -o  一般只能是POSTROUTING链、OUTPUT链、 FORWARD链

    扩展匹配条件

    --dport(--sport)源端口目的端口

    基本匹配条件如源地址、目的地址可以直接用 然而扩展匹配条件的使用 需要依赖相应的扩展模块。

     如果在-p中已经指定协议,则默认使用协议中写的模块名。

     如果没有必须要指定对应的模块 -m +模块名 这样才能正常使用 --dport功能

     --dport(--sport)

    ① 在使用--dport之前一定要先定义好是在哪个模块协议上进行使用的

    否则会无法正常使用 --sport  

    iptables -I INPUT -p tcp -s 192.168.23.246 --sport 22 -j DROP
    

    ② 拒绝多个端口的访问 可以在-m 后面加上multiport加上多个端口

    iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
    

    ③ 用 :的方式来决定当前的端口是从哪个端口到哪个端口

    iptables -A INPUT -p tcp -m multiport --dports 22,80,22:443 -j ACCEPT
    

      

    --src-range (--dst-range)

    指定一段连续的ip地址范围

    iptables -I INPUT -m iprange --src-range 192.168.23.240-192.168.23.246 -j DROP
    

    --string

    --alogo指定对应的匹配算法,可用算法为bm、kmp,此选项为必需选项

    --string指定需要匹配的字符串

    报文中包含字符XXX,我们就丢弃当前的报文

     iptables -I INPUT -m string --algo bm --string "百度一下" -j REJECT
    

    -m string表示使用string模块--algo bm表示用bm算法去匹配指定的字符串,--string " "要匹配的内容

    --algo:用于指定匹配算法 可选的算法有bm和kmp 此选项为必选项  

    time 

    表示报文到达的时间在指定的时间范围内 则符合匹配条件

    比如在指定的时间内规定不能看网页,如家中的熊孩子周六日的早上9:00到下午6:00不能浏览网页

    --timestart 指定时间范围的开始时间,不可取反

    --timestop 指定时间范围的结束时间,不可取反

    --weekdays 指定星期几 可取反

    --monthdays 指定几号,可取反

    --datestart 用于指定日期范围的开始日期 不可取反

    --datestop 用于指定日期范围的结束时间 不可取反

    iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 19:00:00 -j REJECT
    iptables -t filter -I OUTPUT -p tcp --dport 443 -m time --timestart 09:00:00 --timestop 19:00:00 -j REJECT
    iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --weekdays 6,7 -j REJECT
    iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --monthdays 22,23 -j REJECT
    iptables -t filter -I OUTPUT -p tcp --dport 80  -m time ! --monthdays 22,23 -j REJECT
    iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays 6,7 -j REJECT
    iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --weekdays 5 --monthdays 22,23,24,25,26,27,28 -j REJECT
    iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --datestart 2017-12-24 --datestop 2017-12-27 -j REJECT
    

    限制从2019.12.15-2019.12.16都不能上网

    connlimit模块

    主要用来限制连接服务器的数量

    常用的扩展匹配条件如下

    --connlimit-above 单独使用此选项时,表示限制每个ip的链接数量

    --connlimit-mask 选项不可单独使用,配合--connlimit-above选项,配合此选项针对某类ip段内的一定数量的ip进行连接数量限制

    iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
    iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT
    iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 10 --connlimit-mask 27 -j REJECT
    

    限制链接数量上限,如每个ip地址最多只能占用2个ssh链接远程到server端,我们可以用如下的限制

    可以发现第三个连接就不能正常连接进来了

     mask为掩码的意思 24转换成十进制表示的是255.255.255.0一个最多只能包含254个ip的C类网址中,

    同时最多只能有2个ssh客户端连接到当前服务器...如果子网掩码是27  表示为这个网段中最多只能有30个ip

    limit模块

    主要用来调整网络流量和速率限制

    --limit-burst 类比令牌桶算法 此选项用于指定令牌桶中令牌的最大数量

    --limit 类比令牌桶算法 此选项用于指定令牌桶中生成新令牌的频率,可用时间单位有second minute hour day

    iptables -t filter -I INPUT -p icmp -m limit --limit-burst 3 --limit 10/minute -j ACCEPT
    iptables -t filter -A INPUT -p icmp -j REJECT

    令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。

    大小固定的令牌桶可自行以恒定的速率源源不断地产生令牌。如果令牌不被消耗,或者被消耗的速度小于产生的速度,令牌就会不断地增多,直到把桶填满。后面再产生的令牌就会从桶中溢出。最后桶中可以保存的最大令牌数永远不会超过桶的大小。

    如果令牌桶中存在令牌则允许发送流量,如果令牌桶中不存在令牌,则不允许发送流量

    令牌桶算法 假如用户配置的平均发送速率为r,每个1/r 秒 一个令牌被加入捅中

    假设桶最多可以存b个令牌 如果令牌桶满 则令牌会被丢弃

    当一个n个字节(一个字节需要一个令牌才能发送数据)的数据包到达 就从令牌桶中拿出那个令牌 将数据包发送到网络

    如果令牌桶中少于 n个令牌,那么数据包在流量限制之外,

    对于在流量限制之外的数据包的处理方式有以下几种

    1 被丢弃    2排列在队列中当令牌桶积累足够多令牌再传输    3 单个数据包拿单个令牌继续发送需要做特殊标记 网络过载时就会把这些特殊标记包丢弃

    --limit用于指定多长时间生成一个新令牌的b limit-burst指的是木桶中最多存放几个令牌

    如上例中表示令牌桶最多存放3个令牌 每分钟生成10个令牌(6s 生成一个令牌)

    对报文到达速率进行限制 想要限制单位时间内流入的包的数量 就用limit模块(单位时间可以是 分钟 小时 天)

    比如限制本机最多每6s放行一个ping包 

    --tcp-flags

    tcp头中的标志位 结构表如下

     

     第一条命令为第一次握手的报文 第二条命令为第二次握手的报文

    iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT
    iptables -t filter -I OUTPUT -p tcp -m tcp --sport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN,ACK -j REJECT
    iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags ALL SYN -j REJECT
    iptables -t filter -I OUTPUT -p tcp -m tcp --sport 22 --tcp-flags ALL SYN,ACK -j REJECT
    

      

  • 相关阅读:
    CF 142B Tprimes
    CF 231A Team
    poj 2001 Shortest Prefixes ——字典树入门
    hdu 1039 Easier Done Than Said?
    poj 2528 Mayor's posters
    hdu 1061 Rightmost Digit
    poj 2503 Babelfish
    CF271 A. Beautiful Year
    poj 2752
    CF271 B. Prime Matrix
  • 原文地址:https://www.cnblogs.com/chenxiaomeng/p/12031294.html
Copyright © 2011-2022 走看看