Настройка прокси-сервера: руководство по Squid и HAProxy
Squid forward proxy, HAProxy балансировщик нагрузки, SSL-терминация, правила ACL, кэширование, проверки состояния и высокая доступность.
Содержание
Настройка прокси-сервера: руководство по Squid и HAProxy
Прокси-серверы являются критически важными компонентами для управления сетевым трафиком, повышения безопасности и обеспечения балансировки нагрузки. В этом руководстве мы подробно рассмотрим настройку Squid forward proxy и HAProxy load balancer.
Что такое Squid Proxy?
Squid — наиболее широко используемый прокси-сервер и сервер кэширования с открытым исходным кодом. Он экономит пропускную способность за счёт кэширования веб-контента и повышает сетевую безопасность с помощью правил контроля доступа.
Основные возможности Squid:
- HTTP/HTTPS Proxy: Поддержка forward и reverse proxy
- Кэширование: Кэширование веб-контента
- ACL (Access Control List): Детальный контроль доступа
- Ограничение полосы пропускания: Лимитирование трафика
- SSL Bumping: Инспекция HTTPS-трафика
- Аутентификация: LDAP, RADIUS, NCSA
Установка Squid
Установка через пакетный менеджер
# Ubuntu/Debian
sudo apt update
sudo apt install squid -y
# CentOS/RHEL
sudo dnf install squid -y
# Статус сервиса
sudo systemctl enable --now squid
sudo systemctl status squid
Squid с Docker
# docker-compose.yml
version: '3.8'
services:
squid:
image: ubuntu/squid:latest
container_name: squid-proxy
restart: unless-stopped
ports:
- "3128:3128"
volumes:
- ./squid.conf:/etc/squid/squid.conf
- squid_cache:/var/spool/squid
- squid_logs:/var/log/squid
volumes:
squid_cache:
squid_logs:
Базовая конфигурация Squid
# /etc/squid/squid.conf
# Определения сетей
acl localnet src 10.0.0.0/8
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
# Определения портов
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 443
acl Safe_ports port 21
acl Safe_ports port 1025-65535
acl CONNECT method CONNECT
# Правила доступа
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localnet
http_access allow localhost
http_access deny all
# Порт прокси
http_port 3128
# Настройки кэша
cache_mem 256 MB
maximum_object_size_in_memory 512 KB
cache_dir ufs /var/spool/squid 10000 16 256
maximum_object_size 100 MB
# Настройки логов
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
# Конфиденциальность
forwarded_for off
request_header_access Via deny all
request_header_access X-Forwarded-For deny all
Правила ACL Squid
# Блокировка определённых сайтов
acl blocked_sites dstdomain .facebook.com .twitter.com .instagram.com
http_access deny blocked_sites
# Блокировка определённых типов файлов
acl blocked_extensions urlpath_regex -i \.(mp3|mp4|avi|mkv)$
http_access deny blocked_extensions
# Ограничение доступа вне рабочих часов
acl work_hours time MTWHF 08:00-18:00
acl social_media dstdomain .youtube.com .reddit.com
http_access deny social_media !work_hours
# Ограничение полосы пропускания
delay_pools 1
delay_class 1 2
delay_parameters 1 1000000/1000000 500000/500000
delay_access 1 allow localnet
Аутентификация Squid
sudo apt install apache2-utils -y
sudo htpasswd -c /etc/squid/passwords user1
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm Аутентификация прокси
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
http_access deny all
Что такое HAProxy?
HAProxy (High Availability Proxy) — высокопроизводительный TCP/HTTP балансировщик нагрузки и прокси-сервер. Он может обрабатывать миллионы одновременных соединений и обеспечивает балансировку нагрузки корпоративного уровня.
Основные возможности HAProxy:
- Балансировка Layer 4/7: TCP и HTTP балансировка
- SSL-терминация: Завершение SSL/TLS шифрования
- Health Checks: Мониторинг состояния backend-серверов
- Sticky Sessions: Привязка сессий
- Rate Limiting: Ограничение частоты запросов
- Stats Dashboard: Панель статистики в реальном времени
Установка HAProxy
sudo apt update
sudo apt install haproxy -y
haproxy -v
sudo systemctl enable --now haproxy
HAProxy с Docker
version: '3.8'
services:
haproxy:
image: haproxy:latest
container_name: haproxy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "8404:8404"
volumes:
- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
- ./certs:/etc/haproxy/certs:ro
Базовая конфигурация HAProxy
# /etc/haproxy/haproxy.cfg
global
log /dev/log local0
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
ssl-default-bind-options ssl-min-ver TLSv1.2
defaults
log global
mode http
option httplog
option forwardfor
timeout connect 5000
timeout client 50000
timeout server 50000
listen stats
bind *:8404
stats enable
stats uri /stats
stats refresh 10s
stats auth admin:НадёжныйПароль123
frontend http_front
bind *:80
redirect scheme https code 301 if !{ ssl_fc }
frontend https_front
bind *:443 ssl crt /etc/haproxy/certs/example.com.pem
acl is_api path_beg /api
use_backend api_servers if is_api
default_backend web_servers
backend web_servers
balance roundrobin
option httpchk GET /health
http-check expect status 200
cookie SERVERID insert indirect nocache
server web1 192.168.1.10:8080 check cookie web1
server web2 192.168.1.11:8080 check cookie web2
backend api_servers
balance leastconn
option httpchk GET /health
server api1 192.168.1.20:3000 check
server api2 192.168.1.21:3000 check
SSL-терминация
sudo cat /etc/letsencrypt/live/example.com/fullchain.pem \
/etc/letsencrypt/live/example.com/privkey.pem \
> /etc/haproxy/certs/example.com.pem
Rate Limiting в HAProxy
frontend https_front
bind *:443 ssl crt /etc/haproxy/certs/example.com.pem
stick-table type ip size 100k expire 30s store http_req_rate(10s)
http-request track-sc0 src
http-request deny deny_status 429 if { sc_http_req_rate(0) gt 200 }
Высокая доступность HAProxy (HA)
sudo apt install keepalived -y
vrrp_script check_haproxy {
script "/usr/bin/killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 101
virtual_ipaddress {
192.168.1.100/24
}
track_script {
check_haproxy
}
}
Проверка конфигурации и тестирование
squid -k parse
haproxy -c -f /etc/haproxy/haproxy.cfg
curl -x http://proxy-ip:3128 http://example.com
Настройте безопасный доступ в интернет с помощью Squid и высокодоступную балансировку нагрузки с HAProxy на серверах REXE. С функциями SSL-терминации и проверки состояния вы можете построить инфраструктуру корпоративного уровня.
Связанные статьи
Инструменты мониторинга серверов: Grafana, Prometheus и Netdata
Настройка стека Prometheus + Grafana, Netdata, node_exporter, правила оповещений, создание дашбордов и мониторинг метрик сервера.
Установка Nginx Proxy Manager: Reverse Proxy с веб-интерфейсом
Установка Nginx Proxy Manager через Docker, автоматическое обновление SSL-сертификатов, настройка proxy host, списки доступа, редиректы, потоки и пользовательские locations.
Установка CrowdSec: Движок безопасности на основе сообщества
Установка CrowdSec, настройка bouncer, обнаружение атак, блокировка IP, дашборд, управление коллекциями и сценариями.