海运的博客

Iptables模块recent应用

发布时间:May 3, 2012 // 分类:Iptables // 17 Comments

recent这个模块很有趣,善加利用可充分保证您服务器安全。
设定常用参数:

#https://www.haiyun.me
--name #设定列表名称,默认DEFAULT。
--rsource #源地址,此为默认。
--rdest #目的地址
--seconds #指定时间内
--hitcount #命中次数
--set #将地址添加进列表,并更新信息,包含地址加入的时间戳。
--rcheck #检查地址是否在列表,以第一个匹配开始计算时间。
--update #和rcheck类似,以最后一个匹配计算时间。
--remove #在列表里删除相应地址,后跟列表名称及地址。

示例:
1.限制80端口60秒内每个IP只能发起10个新连接,超过记录日记及丢失数据包,可防CC及非伪造IP的syn flood。

iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j LOG --log-prefix 'DDOS:' --log-ip-options
iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j DROP
iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --set -j ACCEPT

备忘:每个IP目标端口为80的新连接会记录在案,可在/proc/net/xt_recent/目录内查看,rcheck检查此IP是否在案及请求次数,如果超过规则就丢弃数据包,否则进入下条规则并更新列表信息。
2.发送特定指定执行相应操作,按上例如果自己IP被阻止了,可设置解锁哦。

#https://www.haiyun.me
iptables -A INPUT -p tcp --dport 5000 --syn -j LOG --log-prefix "WEBOPEN: "
#记录日志,前缀WEBOPEN:
iptables -A INPUT -p tcp --dport 5000 --syn -m recent --remove --name webpool --rsource -j REJECT --reject-with tcp-reset
#符合规则即删除webpool列表内的本IP记录

3.芝麻开门,默认封闭SSH端口,为您的SSH服务器设置开门暗语。

iptables -A INPUT -p tcp --dport 50001 --syn -j LOG --log-prefix "SSHOPEN: "
#记录日志,前缀SSHOPEN:
iptables -A INPUT -p tcp --dport 50001 --syn -m recent --set --name sshopen --rsource -j REJECT --reject-with tcp-reset
#目标端口tcp50001的新数据设定列表为sshopen返回TCP重置,并记录源地址。
iptables -A INPUT -p tcp --dport 22 --syn -m recent --rcheck --seconds 15 --name sshopen --rsource -j ACCEPT
#开启SSH端口,15秒内允许记录的源地址登录SSH。
nc host 50001  #开门钥匙
telnet host 50001
nmap -sS host 50001

指定端口容易被破解密钥,可以使用ping指定数据包大小为开门钥匙。

iptables -A INPUT -p icmp --icmp-type 8 -m length --length 78 -j LOG --log-prefix "SSHOPEN: "
#记录日志,前缀SSHOPEN:
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 78 -m recent --set --name sshopen --rsource -j ACCEPT
#指定数据包78字节,包含IP头部20字节,ICMP头部8字节。
iptables -A INPUT -p tcp --dport 22 --syn -m recent --rcheck --seconds 15 --name sshopen --rsource -j ACCEPT
ping -s 50 host #Linux下解锁
ping -l 50 host #Windows下解锁

标签:iptables, cc, linux, 防火墙, ddos

