Создание внешнего интерфейса HTML 5 RDP / SSH с использованием гуакамоле в Ubuntu 16.04 LTS

Вступление

Цель этого руководства - избавиться от общедоступных соединений SSH и RDP. Разместив все это за очень удобным клиентом HTML5, мы можем добавить уровень безопасности для доступа к нашему облаку.

Гуакамоле также регистрирует любой удаленный доступ, поэтому несанкционированный доступ становится намного более отслеживаемым.

Примечание. Для шифрования Let's (опция B) нам нужно доменное имя. Если у вас нет, вы можете пропустить этот шаг и просто выполнить вариант А .

Шаг 1 - Подготовка системы

Начните с раскрутки VPS в нужной вам зоне Vultr. 1024 MBVPS будет достаточно, так как гуакамол не так требовательна.

Включение частного IP

Начните с включения частной сети на VPS. Это хорошо документировано здесь

Подготовка брандмауэра

Сначала давайте немного укрепим изображение. И давайте проверим, было ли ufwвключено предоставленное изображение.

root@vultr:~# ufw status
Status: inactive

По умолчанию он отключен, поэтому нам нужно добавить несколько правил.

  • Правило 1: ssh: TCP-порт 22
  • Правило 2: http: TCP-порт 8080 (правило временного тестирования для гуакамоле)

Давайте начнем с настройки этих портов.

ufw allow 22/tcp
ufw allow 8080/tcp

Далее включите брандмауэр.

ufw enable

Не беспокойтесь, если получите предупреждение. Если вы добавили порт 22, у вас не возникнет никаких проблем.

root@vultr:~# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

После включения запросите состояние брандмауэра, и мы увидим конфигурацию нашего порта.

ufw status

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
8080/tcp                   ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
8080/tcp (v6)              ALLOW       Anywhere (v6)

Шаг 2 - Установка гуакамоле

Установка всех зависимостей

Прежде чем мы начнем установку, нам нужно обновить и обновить репозиторий. С такими пакетами, как Tomcat, например , на Java, существует постоянный поток обнаруженных ошибок и связанных с ними исправлений. Обычно хорошей идеей будет сделать это сначала, а не торопиться прямо в нашу установку.

apt-get update
apt-get -y upgrade 

Далее следуют все зависимости. У гуакамоле их немало. (Полный список зависимостей и их функции можно найти здесь ). Давайте продолжим, установив их все.

apt-get -y install build-essential tomcat8 freerdp libcairo2-dev libjpeg-turbo8-dev libpng12-dev libossp-uuid-dev libavcodec-dev libavutil-dev libfreerdp-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvorbis-dev libwebp-dev mysql-server mysql-client mysql-common mysql-utilities libswscale-dev libvncserver-dev libpulse-dev libssl-dev

Когда установщик запрашивает пароль root для MySQL, укажите его и обязательно примите к сведению. Позже мы будем использовать этот пароль для создания базы данных гуакамоле.

Скачивание гуакамоле

Теперь, когда у нас есть все наши зависимости, мы можем продолжить скачивание гуакамоле. Сам гуакамоле поставляется в основном в исходной форме, а не в двоичном виде. Сначала мы переместимся в /tmpпапку, чтобы не загромождать другие части диска. Затем загрузите весь исходный код.

Есть четыре исходных / двоичных файла для скачивания:

  • guacamole-0.9.13-incubating.war: Это веб-приложение. WARФайл является Молнии веб - пакет обеспечения единого веб - сайта , размещенного на веб - сайте Tomcat
  • guacamole-server-0.9.13-incubating.tar.gz: Этот файл будет предоставлять бэкэнд- guacdприложение. Это создает потоки через RDP и SSH.
  • guacamole-auth-jdbc-0.9.13-incubating.tar.gz: Мы будем использовать локальную базу данных MySQL, поэтому нам нужен соответствующий JDBCсоединитель.
  • mysql-connector-java-5.1.43.tar.gzБез драйвера базы данных коннектор JDBC ничего не делает. Этот файл предоставлен командой MySQL.

Примечание: загрузка разрешена на ближайший сервер .

