Ubuntu SSH端口转发实战:内网安全访问的必备技巧
发布时间: 2024-12-12 00:12:35 阅读量: 7 订阅数: 14
AHZY-内网安全攻防2020-01-12 内网安全攻防知识分享,
![Ubuntu的SSH远程连接设置](https://img-blog.csdnimg.cn/618016805da048d190b628c2449d71f9.png)
# 1. SSH端口转发基础和原理
## 1.1 什么是SSH端口转发
SSH端口转发是一种允许通过安全的SSH连接转发非SSH协议数据流的技术。它广泛应用于在安全网络与不安全网络之间,或者两个不直接相通的网络间传递数据。此功能使得用户可以安全地访问内网资源,即便身处外部网络。
## 1.2 端口转发的作用
端口转发通常用于以下情况:
- **内网穿透**:让外部设备能够访问内网服务。
- **绕过防火墙限制**:某些情况下,特定端口可能被封禁,通过SSH转发可以访问被限制的服务。
- **加密数据传输**:通过SSH隧道的数据会进行加密,确保传输过程的安全性。
## 1.3 端口转发的工作原理
SSH端口转发通过建立一个加密的SSH通道,并将特定端口上的数据流重定向到该通道。客户端或服务端通过本地或远程指定的端口发送数据,数据经过加密后通过SSH隧道传输到目标主机和端口,实现数据的安全传输。端口转发可分为本地转发和远程转发两种模式。
# 2. Ubuntu系统SSH端口转发设置
### 2.1 Ubuntu SSH基本配置
#### 2.1.1 SSH服务安装与启动
在Ubuntu系统中配置SSH服务是进行端口转发的前提。首先需要安装OpenSSH服务器软件包,然后启动SSH服务。以下是安装和启动SSH服务的步骤。
```bash
sudo apt update
sudo apt install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh
```
首先,我们使用`apt`命令更新包索引并安装OpenSSH服务器。安装完成后,使用`systemctl`命令来启用并启动SSH服务,确保它在系统重启后自动运行。
接下来,我们检查SSH服务的状态,以确保服务运行正常。
```bash
sudo systemctl status ssh
```
这条命令将显示SSH服务的状态,如果服务正在运行,它将输出服务的状态信息,如活动、进程ID等。
#### 2.1.2 SSH基本安全设置
安装和启动SSH服务后,接下来需要进行一些基本的安全设置。这通常包括修改SSH默认端口、禁用root登录等。
编辑SSH配置文件`/etc/ssh/sshd_config`:
```bash
sudo nano /etc/ssh/sshd_config
```
在该配置文件中,您可以修改如下设置:
- 修改默认端口(默认是22)到一个不常用的端口,比如2222,以减少未授权访问的尝试。
- 将`PermitRootLogin`设置为`no`,以禁止root用户直接通过SSH登录。
- 添加或修改`PasswordAuthentication`为`no`,仅允许密钥认证方式登录,增强安全性。
请记得每次修改`sshd_config`后,需要重启SSH服务以使更改生效:
```bash
sudo systemctl restart ssh
```
### 2.2 端口转发类型与选择
#### 2.2.1 本地端口转发
本地端口转发是在本地机器上创建一个监听端口,所有发送到该端口的请求都会被转发到指定的远程服务器上的特定端口。这对于访问被防火墙限制的远程服务非常有用。
本地端口转发的命令格式如下:
```bash
ssh -L local_port:localhost:remote_port remote_host
```
这里`local_port`是本地监听的端口,`remote_host`是远程服务器的地址,`remote_port`是远程服务器上的端口。
例如,如果您想要将本地的5000端口转发到远程服务器`example.com`的80端口,您将执行:
```bash
ssh -L 5000:localhost:80 example.com
```
这意味着所有通过本地机器上的5000端口发送的请求都会被转发到`example.com`的80端口。
#### 2.2.2 远程端口转发
远程端口转发与本地端口转发相反,它是在远程服务器上设置一个监听端口,所有发送到该端口的请求都会被转发到本地机器上的特定端口。这通常用于让远程用户能够访问本地服务。
远程端口转发的命令格式如下:
```bash
ssh -R remote_port:localhost:local_port local_host
```
这里`remote_port`是远程监听的端口,`local_port`是本地机器上的端口,`local_host`是本地机器的地址。
例如,如果您想要远程服务器能够访问本地机器上运行的SSH服务(默认22端口),您可以执行:
```bash
ssh -R 2222:localhost:22 your_remote_server
```
这样,远程服务器上任何通过2222端口发送的SSH请求都会被转发到本地机器的22端口。
#### 2.2.3 动态端口转发(SOCKS代理)
动态端口转发创建了一个动态的SOCKS代理,应用程序可以使用该代理连接到任何服务器。这在需要通过代理访问多个服务器时非常有用。
动态端口转发的命令格式如下:
```bash
ssh -D local_port remote_host
```
这里`local_port`是本地机器上将被用作SOCKS代理的端口。
例如,如果您想要设置一个本地的SOCKS代理,监听端口为1080,并通过远程服务器`example.com`转发,您可以执行:
```bash
ssh -D 1080 example.com
```
之后,您可以在浏览器或其它网络应用中配置使用127.0.0.1:1080作为代理服务器。
### 2.3 配置文件详解
#### 2.3.1 配置文件语法与结构
OpenSSH的配置文件`sshd_config`遵循特定的语法和结构,其中每一行可以是一个配置指令,或者一个注释(以`#`开头)。
配置指令的基本格式如下:
```
keyword value
```
其中`keyword`是配置项,而`value`是对应的值。有些配置项可以有多个值,而一些则需要布尔值(yes/no)。
#### 2.3.2 常用配置选项说明
以下是一些常用配置项的说明:
- `Port 2222`:设置SSH服务监听的端口为2222。
- `ListenAddress 127.0.0.1`:设置SSH服务只监听本地地址。
- `PermitRootLogin no`:禁止root用户通过SSH登录。
- `PasswordAuthentication no`:禁用密码认证,只允许密钥认证。
- `AllowUsers user1 user2`:仅允许`user1`和`user2`通过SSH登录。
- `PubkeyAuthentication yes`:启用公钥认证。
- `HostKey /etc/ssh/ssh_host_rsa_key`:指定主机密钥文件的位置。
请注意,对这些配置项的修改应谨慎进行,因为不当的设置可能导致SSH服务无法使用或产生安全漏洞。
| 配置项 | 说明 |
|-----------------------|--------------------------------------------------------------|
| Port 2222 | 设置SSH服务监听的端口为2222。 |
| ListenAddress 127.0.0.1| 设置SSH服务只监听本地地址。 |
| PermitRootLogin no | 禁止root用户通过SSH登录。 |
| PasswordAuthentication no| 禁用密码认证,只允许密钥认证。
0
0