Squid в Docker на VPS Ubuntu: прокси для WordPress

Разбор установки прокси Squid в Docker на VPS с Ubuntu. Типичный сценарий — обойти блокировки при обновлениях WordPress и доступе к внешним API с хостинга, где часть адресов режется. Схема: Docker + Compose, basic-auth, проброс порта, константы в wp-config.php.

Шаг 1. Установка Docker на Ubuntu

В штатном репозитории Ubuntu Docker часто не самый свежий. Для Docker CE удобнее официальный репозиторий.

Зависимости для HTTPS-репозиториев:

sudo apt install apt-transport-https ca-certificates curl software-properties-common -y

GPG-ключ Docker:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Репозиторий (в примере — Ubuntu Focal / 20.04, amd64). Для другой версии подставьте свой codename вместо focal:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

Проверка, что APT видит пакеты:

apt-cache policy docker-ce

Установка и проверка службы:

sudo apt install docker-ce -y
sudo systemctl status docker
docker --version

Ожидаемый статус: Active: active (running).

Шаг 2. Docker Compose

Compose удобен, чтобы описать сервис, тома и restart-политику в одном файле:

sudo apt install docker-compose -y
docker-compose --version

Шаг 3. Конфиг Squid и Compose

Каталог проекта:

mkdir squid
cd squid

Файл docker-compose.yaml:

version: "3"
services:
  proxy:
    image: ubuntu/squid
    ports:
      - "8080:3128"
    volumes:
      - ./squid.conf:/etc/squid/squid.conf
      - ./passwords:/etc/squid/passwords
    restart: always

Снаружи контейнера порт 8080, внутри Squid слушает 3128. Образ ubuntu/squid — официальный вариант от Ubuntu на Docker Hub.

Файл squid.conf с basic-auth и без кэша (прокси «на проход»):

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 CONNECT method CONNECT
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm my-proxy-name
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
http_port 3128
cache deny all
access_log none
cache_log /dev/null

Доступ только для пользователей из файла passwords. Логи и кэш отключены, чтобы не раздувать диск на VPS; при отладке access_log можно вернуть.

Пустой файл паролей (наполним через htpasswd):

nano passwords
# или: touch passwords

Шаг 4. Запуск контейнера

docker-compose up -d
docker ps

В списке контейнеров Squid должен быть в состоянии Up. Если падает сразу — смотрите docker-compose logs: чаще всего битый путь к passwords или синтаксис squid.conf.

Шаг 5. Пользователи (htpasswd)

Первый пользователь (ключ -c создаёт файл заново, не затрите существующих):

sudo htpasswd -c passwords username

Следующие пользователи — без -c:

sudo htpasswd passwords username2

Пакет с утилитой: apache2-utils (sudo apt install apache2-utils), если htpasswd не найден.

Шаг 6. WordPress через прокси

В wp-config.php (до строки «That’s all, stop editing!»):

define('WP_PROXY_HOST', 'IP_или_хост_VPS_с_прокси');
define('WP_PROXY_PORT', '8080');
define('WP_PROXY_USERNAME', 'username');
define('WP_PROXY_PASSWORD', 'password');
define('WP_PROXY_BYPASS_HOSTS', 'localhost, www.example.com');

Важно: с хоста снаружи контейнера открыт порт 8080 (маппинг 8080:3128). Если WordPress на той же машине — укажите 127.0.0.1 и порт 8080. Если сайт на другом сервере — публичный IP/DNS VPS с прокси и тот же порт, плюс firewall только для доверенных IP.

После правок проверьте обновления ядра/плагинов и исходящие HTTP-запросы из админки. Учётки и пароль прокси не коммитьте в git.

Безопасность (кратко)

  • не оставляйте 8080/3128 открытыми в интернет без ACL и сильных паролей;
  • ограничьте доступ firewall (ufw/iptables/security group) по IP клиентов;
  • сложные пароли basic-auth, отдельный пользователь только под WP;
  • обновляйте образ ubuntu/squid и хост.

Итог

Получается лёгкий HTTP-прокси с авторизацией в Docker: конфиг и пароли на томах, автозапуск через restart: always. Схема подходит и для WordPress, и для других клиентов, которым нужен исходящий HTTP(S) через контролируемый узел.

Источники и ссылки


Комментарии загружаются…