cd /tmp
wget http://apache.belnet.be/incubator/guacamole/0.9.13-incubating/binary/guacamole-0.9.13-incubating.war
wget http://apache.cu.be/incubator/guacamole/0.9.13-incubating/source/guacamole-server-0.9.13-incubating.tar.gz
wget http://apache.cu.be/incubator/guacamole/0.9.13-incubating/binary/guacamole-auth-jdbc-0.9.13-incubating.tar.gz
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.43.tar.gz

Как только мы загрузим все эти файлы, распакуйте файлы tar.gz.

tar -xzvf guacamole-server-0.9.13-incubating.tar.gz
tar -xzvf guacamole-auth-jdbc-0.9.13-incubating.tar.gz
tar -xzvf mysql-connector-java-5.1.43.tar.gz

Компиляция гуакамоле

Теперь, когда мы извлекли весь исходный код, давайте создадим несколько guacamoleпапок, которые будут использоваться приложением гуакамоле и его зависимостями.

mkdir -p /etc/guacamole/lib
mkdir -p /etc/guacamole/extensions

Все готово для наших новых бинарных файлов гуакамоле. Теперь мы можем начать процесс компиляции и установки. Перейдите к извлеченной папке сервера гуакамоле.

cd /tmp/guacamole-server-0.9.13-incubating

Сконфигурируйте приложение, чтобы также создать init.dфайл для запуска его в качестве службы позже.

./configure --with-init-dir=/etc/init.d

Команда должна заканчиваться «да» во всех библиотеках и протоколах. Если нет, вернитесь и проверьте команду apt-get, чтобы убедиться, что вы не пропустили ни одного пакета.

------------------------------------------------
guacamole-server version 0.9.13-incubating
------------------------------------------------

   Library status:

     freerdp ............. yes
     pango ............... yes
     libavcodec .......... yes
     libavutil ........... yes
     libssh2 ............. yes
     libssl .............. yes
     libswscale .......... yes
     libtelnet ........... yes
     libVNCServer ........ yes
     libvorbis ........... yes
     libpulse ............ yes
     libwebp ............. yes

   Protocol support:

      RDP ....... yes
      SSH ....... yes
      Telnet .... yes
      VNC ....... yes

   Services / tools:

      guacd ...... yes
      guacenc .... yes

   Init scripts: /etc/init.d

Type "make" to compile guacamole-server.

Затем скомпилируйте и установите сервер Gucamole.

make && make install

После того, как все это будет сделано, запустите ldconfigдля восстановления пути поиска для библиотек, которые были добавлены.

ldconfig

Для запуска при загрузке используйте systemctlнастройку guacd(Guacamole Daemon).

systemctl enable guacd

Двоичные файлы гуакамоле теперь установлены. Теперь мы подготовим веб-приложение для Tomcat.

Начните с перемещения warфайла в guacamoleпапку, которую мы только что создали, как только это будет сделано, создайте логическую ссылку в каталоге tomcat, чтобы указать на наш warфайл.

cd /tmp
mv guacamole-0.9.13-incubating.war /etc/guacamole/guacamole.war
ln -s /etc/guacamole/guacamole.war /var/lib/tomcat8/webapps/

Тогда нам нужен разъем MySQL и JDBC. Драйвер JDBC нужен в extensionsпапке, разъем в libпапке.

cp mysql-connector-java-5.1.43/mysql-connector-java-5.1.43-bin.jar /etc/guacamole/lib/
cp guacamole-auth-jdbc-0.9.13-incubating/mysql/guacamole-auth-jdbc-mysql-0.9.13-incubating.jar /etc/guacamole/extensions/

Конфигурирование гуакамоле и Tomcat

Как только коннектор и JDBC будут на месте, нам нужно отредактировать tocamt8файл. Этот файл содержит множество tomcat8настроек, и в нашем случае нам нужно добавить GUACAMOLE_HOMEпеременную в конец файла.

nano /etc/default/tomcat8

Добавить со следующим.

GUACAMOLE_HOME=/etc/guacamole

Создание базы данных

Далее идет создание базы данных. Гуакамоле сохраняет свою конфигурацию соединения в базе данных, а не внутри файла.

Войдите в систему с тем, который root passwordвы использовали при установке

