Содержание статьи
- VPS
- Доменное имя
- Cloudflare
- Настройка VPS
В нашем полном опасностей, чрезвычайно жестоком мире нужно уметь защищать свою жизнь, имущество, трафик и драгоценные фоточки с котиками. В этой статье я расскажу, как настроить защищенный канал связи с внешним миром, который будет сложно отличить от обычного HTTPS-трафика и, следовательно, заблокировать или расшифровать. Колдунствовать мы будем с помощью прокси
с плагином
. Все ПО на находится в актуальном состоянии и постоянно обновляется.
WARNING
Информация предоставлена исключительно для ознакомительных и академических целей. Автор просит соблюдать законодательство той страны, на территории которой ты находишься!
Кто может интересоваться твоими сетевыми соединениями? Да кто угодно! От хакерских группировок до злобных админов, которые любят шейпить разные типы трафика (например, наши любимые торренты). Да и просто иногда требуется сменить IP (например, чтобы посмотреть зарубежную новинку в онлайн‑кинотеатре).
Итак, перед настройкой софта нам придется заняться необходимыми подготовительными работами:
- купить VPS;
- купить доменное имя;
- зарегистрироваться на Cloudflare и выполнить необходимую настройку.
Разберем по порядку.
VPS
Чтобы свести риски к минимуму, необходимо выбирать хостера VPS достаточно дотошно — обращай внимание на то, в каком государстве зарегистрировано юридическое лицо, в каких странах физически расположены серверы. Предпочтение следует отдавать тем, где законодательство строго относится к личной информации (например, Швейцария или Исландия). Это касается как места регистрации юридического лица, так и физического нахождения серверов.
Кроме того, не следует забывать про «альянс 14 глаз» (Австралия, Бельгия, Великобритания, Германия, Дания, Испания, Италия, Канада, Нидерланды, Новая Зеландия, Норвегия, США, Франция, Швеция) — это страны, которые свободно обмениваются разведданными друг с другом (законодательство у них соответствующее). Если твои данные попали в руки одной страны из этого списка, можно считать, что остальные тоже их получили.
Кроме того, есть страны, которые так или иначе сотрудничают с альянсом: Южная Корея, Япония, Израиль, Сингапур. Это на уровне слухов, но, как известно, дыма без огня не бывает. Можно много говорить о том, что конкретно ты им не нужен, что у них и без тебя забот полно, — тут каждый решает для себя, что ему важнее. Например, автор эти страны сразу вычеркнул из списка кандидатов. Итак, VPS купили, идем дальше.
ДОМЕННОЕ ИМЯ
Здесь нет никаких особых требований, хочу только отметить, что часто хостинги VPS заодно торгуют и доменными именами. На мой взгляд, более секьюрно использовать возможности того же хостинга VPS, чем обращаться в другую компанию и там по второму кругу светить свои данные. В этой статье мы будем использовать некий абстрактный домен
. Идем дальше.
INFO
Почему не следует использовать ESNI/ECH? Все очень просто: если некоторые сетевые фильтры не могут определить сайт назначения, то они просто блокируют соединение.
CLOUDFLARE
Cloudflare в нашей цепочке играет роль защитного механизма: мы скрываем настоящий IP нашего VPS и защищаем его от некоторых видов атак. Трафик от нашего компа будет идти сначала в сеть Cloudflare и только из нее — к нашему VPS. Кроме того, Cloudflare сгенерирует сертификат для TLS-соединения, и весь трафик на всем пути следования будет завернут в TLS 1.3.
Для начала нам нужно пройти регистрацию и привязать к сервису купленный домен. Далее на вкладке DNS нужно заполнить строки А (две штуки), в которые мы вводим наш домен (в одну строку с приставкой www, в другую без нее) и IP нашего VPS.
Заполнение записей А
После этого необходимо ввести показанные нам серверы имен Cloudflare в панель управления нашего доменного регистратора на вкладке DNS.
Серверы имен Cloudflare
Далее на вкладке SSL/TLS:
- выбираем шифрование Full (strict);
- включаем Always Use HTTPS;
- включаем TLS 1.3;
- устанавливаем Minimum TLS Version на 1.3;
- включаем Opportunistic Encryption;
- включаем Automatic HTTPS Rewrites.
Включаем шифрование соединения на полную!
Уф‑ф, немного укрепили 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
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
unknown-linux-gnu.tar.xz &&
tar -xf shadowsocks-v1.14.3.x86_64-unknown-linux-gnu.tar.xz
wget
&&
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-сервера, если есть локальный, то
- "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
С основной настройкой мы закончили, теперь можно немного оптимизировать сетевой стек. В файл
дописываем следующее:
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 с каким‑то сайтом, но что передает — узнать не получится, ибо шифрование. Другими словами, наблюдается обычная сетевая активность, чего мы и хотели добиться.
В качестве клиентов к серваку можно смело юзать:
- для Android;
- для винды;
- для macOS.
Как еще можно укрепить наш VPS? Например, так:
- сменить порт SSH для того, чтобы автоматические сканеры не ломились на стандартный порт;
- настроить Fail2ban, чтобы ограничить количество попыток ввести неправильный пароль для входа на сервер;
- вместо прямого обращения к DNS-серверу можно настроить локальный сервер, который связывается с внешним миром при помощи DoH или DoT, чтобы даже хостер VPS не знал, какие DNS-запросы ты шлешь;
- настроить учет трафика, чтобы не получить внезапный счет от хостера (если трафик у него лимитирован).
Одним словом, включай фантазию и обустраивай свой неприступный VPS!