首页 > 代码库 > 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安全一例