Как установить и настроить прокси-сервер Squid на Rocky Linux/Alma Linux 9
На этой странице
- Предпосылки
- Шаг 1. Установите Squid
- Шаг 2. Настройка прокси-сервера Squid
- 1. Настройка политик доступа к Squid
- 2. Блокировка сайта
- 3. Блокировать загрузку определенных файлов
- 4. Блокировать веб-сайты по ключевым словам
- 5. Маскировка IP-адреса клиентов
- 6. Изменить порт прокси-сервера Squid
- 7. Настройка брандмауэра/SELinux
- 1. Общесистемная конфигурация прокси
- 2. Настройка прокси в браузере
- 3. Настройте DNF для использования Squid Proxy
- 4. Использование Сквидклиента
Прокси-сервер располагается между двумя сетями и выступает в роли шлюза между конечным пользователем и интернет-ресурсом. Через прокси-сервер конечный пользователь может фильтровать доступ. Они могут контролировать и отслеживать веб-трафик для различных целей, включая конфиденциальность, безопасность и кэширование.
Squid используется как механизм распределенного кэширования, за счет сохранения данных, полученных от разных запросов, увеличения скорости трафика при выполнении однотипных запросов. Если у кэширующего сервера нет кэшированных данных, он перенаправляет запрос на веб-сервер, где хранятся данные.
В этом руководстве вы узнаете, как установить и настроить Squid Proxy на сервере Rocky/Alma Linux 9.
Предпосылки
-
A server running Rocky Linux 9 or Alma Linux 9.
-
A non-root user with sudo privileges.
-
Make sure everything is updated.
$ sudo dnf update
-
Install basic utility packages. Some of them may already be installed.
$ sudo dnf install wget curl nano unzip yum-utils -y
Шаг 1 - Установите Squid
Для установки Squid требуется репозиторий Epel. Установите репозиторий Epel.
$ sudo dnf install epel-release
Установите прокси Сквид.
$ sudo dnf install squid
Проверьте установку.
$ squid --version Squid Cache: Version 5.2 Service Name: squid This binary uses OpenSSL 3.0.1 14 Dec 2021..........
Включите и запустите службу Squid.
$ sudo systemctl enable squid --now
Проверить статус услуги.
$ sudo systemctl status squid ? squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2022-09-28 11:52:24 UTC; 2min ago Docs: man:squid(8) Process: 94622 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUCCESS) Main PID: 94624 (squid) Tasks: 3 (limit: 5915) Memory: 16.3M CPU: 4.207s CGroup: /system.slice/squid.service ??94624 /usr/sbin/squid --foreground -f /etc/squid/squid.conf ??94626 "(squid-1)" --kid squid-1 --foreground -f /etc/squid/squid.conf ??94627 "(logfile-daemon)" /var/log/squid/access.log Sep 28 11:52:24 squidproxy systemd[1]: Starting Squid caching proxy... Sep 28 11:52:24 squidproxy squid[94624]: Squid Parent: will start 1 kids Sep 28 11:52:24 squidproxy squid[94624]: Squid Parent: (squid-1) process 94626 started Sep 28 11:52:24 squidproxy systemd[1]: Started Squid caching proxy.
Шаг 2 — Настройте прокси-сервер Squid
Squid хранит свою конфигурацию в файле
/etc/squid/squid.conf
. Проверьте содержимое файла без комментариев.$ sudo grep -vE "^#|^$" /etc/squid/squid.conf
Приведенная выше команда отфильтровывает все операторы, начинающиеся с
#
, которые представляют собой комментарии. Вы получите следующий вывод.acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN) acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN) acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN) acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN) acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN) 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 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
Первым шагом к редактированию конфигурации является создание резервной копии существующей конфигурации.
$ sudo cp /etc/squid/squid.conf{,.bak}
Откройте файл для редактирования.
$ sudo nano /etc/squid/squid.conf
1. Настройте политики доступа Squid
Список контроля доступа (ACL) определяет, кому разрешено использовать Squid в качестве прокси в вашей локальной сети.
Давайте добавим хосты в подсеть
192.168.204.0/24
, определив следующие правила.acl newlocalnet src 192.168.205.0/24
Это создает новый ACL, известный как
newlocalnet
с хостами в подсети.Чтобы разрешить доступ к этому ACL, добавьте следующую строку под строкой
http_access deny all
.http_access allow newlocalnet
Squid читает файл конфигурации сверху вниз.
2. Блокировка сайта
Создайте файл для хранения доменов, которые нужно заблокировать.
$ sudo nano /etc/squid/blocked-sites
Добавьте сайты, которые нужно заблокировать. Например,
example.com example.net example.org
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Откройте конфигурационный файл сквида.
$ sudo nano /etc/squid/squid.conf
Добавьте следующие строки.
acl blocked_sites dstdomain "/etc/squid/blocked-sites" http_access deny blocked_sites
3. Блокировать загрузку определенных файлов
Вы также можете заблокировать загрузку файлов с определенными расширениями. Создайте файл для хранения расширений, которые вы хотите заблокировать.
$ sudo nano /etc/squid/blocked-filextensions
Вставьте следующие расширения файлов в указанном формате.
\.exe(\?.*)?$ \.bat(\?.*)?$ \.tar(\?.*)?$ \.mp3(\?.*)?$ \.mp4(\?.*)?$
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Вставьте следующий код в файл конфигурации squid.
acl blockfiles urlpath_regex -i "/etc/squid/blocked-filextensions" http_access deny blockfiles
4. Блокируйте веб-сайты с помощью ключевых слов
Создайте файл конфигурации для блокируемых ключевых слов.
$ sudo nano /etc/squid/banned-keywords
Вставьте следующие ключевые слова.
porn gamble ads movie
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Внесите следующие изменения в файл конфигурации Squid.
acl keyword-ban url_regex "/etc/squid/banned-keywords" http_access deny keyword-ban
5. Замаскируйте IP-адрес клиента
Вы можете анонимизировать трафик, не раскрывая IP-адреса клиентов, добавив следующие строки в файл конфигурации Squid.
# Anonymize Traffic via off forwarded_for off request_header_access Allow allow all request_header_access Authorization allow all request_header_access WWW-Authenticate allow all request_header_access Proxy-Authorization allow all request_header_access Proxy-Authenticate allow all request_header_access Cache-Control allow all request_header_access Content-Encoding allow all request_header_access Content-Length allow all request_header_access Content-Type allow all request_header_access Date allow all request_header_access Expires allow all request_header_access Host allow all request_header_access If-Modified-Since allow all request_header_access Last-Modified allow all request_header_access Location allow all request_header_access Pragma allow all request_header_access Accept allow all request_header_access Accept-Charset allow all request_header_access Accept-Encoding allow all request_header_access Accept-Language allow all request_header_access Content-Language allow all request_header_access Mime-Version allow all request_header_access Retry-After allow all request_header_access Title allow all request_header_access Connection allow all request_header_access Proxy-Connection allow all request_header_access User-Agent allow all request_header_access Cookie allow all request_header_access All deny all
6. Изменить порт прокси-сервера Squid
По умолчанию прокси-сервер Squid слушает порт 3128. Чтобы изменить его, вам нужно закомментировать строку
http_port 3128
в файле конфигурации squid и изменить ее следующим образом.# Squid normally listens to port 3128 # http_port 3128 http_port 7035
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Подтвердите конфигурацию.
$ sudo squid -k parse
Вы получите следующий вывод.
2022/10/04 12:29:25| Startup: Initializing Authentication Schemes ... 2022/10/04 12:29:25| Startup: Initialized Authentication Scheme 'basic' 2022/10/04 12:29:25| Startup: Initialized Authentication Scheme 'digest' 2022/10/04 12:29:25| Startup: Initialized Authentication Scheme 'negotiate' 2022/10/04 12:29:25| Startup: Initialized Authentication Scheme 'ntlm' 2022/10/04 12:29:25| Startup: Initialized Authentication. 2022/10/04 12:29:25| Processing Configuration File: /etc/squid/squid.conf (depth 0) 2022/10/04 12:29:25| Processing: acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN) 2022/10/04 12:29:25| Processing: acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN) ................ 2022/10/04 12:29:25| Processing: acl Safe_ports port 777 # multiling http 2022/10/04 12:29:25| Processing: http_access deny !Safe_ports 2022/10/04 12:29:25| Processing: http_access deny CONNECT !SSL_ports 2022/10/04 12:29:25| Processing: http_access allow localhost manager 2022/10/04 12:29:25| Processing: http_access deny manager 2022/10/04 12:29:25| Processing: http_access allow localnet 2022/10/04 12:29:25| Processing: http_access allow localhost 2022/10/04 12:29:25| Processing: http_access deny all 2022/10/04 12:29:25| Processing: http_port 3128 2022/10/04 12:29:25| Processing: coredump_dir /var/spool/squid 2022/10/04 12:29:25| Processing: refresh_pattern ^ftp: 1440 20% 10080 2022/10/04 12:29:25| Processing: refresh_pattern ^gopher: 1440 0% 1440 2022/10/04 12:29:25| Processing: refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 2022/10/04 12:29:25| Processing: refresh_pattern . 0 20% 4320 2022/10/04 12:29:25| Initializing https:// proxy context 2022/10/04 12:29:25| Requiring client certificates.
Перезапустите сервер Squid.
$ sudo systemctl restart squid
Убедитесь, что Squid прослушивает заданный порт.
$ sudo ss -altnp | grep 8085 LISTEN 0 4096 *:7035 *:* users:(("squid",pid=94626,fd=11))
7. Настройте брандмауэр/SELinux
Если вы используете порт по умолчанию, используйте следующие команды, чтобы разрешить его через брандмауэр.
$ sudo firewall-cmd --add-service=squid --permanent $ sudo firewall-cmd --reload
Если вы включили пользовательский порт, вместо этого используйте следующие команды. Замените
[port_number]
собственным номером порта.sudo firewall-cmd --permanent --add-port=[port_number]/tcp sudo firewall-cmd --reload
Вам также нужно будет включить пользовательский порт с помощью SELinux.
sudo semanage port -a -t squid_port_t -p tcp [port_number]
Шаг 3 — Настройте базовую аутентификацию для Squid
Чтобы настроить Squid для приема аутентификации, нам понадобится утилита
htpasswd
. Установите пакет инструментов Apache.$ sudo dnf install httpd-tools
Создайте пару имя пользователя и пароль, используя следующую команду.
$ sudo htpasswd -c /etc/squid/squid_passwd username
Вам будет предложено создать пароль для пользователя.
Смените владельца файла на пользователя Squid.
$ sudo chown squid /etc/squid/squid_passwd
Squid аутентифицируется с помощью помощника аутентификации. Мы будем использовать помощник
ncsa_auth
. Проверьте расположение файлаncsa_auth
.$ sudo rpm -ql squid | grep ncsa_auth /usr/lib64/squid/basic_ncsa_auth /usr/share/man/man8/basic_ncsa_auth.8.gz
Первым результатом является расположение файла.
Вставьте следующие строки в конфигурацию Squid.
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/squid_passwd acl ncsa_users proxy_auth REQUIRED http_access allow ncsa_users
Перезапустите Squid, чтобы включить аутентификацию.
$ sudo systemctl restart squid
Шаг 4 — Настройка прокси-клиентов Squid
Вам нужны клиенты для подключения к прокси-серверу Squid. Подключиться к серверу можно тремя способами:
<старт>
- Конфигурация прокси-сервера для всей системы
- Использование сервера Squid в качестве шлюза
- Использование веб-браузера в качестве клиента
1. Общесистемная конфигурация прокси
Вы можете настроить прокси-сервер Squid для работы в вашей системе, создав файл /etc/profile.d/squid.sh
, определяющий конфигурацию прокси-сервера.
$ sudo nano /etc/profile.d/squid.sh
Вставьте следующие строки.
PROXY_URL="192.168.205.10:7035" HTTP_PROXY=$PROXY_URL HTTPS_PROXY=$PROXY_URL FTP_PROXY=$PROXY_URL http_proxy=$PROXY_URL https_proxy=$PROXY_URL ftp_proxy=$PROXY_URL export HTTP_PROXY HTTPS_PROXY FTP_PROXY http_proxy https_proxy ftp_proxy
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса. Исходный файл.
$ source /etc/profile.d/squid.sh
Проверьте конфигурацию, выполнив команду wget
.
$ wget google.com --2022-10-04 12:15:59-- http://google.com/ Connecting to 192.168.205.10:7035... connected. Proxy request sent, awaiting response... 301 Moved Permanently Location: http://www.google.com/ [following] --2022-10-04 12:15:59-- http://www.google.com/ Reusing existing connection to 192.168.205.10:7035. Proxy request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html.1’ index.html.1 [ <=> ] 14.14K --.-KB/s in 0s 2022-10-04 12:15:59 (68.1 MB/s) - ‘index.html.1’ saved [14479]
Чтобы использовать его с вашим именем пользователя и паролем, используйте следующую команду.
$ wget google.com --proxy-user=YOUR-USERNAME-HERE --proxy-password=YOUR-PASSWORD-HERE
Вы можете проверить журналы сервера Squid.
1664885759.296 0 192.168.205.10 TCP_MEM_HIT/301 750 GET http://google.com/ - HIER_NONE/- text/html 1664885759.351 54 192.168.205.10 TCP_MISS/200 15113 GET http://www.google.com/ - HIER_DIRECT/216.58.208.100 text/html
2. Настройка прокси в браузере
Вы можете легко настроить прокси-сервер Squid для работы в браузере Firefox или Chrome. Но метод по умолчанию не поддерживает имя пользователя и пароль. Вам нужно будет использовать стороннее расширение в вашем браузере, чтобы использовать прокси-сервер Squid с аутентификацией. Используйте Proxy SwitchOmega для Chrome и браузеров на базе Chrome.
Давайте проверим использование стандартного расширения FoxyProxy в Chrome. Установите расширение, используя URL-адрес, указанный выше. Откройте параметры расширения, и вы получите следующий экран.
Нажмите кнопку «Добавить», чтобы добавить URL-адрес прокси-сервера.
Введите параметры прокси, включая имя службы, IP-адрес, номер порта, имя пользователя и пароль. Включите параметр Не использовать для локальных IP-адресов и внутренних/частных IP-адресов.
Нажмите кнопку Сохранить, чтобы продолжить. Выберите имя прокси-сервера из раскрывающегося списка на следующей странице, чтобы включить его.
Экран должен выглядеть следующим образом.
Посетите URL-адрес https://whatismyip.com
, чтобы проверить, работает ли прокси.
Поскольку мы замаскировали IP-адрес клиента, вы увидите IP-адрес сервера, на котором размещен Squid-прокси.
Вы также можете проверить через журналы Squid.
$ sudo tail -f /var/log/squid/access.log
Вы получите следующий вывод.
1664909025.814 251 127.0.0.1 TCP_TUNNEL/200 8662 CONNECT mirrors.rockylinux.org:443 - HIER_DIRECT/2a04:4e42:9::644 - 1664909025.819 3 127.0.0.1 TCP_MISS/200 3347 GET http://mirror.nl.stackscale.com/rocky/9.0/extras/x86_64/os/repodata/repomd.xml - HIER_DIRECT/5.57.230.252 text/xml 1664909026.218 395 127.0.0.1 TCP_TUNNEL/200 8446 CONNECT apprepo.vultr.com:443 - HIER_DIRECT/45.63.19.147 - 1664909027.084 0 223.190.89.32 TCP_DENIED/403 3974 CONNECT www.whatismyip.com:443 - HIER_NONE/- text/html 1664909442.461 73 223.190.89.32 TCP_MISS/200 2362 POST http://ocsp.godaddy.com/ - HIER_DIRECT/192.124.249.41 application/ocsp-response 1664909612.229 171207 223.190.89.32 TCP_TUNNEL/200 6174 CONNECT api.whatismyip.com:443 - HIER_DIRECT/34.98.116.180 - 1664909612.245 172627 223.190.89.32 TCP_TUNNEL/200 67818 CONNECT www.whatismyip.com:443 - HIER_DIRECT/104.21.89.158 - 1664909613.231 171384 223.190.89.32 TCP_TUNNEL/200 3712 CONNECT apiv6.whatismyip.com:443 - HIER_DIRECT/2600:1901:0:e01d:: - 1664910098.088 3098 223.190.89.32 TCP_TUNNEL/200 10403 CONNECT profile.accounts.firefox.com:443 - HIER_DIRECT/52.40.171.113 - 1664910103.232 545 223.190.89.32 TCP_TUNNEL/200 6165 CONNECT safebrowsing.googleapis.com:443 - HIER_DIRECT/172.217.168.234 -
3. Настройте DNF для использования Squid Proxy.
Репозиторий DNF можно настроить для использования прокси-сервера Squid. Откройте файл конфигурации DNF.
$ sudo nano /etc/dnf/dnf.conf
Вставьте следующие строки в конец файла.
proxy=http://192.168.205.12:8085/ proxy_username=username proxy_password=password
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Проверьте изменения, обновив систему или установив любой пакет.
$ sudo dnf update
Проверьте журналы.
http://mirror.nl.stackscale.com/rocky/9.0/AppStream/x86_64/os/Packages/t/telnet-0.17-85.el9.x86_64.rpm - HIER_DIRECT/5.57.230.252 application/x-redhat-package-manager 1664896976.909 3 192.168.205.12 TCP_MISS/200 24764 GET http://mirror.nl.stackscale.com/rocky/9.0/AppStream/x86_64/os/Packages/p/perl-HTTP-Date-6.05-7.el9.noarch.rpm - HIER_DIRECT/5.57.230.252 application/x-redhat-package-manager 1664896976.920 8 192.168.205.12 TCP_MISS/200 98591 GET http://mirror.nl.stackscale.com/rocky/9.0/AppStream/x86_64/os/Packages/p/perl-HTTP-Message-6.29-3.el9.noarch.rpm - HIER_DIRECT/5.57.230.252 application/x-redhat-package-manager 1664896976.932 9 192.168.205.12 TCP_MISS/200 32361 GET http://mirror.nl.stackscale.com/rocky/9.0/AppStream/x86_64/os/Packages/p/perl-I18N-Langinfo-0.19-479.el9.x86_64.rpm - HIER_DIRECT/5.57.230.252 application/x-redhat-package-manager 1664896977.024 340 192.168.205.12 TCP_MISS/200 44730 GET http://epel.mirror.constant.com/9/Everything/x86_64/Packages/h/hiredis-1.0.2-1.el9.x86_64.rpm - HIER_DIRECT/108.61.5.85 application/x-redhat-package-manager 1664896977.237 555 192.168.205.12 TCP_MISS/200 272291 GET http://epel.mirror.constant.com/9/Everything/x86_64/Packages/c/coturn-4.6.0-1.el9.x86_64.rpm - HIER_DIRECT/108.61.5.85 application/x-redhat-package-manager
4. Использование Squidclient
В качестве альтернативы вы можете использовать встроенную команду squidclient
для тестирования. Он выводит ответ на веб-запрос, аналогичный wget
или curl
. Но в отличие от wget
и curl
, squidclient
автоматически подключается к установленному по умолчанию прокси-серверу Squid, локальный:3128
.
Выполните следующую команду для проверки.
$ squidclient https://google.com
Вы получите следующий вывод.
HTTP/1.1 301 Moved Permanently Location: https://www.google.com/ Content-Type: text/html; charset=UTF-8 Date: Tue, 04 Oct 2022 16:35:35 GMT Expires: Tue, 04 Oct 2022 16:35:35 GMT Cache-Control: private, max-age=2592000 Server: gws Content-Length: 220 X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN Set-Cookie: CONSENT=PENDING+669; expires=Thu, 03-Oct-2024 16:35:35 GMT; path=/; domain=.google.com; Secure P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info." Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43" X-Cache: MISS from squidproxy X-Cache-Lookup: MISS from squidproxy:3128 Via: 1.1 squidproxy (squid/5.2) Connection: close
Чтобы запустить команду с IP-адресом и параметрами аутентификации, выполните следующую команду.
$ squidclient -l 192.168.205.12 -p 7035 -u username -w password https://google.com
Заключение
На этом мы завершаем наше руководство по установке и настройке прокси-сервера Squid на сервере Rocky Linux/Alma Linux 9. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.