Как спрятать службу за веб-сервером

Здравствуйте, уважаемые читатели. Сегодня тема статьи: "Как спрятать службу за веб-сервером". В статье рассмотрим возможности маскировки (скрытия) службы, за веб-сервером.
Бывают ситуации, когда нужно скрыть некую службу, например VPN-сервер, от глаз провайдера, или системного администратора. Либо просто защитить службу от посягательств. В некоторых случаях, возможным является использование в этих целях только 80 или 443 порта. Именно в такой ситуации, может помочь программа Labean.
Cтраница разработчика: https://github.com/uprt/labean/
Принцип работы Labean заключается в том, что она запускается как служба, и прослушивает определённый порт, на предмет запросов с определённым префиксом. После получения нужного запроса, Labean выполняет заложенную команду. Значит мы можем запустить nginx, и настроить в нём функцию проксирования на порт прослушиваемый Labean. Таким образом, у нас появится возможность взаимодействия с Labean через 80 или 443 порт веб-сервера, а Labean в свою очередь, будет выполнять команды, которые мы в неё заложим.
В статье я буду прятать за Nginx, OpenConnect Vpn-сервер. Nginx работает на 80 порту (доменное имя test.ru), а OpenConnect Vpn-сервер на 4443 порту. Все действия, буду производить в операционной системе CentOS 7.
- Labean написан на языке Go, поэтому чтобы произвести его сборку и запуск, нам нужно установить платформу Go.
Установка Go в CentOS 7
- Заходим в рабочую директорию.
# cd /usr/src
- Перед скачиванием Go, произведём установку некоторых нужных пакетов:
# yum -y install git wget nano
- Теперь можно скачивать архив Go, с версией go1.12.7. Есть версии и новее, но при их использовании, сборка получается с ошибками.
# wget https://dl.google.com/go/go1.12.7.linux-amd64.tar.gz

- Разархивируем архив.
# tar -C /usr/local -xzf go1.12.7.linux-amd64.tar.gz
- Теперь нужно произвести некоторые настройки, для правильной работы Go.
- Открываем файл /etc/profile.d/path.sh, и добавляем в него одну строчку.
# nano /etc/profile.d/path.sh Добавляем в файл: export PATH=$PATH:/usr/local/go/bin
- После этого, открываем следующий файл, и добавляем в конеце две строчки.
# nano ~/.bash_profile Добавляем в файл: export GOBIN="$HOME/projects/bin" export GOPATH="$HOME/projects/src"
- Чтобы изменения вступили в силу, нужно произвести перечтение настроек.
# source /etc/profile && source ~/.bash_profile
- Предварительные действия завершены, и можно переходить к установке Labean.
Установка Labean в CentOS 7
- Запускаем клонирование labean.git
# git clone https://github.com/uprt/labean.git

