设置防火墙策略时,关于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 -m length --length -m recent --name sshKeyList --set -j ACCEPT # 规则2 若30秒内发送次数达到6次(及更高),当发起SSH:22新连接请求时拒绝
# iptables -A INPUT -p tcp -m tcp --dport --syn -m recent --name sshKeyList --rcheck --seconds --hitcount -j DROP # 规则3 若30秒内发送次数达到5次,当发起SSH:22新连接请求时放行
# iptables -A INPUT -p tcp -m tcp --dport --syn -m recent --name sshKeyList --rcheck --seconds --hitcount -j ACCEPT # 规则4 对于已建立的连接放行
# iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT # 规则5 老规矩:最后的拒绝
# iptables -A INPUT -j DROP

测试效果

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

C:\Users\Administrator>ping 192.168.137.66 -l  -n 

正在 Ping 192.168.137.66 具有  字节的数据:
来自 192.168.137.66 的回复: 字节= 时间<1ms TTL=
来自 192.168.137.66 的回复: 字节= 时间<1ms TTL=
来自 192.168.137.66 的回复: 字节= 时间<1ms TTL=
来自 192.168.137.66 的回复: 字节= 时间<1ms TTL=
来自 192.168.137.66 的回复: 字节= 时间<1ms TTL=

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

[root@martin ~]# ping 192.168.137.66 -s  -c
PING 192.168.137.66 (192.168.137.66) () bytes of data.
bytes from 192.168.137.66: icmp_seq= ttl= time=0.711 ms
bytes from 192.168.137.66: icmp_seq= ttl= time=1.00 ms
bytes from 192.168.137.66: icmp_seq= ttl= time=0.629 ms
bytes from 192.168.137.66: icmp_seq= ttl= time=1.32 ms
bytes from 192.168.137.66: icmp_seq= ttl= time=1.02 ms

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

DAY6 使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单的更多相关文章

  1. 使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单

    设置防火墙策略时,关于SSH:22访问权限,我们常常会设置服务器只接受某个固定IP(如公司IP)访问,但是当我们出差或在家情况需要登录服务器怎么办呢? 常用两种解决方案:1.通过VPN操作登录主机: ...

  2. [转]使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单

    原文链接:使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单 这个留待后面玩一下,还是有安全隐患,非核心业务 临时用一下可以. 设置防火墙策略时,关于SSH:22访问权限, ...

  3. [转帖]使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单

    使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单 https://www.cnblogs.com/martinzhang/p/5348769.html good good ...

  4. 服务器修改 ssh 22端口

    我们首先修改配置文件,让ssh 通知支持2个端口访问 ,22 和 23456 端口. Port 22 Port 23456 为什么要这样: 万一我用 23456端口替换了22端口,但是 23456正好 ...

  5. ssh:22端口拒绝服务

    在Hadoop配置中,被这个问题坑的死去活来的.总结一下,注意以下几点: 1.sshd是否启动.一般你ssh loaclhost的时候22端口拒绝,就很有可能是这个问题了. 手动打开:/etc/ini ...

  6. Git配置非22端口,解决:ssh: connect to host xxx port 22: Connection timed out fatal: The remote end hung up unexpectedly

    背景:私自搭建了Git服务器,而Git本身就是SSH进行连接的,而Git命令上默认只能通过22端口实现. 解决方法: 第一种: 在系统的用户目录下的文件夹:.ssh 如果该路径下没有config文件, ...

  7. git ssh 22 端口不可用时通过https 443 端口配置git ssh

    Using SSH over the HTTPS port Sometimes, firewalls refuse to allow SSH connections entirely. If usin ...

  8. ssh 22端口号拒绝

    1:当scp或者ssh登录ubuntu远程服务的时候,出现:

  9. centos linux ip地址无法连接数据库,ssh登录服务器时必须使用22端口

    问题一:连接数据库时直接使用ip地址无法连接,必须使用ssh方式才能连接? 问题二:ssh登录服务器时必须使用22端口,在/etc/ssh/sshd_config中添加了10086端口,防火墙中已开启 ...

随机推荐

  1. Jenkins学习三:介绍一些Jenkins的常用功能

    Jenkins其实就是一个工具,这个工具的作用就是调用各种其他的工具来达成你的目的. 1.备份.迁移.恢复jenkins 首先找到JENKINS_HOME,因为Jenkins的所有的数据都是以文件的形 ...

  2. 通过xshell远程连接ubuntu

    ubuntu开启sshd服务SSH分客户端openssh-client和openssh-server如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果 ...

  3. 【笔记3】用pandas实现矩阵数据格式的推荐算法 (基于用户的协同)

    原书作者使用字典dict实现推荐算法,并且惊叹于18行代码实现了向量的余弦夹角公式. 我用pandas实现相同的公式只要3行. 特别说明:本篇笔记是针对矩阵数据,下篇笔记是针对条目数据. ''' 基于 ...

  4. web前端开发最佳实践笔记

    一.文章开篇 由于最近也比较忙,一方面是忙着公司的事情,另外一方面也是忙着看书和学习,所以没有时间来和大家一起分享知识,现在好了,终于回归博客园的大家庭了,今天我打算来分享一下关于<web前端开 ...

  5. K-means聚类算法

    聚类分析(英语:Cluster analysis,亦称为群集分析) K-means也是聚类算法中最简单的一种了,但是里面包含的思想却是不一般.最早我使用并实现这个算法是在学习韩爷爷那本数据挖掘的书中, ...

  6. Android ORM 框架之 greenDAO 使用心得

    前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM  ...

  7. Android BLE 蓝牙编程(四)

    接上篇,我们已经实现了短震,长震的功能了- 现在我们需要实现点击后一直震动的功能 开始我的想法是再循环中不断执行write方法,然而这个办法行不通. 系统会报错. 那要如何实现这个想法呢?其实很简单, ...

  8. Linux shell编程

    1. 批量添加用户的小脚本: for name in xp wrg lct do useradd $name echo red | passwd --stdin $name done 对echo re ...

  9. iOS地图 -- 定位中的CLLocation的介绍与小练习

    通过定位练习,熟悉CLLocation 在上篇笔记中提到了CLLocation类,这里通过练习来讲解一下这个类,类中包含了获取到的用户位置的信息 coordinate --> 坐标,经度和纬度 ...

  10. Asp.Net MVC<八>:View的呈现

    ActionResult 原则上任何类型的响应都可以利用当前的HttpResponse来完成.但是MVC中我们一般将针对请求的响应实现在一个ActionResult对象中. public abstra ...