mysql -u root -p

Первым шагом является создание базы данных с именем 'guacamole_db'.

create database guacamole_db;

Затем запустите create userкоманду. Это создаст пользователя с паролем mysupersecretpassword, к которому он сможет подключиться только localhost.

create user 'guacamole_user'@'localhost' identified by "mysupersecretpassword";

Предоставьте CRUDэтому пользователю операции для базы данных guacamole_db.

GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';

Сбросьте привилегии и выйдите из оболочки.

flush privileges;
exit

В завершение добавьте схему гуакамоле в нашу вновь созданную базу данных.

cat /tmp/guacamole-auth-jdbc-0.9.13-incubating/mysql/schema/*.sql | mysql -u root -p guacamole_db

Как только это будет сделано, нам нужно отредактировать guacamole.propertiesфайл. Этот файл содержит нашу недавно созданную конфигурацию сервера MySQL.

nano /etc/guacamole/guacamole.properties

Добавьте сведения о соединении MySQL и учетные данные.

mysql-hostname: localhost
mysql-port: 3306
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: mysupersecretpassword

В завершение создайте символическую ссылку на общую папку tomcat, так как именно здесь WARфайл будет искать эти свойства.

ln -s /etc/guacamole /usr/share/tomcat8/.guacamole

Тестирование настройки

Завершите, перезапустив tomcat8сервер и guacdзапустив демон сервера.

service tomcat8 restart
service guacd start

Вы можете проверить, используя команду статуса.

service tomcat8 status
service guacd status

Теперь вы можете перейти к вашему VPS на порт 8080

http://<yourpublicip>:8080/guacamole/

Используйте имя пользователя guacadminи тот же пароль guacadmin. Это предоставит вам доступ к пустому серверу Гуакамоле.

Нажмите в правом верхнем углу на ваше имя пользователя guacadminи выберите Settings. Как только вы находитесь на странице настроек, перейдите на Usersвкладку и выберите пользователя guacadmin.

Теперь измените свой пароль на другой или создайте нового администратора и удалите пароль по умолчанию guacadmin.

Шаг 3 - Точная настройка и очистка

Это заключительные шаги: очистка после того, как вы закончите.

Удалите загруженный исходный код и двоичные файлы из /tmpпапки.

rm -rf /tmp/guacamole-*
rm -rf /tmp/mysql-connector-java-*

Кроме того, сделайте веб-приложение Guacamole по умолчанию. В экосистеме tomcat приложение, которое получает ROOTпапку, запускается по умолчанию при доступе к веб-сайту.

Удалить старый ROOTзаполнитель.

rm -rf /var/lib/tomcat8/webapps/ROOT

И сделайте символическую ссылку для сервера гуакамоле, чтобы быть тем ROOT.

ln -s /var/lib/tomcat8/webapps/guacamole /var/lib/tomcat8/webapps/ROOT

Это требует перезагрузки кота.

service tomcat8 restart

Шаг 4 (вариант A) - Запуск только по HTTP

  • Если вы не собираетесь использовать сертификаты Let's Encrypt и не используете DNS, выполните действия на этом шаге, а затем перейдите непосредственно к шагу 6. ​​- Вариант A
  • Если вы хотите создать более безопасный сайт и у вас есть готовый DNS, вы можете пропустить это и перейти непосредственно к варианту B (Шаг 5).

Отредактируйте tomcat8/server.xmlфайл и измените порт соединителя.

nano /etc/tomcat8/server.xml

Ищите Connector port.

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8"
           redirectPort="8443" />

И заменить 8080на 80.

По умолчанию tomcat не разрешает привязку портов ниже 1024. Для этого нам нужно указать tomcat8 создать аутентифицированные привязки.

Отредактируйте defaultфайл tomcat8, раскомментируйте AUTHBINDстроку и используйте опциюyes

nano /etc/default/tomcat8

AUTHBIND=yes

Как только это будет сделано, введите authbind.

apt-get install authbind

Настройте его так, чтобы 80tomcat8 мог требовать порт.

touch /etc/authbind/byport/80
chmod 500 /etc/authbind/byport/80
chown tomcat8 /etc/authbind/byport/80

Разрешите порт 80через брандмауэр и удалите правило для 8080.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Перезагрузите кота.

service tomcat8 restart

Вот и все, теперь гуакамоле должен работать в порту 80.

Шаг 5 (вариант B) - Настройка Nginx

Установка и настройка Nginx

Tomcat действительно не одно из лучших и самых надежных приложений для использования certbot. К счастью, Nginx есть. Мы будем просто прокси кота на Nginx. Он использует готовые функциональные возможности certbot за счет небольшого количества оперативной памяти.

apt-get install nginx

После установки отредактируйте конфигурацию по умолчанию.

nano /etc/nginx/sites-available/default

Удалите все примеры конфигураций и добавьте следующую конфигурацию.

server {      
  listen 0.0.0.0:80;

  proxy_request_buffering off;
  proxy_buffering off;

  location / {
     proxy_pass http://127.0.0.1:8080;
     proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
  }
}

Это создаст прокси для сайта, работающего на 8080. Перезапустите Nginx и включите его при загрузке.

systemctl restart nginx
systemctl enable nginx

Проверьте, все ли работает.

systemctl status nginx

Отключите тестовый порт 8080и разрешите трафик на порт 80.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Установка Let's Encrypt

Прежде чем мы сможем использовать certbot, нам нужно добавить правильную ppaсистему, содержащую наши пакеты certbot.

add-apt-repository ppa:certbot/certbot

Нажмите « ENTER», чтобы принять изменение конфигурации.

Обновление, aptчтобы собрать новые пакеты.

apt-get update

Наконец, установите модуль Nginx для назначения сертификатов.

apt-get -y install python-certbot-nginx

Настройте Nginx для использования сертификатов

Настройте брандмауэр, чтобы разрешить HTTPS.

ufw allow 443/tcp

Прежде чем мы сможем запросить новые сертификаты, нам нужно DNS-имя.

nano /etc/nginx/sites-available/default

Добавьте следующую server_nameнастройку.

server_name rdp.example.com;

Измените конфигурацию, чтобы отразить этот новый параметр.

server {
  server_name rdp.example.com;

  listen 0.0.0.0:80;

  proxy_request_buffering off;
  proxy_buffering off;

  location / {
     proxy_pass http://127.0.0.1:8080;
     proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
  }
}

Проверьте, все ли работает, и перезапустите Nginx.

nginx -t
service nginx restart

Теперь запросите сертификат у certbot.

certbot --nginx -d rdp.example.com

Укажите адрес электронной почты и согласитесь с вопросами, заданными установщиком. (Вы можете смело выбирать " No", чтобы поделиться своей электронной почтой.) Certbot автоматически спросит, что ему нужно делать HTTPS. Мы будем использовать вариант 2: redirect to HTTPS.

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Последнее, что мы будем делать, это обновление DHпараметров. По умолчанию они немного слабоваты для стандартов 2017 года.

Создайте несколько новых.

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Затем добавьте их на сайт по умолчанию в Nginx.

nano /etc/nginx/sites-available/default

Добавьте их в конфигурацию сервера.

server {
  server_name rdp.example.com;

  listen 0.0.0.0:80;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  proxy_request_buffering off;
  proxy_buffering off;

  location / {
     proxy_pass http://127.0.0.1:8080;
     proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
  }
}

Проверьте на ошибки.

nginx -t

Примените изменения, перезапустив сервер.

service nginx restart

Очистить старое 8080правило

ufw delete allow 8080/tcp

Примечание: если вам нужно получить «502 Bad Gateway», вам потребуется перезапустить tomcat8 .

service tomcat8 restart

Автообновление сертификатов

Сертификаты Let's Encrypt требуют обновления. Мы можем создать работу cron для этого. Начните с редактирования crontab.

crontab -e

Добавьте следующую строку.

00 2 * * * /usr/bin/certbot renew --quiet

Это проверит в 2:00 утра, если какие-либо сертификаты требуют обновления и о��новит их, если они делают.

Шаг 6 - Тестирование всего этого

Перейдите на ваш сервер гуакамоле (или http://<ip>/или https://rdp.example.com)).

Для этого теста вам понадобятся еще два экземпляра: одна виртуальная машина Linux и другая Windows Server 2012 R2 с включенным частным IP на обоих.

Добавление соединения Windows RDP

Нажмите « username» в правом верхнем углу и перейдите к « Settings». Затем перейдите к « Connections» и выберите « New Connection».

Заполните следующие настройки (вы можете оставить остальные по умолчанию).

Name: Windows Server 2012 R2
Location: ROOT
Protocol: RDP
Maximum number of connections: 1
Maximum number of connections per user: 1
Parameters > Hostname: 10.99.0.12
Parameters > Port: 3389
Username: Administrator
Password: <password> (provided by Vultr)
Security mode: Any
Ignore server certificate: <checked>

Нажмите « save» и вернитесь на главный экран. Теперь вы можете нажать на « Windows Server 2012 R2» соединение, и оно будет RDP к этой машине.

Добавление Linux-соединения SSH

Нажмите " Ctrl+Shift+Alt". Это выскочит меню на стороне. Здесь вы можете отключить или выполнить другие административные задачи для гуакамоле.

Нажмите usernameвверху в меню и перейдите к « Settings». Затем перейдите на Connectionsвкладку « » и выберите « New Connection».

Заполните следующие настройки (вы можете оставить остальные по умолчанию).

Name: Linux
Location: ROOT
Protocol: SSH
Maximum number of connections: 5
Maximum number of connections per user: 2
Parameters > Hostname: 10.99.0.11
Parameters > Port: 22
Username: root
Password: <password> (provided by Vultr)

Нажмите « save» и вернитесь на главный экран. Теперь вы можете щелкнуть это вновь созданное соединение и подключиться к вашему Linux-серверу через SSH.

Вывод

Теперь у вас есть веб-шлюз RDP / SSH HTML5. Теперь вы можете защищать публичный RDP и SSH доступ к вашей платформе и получать доступ к своей среде из любого современного браузера. Для получения дополнительной информации о том, что может предложить гуакамоле, есть отличное видео, показывающее все возможности платформы здесь .



Leave a Comment

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

6 невероятных фактов о Nintendo Switch

6 невероятных фактов о Nintendo Switch

Многие из вас знают Switch, который выйдет в марте 2017 года, и его новые функции. Для тех, кто не знает, мы подготовили список функций, которые делают «Switch» обязательным гаджетом.

Технические обещания, которые все еще не выполнены

Технические обещания, которые все еще не выполнены

Вы ждете, когда технологические гиганты выполнят свои обещания? проверить, что осталось недоставленным.

Функциональные возможности уровней эталонной архитектуры больших данных

Функциональные возможности уровней эталонной архитектуры больших данных

Прочтите блог, чтобы узнать о различных уровнях архитектуры больших данных и их функциях самым простым способом.

Как ИИ может вывести автоматизацию процессов на новый уровень?

Как ИИ может вывести автоматизацию процессов на новый уровень?

Прочтите это, чтобы узнать, как искусственный интеллект становится популярным среди небольших компаний и как он увеличивает вероятность их роста и дает преимущество перед конкурентами.

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA стало довольно сложно решать пользователям за последние несколько лет. Сможет ли он оставаться эффективным в обнаружении спама и ботов в ближайшем будущем?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

По мере того, как наука развивается быстрыми темпами, принимая на себя большую часть наших усилий, также возрастает риск подвергнуться необъяснимой сингулярности. Прочтите, что может значить для нас необычность.

Телемедицина и удаленное здравоохранение: будущее уже здесь

Телемедицина и удаленное здравоохранение: будущее уже здесь

Что такое телемедицина, дистанционное здравоохранение и их влияние на будущее поколение? Это хорошее место или нет в ситуации пандемии? Прочтите блог, чтобы узнать мнение!

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Возможно, вы слышали, что хакеры зарабатывают много денег, но задумывались ли вы когда-нибудь о том, как они зарабатывают такие деньги? Давайте обсудим.

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Недавно Apple выпустила macOS Catalina 10.15.4, дополнительное обновление для исправления проблем, но похоже, что это обновление вызывает больше проблем, приводящих к поломке компьютеров Mac. Прочтите эту статью, чтобы узнать больше