Как создать HTTP-прокси с помощью Squid на CentOS 7/8
Веб-прокси существуют уже довольно давно и используются миллионами пользователей по всему миру. У них есть широкий спектр целей, самой популярной из которых является онлайн-анонимность, но есть и другие способы использования веб-прокси. Вот несколько идей:
- Анонимность в интернете
- Улучшить онлайн-безопасность
- Улучшить время загрузки
- Блокировать вредоносный трафик
- Ведите журнал вашей онлайн-активности
- Обойти региональные ограничения
- В некоторых случаях может уменьшить использование пропускной способности
Как работает прокси-сервер
Прокси-сервер — это компьютер, который используется в качестве посредника между клиентом и другими серверами, у которых клиент может запрашивать ресурсы. Простым примером этого является ситуация, когда клиент делает онлайн-запросы (например, хочет открыть веб-страницу), он сначала подключается к прокси-серверу.
Прокси-сервер затем проверяет свой локальный дисковый кэш, и если данные там находятся, он возвращает данные клиенту; если данные не закэшированы, он делает запрос от имени клиента, используя IP-адрес прокси (отличный от адреса клиента), а затем возвращает данные клиенту. Прокси-сервер попытается кэшировать новые данные и будет использовать их для будущих запросов к тому же серверу.
Что такое Squid Proxy
Squid — это веб-прокси, который используется моим широким кругом организаций. Часто его применяют как кэш-прокси для улучшения времени отклика и уменьшения использования пропускной способности.
Для целей этой статьи я буду устанавливать Squid на VPS Linode с CentOS 7 и использовать его в качестве HTTP-прокси-сервера.
Как установить Squid на CentOS 7/8
Прежде чем мы начнем, вам следует знать, что Squid не имеет минимальных требований, но объем используемой оперативной памяти может варьироваться в зависимости от того, как клиенты просматривают интернет через прокси-сервер.
Squid включён в базовый репозиторий, и поэтому установка проста и прямолинейна. Прежде чем устанавливать его, однако, убедитесь, что ваши пакеты обновлены, запустив.
# yum -y update
Продолжите, установив squid, запустите его и включите автозапуск системы с помощью следующих команд.
# yum -y install squid
# systemctl start squid
# systemctl enable squid
На этом этапе ваш веб-прокси Squid должен уже работать, и вы можете проверить состояние службы с помощью.
# systemctl status squid
Пример вывода
● squid.service - Squid caching proxy
Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2018-09-20 10:07:23 UTC; 5min ago
Main PID: 2005 (squid)
CGroup: /system.slice/squid.service
├─2005 /usr/sbin/squid -f /etc/squid/squid.conf
├─2007 (squid-1) -f /etc/squid/squid.conf
└─2008 (logfile-daemon) /var/log/squid/access.log
Sep 20 10:07:23 tecmint systemd[1]: Starting Squid caching proxy...
Sep 20 10:07:23 tecmint squid[2005]: Squid Parent: will start 1 kids
Sep 20 10:07:23 tecmint squid[2005]: Squid Parent: (squid-1) process 2007 started
Sep 20 10:07:23 tecmint systemd[1]: Started Squid caching proxy.
Вот некоторые важные местоположения файлов, о которых вам следует знать:
- Файл конфигурации Squid: /etc/squid/squid.conf
- Журнал доступа Squid: /var/log/squid/access.log
- Журнал Squid Cache: /var/log/squid/cache.log
Минимальный файл конфигурации squid.conf (без комментариев) выглядит так:
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
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
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
Настройка Squid в качестве HTTP-прокси
Здесь мы покажем вам, как настроить Squid в качестве HTTP-прокси, используя только IP-адрес клиента для аутентификации.
Добавить ACL Squid
Если вы хотите разрешить IP-адресу доступ к веб через ваш новый прокси-сервер, вам потребуется добавить новую строку ACL (список контроля доступа) в файл конфигурации.
# vim /etc/squid/squid.conf
Строку, которую вы должны добавить, это:
acl localnet src XX.XX.XX.XX
Где XX.XX.XX.XX — это фактический IP-адрес клиента, который вы хотите добавить. Строку следует добавить в начале файла, где определены ACL. Хорошей практикой является добавление комментария рядом с ACL, который будет описывать, кто использует этот IP-адрес.
Важно отметить, что если Squid находится за пределами вашей локальной сети, следует добавить публичный IP-адрес клиента.
Вам нужно будет перезапустить Squid, чтобы новые изменения вступили в силу.
# systemctl restart squid
Открыть порты прокси Squid
Как вы, возможно, видели в файле конфигурации, разрешено подключение только через определённые порты. Вы можете добавить больше, редактируя файл конфигурации.
acl Safe_ports port XXX
Где XXX — это фактический порт, который вы хотите загрузить. Снова же, хорошей идеей будет оставить комментарий рядом с ним, который опишет, для чего этот порт будет использоваться.
Чтобы изменения вступили в силу, вам нужно будет перезапустить squid еще раз.
# systemctl restart squid
Аутентификация клиента Squid Proxy
Скорее всего, вы захотите, чтобы ваши пользователи проходили аутентификацию перед использованием прокси. Для этой цели вы можете включить базовую HTTP-аутентификацию. Она легко и быстро настраивается.
Сначала вам нужно установить httpd-tools.
# yum -y install httpd-tools
Теперь давайте создадим файл, который позже будет хранить имя пользователя для аутентификации. Squid работает с пользователем “squid”, поэтому файл должен принадлежать этому пользователю.
# touch /etc/squid/passwd
# chown squid: /etc/squid/passwd
Теперь мы создадим нового пользователя с именем “proxyclient ” и установим для него пароль.
# htpasswd /etc/squid/passwd proxyclient
New password:
Re-type new password:
Adding password for user proxyclient
Теперь для настройки аутентификации откройте файл конфигурации.
# vim /etc/squid/squid.conf
После ACL для портов добавьте следующие строки:
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Squid Basic Authentication
auth_param basic credentialsttl 2 hours
acl auth_users proxy_auth REQUIRED
http_access allow auth_users
Сохраните файл и перезапустите squid, чтобы новые изменения вступили в силу:
# systemctl restart squid
Блокировать веб-сайты на прокси Squid
Наконец, мы создадим еще один ACL, который поможет нам блокировать нежелательные веб-сайты. Сначала создайте файл, в котором будут храниться заблокированные сайты.
# touch /etc/squid/blacklisted_sites.acl
Вы можете добавить некоторые домены, которые хотите заблокировать. Например:
.badsite1.com
.badsite2.com
Следующая точка указывает Squid блокировать все ссылки на эти сайты, включая www.badsite1, subsite.badsite1.com, и т.д.
Теперь откройте файл конфигурации Squid.
# vim /etc/squid/squid.conf
Сразу после ACL для портов добавьте следующие две строки:
acl bad_urls dstdomain "/etc/squid/blacklisted_sites.acl"
http_access deny bad_urls
Теперь сохраните файл и перезапустите Squid:
# systemctl restart squid
После того как все настроено правильно, вы можете настроить браузер вашего локального клиента или сетевые настройки операционной системы для использования вашего HTTP-прокси Squid.
Заключение
В этом руководстве вы узнали, как установить, защитить и настроить HTTP-прокси-сервер Squid самостоятельно. С полученной информацией вы теперь можете добавить базовую фильтрацию входящего и исходящего трафика через Squid.
Если вы хотите приложить дополнительные усилия, вы даже можете настроить Squid так, чтобы он блокировал некоторые веб-сайты в рабочее время, чтобы предотвратить отвлекающие факторы. Если у вас есть вопросы или комментарии, пожалуйста, оставьте их в разделе комментариев ниже.