Loading

Loading

通过SSH实现内网穿透和端口转发功能

本地端口转发

-L 本地端口转发
命令:ssh -N -L [本地ip]:[本地端口]:[远程ip]:[远程端口] 远程服务器
本地ip可以省略不写
例如:ssh -N -L 3012:127.0.0.1:2220 root@abc.com
含义:把本机的3012映射到远程服务器的2220端口上。本地访问3012端口相当于访问远程服务器的2220端口

远程端口转发 (内网穿透)

-R 远程端口转发
命令:ssh -N -R [远程ip]:[远程端口]:[本地ip]:[本地端口] 远程服务器
远程ip可以省略不写
例如:ssh -N -R 80:127.0.0.1:8300 root@abc.com
含义:把远程的80端口映射到本地的8300端口上。外界访问远程服务器的80端口相当于访问本机的8300端口

优化一下:ssh -CqTfnN -R :6666:localhost:22 user_B@122.51.28.85

ssh开启配置使其生效

出于安全考虑,如果 SSH 服务器 没有开启允许 GatewayPorts 选项,则即使指定了 远程 IP,也仍然只会绑定到 127.0.0.1.

在 /etc/ssh/sshd_config 配置文件中找到 GatewayPorts,设置为 yes,并重启 sshd 服务。

如有需要可以开启tcp转发: AllowAgentForwarding yes

重启sshd方法:sevice ssh restart 或者 /etc/rc.d/init.d/ssh restart

ssh 命令行配置项

-N 告诉SSH客户端,这个连接不需要执行任何命令。仅仅做端口转发
-f 告诉SSH客户端在后台运行
-L 做本地映射端口

ssh 命令有很多配置项,修改它的默认行为。

-c

-c参数指定加密算法。

$ ssh -c blowfish,3des server.example.com

或者

$ ssh -c blowfish -c 3des server.example.com
上面命令指定使用加密算法blowfish或3des。

-C

-C参数表示压缩数据传输。

$ ssh -C server.example.com
-D

-D参数指定本机的 Socks 监听端口,该端口收到的请求,都将转发到远程的 SSH 主机,又称动态端口转发,详见《端口转发》一章。

$ ssh -D 1080 server
上面命令将本机 1080 端口收到的请求,都转发到服务器server。

-f

-f参数表示 SSH 连接在后台运行。

-F

-F参数指定配置文件。

$ ssh -F /usr/local/ssh/other_config
上面命令指定使用配置文件other_config。

-i

-i参数用于指定私钥,意为“identity_file”,默认值为~/.ssh/id_dsa(DSA 算法)和~/.ssh/id_rsa(RSA 算法)。注意,对应的公钥必须存放到服务器,详见《密钥登录》一章。

$ ssh -i my-key server.example.com
-l

-l参数指定远程登录的账户名。

$ ssh -l sally server.example.com

等同于

$ ssh sally@server.example.com
-L

-L参数设置本地端口转发,详见《端口转发》一章。

$ ssh -L 9999:targetServer:80 user@remoteserver
上面命令中,所有发向本地9999端口的请求,都会经过remoteserver发往 targetServer 的 80 端口,这就相当于直接连上了 targetServer 的 80 端口。

-m

-m参数指定校验数据完整性的算法(message authentication code,简称 MAC)。

$ ssh -m hmac-sha1,hmac-md5 server.example.com
上面命令指定数据校验算法为hmac-sha1或hmac-md5。

-N

-N参数用于端口转发,表示建立的 SSH 只用于端口转发,不能执行远程命令,这样可以提供安全性,详见《端口转发》一章。

-o

-o参数用来指定一个配置命令。

$ ssh -o "Keyword Value"
举例来说,配置文件里面有如下内容。

User sally
Port 220
通过-o参数,可以把上面两个配置命令从命令行传入。

$ ssh -o "User sally" -o "Port 220" server.example.com
使用等号时,配置命令可以不用写在引号里面,但是等号前后不能有空格。

$ ssh -o User=sally -o Port=220 server.example.com
-p

-p参数指定 SSH 客户端连接的服务器端口。

$ ssh -p 2035 server.example.com
上面命令连接服务器的2035端口。

-q

-q参数表示安静模式(quiet),不向用户输出任何警告信息。

$ ssh –q foo.com
root’s password:
上面命令使用-q参数,只输出要求用户输入密码的提示。

-R

-R参数指定远程端口转发,详见《端口转发》一章。

