首页 > 代码库 > Iptables构建ssh安全一例

Iptables构建ssh安全一例

  这两天对iptables这块做温习,受其他网友的启发,发现recent这个模块在线上的环境做ssh防护还是挺受用的。

  recent的使用实际也很简单,咱们先来看看其各个常用的参数

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


 ok,废话不多说,咱们直接以实例来看下相应的效果。

一.图解

  1.服务器端进行recent模块规则定义

技术分享

 (1). 指定一个基于recent的规则。

    iptables -t filter -A INPUT -p icmp --icmp-type 8 -m length --length 128 -m recent --set --name SSH_ALLOW -j ACCEPT

  ###制定一个规则,当一个请求是基于icmp协议且其长度是128的请求时会将“source-ip”放入到       ###--name所指定的规则容器中。

 (2). 将ssh进行recent规则认证

    iptables -t filter -A INPUT -p tcp --dport 22 -m state --state NEW -m recent ! --rcheck --name SSH_ALLOW --seconds 15 -j REJECT

  ### 使用--rcheck对ssh的新连接进行认证,即会将发起请求的source-ip与--name容器中的Ip进行比   ###对,如果存在返回True,则在--seconds所定义的时间内(单位秒)允许ssh登陆连接


  2.在客户端未实现recent认证的情况下,直接telnet ssh端口显示失败;随后借助ping进行recent模块的icmp认证

        技术分享   

   注:本处ping指定-l(长度)为100 是由于包头中 ip头部占用了20个字节,而icmp包头占用了8个字节。

   

  3.再次telnet ssh端口,已经可以正常接入

  技术分享


 二。优点

(1).隐藏ssh端口,只有当满足特定条件,并且在一定时间内才允许ssh操作

(2).不需要限定特定的source-ip地址。

Iptables构建ssh安全一例