# Установка и настройка 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`
…
Здесь:
acl
— Access 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
…