Поиск по сайту:

Как установить и настроить прокси-сервер Squid на Rocky Linux/Alma Linux 9


На этой странице

  1. Предпосылки
  2. Шаг 1. Установите Squid
  3. Шаг 2. Настройка прокси-сервера Squid
    1. 1. Настройка политик доступа к Squid
    2. 2. Блокировка сайта
    3. 3. Блокировать загрузку определенных файлов
    4. 4. Блокировать веб-сайты по ключевым словам
    5. 5. Маскировка IP-адреса клиентов
    6. 6. Изменить порт прокси-сервера Squid
    7. 7. Настройка брандмауэра/SELinux

    1. 1. Общесистемная конфигурация прокси
    2. 2. Настройка прокси в браузере
    3. 3. Настройте DNF для использования Squid Proxy
    4. 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. Подключиться к серверу можно тремя способами:

    <старт>

  4. Конфигурация прокси-сервера для всей системы
  5. Использование сервера Squid в качестве шлюза
  6. Использование веб-браузера в качестве клиента

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. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.