Проксі-сервер 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 тут, а в інших документах є посилання на використання Nginx для зворотного проксі.
Сервіси балансування навантаження дуже корисні для завантаженого середовища веб-сервера. Існує багато проксі-серверів, у тому числі згаданий раніше HAProxy, які використовують для багатьох типів послуг.
У випадку Pound його можна використовувати лише для веб-сервісів, але він хороший у тому, що він робить.
Передумови та припущення¶
Нижче наведено мінімальні вимоги для використання цієї процедури:
- Бажання збалансувати навантаження між кількома веб-сайтами або готовність вивчити новий інструмент, щоб робити те саме.
- Можливість запускати команди від імені користувача root або використовувати
sudo
для підвищення привілеїв. - Знайомство з редактором командного рядка. Автор використовує тут
vi
абоvim
, але замініть у вашому улюбленому редакторі. - Комфорт зі зміною портів прослуховування на кількох типах веб-серверів.
- Я припускаю попередню інсталяцію серверів Nginx і Apache.
- Я припускаю, що ви використовуєте сервери або контейнери Rocky Linux для всього тут.
- Хоча в цьому документі є всілякі твердження щодо
https
, цей посібник стосується лише службиhttp
. Щоб правильно виконуватиhttps
, ви повинні налаштувати ваш pound-сервер за допомогою справжнього сертифіката від справжнього центру сертифікації.
Підказка
Якщо у вас не встановлено жоден із цих серверів, ви можете зробити це в контейнерному середовищі (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. (Все буде відображено нижче.)
Примітка
Не забудьте змінити пов’язані 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) і «Address», який проксі-сервер слухатиме. Вам необхідно змінити це на фактичну IP-адресу нашого сервера Pound. - Розділ «ListenHTTPS» представляє службу
https
(порт 443) і «Address», який проксі-сервер слухатиме. Необхідно змінити це на 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
Важливо
Використання 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
, необхідні для блокування всього.
Важливо
Припускається, що ви маєте прямий доступ до відповідних серверів і не є віддаленим. Якщо ви віддалені, будьте вкрай обережні, видаляючи служби із зони 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:
Далі вам необхідно внести зміни в «публічну» зону, у якій за замовчуванням увімкнено службу 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. Потім додайте зону під назвою «баланс», яку ви використовуватимете для решти http
і https
, і встановіть IP-адресу джерела на 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):
Примітка
Нова зона має бути додана з опцією --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
, включаючи директиви повідомлень про помилки, параметри журналювання, значення часу очікування і т.д. Ви можете знайти те, що доступно, тут.
Зручно, Pound автоматично визначає, якщо один із «BackEnd» серверів офлайн, і вимикає його, щоб веб-сервіси могли продовжувати працювати без затримки. Він також автоматично бачить їх знову, коли вони знову в мережі.
Висновок¶
Pound пропонує інший варіант для тих, хто не хоче використовувати HAProxy або Nginx для балансування навантаження.
Pound, сервер балансування навантаження, дуже простий у встановленні, налаштуванні та використанні. Як зазначено тут, ви можете використовувати Pound як зворотний проксі, і існує багато варіантів проксі та балансування навантаження.
І ви завжди повинні пам’ятати про безпеку під час налаштування будь-якої служби, включаючи проксі-сервер балансування навантаження.
Author: Steven Spencer
Contributors: Ganna Zhyrnova