Добавить в корзинуПозвонить
Найти в Дзене
AndranikFutureLabs_Channel

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

Squid — удобный и популярный open-source http-прокси. В этой инструкции мы расскажем, как установить Squid на предварительно настроенный VPS с Ubuntu 20.04 и настроить его работу. Для работы нам понадобится предварительно настроенный сервер под управлением VPS с предустановленным веб-сервером Apache. Устанавливать 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=e
Оглавление

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