Проксі-сервер Pound¶
Pound відсутній в EPEL-9
На момент написання цієї статті на Rocky Linux 9.0 Pound неможливо встановити зі сховища EPEL. Хоча існують джерела пакетів SRPM, ми не можемо перевірити цілісність цих джерел. З цієї причини ми не рекомендуємо зараз встановлювати проксі-сервер Pound на Rocky Linux 9.0. Це може змінитися, якщо EPEL знову підніме Pound. Використовуйте цю процедуру спеціально для версій Rocky Linux 8.x.
Вступ¶
Pound — це незалежний від веб-сервера зворотний проксі та балансувальник навантаження, який дуже простий у налаштуванні та керуванні. Він не використовує веб-службу, але прослуховує порти веб-служби (http, https).
Тепер існує багато параметрів проксі-сервера, деякі з яких згадуються на цих сторінках документації. Документ про використання [HAProxy знаходиться тут] (haproxy_apache_lxd.md), а також посилання на застосування Nginx для зворотного проксі-сервера існують в інших документах.
Сервіси балансування навантаження дуже корисні для завантаженого середовища веб-сервера. Існує багато проксі-серверів, у тому числі згаданий раніше HAProxy, які використовують для багатьох типів послуг.
У випадку Pound його можна використовувати лише для веб-сервісів, але він хороший у тому, що він робить.
Передумови та припущення¶
Нижче наведено мінімальні вимоги для використання цієї процедури:
- Бажання збалансувати навантаження між кількома веб-сайтами або готовність вивчити новий інструмент, щоб робити те саме.
- Можливість запускати команди від імені користувача root або використовувати
sudoдля підвищення привілеїв. - Знайомство з редактором командного рядка. Автор використовує тут
viабоvim, але замініть їх вашим улюбленим редактором. - Комфорт зі зміною портів прослуховування на кількох типах веб-серверів.
- Я припускаю попередню інсталяцію серверів Nginx і Apache.
- Я припускаю, що ви використовуєте сервери або контейнери Rocky Linux для всього тут.
- Хоча в цьому документі містяться всілякі твердження щодо
https, цей посібник стосується лише сервісуhttp. Щоб правильно використовуватиhttps, вам потрібно буде налаштувати ваш сервер pound за допомогою справжнього сертифіката від справжнього центру сертифікації.
Tip
Якщо у вас не встановлено жоден із цих серверів, ви можете зробити це в контейнерному середовищі (LXD або Docker) або на голому металі та запустити їх у роботу. Для цієї процедури ви повинні встановити їх разом із відповідними пакетами, увімкнути та запустити служби. Ми не будемо жодним чином їх суттєво змінювати.
dnf -y install nginx && systemctl enable --now nginx
або
dnf -y install httpd && systemctl enable --now httpd
Умовності¶
Для цієї процедури ми будемо використовувати два веб-сервери (відомі як внутрішні сервери), на одному з яких працює Nginx (192.168.1.111), а на другому — Apache (192.168.1.108).
Наш сервер Pound (192.168.1.103) є шлюзом.
Ви перемкнете свої порти прослуховування на внутрішніх серверах на 8080 для сервера Nginx і 8081 для сервера Apache. (Все буде відображено нижче.)
Note
Не забудьте змінити пов’язані IP-адреси на будь-які, які вони є у вашому середовищі, і замінити їх там, де це можливо, протягом цієї процедури.
Встановлення сервера Pound¶
Щоб інсталювати Pound, вам потрібно спочатку встановити EPEL (додаткові пакети для Enterprise Linux) і запустити оновлення:
dnf -y install epel-release && dnf -y update
Потім встановіть Pound. (Так, це велика "P"):
dnf -y install Pound
Налаштування Pound¶
Тепер, коли пакунки встановлено, нам потрібно налаштувати Pound. Автор використовує vi для оновлення цього, але якщо ви надаєте перевагу nano або чомусь іншому, замініть це тут:
vi /etc/pound.cfg
Файл містить інформацію за замовчуванням, що дозволяє легко побачити більшість стандартних компонентів Pound:
User "pound"
Group "pound"
Control "/var/lib/pound/pound.cfg"
ListenHTTP
Address 0.0.0.0
Port 80
End
ListenHTTPS
Address 0.0.0.0
Port 443
Cert "/etc/pki/tls/certs/pound.pem"
End
Service
BackEnd
Address 127.0.0.1
Port 8000
End
BackEnd
Address 127.0.0.1
Port 8001
End
End
Придивляючись ближче¶
- "User" і "Group" - заповнюються під час інсталяції
- Файл "Control" ніде не використовується.
- Розділ "ListenHTTP" представляє службу
http(порт 80) та "адресу", яку проксі-сервер прослуховуватиме. Вам необхідно змінити це на фактичну IP-адресу нашого сервера Pound. - Розділ "ListenHTTPS" представляє службу
https(порт 443) та "адресу", яку проксі-сервер прослуховуватиме. Необхідно змінити це на IP-адресу сервера Pound. - Опція «Cert» — це самопідписаний сертифікат, наданий процесом встановлення Pound. Ви хочете замінити це у виробничому середовищі справжнім сертифікатом, використовуючи одну з цих процедур: Генерація ключів SSL або Ключі SSL за допомогою Let's Encrypt.
- Розділ «Service» налаштовує «BackEnd» сервери з їх портами прослуховування. Ви можете мати скільки завгодно "BackEnd" серверів.
Зміна конфігурації¶
- змініть IP-адресу під кожною опцією прослуховування на IP-адресу нашого сервера Pound, 192.168.1.103
- змініть IP-адреси та порти в розділах "BackEnd" відповідно до нашої конфігурації, знайденої в «Умовних поняттях» вище (IP-адреси та порти)
Коли ви закінчите змінювати конфігурацію, ви повинні мати змінений файл, який виглядає приблизно так:
User "pound"
Group "pound"
Control "/var/lib/pound/pound.cfg"
ListenHTTP
Address 192.168.1.103
Port 80
End
ListenHTTPS
Address 192.168.1.103
Port 443
Cert "/etc/pki/tls/certs/pound.pem"
End
Service
BackEnd
Address 192.168.1.111
Port 8080
End
BackEnd
Address 192.168.1.108
Port 8081
End
End
Налаштування Nginx для прослуховування на 8080¶
Оскільки ви встановили порт прослуховування для Nginx у нашій конфігурації Pound на 8080, вам також потрібно внести цю зміну на запущеному сервері Nginx. Ви робите це, змінюючи nginx.conf:
vi /etc/nginx/nginx.conf
Ви просто хочете змінити рядок «listen» на новий номер порту:
listen 8080 default_server;
Збережіть зміни та перезапустіть службу nginx:
systemctl restart nginx
Налаштування Apache для прослуховування 8081¶
Оскільки ми встановили порт прослуховування для Apache у нашій конфігурації Pound на 8081, нам також потрібно зробити цю зміну на нашому запущеному сервері Apache. Ви робите це, змінюючи httpd.conf:
vi /etc/httpd/conf/httpd.conf
Ви хочете змінити рядок "Listen" на новий номер порту:
Listen 8081
Збережіть зміни та перезапустіть службу httpd:
systemctl restart httpd
Перевірка та запуск¶
Після того, як ваші веб-служби запущені та прослуховують правильні порти на кожному з наших серверів, наступним кроком буде ввімкнення служби pound на сервері Pound:
systemctl enable --now pound
Warning
Використання Nginx і Apache, як ми робимо тут для демонстрації, означатиме, що сервер Nginx майже завжди відповідатиме першим. З цієї причини для ефективного тестування вам потрібно буде призначити низький пріоритет серверу Nginx, щоб ви могли бачити обидва екрани. Це багато говорить про швидкість Nginx над Apache. Щоб змінити пріоритет для сервера Nginx, вам просто потрібно додати пріоритет (1-9, де 9 є найнижчим пріоритетом) у розділі «BackEnd» для сервера Nginx таким чином:
BackEnd Address 192.168.1.111 Port 8080 Priority 9 End
Коли ви відкриваєте IP проксі-сервера у веб-браузері, ви побачите один із цих двох екранів:

