Перейти к основному содержимому
Вернуться в категорию

Настройка прокси-сервера: руководство по Squid и HAProxy

Squid forward proxy, HAProxy балансировщик нагрузки, SSL-терминация, правила ACL, кэширование, проверки состояния и высокая доступность.

Время чтения: 16 мин Мониторинг
proxysquidhaproxyload balancerssl terminationcaching

Содержание

Настройка прокси-сервера: руководство по 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

Установка через пакетный менеджер

hljs bash
# 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

hljs yaml
# 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

hljs bash
# /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

hljs bash
# Блокировка определённых сайтов
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

hljs bash
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

hljs bash
sudo apt update
sudo apt install haproxy -y
haproxy -v
sudo systemctl enable --now haproxy

HAProxy с Docker

hljs yaml
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

hljs bash
# /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-терминация

hljs bash
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

hljs bash
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)

hljs bash
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
    }
}

Проверка конфигурации и тестирование

hljs bash
squid -k parse
haproxy -c -f /etc/haproxy/haproxy.cfg
curl -x http://proxy-ip:3128 http://example.com

Настройте безопасный доступ в интернет с помощью Squid и высокодоступную балансировку нагрузки с HAProxy на серверах REXE. С функциями SSL-терминации и проверки состояния вы можете построить инфраструктуру корпоративного уровня.