$ ssh -R 9999:targetServer:902 local
上面命令需在跳板服务器执行,指定本地计算机local监听自己的 9999 端口,所有发向这个端口的请求,都会转向 targetServer 的 902 端口。

-t

-t参数在 ssh 直接运行远端命令时,提供一个互动式 Shell。

$ ssh -t server.example.com emacs
-v

-v参数显示详细信息。

$ ssh -v server.example.com
-v可以重复多次,表示信息的详细程度,比如-vv和-vvv。

$ ssh -vvv server.example.com

或者

$ ssh -v -v -v server.example.com
上面命令会输出最详细的连接信息。

-V

-V参数输出 ssh 客户端的版本。

$ ssh –V
ssh: SSH Secure Shell 3.2.3 (non-commercial version) on i686-pc-linux-gnu
上面命令输出本机 ssh 客户端版本是SSH Secure Shell 3.2.3。

-X

-X参数表示打开 X 窗口转发。

$ ssh -X server.example.com
-1,-2

-1参数指定使用 SSH 1 协议。

-2参数指定使用 SSH 2 协议。

$ ssh -2 server.example.com
-4,-6

-4指定使用 IPv4 协议,这是默认值。

$ ssh -4 server.example.com
-6指定使用 IPv6 协议。

$ ssh -6 server.example.com

其他常识

1.wtmp日志

SSH下直接执行命令 即可查看所有SSH登陆日志 包括IPlastlast -x -F

2.查看在线用户情况

(1)w 命令用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。单独执行w命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。

(2)who am i 显示你的出口IP地址,该地址用于SSH连接的源IPwho am i

root pts/0 2018-03-29 04:12 (111.204.243.8)

3.SSH登录日志分析cat /var/log/secure |more

less /var/log/secure|grep 'Accepted' less /var/log/auth.log|grep 'Accepted'

检查/var/log目录下的secure(CentOS)或者auth.log(Ubuntu),如果存在大量异常IP高频率尝试登录,且有成功登录记录(重点查找事发时间段),在微步在线上查询该登录IP信息,如果为恶意IP且与用户常用IP无关,则很有可能为用户弱口令被成功爆破。

/var/log/其他日志说明:/var/log/message 一般信息和系统信息/var/log/secure 登陆信息/var/log/maillog mail记录/var/log/utmp

/var/log/wtmp登陆记录信息(last命令即读取此日志)

1、 lastlog 列出所有用户最近登录的信息

lastlog引用的是/var/log/lastlog文件中的信息,包括login-name、port、last login time

2、last 列出当前和曾经登入系统的用户信息

,它默认读取的是/var/log/wtmp文件的信息。输出的内容包括:用户名、终端位置、登录源信息、开始时间、结束时间、持续时间。注意最后一行输出的是wtmp文件起始记录的时间。当然也可以通过last -f参数指定读取文件,可以是/var/log/btmp、/var/run/utmp

语法:last [-R] [-num] [ -n num ] [-adiowx] [ -f file ] [ -t YYYYMMDDHHMMSS ] [name…] [tty…]

例子:last -x :显示系统关闭、用户登录和退出的历史

last -i:显示特定ip登录的情况

last -t 20181010120101: 显示20181010120101之前的登录信息

3、lastb 列出失败尝试的登录信息

和last命令功能完全相同,只不过它默认读取的是/var/log/btmp文件的信息。当然也可以通过last -f参数指定读取文件,可以是/var/log/btmp、/var/run/utmp

ssh安全配置

  1. 使用普通用户登录

创建普通用户
useradd -m 用户名

2.禁止root登录

打开 vim /etc/ssh/sshd_config

添加一行: PermitRootLogin no

no 不允许root登录
yes 允许root登录
without-password 仅允许密钥登录
forced-commands-only 仅允许执行命令

  1. 关闭X11和TCP端口转发

GetwayProts no
X11Forwarding no
AllowTcpForwarding no

4.禁用空密码登录

PermitEmptyPasswords no

5.使用ssh版本2

Include /etc/ssh/sshd_config.d/*.conf Protocol 2

6.使用密钥登录

7.限制登录、尝试次数

MaxAuthTries 3

  1. 连接ip限制

打开/etc/hosts.allow 文件,通过对此文件配置,控制特定ip登录

9.更改默认端口

posted @ 2022-08-04 12:59  灰色的修饰  阅读(1837)  评论(0编辑  收藏  举报