我的电脑每 5 秒就会死机 1 秒。我发现是有人反复尝试通过 x11vnc 登录。
有什么方法可以让它拒绝来自某个 IP 地址的连接,在 3 次登录尝试失败后持续半小时?或者类似的东西?
编辑:
看起来这是 fail2ban 可以做的事情。但是 fail2ban 没有附带 x11vnc 的配置,所以一个好的答案是如何配置它。
登录失败的情况如下journalctl -u x11vnc
:
Jan 30 14:41:58 computername x11vnc[1686]: 30/01/2020 14:41:58 authProcessClientMessage: authentication failed from 176.113.115.244
答案1
有很多方法可以解决这个问题。这是我的解决方案。
停止所有连接,x11vnc
除了localhost
最简单的方法是从选项开始x11vnc
。-localhost
如果你设置x11vnc
为在启动时作为 systemd 服务启动,那么你将有一个文件/lib/systemd/system/x11vnc.service
,其中可能有一行如下内容:
ExecStart=/usr/bin/x11vnc -auth /var/run/lightdm/root/:0 -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pass -rfbport 5900 -shared -localhost
注意,最后一个选项是-localhost
。该选项表示x11vnc
将仅监听本地主机 IP 地址,即 127.0.0.1。此特殊 IP 地址始终指计算机本身。这意味着只有x11vnc
安装了 的计算机才能访问x11vnc
。其他计算机将需要x11vnc
使用 间接访问ssh tunnel
。
设置openssh-server
您需要openssh-server
在运行 的同一台计算机上运行。按++x11vnc
打开终端并输入命令:CtrlAltT
sudo apt install openssh-server
这将安装 ssh 服务器。请参阅配置 ssh 服务器有关安全信息的说明。我建议您启用基于密钥的登录并禁用基于密码的登录ssh
。
设置ufw
和fail2ban
ufw
在Ubuntu中已经安装但可能没有启用,在终端中输入以下两个命令:
sudo ufw enable
sudo ufw allow ssh
启用ufw
并允许ssh
来自其他计算机的连接。如果您已经ufw
启用并设置了允许x11vnc
连接的规则,您可能需要删除这些规则。
同样地安装和配置fail2ban
。按照以下任一步骤操作教程fail2ban
关于如何配置ssh
。
如果您在路由器后面......
并已为端口 5900 设置端口转发(或类似端口),现在是时候更改它了。您想将该规则更改为端口 22,以便ssh
转发 的连接请求,而不是 的连接请求x11vnc
。
注意,端口 5900 和 22 是各自服务的默认端口vnc
,ssh
如果您更改了默认值,则需要进行相应的调整。
现在如何进行远程连接x11vnc
?
我们已经完成了计算机运行的设置x11vnc
。现在我们需要对用于远程连接到此计算机的计算机进行一些更改。
注意:此行以下的所有更改和命令均针对用于连接到 x11vnc 的客户端计算机。我将这台计算机称为笔记本电脑。
ssh
通过命令行使用隧道:
在终端使用以下命令
ssh user@host -L 5900:localhost:5900
其中,user
是运行计算机的用户名x11vnc
,host 是该计算机的主机名或 IP 地址。只要您想保持与主机的远程连接,此命令就必须继续运行。运行时请勿关闭终端。
如果您尚未将x11vnc
服务器设置为在启动时启动,则可以设置ssh tunnel
并使用相同的命令x11vnc
在远程计算机中启动服务器。如果您想这样做,请使用以下命令:
ssh user@host -L 5900:localhost:5900 x11vnc -localhost
当其中一个命令在笔记本电脑的终端中运行时,像往常一样运行用于连接远程计算机的应用程序。
如果您使用Remmina
连接到 x11vnc 服务器,请忽略此命令行部分并继续阅读。
设置 Remmina
如果您使用 Ubuntu 笔记本电脑进行远程连接,x11vnc
那么您可能会使用名为 的应用程序Remmina
。此应用程序具有内置功能ssh tunnel
,因此您无需打开终端并输入命令。
编辑您在 Remmina 中为远程连接设置的 VNC 连接的设置,然后转到SSH Tunnel如下所示的选项卡:
确保已启用/选中以下内容:
- 启用 SSH 隧道
- 通过环回地址建立隧道
- 同一服务器,端口 22
如上图所示。保存新的 Remmina 设置并尝试连接。如果一切顺利,只有您能够连接到您的x11vnc
服务器,而其他人则无法连接到。
从 Android 连接
x11vnc
OP在评论中询问了如何通过 Android 手机/平板电脑连接远程计算机。
bVNC
在 Android 设备上安装和设置
bVNC
可在 Google Play 商店中下载。
bVNC
首次打开时,您会看到一些权限要求。查看它们并决定是否要接受它们。然后您将看到一页功能列表。按下Close页面右下角的按钮进入设置页面。
更改连接类型基本 VNC>通过 SSH 保护 VNC您将看到以下屏幕:
填写设置如下:
- 连接类型:通过 SSH 保护 VNC(如上所述)
- 标题:给它一个有意义的名称,表明该连接适用于哪台计算机。
SSH 隧道设置
- SSH 服务器:这是计算机的 IP 地址或主机域名
x11VNC
。这是您在基本 VNC 设置中输入的服务器地址。 - 22:默认
ssh
端口预填为 22。仅当您openssh-server
在运行的计算机中更改了默认设置时才更改它x11VNC
。 x11VNC
SSH 用户名:这是您在计算机前运行计算机时使用的登录用户名。x11VNC
SSH 密码:这是您在计算机前运行时登录计算机时使用的密码。- SSH 密码:仅当您在生成私钥-公钥对时设置了密码时才需要此项。私钥-公钥对可以代替上面的 SSH 密码。
- 使用密钥:这告诉
bVNC
使用私钥-公钥对而不是用户密码。 - 管理密钥:此按钮将带您进入另一个页面,您可以在其中生成私钥-公钥对并共享公钥,以便将其添加到运行的计算机中的“授权密钥”集合中
x11VNC
。仅当您选中复选框时才需要执行此操作使用密钥。 - 配置 AutoX:已禁用。保持原样。
VNC 连接设置
- 本地主机:保持原样。
- 5900:保持原样,除非您更改了运行的计算机中的默认 VNC 端口
x11VNC
。 x11VNC
VNC 用户名(可选):如果您在配置中设置了用户名,请添加用户名。x11VNC
VNC 密码:如果您已在配置中设置了 VNC 密码,请在此处添加。- 保留:选中此框可以将 VNC 密码保存在 中
bVNC
。
设置完成后,bVNC
您应该能够连接到x11VNC
从 Android 设备运行的远程计算机。
在bVNC
ssh-server
如果你在运行的计算机中设置了x11VNC
仅使用基于密钥的登录,那么你将无法在SSH 密码以上。在这种情况下,您需要勾选使用密钥并使用管理密钥按钮上面生成并以某种方式获取公钥到运行的计算机中的正确文件夹和文件x11VNC
。
按管理密钥按钮来查看以下窗口:
首先,您需要生成一个新的私钥-公钥对。按生成新密钥按钮,然后保持 Type 为RSA。默认的位大小 2048 应该没问题。
您将被要求在 Android 屏幕上移动手指一段时间,为随机数生成器生成熵,然后生成密钥。
您需要x11VNC
通过以下三个按钮列出的三种方式之一将公钥发送到您的计算机:
- 分享公钥
- 复制到剪贴板
- 将公钥保存到文件
第一个可能是最简单的。单击“共享公钥”按钮并选择 Gmail(或您使用的任何电子邮件),然后将其发送给自己。
您还可以指定文件名,例如,rsa.pub
然后单击将其发送到文件按钮,然后将该文件作为附件发送给您自己。
要将公钥导入计算机,您必须物理(本地)登录该计算机。
检查您的主文件夹中是否已有该文件夹/home/$USER/.ssh
,如果已有,则检查是否已有一个名为的文件/home/$USER/.ssh/authorized_keys
。在终端中使用以下命令:
ls ~/.ssh
如果您看到文件夹的内容,authorized_keys
则说明您拥有它们。
如果您已有该文件,authorized_keys
则需要将公钥的内容添加到该文件中。在文本编辑器中打开该文件,并rsa.pub
在另一个编辑器窗口中打开通过手机通过电子邮件发送的已保存文件,然后将内容从一个文件复制到另一个文件,并附加在末尾authorized_keys
。
如果您没有该authorized_keys
文件和.shh
文件夹,请使用以下命令来创建它们:
mkdir -p /home/$USER/.ssh && touch /home/$USER/.ssh/authorized_keys
然后将其内容复制并粘贴到您选择的文本编辑器rsa.pub
中。authorized_keys
如果您刚刚创建了这些文件夹和文件,则需要更改文件夹和文件的权限,以便只有您可以读取它们。使用以下命令更改权限。注意:ssh
如果文件夹和文件没有严格权限,服务器将不会读取文件。这是一项安全措施。
chmod 700 /home/$USER/.ssh && chmod 600 /home/$USER/.ssh/authorized_keys
注:您可以将其替换$USER
为您在运行的计算机中的登录名x11VNC
。
测试是否可以从登录bVNC
使用密钥登录而无需使用SSH 密码。
确定基于密钥的身份验证正常工作后,请禁用基于密码的身份验证ssh
按照以下问题的答案禁用基于密码的登录:在 ssh 中禁用密码验证
希望这可以帮助