DAY6 使用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:\Users\Administrator>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字节

[[email protected] ~]# 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登录管理就这么简单。

时间: 2024-07-29 08:46:24

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

使用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模块做A

Linux开启TCP 22端口(基于SSH协议)

SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议. 第一步 #查看本机是否安装SSH软件包 [[email protected] ~]# rpm -qa | grep ssh openssh-server-6.6.1p1-12.el7_1.x86_64 openssh-clients-6.6.1p1-1

服务器修改 ssh 22端口

我们首先修改配置文件,让ssh 通知支持2个端口访问 ,22 和 23456 端口. Port 22 Port 23456 为什么要这样: 万一我用 23456端口替换了22端口,但是 23456正好被其他服务使用. 这时我让配置生效后,结果阿里云ssh登录不上,我该怎么办? 控制台还原备份实例? 我不愿意这样冒险,也没有这样尝试过. 修改配置后,如何生效,执行下面命令 ./etc/init.d/sshd restart

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文件,则创建一个. config中添加如下内容: 如是以域名访问的则添加如下内容:(注意修改xxx为你的远程仓库的名称) Host xxx HostName xxx.com Port 3333 如是以IP访问的,则添加如下内容:(注意修改IP为你的远程仓库IP) Host "211.111.xx.xxx&

ssh 22端口号拒绝

1:当scp或者ssh登录ubuntu远程服务的时候,出现: 那是因为远程服务器没安装 openssh-server 解决办法:sudo apt-get install openssh-server

远程连接linux(Ubuntu配置SSH服务)22端口

最近在虚拟机安装了Ubuntu 14.04 server版,安装过程中选择安装OpenSSH client客户端,服务器端缺省是没有安装的.在Windows7客户机使用Xshell工具远程连接Ubuntu server,提示22端口连接失败:cmd窗口telnet 22端口也连接失败,原来是22端口未打开造成的. 打开Ubuntu SSH 22端口的方法如下: 需要安装OpenSSH server 使用命令安装: $sudo apt-get install openssh-server 需要保证

远程连接工具SSH和linux的连接

实际开发中,Linux服务器都在其他的地方,我们要通过远程的方式去连接Linux并操作它,Linux远程的操作工具有很多,企业中常用的有Puttty.secureCRT.SSH Secure等.我使用SSH Secure工具进行远程连接,该工具是免费的图形化界面及命令行窗口集一身的远程工具. SSH Secure是什么百度百科有更详细的解答.https://baike.baidu.com/item/ssh/10407?fr=aladdin 远程工具SSH与linux的连接困扰了我好几天,终于解决

在Linux环境下使用SSH判断端口是否通

在Linux环境下使用SSH判断端口是否通 在windows/linux环境下,可以使用telnet判断端口状态,但有时候在Linux环境下没有telnet,所以可以使用ssh判断端口状态. 一.ssh使用方法: 命令:ssh -v -p port [email protected] 说明:-v  调试模式,会输入日志信息 -p  端口号 二.在server01上安装httpd 首先在Linux系统下安装httpd,启动80端口. yum install httpd systemctl star

远地利用ssh进行端口转发,传输数据和远程登录

博客地址:http://loopholes.blog.51cto.com/9445813/16203672015-03-17 "本试验需要下载花生壳,不要问我花生壳是什么,下载点这里" 如何让在家里面连入到公司的电脑,对于这个问题,就是我作试验的起因了: 1.如果只是让用户登录,你只需要安装SSH的服务端(server),如果你还需要远程对方,你需要下载SSH的客户端(clients) yum install -y openssh ==>会自动把openssh-server(服务