Хакер - Неприступный VPS. Строим защищенный канал с внешним миром

cracker92

Местный
371
64
22 Июн 2019

Содержание статьи​

  • VPS
  • Доменное имя
  • Cloudflare
  • Настройка VPS
В нашем полном опасностей, чрезвычайно жестоком мире нужно уметь защищать свою жизнь, имущество, трафик и драгоценные фоточки с котиками. В этой статье я расскажу, как настроить защищенный канал связи с внешним миром, который будет сложно отличить от обычного HTTPS-трафика и, следовательно, заблокировать или расшифровать. Колдунствовать мы будем с помощью прокси Для просмотра ссылки Войди или Зарегистрируйся с плагином Для просмотра ссылки Войди или Зарегистрируйся. Все ПО на находится в актуальном состоянии и постоянно обновляется.

WARNING​

Информация предоставлена исключительно для ознакомительных и академических целей. Автор просит соблюдать законодательство той страны, на территории которой ты находишься!

Кто может интересоваться твоими сетевыми соединениями? Да кто угодно! От хакерских группировок до злобных админов, которые любят шейпить разные типы трафика (например, наши любимые торренты). Да и просто иногда требуется сменить IP (например, чтобы посмотреть зарубежную новинку в онлайн‑кинотеатре).

Итак, перед настройкой софта нам придется заняться необходимыми подготовительными работами:

  • купить VPS;
  • купить доменное имя;
  • зарегистрироваться на Cloudflare и выполнить необходимую настройку.
Разберем по порядку.

VPS​

Чтобы свести риски к минимуму, необходимо выбирать хостера VPS достаточно дотошно — обращай внимание на то, в каком государстве зарегистрировано юридическое лицо, в каких странах физически расположены серверы. Предпочтение следует отдавать тем, где законодательство строго относится к личной информации (например, Швейцария или Исландия). Это касается как места регистрации юридического лица, так и физического нахождения серверов.

Кроме того, не следует забывать про «альянс 14 глаз» (Австралия, Бельгия, Великобритания, Германия, Дания, Испания, Италия, Канада, Нидерланды, Новая Зеландия, Норвегия, США, Франция, Швеция) — это страны, которые свободно обмениваются разведданными друг с другом (законодательство у них соответствующее). Если твои данные попали в руки одной страны из этого списка, можно считать, что остальные тоже их получили.

Кроме того, есть страны, которые так или иначе сотрудничают с альянсом: Южная Корея, Япония, Израиль, Сингапур. Это на уровне слухов, но, как известно, дыма без огня не бывает. Можно много говорить о том, что конкретно ты им не нужен, что у них и без тебя забот полно, — тут каждый решает для себя, что ему важнее. Например, автор эти страны сразу вычеркнул из списка кандидатов. Итак, VPS купили, идем дальше.

ДОМЕННОЕ ИМЯ​

Здесь нет никаких особых требований, хочу только отметить, что часто хостинги VPS заодно торгуют и доменными именами. На мой взгляд, более секьюрно использовать возможности того же хостинга VPS, чем обращаться в другую компанию и там по второму кругу светить свои данные. В этой статье мы будем использовать некий абстрактный домен secret-site.com. Идем дальше.

INFO​

Почему не следует использовать ESNI/ECH? Все очень просто: если некоторые сетевые фильтры не могут определить сайт назначения, то они просто блокируют соединение.

CLOUDFLARE​

Cloudflare в нашей цепочке играет роль защитного механизма: мы скрываем настоящий IP нашего VPS и защищаем его от некоторых видов атак. Трафик от нашего компа будет идти сначала в сеть Cloudflare и только из нее — к нашему VPS. Кроме того, Cloudflare сгенерирует сертификат для TLS-соединения, и весь трафик на всем пути следования будет завернут в TLS 1.3.

Для начала нам нужно пройти регистрацию и привязать к сервису купленный домен. Далее на вкладке DNS нужно заполнить строки А (две штуки), в которые мы вводим наш домен (в одну строку с приставкой www, в другую без нее) и IP нашего VPS.

1.png

Заполнение записей А
После этого необходимо ввести показанные нам серверы имен Cloudflare в панель управления нашего доменного регистратора на вкладке DNS.

2.png

Серверы имен Cloudflare
Далее на вкладке SSL/TLS:

  • выбираем шифрование Full (strict);
  • включаем Always Use HTTPS;
  • включаем TLS 1.3;
  • устанавливаем Minimum TLS Version на 1.3;
  • включаем Opportunistic Encryption;
  • включаем Automatic HTTPS Rewrites.