有 17 条 关于" Iptables模块recent应用 "的评论

  1. Tom

    请教一下,为什么我按照你的策略开启远程密令开启ssh为什么设置完成后还是可以通过ssh登陆

    1. 海运

      看INPUT默认策略及最后一条策略。

  2. 小小运维

    大哥能告诉我,我添加上最后一种方法,就是使用ping指定数据包大小开门钥匙,但是不行,我的iptables默认规则是drop,难道哪里有错吗?

    1. 海运

      有两个条件:
      1.指定时间内连接 --seconds 15
      2.ping的主机IP连接SSH --rsource
      也可在服务器内监测数据包及iptables规则变化查找问题。

      1. 小小运维

        小弟不才,再问一下哦
        就是加入,192.168.1.1 要连接 192.168.1.2 ,我就要用1.1 ping 1.2
        是说要在 1.2 的iptables规则里的 --rsource 192.168.1.1 要跟上这个IP吗?
        ------------------------------
        第二个问题:“也可在服务器内监测数据包及iptables规则变化查找问题”,因为我的这两个测试机都是刚刚装的,纯净的默认selinux和iptables都是关闭的,所以应该不会有iptables其他的变化

        1. 海运

          1.--rsource参数即指remote ip,相当于动态变量,例中为1.1。
          2.ping指定数据包后防火墙会动态允许open ssh规则,源IP1.1才可连接。
          PS:解锁后iptables会在--seconds 15(即15秒)时间内允许1.1 syn数据包连接1.2 ssh端口,注意在iptables规则内需添加允许ESTABLISHED数据包进入,这样才能正常建立连接。
          iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

          1. 小小运维

            哎呀,怎么把这条给忘了!!!多谢大哥提醒!非常感谢非常感谢!!!

      2. 小小运维

        发现了一个新问题:
        当指定包大小能ping通后,我用nmap去扫描目标机,是可以扫描到22端口的,但是就是ssh连接不上

        1. 海运

          正解,原因就在于ping后允许规则为--syn数据包进入,iptables识别ack之后的数据包状态为ESTABLISHED,所以按上回答添加ESTABLISHED规则即可。

          1. 小小运维

            非常感谢非常感谢!忘了这么重要一条了!原来脚本里默认规则的上一条就是
            iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
            都不指定怎么感激你了

  3. 小小运维

    刚刚小试了一下,--rsource 192.168.1.1 语法报错了...
    指定时间是没问题,刚刚我把时长改长了,仍然不行;不管是win的secureCRT下还是linux下直接ssh,都是不行的。。。
    我真的觉得这个技术很好玩,求求老大帮忙再解答一下

    1. 待业的人伤不起

      把第二条改成
      iptables -A INPUT -p tcp --dport 22 -m state --state new,established -m recent --rcheck --second 15 --name sshopen --rsource -j ACCEPT
      其实 rsource默认就加的, --syn 跟 state 的new差不多,最好把established加上,要不然三次握手的ack防火墙会挡掉

  4. 待业的人伤不起

    就是得一直ping着,要不链接要断

  5. cxzc

    这个内容不错

  6. higkoo

    我原封不动的用文章提到的例子跑,结果完全没有防护效果。求指点,我的防火墙规则如下:

    # iptables -nL
    Chain INPUT (policy ACCEPT)
    target prot opt source destination
    ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
    ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
    ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
    REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
    LOG tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 flags:0x17/0x02 recent: CHECK seconds: 60 hit_count: 10 name: webpool side: source LOG flags 4 level 4 prefix `DDOS:'
    DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 flags:0x17/0x02 recent: CHECK seconds: 60 hit_count: 10 name: webpool side: source
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 flags:0x17/0x02 recent: SET name: webpool side: source

    Chain FORWARD (policy ACCEPT)
    target prot opt source destination
    REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination

    1. 海运

      @higkoo
      REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
      这条规则会丢弃所有包。

  7. 咖啡小冰

    前段时间SSH被人破解了,遗失了好多文件,决定照你的设置iptables,加ssh暗语。
    nc host 50001 #开门钥匙 这个是什么意思?nc好像没有这个命令啊。
    telnet host 50001 这个是telnet登录host的50001,用来测试是否开启50001么?
    nmap -sS host 50001 这是扫描它的50001端口吗?

    但是,请问怎么用啊?

评论已关闭

分类
最新文章
最近回复
  • opnfense: 谢谢博主!!!解决问题了!!!我之前一直以为内置的odhcp6就是唯一管理ipv6的方式
  • liyk: 这个方法获取的IPv6大概20分钟之后就会失效,默认路由先消失,然后Global IPV6再消失
  • 海运: 不好意思,没有。
  • zongboa: 您好,請問一下有immortalwrt設定guest Wi-Fi的GUI教學嗎?感謝您。
  • 海运: 恩山有很多。
  • swsend: 大佬可以分享一下固件吗,谢谢。
  • Jimmy: 方法一 nghtp3步骤需要改成如下才能编译成功: git clone https://git...
  • 海运: 地址格式和udpxy一样,udpxy和msd_lite能用这个就能用。
  • 1: 怎么用 编译后的程序在家里路由器内任意一台设备上运行就可以吗?比如笔记本电脑 m参数是笔记本的...
  • 孤狼: ups_status_set: seems that UPS [BK650M2-CH] is ...