Категорії
Misc, staff, other Security

[openvpn] Обходим разные DPI через аутентификацию на прокси

Представим ситуацию: есть DPI которая блокирует напрямую соединение с openvpn сервером. Для обхода сооружаем такую схему: аутентифицируемся на прокси и после удачной аутентификации – подключаемся к серверу openvpn. В итоге: на сервер открыт только внешний порт 443 (прокси), а сам сервер openvpn слушает 127.0.0.1:1194.

Конфиг openvpn-сервера.

daemon
mode server
port 1194
local 127.0.0.1
proto tcp-server
tls-server
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
tls-auth ta.key 0
cipher AES-256-CBC
server 10.94.0.0 255.255.255.0
ifconfig-pool-persist /etc/openvpn/ippool.txt
client-config-dir ccd
keepalive 5 30
compress no
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 3
script-security 3
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"

Конфиг squid’a (squid.conf):

auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm proxy
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
acl authenticated proxy_auth REQUIRED
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 3128
acl Safe_ports port 1194
acl Safe_ports port 25
acl Safe_ports port 465
acl Safe_ports port 110
acl Safe_ports port 143
acl Safe_ports port 993
acl Safe_ports port 995
acl Safe_ports port 587
acl CONNECT method CONNECT
dns_nameservers 8.8.8.8
http_access allow CONNECT Safe_ports authenticated
http_access allow Safe_ports authenticated
http_access allow authenticated
http_access allow localhost
http_access deny all
http_port 443
always_direct allow all
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER
sslproxy_options NO_SSLv2,NO_SSLv3
ssl_bump peek step1
ssl_bump terminate blocked
ssl_bump splice all
sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
cache_dir aufs /var/spool/squid 20000 49 256
maximum_object_size 61440 KB
minimum_object_size 3 KB
cache_swap_low 90
cache_swap_high 95
maximum_object_size_in_memory 512 KB
memory_replacement_policy lru
logfile_rotate 4

Пароли для squid’a генерим так:

$ echo -n "test-pass" | md5sum
098f6bcd4621d373cade4e832627b4f6

и записываем в файл /etc/squid/passwords в таком формате:

user:380e5dc89564f30713ad54bf06aacea8

Конфиг openvpn-клиента:

client
dev tun
proto tcp
tls-client
http-proxy XX.XX.XX.XX 443 auth.txt basic
http-proxy-retry
remote 127.0.0.1 9494
resolv-retry infinite
nobind
ca ca.crt
cert user.crt
key user.key
dh dh2048.pem
tls-auth ta.key 1
cipher AES-256-CBC
compress no
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log

Файл с логином паролем для аутентификации на squid’e (/etc/openvpn/auth.txt):

test
test-pass

Примечание.

Если по каким-то причинам нет возможности на клиенте указать basic auth, то можно отключить его совсем. При этом, будем руководствоваться таким правилом: подключиться к порту squid’a могут все, но с него разрешён доступ только на порт openvpn’a. То есть, если вы просто пропишите адрес прокси в браузере – получите ошибку.

Для этого, заменяем все ACL’ы в squid.conf на такие:

acl localnet src all
acl srv dst 127.0.0.1
acl vpn_ports port 1194
acl SSL_ports port 443
acl CONNECT method CONNECT
http_access allow localnet CONNECT srv vpn_ports
http_access allow localnet srv vpn_ports
http_access allow localnet srv
http_access deny all

Ну и убираем кусок строки auth.txt basic из openvpn.conf на клиенте.

Примечание.

Если по какой-то причине OpenVPN всё-таки блокируется, то рекомендую использовать другое ПО.

Например, Shadowsocks имеет встроенную защиту от DPI и притворяется, что выполняет обычное подключение к удаленному серверу. 

OpenVPN сам по себе легко различим, но stunnel позволяет также обойти анализ пакетов. Stunnel маскирует канал VPN под соединение SSL, которое с виду безобидно: это может быть и простой браузер, который обращается к сайту по HTTPS. Благодаря этому заблокировать такой туннель непросто.

А вот ещё несколько методов обхода

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff