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
    

      

  • 相关阅读:
    SrsDataConnector The SQL Server Reporting Services account is a local user and is not supported.
    Marketing with Microsoft Dynamics CRM IDEA CONFERENCE
    Discuz!X 系列 HTTP_X_FORWARDED_FOR 绕过限制进行密码爆破
    PHPCMS v9.5.6 通杀getshell(前台)
    PHPCMS v9.5.8-设计缺陷可重置前台任意用户密码
    PHPCMS v9.6.0 任意用户密码重置
    PHPCMS V9 任意文件下载(Windows)
    Joomla!3.7.0 Core SQL注入漏洞动态调试草稿
    利用FOFA搜索WatchGuard防火墙
    如何删除Windows休眠文件(hiberfil.sys)
  • 原文地址:https://www.cnblogs.com/chenxiaomeng/p/12031294.html
Copyright © 2011-2022 走看看