zoukankan      html  css  js  c++  java
  • 使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单(转)

    设置防火墙策略时,关于SSH:22访问权限,我们常常会设置服务器只接受某个固定IP(如公司IP)访问,但是当我们出差或在家情况需要登录服务器怎么办呢?

    常用两种解决方案:1.通过VPN操作登录主机; 2.使用ping钥匙临时开启远程主机SSH:22端口;

    我们今天就讨论第2种方案,阐述如何通过ping钥匙来临时打开SSH:22的访问权限

    原理: recent 模块可以记录最近访问者IP,常利用此功能做DROP策略应对syn-flood及ddos攻击。但在本例中我们反其道,利用recent模块做ACCEPT策略,就是创建一个sshKeyList列表,当此列表内的IP地址达到命中次数后,让服务器放行此IP地址对SSH:22端口的访问,我们要做的就是想办法将我们当前客户端这个动态IP记录进去,怎么记录进去呢?利用ping命令就可以,ping命令可以把源IP带给远程服务器啊!ping命令就好比一把临时打开远程服务器SSH:22的钥匙。

    方案: 是钥匙就得有钥匙齿,要有一定的安全级别,不能让人那么容易猜出规律,怎么造钥匙齿呢?length模块可以匹配报文总长度,所以第1个钥匙齿就是ping包大小必须是我们自定义的,第2个齿就是ping的次数也是我们自定义的,第3个齿就是要在指定的时间内登录SSH:22。
    小结一下,服务器只有在“指定时间内收到固定大小的ping包+ping次数”才临时为此源IP放行SSH:22端口访问权。


    实施: 任一客户端向服务器发送Data大小为1050字节的ping包,发5次,服务器就自动为此客户端开启SSH:22端口访问权限(30秒内有效)

    注意:ICMP报文结构: IP头部(20Bytes) + ICMP头部(8Bytes) + 数据部分Data

    计算:若按此方案服务器端实际接收的ICMP数据包总大小为 20+8+1050=1078Bytes

    规则: 共5条规则

    复制代码
    # 规则1 只接受Data为1078字节的ping包,并将源IP记录到自定义名为sshKeyList的列表中
    # iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m length --length 1078 -m recent --name sshKeyList --set -j ACCEPT
    
    # 规则2 若30秒内发送次数达到6次(及更高),当发起SSH:22新连接请求时拒绝
    # iptables -A INPUT -p tcp -m tcp --dport 22 --syn -m recent --name sshKeyList --rcheck --seconds 30 --hitcount 6 -j DROP
    
    # 规则3 若30秒内发送次数达到5次,当发起SSH:22新连接请求时放行
    # iptables -A INPUT -p tcp -m tcp --dport 22 --syn -m recent --name sshKeyList --rcheck --seconds 30 --hitcount 5 -j ACCEPT
    
    # 规则4 对于已建立的连接放行
    # iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
    
    # 规则5 老规矩:最后的拒绝
    # iptables -A INPUT -j DROP
    复制代码

    测试效果

    Windows下默认ping次数为4次,默认ping包大小为32字节

    C:UsersAdministrator>ping 192.168.137.66 -l 1050 -n 5
    
    正在 Ping 192.168.137.66 具有 1050 字节的数据:
    来自 192.168.137.66 的回复: 字节=1050 时间<1ms TTL=64
    来自 192.168.137.66 的回复: 字节=1050 时间<1ms TTL=64
    来自 192.168.137.66 的回复: 字节=1050 时间<1ms TTL=64
    来自 192.168.137.66 的回复: 字节=1050 时间<1ms TTL=64
    来自 192.168.137.66 的回复: 字节=1050 时间<1ms TTL=64


    Linux下默认ping次数为无限次,默认ping包大小为56字节

    [root@martin ~]# ping 192.168.137.66 -s 1050 -c 5
    PING 192.168.137.66 (192.168.137.66) 1050(1078) bytes of data.
    1058 bytes from 192.168.137.66: icmp_seq=1 ttl=64 time=0.711 ms
    1058 bytes from 192.168.137.66: icmp_seq=2 ttl=64 time=1.00 ms
    1058 bytes from 192.168.137.66: icmp_seq=3 ttl=64 time=0.629 ms
    1058 bytes from 192.168.137.66: icmp_seq=4 ttl=64 time=1.32 ms
    1058 bytes from 192.168.137.66: icmp_seq=5 ttl=64 time=1.02 ms


    然后呢,就可以登录SSH了(30秒内有效,动作快点),由于有"--state ESTABLISHED -j ACCEPT"护驾,所以也不用担心被踢,OK,实现远程安全SSH登录管理就这么简单。

    http://www.cnblogs.com/martinzhang/p/5348769.html

  • 相关阅读:
    MT【139】公比为有理数
    鼠标右键怎么清除Catalyst Control Center
    人脸识别技术框架
    Qt生成灰度图(转载)
    人脸识别必读的N篇文章
    QT+vs2010下改变可执行程序的图标
    内部排序技术
    ubuntu下配置qt+opengl+opencv
    HOG算子
    基于HOG特征的Adaboost行人检测
  • 原文地址:https://www.cnblogs.com/softidea/p/5348796.html
Copyright © 2011-2022 走看看