Або

Використання "Emergency"¶
Єдине, що вам може знадобитися під час використання балансувальника навантаження, такого як Pound, це відключити виробничі сервери для обслуговування або мати запасний "BackEnd" для повного збою. Зробіть це за допомогою оголошення "Emergency" у файлі pound.conf. На одну послугу можна мати лише одну «Надзвичайну» декларацію. У нашому випадку це з’явиться в кінці розділу «Service» у файлі конфігурації:
...
Service
BackEnd
Address 192.168.1.117
Port 8080
Priority 9
End
BackEnd
Address 192.168.1.108
Port 8081
End
Emergency
Address 192.168.1.104
Port 8000
End
End
Цей сервер може відображати лише повідомлення "Down For Maintenance".
Міркування безпеки¶
Більшість документів, що стосуються проксі-серверів балансування навантаження, не розглядають питання безпеки. Наприклад, якщо це публічний веб-сервер, вам потрібно буде відкрити для всього світу сервіси http та https на проксі-сервере балансування навантаження. Але як щодо «BackEnd» серверів?
Їм потрібен лише доступ через їхні порти з сервера Pound, але оскільки сервер Pound переспрямовує на 8080 або 8081 на серверах BackEnd, і оскільки сервери BackEnd мають http прослуховування цих наступних портів, ви можете використовувати назви служб для команд брандмауера на цих серверах BackEnd.
У цьому розділі буде розглянуто ці проблеми та команди firewalld, необхідні для блокування всього.
Warning
Припускається, що ви маєте прямий доступ до відповідних серверів і не є віддаленим. Якщо ви віддалені, будьте вкрай обережні, видаляючи служби із зони firewalld!
Ви можете випадково заблокувати себе на своєму сервері.
Брандмауер - сервер Pound¶
Для сервера Pound вам потрібно дозволити http та https з усього світу. Найкраще подумати, чи потрібно вам дозволити ssh від світу чи ні. Якщо ви локально підключені до сервера, це, ймовірно, НЕ так. Автор припускає, що сервер доступний через вашу локальну мережу, і що у вас є прямий доступ до нього, тому ви заблокуєте ssh для ваших IP-адрес локальної мережі.
Для цього ви будете використовувати вбудований брандмауер для Rocky Linux, firewalld та структуру команд firewall-cmd. Ви також будете використовувати дві вбудовані зони, «загальнодоступну» та «довірену», щоб не було складнощів.
Почнемо з додавання наших вихідних IP-адрес до «trusted» зони. Ось наша локальна мережа (у нашому прикладі: 192.168.1.0/24):
firewall-cmd --zone=trusted --add-source=192.168.1.0/24 --permanent
Потім додайте службу ssh до зони:
firewall-cmd --zone=trusted --add-service=ssh --permanent
Перезавантажте брандмауер за допомогою:
firewall-cmd --reload
Перелічіть зону, щоб ви могли бачити все за допомогою firewall-cmd --zone=trusted --list-all, що дасть вам щось на зразок цього:
trusted (active)
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources: 192.168.1.0/24
services: ssh
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Далі вам потрібно внести зміни до зони "public", у якій за замовчуванням увімкнено службу ssh. Це потрібно обережно видалити (знову ж таки, автор припускає, що ви НЕ віддалено підключені до сервера!) з наступним:
firewall-cmd --zone=public --remove-service=ssh --permanent
Вам також потрібно додати служби http і https:
firewall-cmd --zone=public --add-service=http --add-service=https --permanent
Далі перезавантажте брандмауер, перш ніж ви побачите зміни:
firewall-cmd --reload
Перерахуйте загальнодоступну зону за допомогою firewall-cmd --zone=public --list-all, яка покаже вам щось на зразок цього:
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client http https
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Це єдині зміни, які нам потрібно внести в балансувальник навантаження сервера pound у нашому лабораторному середовищі.
Брандмауер - внутрішні сервери¶
Для серверів "BackEnd" нам не потрібно дозволяти доступ із світу для будь-чого. Вам потрібно буде дозволити ssh з IP-адрес локальної мережі, а також http та https з нашого балансувальника навантаження Pound.
Це майже все.
Знову ж таки, ви збираєтеся додати службу ssh до вашої "довіреної" зони, використовуючи по суті ті ж команди, що й для вашого pound-сервера. Потім додайте зону під назвою "balance", яку ви використовуватимете для решти http та https, і встановіть вихідні IP-адреси на рівні балансувальника навантаження.
Щоб спростити речі, використовуйте всі ті команди, які ви використовували для «довіреної» зони, в одному наборі команд:
firewall-cmd --zone=trusted --add-source=192.168.1.0/24 --permanent
firewall-cmd --zone=trusted --add-service=ssh --permanent
firewall-cmd --reload
firewall-cmd --zone=trusted --list-all
Після цього «довірена» зона повинна виглядати так:
trusted (active)
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources: 192.168.1.0/24
services: ssh
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Знову ж таки, перевірте правило ssh з IP-адреси в локальній мережі, а потім видаліть службу ssh з "публічної" зони. Пам’ятайте про наше попередження раніше та робіть це, лише якщо у вас є локальний доступ до сервера!
firewall-cmd --zone=public --remove-service=ssh --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-all
Тепер публічна зона має виглядати так:
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Додайте цю нову зону для обробки http та https. Пам’ятайте, що IP джерела тут має бути лише нашим балансувальником навантаження (у нашому прикладі: 192.168.1.103):
Note
Нова зона має бути додана з опцією --permanent і не може бути використана до перезавантаження брандмауера. Крім того, не забудьте --set-target=ACCEPT для цієї зони!
firewall-cmd --new-zone=balance --permanent
firewall-cmd --reload
firewall-cmd --zone=balance --set-target=ACCEPT
firewall-cmd --zone=balance --add-source=192.168.1.103 --permanent
firewall-cmd --zone=balance --add-service=http --add-service=https --permanent
firewall-cmd --reload
firewall-cmd --zone=balance --list-all
Результат:
balance (active)
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources: 192.168.1.103
services: http https
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Повторіть ці кроки на сервері іншого веб-сервера.
Після того, як до всього додано правила брандмауера, знову перевірте свій pound-сервер у браузері робочої станції.
Інша інформація¶
У вашому файлі pound.conf можна використовувати багато опцій, включаючи директиви повідомлень про помилки, опції журналювання, значення часу очікування тощо. Ви можете знайти доступні опції [за цим посиланням.] (https://linux.die.net/man/8/pound)
Зручно, Pound автоматично визначає, якщо один із «BackEnd» серверів офлайн, і вимикає його, щоб веб-сервіси могли продовжувати працювати без затримки. Він також автоматично бачить їх знову, коли вони знову в мережі.
Висновок¶
Pound пропонує інший варіант для тих, хто не хоче використовувати HAProxy або Nginx для балансування навантаження.
Pound, сервер балансування навантаження, дуже простий у встановленні, налаштуванні та використанні. Як зазначено тут, ви можете використовувати Pound як зворотний проксі, і існує багато варіантів проксі та балансування навантаження.
І ви завжди повинні пам’ятати про безпеку під час налаштування будь-якої служби, включаючи проксі-сервер балансування навантаження.
Author: Steven Spencer
Contributors: Ganna Zhyrnova