ЦЕЛЬ
Веб прокси сервер.
Требования::
- Зашифровать подключение через HTTPS.
- Аутентификация по пользователю/паролю.
- Расщепление горизонта (split horizon), т.е. проксирование только определенных веб сайтов.
ИСПОЛЬЗУЕМЫЕ РЕШЕНИЯ
- Прокси сервер
- Squid
- nginx
- Шифрование HTTPS
- Let’s encrypt
- Аутентификация
- PAM
- Расщепление горизонта
- PAC
- plain text
- Браузер
- Firefox (поддерживается Chrome)
- Веб сайт
- 2ip.ru
ИМПЛЕМЕНТАЦИЯ
- Установка прокси сервера
- Squid
- nginx
- Без аутентификации
- Squid
- nginx
- Squid
- nginx
- Plain text
- PAC
- nginx
- Проверка
- nginx
- Let’s encrypt
- Squid
- PAC
- Проверка
АДРЕСА
- proxy.example.org — DNS имя прокси сервера
- 1.1.1.1 — IP адрес прокси сервер внешний (перед NAT)
- 10.1.1.4 — IP адрес прокси сервер внутренний (за NAT)
- 195.201.201.32 — IP адрес 2ip.ru (проверка внешнего IP)
- 2.2.2.2 — IP адрес клиента браузера внешний
1. УСТАНОВКА ПРОКСИ СЕРВЕРА
В качестве прокси сервера проверим Squid и nginx.
1.1. SQUID
Примечание: вся действия будут производиться под пользователем root. Это не безопасно. Для защиты рекомендуется использовать отдельного пользователя и команду sudo.
Команда установки
yum install squid
1.2. NGINX
Для работы прокси и аутентификации в nginx нужно установить модули. nginx по умолчанию не понимает метод HTTP CONNECT, поэтому HTTPS проксирование без модуля работать не будет. Для установки модулей nginx придется пересобрать из исходников.
Команда установки
yum install nginx
Узнаем версию nginx
nginx -V
смотрим вывод nginx version
Узнаем опции, с которыми был скомпилирован nginx
nginx -V
смотрим вывод configure arguments
Устанавливаем зависимости для компиляции PCRE, ZLIB, OPENSSL
yum groupinstall 'Development Tools'
yum install zlib zlib-devel pcre pcre-devel openssl openssl-devel pam-devel
Скачиваем исходный код nginx
Примечание: версию используем ту же, что в выводе команды выше
mkdir -p /root/sources/nginx cd /root/sources/nginx wget http://nginx.org/download/nginx-1.14.0.tar.gz tar zxf nginx-1.14.0.tar.gz
Скачиваем модуль PAM
Примечание: используем PAM модуль из репозитория проекта
mkdir -p /root/sources/http_auth_pam_module cd /root/sources/http_auth_pam_module wget https://raw.githubusercontent.com/sto/ngx_http_auth_pam_module/master/ngx_http_auth_pam_module.c wget https://raw.githubusercontent.com/sto/ngx_http_auth_pam_module/master/config
Скачиваем модуль HTTP CONNECT
Примечание: используем модуль для версии из команды выше. Репозиторий проекта
mkdir -p /root/sources/http_proxy_connect_module cd /root/sources/http_proxy_connect_module wget https://raw.githubusercontent.com/chobits/ngx_http_proxy_connect_module/master/patch/proxy_connect_1014.patch wget https://raw.githubusercontent.com/chobits/ngx_http_proxy_connect_module/master/ngx_http_proxy_connect_module.c wget https://raw.githubusercontent.com/chobits/ngx_http_proxy_connect_module/master/config
Применим патч http_proxy_connect_module
cd /root/sources/nginx/nginx-1.14.0 patch -p1 < /root/sources/http_proxy_connect_module/proxy_connect_1014.patch
Настраиваем сборку ngnix из исходного кода с модулями
Примечание: параметры могут отличаться от ваших.
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=/root/sources/http_auth_pam_module --add-module=/root/sources/http_proxy_connect_module
Примечание: Для получения команды нужно взять опции компиляции из вывода команды выше и добавить к ним два модуля —add-module=/root/sources/http_auth_pam_module —add-module=/root/sources/http_proxy_connect_module
Собираем nginx из исходных кодов
ВНИМАНИЕ: Команда установки сама заменит файлы в папках. Если у вас на этом nginx сервере запущено что-то оно может перестать работать.
make make install