3.png

Включаем шифрование соединения на полную!
Уф‑ф, немного укрепили TLS, можно двигаться дальше. Теперь идем в Client Certificates на той же вкладке и жмем кнопку Create Certificate для генерации сертификата и ключа (условимся, что файлы будут называться secret-site.pem и secret-site.key).

Теперь идем на VPS и приступаем к настройке.

НАСТРОЙКА VPS​

Итак, в некоторой степени утомительная подготовительная процедура окончена, давай теперь настраивать сам VPS. Все настройки будут делаться на Debian 11 x64.

Сначала обновим пакеты и установим вспомогательные утилиты:

Код:
apt update && apt upgrade -y

apt install -y dnsutils nethogs vnstat sendmail fail2ban nano wget unzip htop psmisc nginx

Теперь разберемся с сертификатами и ключами от Cloudflare — их мы положим на наш VPS в папку /etc/ssl/ и выдадим ей права только на чтение.

Далее надо сгенерировать параметр Диффи — Хеллмана:

Код:
openssl dhparam -out /etc/ssl/dh-param.pem 4096

Положим его в ту же папку /etc/ssl/.

Теперь приступим к настройкам Nginx в файле /etc/nginx/nginx.conf — в его стандартную структуру достаточно добавить наш сертификат, ключ, DH и некоторые служебные настройки:

Код:
server{

  listen 443 ssl http2 reuseport backlog=131072 fastopen=256;

  ssl_certificate /etc/ssl/secret-site.pem;

  ssl_certificate_key /etc/ssl/secret-site.key;

  ssl_dhparam /etc/ssl/dh-param.pem

  ssl_protocols TLSv1.3;

  ssl_ecdh_curve secp384r1;

  add_header X-Robots-Tag "noindex, nofollow" always;

  add_header X-Content-Type-Options "nosniff" always;

  add_header X-Xss-Protection "1; mode=block" always;

  add_header Strict-Transport-Security 'max-age=63072000; includeSubdomains; preload' always;

  resolver localhost valid=300s;

  ssl_buffer_size 8k;

  ssl_prefer_server_ciphers off;

Далее добавим локации:

Код:
location / {

    limit_req zone=one burst=5 nodelay;

    index  index.html index.htm;

    limit_rate 19k;

    set $limit_rate 19K;

    proxy_redirect off;

  }

  location /secretline {

    proxy_redirect off;

    proxy_buffering off;

    proxy_http_version 1.1;

    proxy_pass http://localhost:8008/;

    proxy_set_header Host $http_host;

    proxy_set_header Upgrade $http_upgrade;

    proxy_set_header Early-Data $ssl_early_data;

    proxy_set_header Connection "upgrade";

  }

В location / я вписал index.html — это просто сайт‑заглушка, который будет болтаться на нашем серваке для того, чтобы противостоять активному зондированию. Проще говоря, если какой‑то зонд будет сканировать сервер в поисках Shadowsocks или чего‑то еще, он просто увидит нашу заглушку. Тогда он подумает, что это обычный сайт, оставит нас в покое и уйдет пить пиво.

Локация location /secretline — это и есть наш Shadowsocks. Вместо строки secretline нужно придумать что‑то более оригинальное и трудноподбираемое, эта строка будет передаваться в качестве параметра на клиенте к плагину xray.

Далее скачиваем и устанавливаем Shadowsocks и xray-plugin:

Код:
wget https://github.com/shadowsocks/shadowsocks-rust/releases/download/v1.14.3/shadowsocks-v1.14.3.x86_64 unknown-linux-gnu.tar.xz &&

tar -xf shadowsocks-v1.14.3.x86_64-unknown-linux-gnu.tar.xz

wget https://github.com/teddysun/xray-plugin/releases/download/v1.5.4/xray-plugin-linux-amd64-v1.5.5.tar.gz &&

tar -xf xray-plugin-linux-amd64-v1.5.5.tar.gz

Создаем папку shadowsocks и копируем в нее нужные файлы:

Код:
mv ssserver /bin

mv xray-plugin /etc/shadowsocks/xray-plugin

Настраиваем разрешения:

Код:
setcap 'cap_net_bind_service=+eip' /etc/shadowsocks/xray-plugin

setcap 'cap_net_bind_service=+eip' /bin/ssserver

Теперь создадим файл конфигурации сервера Shadowsocks:

touch /etc/shadowsocks/shadowsocks-rust.json

nano /etc/shadowsocks/shadowsocks-rust.json

И запишем туда такой текст:

Код:
{

  "server":["127.0.0.1"],

  "server_port":8008,

  "password":"Password123",

  "timeout":300,

  "method":"chacha20-ietf-poly1305",

  "fast_open":true,

  "reuse_port":true,

  "plugin":"/etc/shadowsocks/xray-plugin",

  "plugin_opts":"server;loglevel=none",

  "nameserver":"1.1.1.1",

  "mode": "tcp_and_udp",

  "no_delay": true,

  "workers":1

}

Давай пройдемся по основным пунктам:

  • "server_port" — порт, на котором будет висеть сервер shadowsocks;
  • "workers" — количество ядер на сервере;
  • "ipv6_first" — поддержка протокола IPv6;
  • "nameserver" — IP DNS-сервера, если есть локальный, то 127.0.0.1;
  • "plugin" и "plugin_opts" используются для плагина xray;
  • "reuse_port" — оптимизация для более быстрого использования сети;
  • "method" — используемое шифрование;
  • "password" — пароль для подключению к серверу.
Теперь создадим сервис ss-xray.service:

nano /etc/systemd/system/ss-xray.service

Записываем туда следующий текст:

Код:
[Unit]

Description=Shadowsocks with XRAY

After=network.target

[Service]

Type=simple

User=nobody

Group=nogroup

LimitNOFILE=51200

ExecStart=/bin/ssserver -c /etc/shadowsocks/shadowsocks-rust.json

ExecStop=/bin/killall ssserver

Restart=always

RestartSec=10

[Install]

WantedBy=multi-user.target

Сохраняемся и выходим: Ctrl + O, Ctrl + X. Включаем сервис:

sysctl -p && systemctl enable ss-xray.service

С основной настройкой мы закончили, теперь можно немного оптимизировать сетевой стек. В файл /etc/sysctl.conf дописываем следующее:

Код:
fs.file-max = 131072

net.core.rmem_max = 8388608

net.core.wmem_max = 8388608

net.core.rmem_default = 8388608

net.core.wmem_default = 8388608

net.core.optmem_max = 8388608

net.core.netdev_max_backlog = 131072

net.core.somaxconn = 131072

net.ipv4.ip_local_port_range = 1024 65535

net.ipv4.tcp_mem = 25600 51200 102400

net.ipv4.tcp_rmem = 4096 1048576 4194304

net.ipv4.tcp_wmem = 4096 1048576 4194304

net.ipv4.tcp_fastopen=3

net.ipv4.tcp_low_latency = 1

net.ipv4.tcp_no_metrics_save = 1

net.ipv4.tcp_adv_win_scale = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_timestamps = 0

net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_window_scaling = 1

net.ipv4.tcp_keepalive_time = 150

net.ipv4.tcp_keepalive_probes = 5

net.ipv4.tcp_keepalive_intvl = 30

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_slow_start_after_idle=0

net.ipv4.tcp_max_syn_backlog = 65536

net.ipv4.tcp_max_tw_buckets = 720000

net.ipv4.tcp_mtu_probing = 1

Опять сохраняемся и перезагружаем сервер. Теперь все должно работать.

Что в итоге у нас получилось? Запрос от нашего компа уходит в CDN Cloudflare, а возвращается от нашего VPS. Для внешнего наблюдателя создается впечатление, будто комп общается по TLS с каким‑то сайтом, но что передает — узнать не получится, ибо шифрование. Другими словами, наблюдается обычная сетевая активность, чего мы и хотели добиться.

В качестве клиентов к серваку можно смело юзать:

Как еще можно укрепить наш VPS? Например, так:

  • сменить порт SSH для того, чтобы автоматические сканеры не ломились на стандартный порт;
  • настроить Fail2ban, чтобы ограничить количество попыток ввести неправильный пароль для входа на сервер;
  • вместо прямого обращения к DNS-серверу можно настроить локальный сервер, который связывается с внешним миром при помощи DoH или DoT, чтобы даже хостер VPS не знал, какие DNS-запросы ты шлешь;
  • настроить учет трафика, чтобы не получить внезапный счет от хостера (если трафик у него лимитирован).
Одним словом, включай фантазию и обустраивай свой неприступный VPS!