1 часть: Создание своего VPN с помощью Shadowsocks и обфускация трафика
2 часть: Создание своего VPN с помощью Shadowsocks и обфускация трафика - часть 2
Введение
В этой части мы рассмотрим то, как пропустить обфусцированный трафик Shadowsocks через CDN от Cloudflare. Это позволит нам обмануть DPI, т.к. ему будет казаться, что вы используете обычный HTTPS, а также повысить защищенность благодаря TLS. Также, при использовании этого способа мы будем подключаться не напрямую к VPN, а через сервера Cloudflare.Подготовительный этап
Кроме сервера (о тонкостях его выбора я писал в предыдущих статьях) нам также потребуется домен и аккаунт на Cloudflare. Доменное имя и зона в данном случае большой роли не играют, но советую брать наиболее неприметные, близкие к служебным доменам каких-либо сайтов.Будем считать, что мы нашли домен. Теперь нам нужен аккаунт на Cloudflare.
После регистрации он предложит нам выбрать тарифный план, но т.к. мы не будем использовать его услуги по защите, то смело выбираем Free. Затем он предложит добавить сайт и отредактировать DNS-записи. Нам нужны всего две A записи вида
Ссылка скрыта от гостей
и example.com, в которые мы вставляем IP нашего сервера. Послеэтого он выдаст неймсервера, которые потребуется вставить в панель управления вашего домена. После всего этого вы должны подождать некоторое время для обновления DNS, после чего вы увидите это:Пока оставим Cloudflare и перейдем к настройке сервера
Настройка сервера
В целом она не отличается от описанной во второй статье. Скачиваем shadowsocks:
Код:
apt install shadowsocks-libev
Скачиваем плагин v2ray и перемещаем его в /usr/local/bin, дабы не писать путь в конфиге, а также позволяем использовать ему привилегированные порты:
Код:
cd /usr/local/bin
wget https://github.com/shadowsocks/v2ray-plugin/releases/download/v1.3.1/v2ray-plugin-linux-amd64-v1.3.1.tar.gz
tar xf v2ray-plugin-linux-amd64-v1.3.1.tar.gz
mv v2ray-plugin_linux_amd64 v2ray-plugin
setcap 'cap_net_bind_service=+eip' v2ray-plugin
Создаем конфиг:
Код:
nano /etc/shadowsocks-libev/v2ray.json
В него вставляем следующее:
JSON:
{
"server": ["::1", "127.0.0.1"],
"server_port": 8888,
"password": "пароль",
"timeout": 120,
"method": "алгоритм шифрования",
"nameserver": "DNS сервер",
"plugin": "v2ray-plugin",
"plugin_opts": "server;loglevel=none",
"mode": "tcp_only",
"no_delay": true,
"fast_open": true,
"reuse_port": true
}
Выходим и сохраняем
Сразу создадим сервис, чтобы не возвращаться к настройке:
Код:
sudo nano /etc/systemd/system/ss-v2ray.service
Вставляем это:
Код:
[Unit]
Description=Shadowsocks-libev with V2RAY-websocket obfuscation
Documentation=man:shadowsocks-libev(8)
After=network.target
[Service]
Type=simple
User=nobody
Group=nogroup
LimitNOFILE=51200
ExecStart=/usr/bin/ss-server -c /etc/shadowsocks-libev/v2ray.json
[Install]
WantedBy=multi-user.target
Теперь приступим к получению сертификатов и настройке Nginx
Получение сертификатов
Возвращаемся на Cloudflare и переходим в раздел Firewall, и в настройках отключаем проверку капчи:
После этого идем в SSL/TLS и выбираем строгое шифрование соединения (Full (strict)):Затем переходим в раздел Origin Server и создаем сертификат:
Созданный сертификат и ключ нужно поместить на сервер в папку /etc/ssl:
Для сертификата:
Код:
nano /etc/ssl/cert.pem
Для ключа:
Код:
nano /etc/ssl/cert.key
Сразу же сгенерируем параметр Диффи-Хеллмана (это может занять продолжительное время!):
Код:
openssl dhparam -out /etc/ssl/dhparams.pem 4096
Теперь, когда сертификаты готовы, перейдем к Nginx
Настройка Nginx
Для начала - установка:
Код:
apt install nginx
Затем - удаление стандартного конфига сайта и создание нового:
Код:
rm /etc/nginx/sites-available/default
nano /etc/nginx/sites-available/default
В него вставляем следующий код:
Код:
server {
listen 443 ssl http2 reuseport backlog=131072 fastopen=256;
listen [::]:443 ssl http2 reuseport backlog=131072 fastopen=256;
server_name example.com;
add_header Allow "GET" always;
if ( $request_method !~ ^(GET)$ ) {
return 444;
}
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/cert.key;
ssl_dhparam /etc/ssl/dhparams.pem;
ssl_session_cache shared:le_nginx_SSL:1m;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets off;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ecdh_curve secp384r1;
add_header Content-Security-Policy "default-src https: data: 'unsafe-inline' 'unsafe-eval'" always;
add_header Strict-Transport-Security 'max-age=63072000; includeSubdomains; preload' always;
add_header X-Robots-Tag "noindex, nofollow" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Xss-Protection "1; mode=block" always;
resolver localhost valid=300s;
ssl_buffer_size 8k;
ssl_stapling on;
ssl_stapling_verify on;
ssl_prefer_server_ciphers on;
ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
location / {
proxy_pass https://google.com;
limit_rate 1000k;
proxy_redirect off;
}
location /ss {
proxy_redirect off;
proxy_buffering off;
proxy_http_version 1.1;
proxy_pass http://localhost:8888/;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Вместо example.com вставляем наш домен, а вместо google.com - любой другой сайт, на который будет идти перенаправление при переходе на наш домен
Теперь отредактируем конфиг Nginx:
Код:
rm /etc/nginx/nginx.conf
nano /etc/nginx/nginx.conf
В него вставим это:
Код:
user www-data;
worker_processes auto;
worker_cpu_affinity auto;
pcre_jit on;
pid /run/nginx.pid;
worker_rlimit_nofile 131072;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 4000;
multi_accept on;
use epoll;
epoll_events 512;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 60;
client_body_timeout 12;
client_header_timeout 12;
send_timeout 30;
keepalive_requests 2000;
reset_timedout_connection on;
types_hash_max_size 2048;
server_tokens off;
server_names_hash_max_size 4096;
client_body_buffer_size 128K;
client_header_buffer_size 3m;
client_body_in_single_buffer on;
client_max_body_size 8m;
large_client_header_buffers 4 256k;
open_file_cache max=200000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
include /etc/nginx/mime.types;
default_type application/octet-stream;
## Block spammers and other unwanted visitors ##
include /etc/nginx/blockips.conf;
##
# Logging Settings
##
access_log off;
error_log /var/log/nginx/error.log crit;
##
# Gzip Settings
##
gzip off;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-available/*;
}
Также, в целях безопасности, стоит заблокировать доступ к сайту не от Cloudflare. Для этого:
Код:
nano /etc/nginx/blockips.conf
В самый конец вставляем:
Код:
allow 173.245.48.0/20;
allow 103.21.244.0/22;
allow 103.22.200.0/22;
allow 103.31.4.0/22;
allow 141.101.64.0/18;
allow 108.162.192.0/18;
allow 190.93.240.0/20;
allow 188.114.96.0/20;
allow 197.234.240.0/22;
allow 198.41.128.0/17;
allow 162.158.0.0/15;
allow 104.16.0.0/12;
allow 172.64.0.0/13;
allow 131.0.72.0/22;
allow 2400:cb00::/32;
allow 2606:4700::/32;
allow 2803:f800::/32;
allow 2405:b500::/32;
allow 2405:8100::/32;
allow 2a06:98c0::/29;
allow 2c0f:f248::/32;
deny all;
Запрещаем ICMP трафик (тоже в целях безопасности):
Код:
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT &&
iptables -A OUTPUT -p icmp --icmp-type 3 -j ACCEPT &&
iptables -A OUTPUT -p icmp --icmp-type 4 -j ACCEPT &&
iptables -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT &&
iptables -A OUTPUT -p icmp --icmp-type 12 -j ACCEPT &&
iptables -A OUTPUT -p icmp -j DROP &&
iptables -A OUTPUT -p icmp --icmp-type 3 -j ACCEPT &&
iptables -A OUTPUT -p icmp --icmp-type 12 -j ACCEPT &&
iptables -A INPUT -p icmp -j DROP
Перезагружаем Nginx и включаем Shadowsocks:
Код:
systemctl restart nginx
sudo systemctl enable ss-v2ray.service && sudo systemctl restart ss-v2ray.service
Все готово!
Настройка клиентов
Настройка клиентов, опять же, не отличается от предыдущей статьи:- Windows - скачиваем Shadowsocks и плагин v2ray, указываем в IP наш домен, порт - 443, а в опциях плагина указываем tls;fast-open;path=/ss;host=example.com
- Android - скачиваем клиент и плагин, а потом сканируем QR код с ПК
- Linux - проводим аналогичные процедуры, как и с сервером, только в конфиге в параметре plugin-opts пишем tls;fast-open;path=/ss;host=example.com
Последнее редактирование: