TigerVNCを使用してLinuxでVNCサーバーを構成および保護する方法は?(画面のないサーバーまたはクラシックマシンで)
VNCサーバー(TigerVNC)構成は、ほとんどのLinuxディストリビューションで同じであるため、インストール方法のみが異なります。この質問は、OpenSUSE、Fedora、CentOS、RHEL、Debian、Mageia、Void Linux、Arch Linux、Manjaro、およびFreeBSD(より多くの人に役立つように)
答え1
VNCサーバーのインストール
Linux(クラシックシステムまたはスクリーンレスサーバー)には、TightVNC、TigerVNC、およびTurboVNCなどのVNCサーバーのさまざまな(オープンソース)可能性があります(これは完全なリストではなく、このガイドではTigerVNCのデフォルトバージョンを使用します)。
- TigerVNCサーバー:ネイティブまたはJavaコードを使用し、積極的に維持されています。
- TurboVNCサーバー:Java専用、積極的に管理されています。
- TighVNCサーバー:2020年現在のLinuxバージョンは2009年v1.3.10です。
まず、デスクトップ(XFCEやKDEなど)が必要です。
# OpenSUSE (XFCE)
zypper in -t pattern xfce
# OpenSUSE (KDE)
zypper install -t pattern kde kde_plasma
# Fedora/OpenSUSE (XFCE)
dnf groupinstall -y "Xfce Desktop"
# Fedora/OpenSUSE (KDE)
dnf -y group install "KDE Plasma Workspaces"
# CentOS/RHEL (Gnome)
dnf -y group install "Server with GUI"
# CentOS/RHEL (XFCE)
dnf --enablerepo=epel group -y install "Xfce" "base-x"
# CentOS/RHEL (KDE)
dnf --enablerepo=epel group -y install "KDE Plasma Workspaces"
# CentOS v8 (KDE)
dnf --enablerepo=epel,PowerTools
dnf -y group install "KDE Plasma Workspaces" "base-x"
# Debian (XFCE)
apt install task-xfce-desktop
# Debian (KDE)
apt install task-kde-desktop
# Mageia (XFCE)
dnf install task-xfce
# Mageia (KDE)
dnf install task-plasma5
# FreeBSD (XFCE)
pkg install xfce
# FreeBSD (KDE)
pkg install x11/kde5
# Void Linux (XFCE)
xbps-install -S xfce4
# Void Linux (KDE)
xbps-install -S kde5
# and optionally, kde5-baseapps
# Arch Linux (XFCE)
pacman -S xfce4 xfce4-goodies
# Arch Linux (KDE)
pacman -S plasma-desktop
# or plasma for the full desktop
# pacman -S plasma
# Manjaro (XFCE)
pacman -S xfce4-gtk3 xfce4-goodies xfce4-terminal \
network-manager-applet xfce4-notifyd-gtk3 \
xfce4-whiskermenu-plugin-gtk3 tumbler engrampa
# Manjaro (KDE)
pacman -S plasma kio-extras
# optional kde-applications
TigerVNC Xサーバーをインストールします。
# The package name may change depending on the used distro
# CentOS
yum install tigervnc-server
# Mageia/Fedora/CentOS/RHEL
dnf install tigervnc-server
# ALT Linux
apt install tigervnc-server
# openSUSE DNF
dnf install xorg-x11-Xvnc
# openSUSE
zypper install xorg-x11-Xvnc
# Debian
apt install tigervnc-standalone-server tigervnc-common
# FreeBSD
pkg install tigervnc-server
# Void Linux
xbps-install -S tigervnc
# Arch Linux
pacman -S tigervnc
# Manjaro
pacman -S tigervnc
設定と構成
パスワード設定(ハッシュされたバージョンはに保存されています~/.vnc/passwd
):
vncpasswd
設定ファイル(サーバーの起動時に実行される起動スクリプト)を~/.vnc/xstartup
次のように編集します。
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec startxfce4
# XFCE: startxfce4 or xfce4-session
#exec startxfce4
#exec xfce4-session
# KDE: startkde or startplasma-x11
#exec startkde
#exec startplasma-x11
# Gnome: startx
#exec startx
VNCサーバーの構成ファイルを準備および/または見つけます。
~/.vnc/config or /etc/vnc/config
設定ファイルを使用してVNCサーバーの設定を調整します...利用可能な利用可能なオプションの完全なリストについては、Xvnc -help
次のman Xvnc
設定例を参照してください。geometry
(Suse VNCなどの一部のシステムでは、このオプションが設定されていないと機能しない可能性があります。):
## Supported server options to pass to vncserver upon invocation can be listed
## in this file. See the following manpages for more: vncserver(1) Xvnc(1).
## Several common ones are shown below. Uncomment and modify to your liking.
##
##
# -------------
# Xvnc --help
# -------------
##
# Start server : vncserver
# Stop server : vncserver -kill :1
##
###############################################################################
# Only allow connection from local hosts
#localhost
# VNC tcp port
rfbport=5900
# TCP port to listen for HTTP (default=0)
httpport=0
# Directory containing files to serve via HTTP (default=)
httpd=
# Protocols...
#nolisten=UDP
#listen=TCP
# IP settings
useipv4
#useipv6
# Interface, listen on the specified network address (default=all)
#interface=127.0.0.1
# Use protocol version 3.3 for backwards compatibility
protocol3.3=0
# Unix socket access mode (default=384)
#rfbunixmode=384
# Unix socket to listen for RFB protocol (default=)
rfbunixpath=
# Name of VNC desktop
desktop=MyVNC
# Geometry original peppy
geometry=1366x768
# Colors
depth=24
# Sharing with multiple clients
#alwaysshared
nevershared
# Disconnect existing clients if an incoming connection is non-shared.
# If combined with NeverShared then new connections will be refused while
# there is a client active
disconnectclients
# Security, specify which security scheme to use (None, VncAuth, Plain,
# TLSNone, TLSVnc, TLSPlain, X509None, X509Vnc, X509Plain) (default=TLSVnc,VncAuth)
securitytypes=TLSVnc,VncAuth
# Path to the key of the X509 certificate in PEM format (default=)
#X509Key=
# Path to the X509 certificate in PEM format (default=)
#X509Cert=
# Set maximum number of clients (power of two)
#maxclients=64
# Terminate after s seconds of user inactivity (default=0)
#maxidletime=0
# Terminate when a client has been connected for s seconds (default0)
#maxconnectiontime=0
# Terminate when no client has been connected for s seconds (default=0)
#maxdisconnectiontime=0
# The number of seconds after which an idle VNC connection will be dropped
# (zero means no timeout) (default=0)
#idletimeout=0
# Zlib compression level (default=-1)
#zlibLevel=-1
# The maximum number of updates per second sent to each client (default=60)
#framerate=60
# GnuTLS priority string that controls the TLS session’s handshake algorithms.
# See the GnuTLS manual for possible values. Default is NORMAL.
#GnuTLSPriority=
VNCサーバーは、次のコマンドを使用して開始/停止でき、VNCクライアントを使用してサーバーに接続できます。server-ip:used-port
(ファイアウォールで使用されているポートを開く必要があるかもしれません。)
# Start the server
vncserver
# Stop the server :1
vncserver -kill :1
# Forcing multiple server to stop
killall Xvnc
安全
デフォルトのVNC設定は、交換されたストリームに暗号化を使用しません。 VNC接続を保護する4つの一般的な方法は次のとおりです。
X509証明書の使用:証明書の場所を構成ファイルに追加し、クライアントでも認証する必要があります(クライアントアプリケーションでの場所の設定)。 X509 証明書の生成については、後で詳しく説明します。
SSHセッションによるVNCトンネルの設定SSH セッションによって提供されるローカル sock プロキシを使用します。サーバーで編集
/etc/ssh/sshd_config
および有効化/追加したAllowTcpForwarding yes
後、sshdサービスを再起動した後、次のオプションをsystemctl restart sshd.service
使用できます。vncviewer
-via
またはトンネル接続を手動で設定した後、クライアントを使用して接続し、次に
ssh serverIP -p 22 -i /home/my/private/key -L 5900:127.0.0.1:5900 -C -N
VNCクライアントを使用して接続します。127.0.0.1:5900
サーバーでvncviewerを実行し、クライアントに対応するxウィンドウを表示します。SSH Xを介したセッション転送:サーバーで編集
/etc/ssh/sshd_config
および有効化/追加し、X11Forwarding yes
sshdサービスを再起動しますsystemctl restart sshd.service
。
SSHセッション(サーバーのSSHシェル)を介して実行すると、vncviewer :1
クライアントにvncviewerウィンドウが表示されます。VPN接続を介してVNCトンネルを確立します。この内容はここでは扱いません。
システムサービスとしてのVNC
VNCサーバーは、次の構成ファイルを介してSystemd用のサービスとして使用できます/etc/systemd/system/vncserver.service
。サービスを有効にすると、システムのsystemctl enable vncserver.service
起動時に自動的に開始されます(Void LinuxまたはSystemdのないLinuxディストリビューションには適用されません)。
# /etc/systemd/system/vncserver.service
[Unit]
Description=TigerVNC Server
After=syslog.target network.target
[Service]
Type=simple
#Type=forking
User=MY-USER
Group=MY-USER-GROUP
#If ran with root
#WorkingDirectory=/root
#PIDFile=/root/.vnc/%H%i.pid
#If ran with any other user
WorkingDirectory=/home/MY-USER
PIDFile=/home/%u/.vnc/%H%i.pid
#Environment is required when using a custom GnuTLS version
#Environment=LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
#ExecStart for forking type version
#ExecStart=/usr/bin/vncserver
ExecStart=/usr/bin/vncserver -fg
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
X509証明書の生成
簡単なセキュリティ設定のために、次のようにします。公式wikiフォローできます。それ以外の場合、これは簡単なトピックではありません。このタイプの暗号化の詳細については、このセクションのドキュメント/リンクを参照してください。簡単に言えば、ドキュメント/リンクによると、2020年現在のほとんどのセキュリティキーは、キーサイズが大きい(最小4096ビット)RSAです。EdDSAEd25519実装は、SHA-512(SHA-2)およびCurve25519(128ビットセキュリティを提供する楕円曲線)を使用するEdDSA署名方式です。 Ed25519抵抗器は、3072ビットキーを持つRSAと同じです。 (またはSHAKE256(SHA-3)およびCurve448を使用するEdDSA署名方式であるEdDSAのED448があります。これは、〜12448ビットキーを使用するRSAと同じで、更新されたOpenSSLインストールが必要です。)
CA用RSA-4096-Bits/Ed25519/ED448秘密鍵を生成します。
Ed25519およびED448には、最新バージョンのOpenSSLおよびGnuTLSが必要です(次のセクションを参照)。
mkdir ~/.vnc/ssl
# Generate an RSA 4096-bits key
openssl genrsa -out ~/.vnc/ssl/ca.private.rsa.4096.key.pem 4096
#
# genrsa is superseded by genpkey (PKCS#1 vs PKCS#8 format), the following command is similar to the previous one.
# openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out ~/.vnc/ssl/ca.private.rsa.4096.key.pem
# Or an ED25519 key (equivalent to an RSA with a 3072-bits key, updated openssl required)
openssl genpkey -algorithm ED25519 -out ~/.vnc/ssl/ca.private.eddsa.ed25519.key.pem
# Or an ED448 key (equivalent to an RSA with a ~12448-bits key, updated openssl required)
openssl genpkey -algorithm ED448 -out ~/.vnc/ssl/ca.private.eddsa.ed448.key.pem
前の手順はパスワードでキーを保護することでより安全な方法で実行できますが、TigerVNCはそれをサポートしません。
新しく作成されたキーの確認/表示(必須ではありません):
openssl pkey -in ~/.vnc/ssl/ca.private.rsa.4096.key.pem -text
# or
openssl pkey -in ~/.vnc/ssl/ca.private.eddsa.ed25519.key.pem -text
# or
openssl pkey -in ~/.vnc/ssl/ca.private.eddsa.ed448.key.pem -text
署名CAを作成し、2年間有効にし、サーバーIPを追加します(必須、88.44.88.33
IPに変更)。
# RSA 4096-bits
openssl req -new -x509 -days 730 -key ~/.vnc/ssl/ca.private.rsa.4096.key.pem -out ~/.vnc/ssl/ca.sign.rsa.4096.key.pem -subj '/CN=88.44.88.33' -addext "subjectAltName=IP:88.44.88.33"
#Or ED25519
openssl req -new -x509 -days 730 -key ~/.vnc/ssl/ca.private.eddsa.ed448.key.pem -out ~/.vnc/ssl/ca.sign.eddsa.ed448.key.pem -subj '/CN=88.44.88.33' -addext "subjectAltName=IP:88.44.88.33"
# Or ED448
openssl req -new -x509 -days 730 -key ~/.vnc/ssl/ca.private.eddsa.ed448.key.pem -out ~/.vnc/ssl/ca.sign.eddsa.ed448.key.pem -subj '/CN=88.44.88.33' -addext "subjectAltName=IP:88.44.88.33"
X509を使用するようにサーバー構成を更新します。
# Security, specify which security scheme to use (None, VncAuth, Plain,
# TLSNone, TLSVnc, TLSPlain, X509None, X509Vnc, X509Plain) (default=TLSVnc,VncAuth)
securitytypes=X509Vnc
# Path to the key of the X509 certificate in PEM format (default=)
X509Key=/home/USER/.vnc/ssl/ca.private.eddsa.ed448.key.pem
# Path to the X509 certificate in PEM format (default=)
X509Cert=/home/USER/.vnc/ssl/ca.sign.eddsa.ed448.key.pem
TigerVNCビューアとの接続:
ca.sign.eddsa.ed448.key.pem
クライアントにコピー- TigerVNCビューアのオプション>セキュリティの暗号化セクションで、
TLS with X509 certificates
それを選択したままにしてパスをオンにca.sign.eddsa.ed448.key.pem
設定しますPath to X509 CA certificate
(CRLセクションを空白のままにします)。 - [認証]セクションで、次のものを選択してください。
Standard VNC
GnuTLSセッションのハンドシェイクアルゴリズムの確認
TigerVNCは暗号化にGnuTLSを使用し、サーバー/クライアントでTLSセッションハンドシェイクアルゴリズムを制御する優先順位文字列を設定しますGnuTLSPriority
(TLS1.0/TLS1.1/TLS1.2/TLS1.3/etc。サポートアルゴリズムリスト可能)。gnutls-cli --list
たとえば、次のコマンドを使用してTLS v1.2サポートをテストできます。
vncviewer GnuTLSPriority=NORMAL:-VERS-ALL:+VERS-TLS1.2 -log='*:stdout:100'
サーバー構成ファイルにTLS v1.2 / v1.3を適用する方法は次のとおりです。
# GnuTLS priority string that controls the TLS session’s handshake algorithms.
# See the GnuTLS manual for possible values. Default is NORMAL.
# Only TLS v1.2
#GnuTLSPriority=NORMAL:-VERS-ALL:+VERS-TLS1.2
# Only TLS v1.3
GnuTLSPriority=NORMAL:-VERS-ALL:+VERS-TLS1.3
# Verifying if only TLS v1.2/v1.3 policy is working with the following
# vncviewer GnuTLSPriority=NORMAL:-VERS-TLS1.2 -log='*:stdout:100' # v1.2
# vncviewer GnuTLSPriority=NORMAL:-VERS-TLS1.3 -log='*:stdout:100' # v1.3
# This mean use all but v1.2/v1.3 to test if the setting is enforced correctly,
# and thus the connection will be refused for handshake algorithm mismatch.
# Other example of gnutlspriority values (warning, this is just for the syntax)
#GnuTLSPriority=NORMAL:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1:-VERS-TLS1.3
#NORMAL:+SECURE128:-SHA384:-SHA256:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1
#NORMAL:+VERS-TLS1.2:+VERS-TLS1.3:+AES-128-CBC:+RSA:+SHA1:+COMP-NULL
OpenSSLとGnuTLSのアップデート
OpenSSLとGnuTLSは、ほとんどのLinuxシステムの2つの主要なアプリケーション/ライブラリです。手動で更新すると、自動的に更新されなくなり、セキュリティ上の問題が発生する可能性があります。これを制限するために、特別な目的に合わせてカスタムバージョン(TigerVNC)を使用してこれを行うことができます。効果。
vncviewer
Ed25519/ED448 キーを生成するには最新の OpenSSL バージョンが必要であり、(クライアント ビューア)/Xvnc (TigerVNC サーバー) では Ed25519/ED448 アルゴリズムのサポートを追加するには GnuTLS が必要です。
現在サポートされているアルゴリズムを確認してください。
#GnuTLS
gnutls-cli --list | grep EdDSA
#OpenSSL
man -P cat genpkey | grep "Valid built-in algorithm"
openssl list -public-key-algorithms | grep ED
#If EdDSA targeted algorithm is supported there is no need to install from sources
OpenSSLの構築、インストール、使用:
wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
tar -xvf openssl-1.1.1g.tar.gz
cd openssl-1.1.1g/
./config no-nextprotoneg no-weak-ssl-ciphers no-ssl3 no-shared -DOPENSSL_NO_HEARTBEATS -fstack-protector-strong enable-tls1_3
make install -j2
# After install, OpenSSL can be used
# for instance as follow to generate the needed key
/usr/local/bin/openssl genpkey -algorithm ED448 -out ~/.vnc/ssl/ca.private.eddsa.ed448.key.pem
GnuTLSを構築、インストール、使用します。
wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.6/gnutls-3.6.14.tar.xz
tar -xvf gnutls-3.6.14.tar.xz
cd gnutls-3.6.14/
./configure --without-tpm --disable-tests --disable-full-test-suite --disable-non-suiteb-curves --disable-ssl2-support
make install -j2
# This is required for Xvnc and vncviewer, after install can be used
# by setting LD_LIBRARY_PATH before running vncviewer or Xvnc,
# like the following example
# TigerVNC Server
export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib
vncserver
# TigerVNC Viewer
env LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib vncviewer
# To check the used version we can use ldd for instance
ldd /usr/bin/vncviewer
実験ノート
TigerVNCサーバーでKDEを使用しているときにサーバーを複数回停止/起動すると、一部のXアプリケーションは引き続き実行されます。このシステム問題、修正次のスクリプトを使用してサーバーを停止し(systemdサービスプロファイルでも機能します)、ps aux | sort | grep USER-NAME | grep -v '\['
コマンドを使用してサーバーを停止した後でもまだ実行中のエントリがあることを確認できます。
#cat /usr/bin/vncserver-stop (this is meant for KDE)
#!/bin/sh
vncserver -kill :0
vncserver -kill :1
vncserver -kill :2
vncserver -kill :3
killall Xvnc -9
killall kwin_x11 -9
killall startplasma-x11 -9
killall plasma_session -9
killall Xvnc -9
killall kwin_x11 -9
killall startplasma-x11 -9
killall plasma_session -9
ビューアで複数のテストを経て得られた最高速度性能vncviewer -QualityLevel=4 -CompressLevel=2 -PreferredEncoding=Raw
サーバーをインターネットに公開する必要がある場合、VNCサーバーはnmapスキャン(nmap -sV -sC TARGET-IP
)を介して簡単に検索でき、VNCプロトコルは独自に宣言する必要があるため、サーバーとクライアントのカスタムバージョンを作成する必要はありません。サーバーがグローバルインターネットにさらされている場合に実行できます。 VNCサーバーを難読化します。