在 Windows 10 服务器上设置我的 OpenSSH 服务器以暴露给 WAN。(到目前为止,它只是在 LAN 上使用)。
我想要实现的目标:
当连接来自互联网时,只应允许 1 个特定用户 ( remoteuser
)。从互联网连接的用户应该被允许执行很少的操作:仅将 TCP 端口转发到某些特定主机(请参阅我的PermitOpen
指令),无 shell 访问,无 SFTP,无我可能从未听说过的任何其他功能。
然后,我使用了一个Match
块来匹配来自我的安全 LAN 的连接。对于这些,安全性应该更宽松。允许密码验证,允许更多用户(尽管sftpuser1
应该仅限于 SFTP)等。
问题: 我的 Match 块会按预期工作吗?这是实现我目标的有效方法吗?此外,是否还有其他我不知道的功能需要为互联网客户端禁用(除了 shell、SFTP、X11 转发之外)?
到目前为止的配置:
Port 22
AddressFamily inet #IPv4 only
ListenAddress 10.10.10.15 #Listen on servers LAN IP
Protocol 2
TCPKeepAlive yes
HostKey __PROGRAMDATA__/ssh/ssh_host_rsa_key
HostKey __PROGRAMDATA__/ssh/ssh_host_dsa_key
HostKey __PROGRAMDATA__/ssh/ssh_host_ecdsa_key
HostKey __PROGRAMDATA__/ssh/ssh_host_ed25519_key
RekeyLimit 1G
#SyslogFacility AUTH # LOCAL0 - Logs to %programdata%\ssh\logs, AUTH - Logs to event viewer
LogLevel DEBUG
LoginGraceTime 1m
StrictModes yes
MaxAuthTries 3
MaxStartups 3:50:10
# SET TO 0 ON WAN TO DISABLE ALL BUT TUNNELS. INCREASED FOR LAN CONNECTIONS
MaxSessions 0
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
AuthorizedKeysFile __PROGRAMDATA__/ssh/keys/%u/authorized_keys #Where to look for keys for each user.
AllowUsers remoteuser (Allow only one port forwarding user for access from WAN)
X11Forwarding no
AllowTcpForwarding yes
PermitOpen ws1.internal:80 ws2.internal:80 #Only allow forwards to certain hosts & ports.
Match Address 10.10.10.0/24, 10.10.20.0/24
LoginGraceTime 1m
MaxAuthTries 5
MaxStartups 10
MaxSessions 5
PubkeyAuthentication yes
PasswordAuthentication yes
AllowUsers john sftpuser1
Match User sftpuser1
ChrootDirectory E:\
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
ForceCommand internal-sftp -d /%u
说明:我的目标是 - 向 WAN 和 LAN 开放 SSH 服务器。当连接来自 WAN(即源 IP 不是我的 LAN 之一)时,只remoteuser
允许连接(AllowUsers remoteuser
),并且只能使用 TCP 转发。当连接来自 LAN 时,用户john
和sftpuser1
被允许连接,并且他们可以使用 shell 访问、SFTP 等功能。
因此基本上尝试运行一个启用了最少功能的强化 WAN 配置和一个更为宽松的仅限本地配置,而无需运行两个单独的实例sshd
。
编辑:刚刚发现这个资源在一定程度上有助于 Match 语句......
一些进展:
经过一些测试后,我必须:
LoginGraceTime
&指令,因为抱怨说 Match 块中不允许使用这些指令。MaxStartups
sshd.exe
Subsystem sftp sftp-server.exe
以允许 SFTP 运行。除了这些点之外,Match 块似乎确实有效,并且我有一个针对非本地 LAN(即互联网)连接的强化服务器,仅允许 TCP 转发,同时对 LAN 上的客户端更加宽容。(允许密码验证、允许 shell 和 SFTP 等)。
我要指出的是,我发现如果每个用户的密钥文件权限错误,他们的密钥将被拒绝,而日志等中没有明显的问题迹象。由于我为密钥指定了不同的路径(不在用户主目录中),对于每个用户文件夹,我将所有者设置为
SYSTEM
,并且只有SYSTEM
用户自己对其文件夹具有任何权限。这似乎有效。