# Установка и настройка Squid Proxy на VPS с Ubuntu 20.04

Squid — удобный и популярный open-source http-прокси. В этой инструкции мы расскажем, как установить Squid на предварительно настроенный VPS с Ubuntu 20.04 и настроить его работу.

Для работы нам понадобится предварительно настроенный сервер под управлением VPS с предустановленным веб-сервером Apache.

# Установка Squid Proxy

Устанавливать Squid будем с помощью стандартной команды apt. Обновим список доступных для установки пакетов и установим сам Squid:

sudo apt update

sudo apt install squid

После завершения установки Squid автоматически запустится. Проверить его работу можно стандартной командой:

sudo systemctl status squid

#Output
● squid.service - Squid Web Proxy Server
     Loaded: loaded (/lib/systemd/system/squid.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-07-04 04:54:26 UTC; 44min ago
       Docs: man:squid(8)
    Process: 9523 ExecStartPre=/usr/sbin/squid --foreground -z (code=exited, status=0/SUCCESS)
    Process: 9526 ExecStart=/usr/sbin/squid -sYC (code=exited, status=0/SUCCESS)
   Main PID: 9527 (squid)
      Tasks: 5 (limit: 19660)
     Memory: 16.6M
     CGroup: /system.slice/squid.service
             ├─9527 /usr/sbin/squid -sYC
             ├─9529 (squid-1) --kid squid-1 -sYC
             ├─9530 (logfile-daemon) /var/log/squid/access.log
             ├─9531 (pinger)
             └─9583 (basic_ncsa_auth) /etc/squid/passwords

…

По умолчанию Squid работает только с соединениями, пришедшими с сервера, на котором он запущен. Чтобы разрешить работать Squid со всеми входящими соединениями или с соединениями, приходящими только с конкретного IP, нужно изменить его конфигурационный файл. Для этого откроем его:

sudo vim /etc/squid/squid.conf

В этом файле нужно найти блок, отвечающий за подключения. Этот блок начинается со строки # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS. Чтобы найти нужную строку в большом файле (в конфигурационном файле Squid более 4 000 строк), в редакторе vim в командной строке введите / и после него — текст, который нужно найти.

Чтобы разрешить подключения к этому прокси-сервера с вашей локальной машины, перейдите к строкам:

include /etc/squid/conf.d/*
# Example rule allowing access from your local networks.

Добавьте после них строку:

…
acl localnet src your_ip_address`
…

Здесь:

  • aclAccess Control List — директива, открывающая список разрешённых адресов;

  • localnet — название сети, от которой приходит запрос на подключение;

  • src — обозначение адреса сети (в данном случае — IP).

Теперь Squid готов к работе.

Для повышения уровня безопасности прокси настроим аутентификацию по паролю, чтобы его могли использовать только зарегистрированные пользователи.

# Настройка аутентификации для пользователей Squid

В качестве меры безопасности будем использовать аутентификацию пользователей по паролю. Для этого установим дополнительную библиотеку для используемого веб-сервера (в нашем случае это Apache):

sudo apt install apache2-utils

Теперь создадим файл, в котором будут храниться имена пользователей и пароли:

touch /etc/squid/passwords

Добавим в этот файл имя пользователя и его пароль:

sudo htpasswd -c /etc/squid/passwords squid_username

Эта команда добавит в файл пользователя squid_username, после чего нужно будет ввести пароль для него.

Чтобы проверить, что пароли будут храниться в зашифрованном виде, можно посмотреть содержимое файла:

sudo cat /etc/squid/passwords

#Output
squid_username:$abr1$NIPFiAzx$DVoIkN6RCvn13wdajG2.X0

После этого нужно снова открыть конфигурационный файл Squid и добавить в него строки, отвечающие за использование пароля:

sudo vim /etc/squid/squid.conf

Блок, отвечающий за подключения, приведём к следующем виду:

include /etc/squid/conf.d/*
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
# Example rule allowing access from your local networks.
acl localnet src your_ip_address
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost
http_access allow authenticated
# And finally deny all other access to this proxy
http_access deny all

Эти строки указывают Squid использовать файл с пользователями и паролями для проверки входящих соединений.

Осталось только добавить порт, на котором работает Squid, в список исключений файрвола, если он включён.

sudo ufw allow 3128

# Проверка подключения

Самый простой способ проверки работы прокси — команда curl, которую мы запустим с локального компьютера.

Отправим запрос к одному из сайтов, которые точно работают, и проверим, как отработает наш прокси. Запустим консоль на локальной машине и выполним команду:

curl -v -x http://squid_username:squid_password@your_server_ip:3128 http://www.google.com/

Если всё было указано правильно — имя пользователя Squid, его пароль, IP сервера, к которому подключаетесь, и IP локального компьютера (в конфигурационном файле Squid) — на экране должна появиться примерно такая информация:

#Output
*   Trying your_server_ip:3128...
* Connected to your_server_ip (your_server_ip) port 3128 (#0)
* Proxy auth using Basic with user 'squid_user'
> GET http://www.google.com/ HTTP/1.1
> Host: www.google.com
> Proxy-Authorization: Basic c3F1aWRfdXNlcjpzcXVpZHBhc3M=
> User-Agent: curl/7.74.0
> Accept: */*
> Proxy-Connection: Keep-Alive
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Mon, 04 Jul 2022 06:23:52 GMT
…