- Заходим в папку labean, и запускаем сборку.
# cd labean # go build
- Копируем бинарный файл в директорию /usr/sbin/.
# cp /usr/src/labean/labean /usr/sbin/
Конфигурация Labean
- Создаём конфигурационный файл /etc/labean.conf.
- Образец конфигурационного файла, который предлагает разработчик, выглядит таким образом:
{ "listen": "127.0.0.1:8080", "url_prefix": "secret", "external_ip": "192.30.253.113", "real_ip_header": "X-Real-IP", "allow_explicit_ips": false, "tasks": [ { "name": "vpn", "timeout": 30, "on_command": "iptables -t nat -A PREROUTING -p tcp -s {clientIP} --dport 443 -j REDIRECT --to-port 4443", "off_command": "iptables -t nat -D PREROUTING -p tcp -s {clientIP} --dport 443 -j REDIRECT --to-port 4443" }, { "name": "sshd", "timeout": 0, "on_command": "/etc/init.d/sshd start", "off_command": "/etc/init.d/sshd stop" } ] }
- listen – локальный адрес и порт, который будет прослушивать Labean
- url_prefix – префикс к запросу, который задействует Labean (на Ваше усмотрение)
- external_ip – внешний ip-адрес сервера
- tasks – команды для Labean
- "name": "vpn" и "name": "sshd" - имя команды для выполнения Labean (на Ваше усмотрение)
- timeout – время (в секундах) действия опции команды "on_command" (если стоит ноль, то опция "on_command будет завершена, только после запуска опции "off_command")
- Первая команда, создаёт редирект на скрытый VPN-сервис, для запустившего команду ip-адреса. А вторая команда, нужна для запуска и отключения службы sshd.
В случае с "sshd", я бы посоветовал задуматься, так как при её использовании, в случае падения веб-сервера, Вы попросту не сможете получить доступа к серверу. Но если у Вас есть альтернативные способы доступа, то и этот вариант вполне заслуживает внимания.
- Для наших целей, мы можем использовать и вариант предлагаемый разработчиком. Только удалим из него лишнее, то есть блок "sshd". Убираем блок, вносим изменения под себя, и добавляем всё это в конфигурационный файл. В моём случае, конфигурация будет такой:
{ "listen": "127.0.0.1:8080", "url_prefix": "fikvam", "external_ip": "192.168.10.12", "real_ip_header": "X-Real-IP", "allow_explicit_ips": false, "tasks": [ { "name": "step1", "timeout": 30, "on_command": "iptables -t nat -A PREROUTING -p tcp -s {clientIP} --dport 80 -j REDIRECT --to-port 4443", "off_command": "iptables -t nat -D PREROUTING -p tcp -s {clientIP} --dport 80 -j REDIRECT --to-port 4443" } ] }
- Я изменил префикс, вписал свой ip-адрес, изменил имя команды, и порт, с которого будет производится редирект. В моём случае, это 80 порт.
Запуск Labean
- После сохранения файла с настройками, можно запускать Labean.
- Для того, чтобы Labean работала как служба, копируем специальный файл в /etc/systemd/system/.
# cp ./examples/labean.service.ex /etc/systemd/system/labean.service
- Перечитываем настройки служб.
# systemctl daemon-reload
- Теперь мы можем управлять программой, как обычной службой.
- Запускаем, и добавляем Labean в автозагрузку.
# systemctl start labean # systemctl enable labean
Настройка Nginx для проксирования на порт Labean
- Для настройки проксирования Nginx на порт Labean, нам нужно добавить один блок location, в конфигурационный файл nginx, или работающего сайта.
location ~ ^/labean/(.*) { proxy_set_header X-Real-IP $remote_addr; proxy_pass http://127.0.0.1:8080/$1; }
- Для дополнительной защиты, Вы может настроить дополнительную аутентификацию. Нужно установить пакет утилит, создать файл .htpasswd, и внести в него данные для аутентификации.
# yum install httpd-tools # htpasswd -bc /usr/share/nginx/html/.htpasswd admin 123
- Для примера, в команде выше, я создал пользователя admin, с паролем 123.
- При использовании дополнительной защиты, блок для nginx, будет выглядеть таким образом:
location ~ ^/labean/(.*) { auth_basic "User Login"; auth_basic_user_file /usr/share/nginx/html/.htpasswd; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://127.0.0.1:8080/$1; }
- После внесения изменений, перезапускаем веб-сервер.
# systemctl restart nginx
Проверка связки Nginx и Labean
- Переходим к настройке vpn-клиента.
- Создаем профиль с явным указанием 80 порта, но пока не подключаемся.
- Для OpenConnect-GUI VPN client, это будет так:
https://192.168.10.12:80
- Открываем браузер, и производим нужный запрос. В моём случае, это будет:
http://test.ru/labean/fikvam/step1/on
Если Вы настроили дополнительную защиту, то потребуется ввести пароль и логин.
- Открывается страница, с сообщением о произведённой команде.
- После введённого запроса, как Вы помните из произведённых настроек, у нас есть 30 секунд прямого редиректа нашего ip-адреса с 80 на 4443.
- Запускаем подключение OpenConnect-GUI VPN client к сереру, и удачно подключаемся.

Соединение будет работать до конца сессии.
- Через 30 секунд, никто даже с нашего ip-адреса, не сможет повторить наше подключение. Потребуется повторить всю процедуру.
- Всё работает, как и должно. Но можно модифицировать алгоритм. В данном случае, у нас постоянно открыт порт 4443, на котором работает VPN-сервер. Можно закрыть его, и открывать только при подключении клиента.
- Закрываем порт 4443 в брандмауэре, и модифицируем конфигурацию Labean, в конфигурационном файле /etc/labean.conf:
{ "listen": "127.0.0.1:8080", "url_prefix": "fikvam", "external_ip": "192.168.10.12", "real_ip_header": "X-Real-IP", "allow_explicit_ips": false, "tasks": [ { "name": "step1", "timeout": 30, "on_command": "iptables -I INPUT -p tcp --dport 4443 -m state --state NEW -j ACCEPT", "off_command": "iptables -I INPUT -p tcp --dport 4443 -m state --state NEW -j DROP" }, { "name": "step2", "timeout": 30, "on_command": "iptables -t nat -A PREROUTING -p tcp -s {clientIP} --dport 80 -j REDIRECT --to-port 4443", "off_command": "iptables -t nat -D PREROUTING -p tcp -s {clientIP} --dport 80 -j REDIRECT --to-port 4443" } ] }
- В конфигурации мы добавили одну команду, которая будет открывать порт 4443.
- После внесённых, изменений перезапускаем Labean.
# systemctl restart labean
- Теперь для возможности подключения к VPN-серверу, нам нужно произвести два запроса, в моём случае это будет:
http://test.ru/labean/fikvam/step1/on http://test.ru/labean/fikvam/step2/on
Если Вы настраивали дополнительную защиту, то нужно будет ввести пароль и логин.
- После отправленных запросов, можно спокойно подключатся к серверу. Как и в предыдущем примере, подключение будет действовать на время сессии. И через 30 секунд, никто, даже с Вашего ip-адреса, не сможет произвести подключение, не пройдя полную процедуру.
Сегодня мы рассмотрели тему: "Как спрятать службу за веб-сервером". Научились маскировать от провайдера VPN-сервер, либо другую службу. Смотрите так же, видео по теме.
Надеюсь статья была вам полезна. До встречи в новых статьях.
✍
С уважением, Андрей Бондаренко.
Видео на тему "Как спрятать службу за веб-сервером":

WMZ-кошелёк = Z667041230317
«Linux»
nowruz
здравствуйте брат я прочитай вашем инструкция но меня не получается вы можем меня настроите сервера я дам тебя сервера если цена нормально я заплатит я раньше настроит этом сайте https://www.linuxbabe.com/redhat/openconnect-vpn-server-ocserv-centos-8 но я не установит web служба толка ocserv раньше сертификат есть бесплатно но сейчас без сертификат я настроите но каждый день неделя блокировать мой провайдер вы можете меня помочь
Андрей Бондаренко
Здравствуйте.
Я могу настроить с сертификатом, если у Вас есть VPS и домен, но дать гарантии того что Ваш провайдер Вас не заблокирует я не могу.
Всё зависит от оборудования и фильтров Вашего провайдера. Если хотите сделать заказ и обсудить подробности, то пишите на contact@aeb-blog.ru