Контакти

Centos 7 firewall відкрити порт. Створення правил для програм і утиліт

Встановлений в операційній системі Firewall використовується для запобігання несанкціонованого проходження трафіку між комп'ютерними мережами. Вручну або автоматично створюються спеціальні правила для брандмауера, які і відповідають за управління доступом. В ОС, розробленої на ядрі Linux, CentOS 7 є вбудований фаєрвол, а управління ним здійснюється за допомогою брандмауера. За замовчуванням задіяний FirewallD, і про його налаштування ми б хотіли поговорити сьогодні.

Як вже було сказано вище, стандартним брандмауером в CentOS 7 призначена утиліта FirewallD. Саме тому настройка фаервола буде розглянута на прикладі цього інструменту. Задати правила фільтрації можна і за допомогою тієї ж iptables, але це виконується трохи іншим чином. Зі зміною згаданої утиліти рекомендуємо ознайомитися, перейшовши за наступним посиланням, а ми ж почнемо розбір FirewallD.

Основні поняття брандмауера

Існує кілька зон - наборів правил для управління трафіком на основі довіри до мереж. Всім їм задаються власні політики, сукупність яких і утворює конфігурацію брандмауера. Кожній зоні присвоюється один або кілька мережних інтерфейсів, що також дозволяє регулювати фільтрацію. Від використовуваного інтерфейсу безпосередньо залежать застосовувані правила. Наприклад, при підключенні до загальнодоступного Wi-Fi мережевий екран підвищить рівень контролю, а в домашній мережі відкриє додатковий доступ для учасників ланцюга. В даному фаєрволі присутні такі зони:

  • trusted - максимальний рівень довіри до всіх пристроїв мережі;
  • home - група локальної мережі. Існує довіру до оточення, але при цьому вхідні з'єднання доступні тільки для певних машин;
  • work - робоча зона. Присутній довіру до більшості пристроїв, а також активуються додаткові сервіси;
  • dmz - зона для ізольованих комп'ютерів. Такі пристрої від'єднані від решти мережі і пропускають тільки певний вхідний трафік;
  • internal - зона внутрішніх мереж. Довіра застосовується до всіх машин, відкриваються додаткові сервіси;
  • external - зворотна до попередньої зона. У зовнішніх мережах активна маскування NAT, закриваючи внутрішню мережу, але не блокуючи можливість отримання доступу;
  • public - зона загальнодоступних мереж з недовірою до всіх пристроїв і індивідуальним прийомом вхідного трафіку;
  • block - всі вхідні запити скидаються з відправленням помилки icmp-host-prohibited або icmp6-adm-prohibited;
  • drop - мінімальний рівень довіри. Вхідні з'єднання скидаються без будь-яких повідомлень.

Самі ж політики бувають тимчасові і постійні. При появі або редагуванні параметрів дію фаервола відразу змінюється без потреби перезавантаження. Якщо ж були застосовані тимчасові правила, після рестарту FirewallD вони будуть скинуті. Перманентне правило на те так і називаються - воно буде збережено на постійній основі при застосуванні аргументу -permanent.

Увімкнути брандмауер FirewallD

Для початку потрібно запустити FirewallD або переконатися в тому, що він знаходиться в активному стані. Тільки що функціонує демон (програма, що працює в фоновому режимі) буде застосовувати правила для брандмауера. Активація проводиться буквально в кілька кліків:

  1. запустіть класичний «Термінал» будь-яким зручним способом, наприклад, через меню «Додатки».
  2. Введіть команду sudo systemctl start firewalld.service і натисніть на клавішу Enter.
  3. Управління утилітою здійснюється від імені суперкористувача, тому доведеться підтвердити справжність, вказавши пароль.
  4. Щоб переконатися у функціонуванні сервісу, вкажіть firewall-cmd --state.
  5. У відкритому графічному вікні повторно підтвердите справжність.
  6. З'явиться новий рядок. значення «Running» говорить про те, що фаєрвол працює.

Якщо ж вам одного разу буде потрібно тимчасово або перманентно відключити брандмауер, радимо скористатися інструкцією, представленої в інший нашій статті за наступним посиланням.

Перегляд правил за замовчуванням і доступних зон

Навіть працює в штатному режимі фаєрвол має свої певні правила і доступні зони. Перед початком редагування політик радимо ознайомитися з поточною конфігурацією. Робиться це за допомогою простих команд:

  1. Визначити функціонуючу за замовчуванням зону допоможе команда firewall-cmd --get-default-zone.
  2. Після її активації ви побачите новий рядок, Де відобразиться потрібний параметр. Наприклад, на скріншоті нижче активної вважається зона «Public».
  3. Проте активними можуть бути відразу кілька зон, до того ж вони прив'язуються до окремого інтерфейсу. Дізнайтеся цю інформацію через firewall-cmd --get-active-zones.
  4. Команда firewall-cmd --list-all виведе на екран правила, задані для зони за замовчуванням. Зверніть увагу на скріншот нижче. Ви бачите, що активній зоні «Public» присвоєно правило «Default» - функціонування за замовчуванням, інтерфейс «Enp0s3» і додано два сервісу.
  5. Якщо з'явилася потреба дізнатися всі доступні зони брандмауера, введіть firewall-cmd --get-zones.
  6. Параметри ж конкретної зони визначаються через firewall-cmd --zone \u003d name --list-all, де name - назва зони.

після визначення необхідних параметрів можна переходити до їх зміни і додаванню. Давайте детально розберемо кілька найпопулярніших конфігурацій.

Параметри зон інтерфейсів

Як ви знаєте з інформації вище, для кожного інтерфейсу визначається своя зона за замовчуванням. Він буде перебувати в ній до тих пір, поки налаштування не зміняться користувачем або програмно. Можливий ручної перенесення інтерфейсу в зону на одну сесію, і здійснюється він активацією команди sudo firewall-cmd --zone \u003d home --change-interface \u003d eth0. результат «Success» свідчить про те, що перенесення пройшов успішно. Нагадаємо, що такі настройки скидаються відразу після перезавантаження фаервола.

При подібному зміні параметрів слід враховувати, що робота сервісів може бути скинута. Деякі з них не підтримують функціонування в певних зонах, припустимо, SSH хоч і доступний в «Home», Але в призначених для користувача або особливих сервіс працювати відмовиться. Переконатися в тому, що інтерфейс був успішно прив'язаний до нової гілки можна, запровадивши firewall-cmd --get-active-zones.

Якщо ви захочете скинути зроблені раніше настроювання, просто виконайте рестарт брандмауера: sudo systemctl restart firewalld.service.

Часом не завжди зручно змінювати зону інтерфейсу всього на одну сесію. У такому випадку потрібно редагувати конфігураційний файл, щоб всі налаштування ввелись на перманентної основі. Для цього ми радимо використовувати текстовий редактор nano, Який встановлюється з офіційного сховища sudo yum install nano. Далі залишається провести такі дії:

  1. Відкрийте конфігураційний файл через редактор, ввівши sudo nano / etc / sysconfig / network-scripts / ifcfg-eth0, де eth0 - назва необхідного інтерфейсу.
  2. Підтвердіть справжність облікового запису для виконання подальших дій.
  3. Пошукайте параметр «ZONE» і поміняйте його значення на потрібне, наприклад, public або home.
  4. затисніть клавіші Ctrl + O, Щоб зберегти зміни.
  5. Не змінюйте ім'я файлу, а просто натисніть на Enter.
  6. Вийдіть з текстового редактора через Ctrl + X.

Тепер зона інтерфейсу буде такою, якою ви її вказали, до моменту наступного редагування конфігураційного файлу. Щоб оновлені параметри вступили в дію, виконайте sudo systemctl restart network.service і sudo systemctl restart firewalld.service.

Установка зони за замовчуванням

Вище ми вже демонстрували команду, яка дозволяла дізнатися встановлену за замовчуванням зону. Її також можна змінити, встановивши параметр на свій вибір. Для цього в консолі досить прописати sudo firewall-cmd --set-default-zone \u003d name, де name - ім'я необхідної зони.

Про успішність виконання команди буде свідчити напис «Success» в окремому рядку. Після цього всі поточні інтерфейси прив'яжуться до зазначеної зоні, якщо іншого не задано в конфігураційних файлах.

Створення правил для програм і утиліт

На самому початку статті ми розповіли про дії кожної зони. Визначення сервісів, утиліт і програм в такі галузі дозволить застосувати для кожної з них індивідуальні параметри під запити кожного користувача. Для початку радимо ознайомитися з повним списком доступних на даний момент сервісів: firewall-cmd --get-services.

Результат відобразиться прямо в консолі. Кожен сервер розділений прогалиною, і в списку ви зможете з легкістю відшукати Вас інструмент. Якщо ж потрібний сервіс відсутній, його слід додатково встановити. Про правила інсталяції читайте в офіційній документації програмного забезпечення.

Зазначена вище команда демонструє тільки назви сервісів. Детальна інформація по кожному з них виходить через індивідуальний файл, що знаходиться по шляху / usr / lib / firewalld / services. Такі документи мають формат XML, шлях, наприклад, до SSH виглядає так: /usr/lib/firewalld/services/ssh.xml, а документ має наступне вміст:

SSH
Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.

Активується підтримка сервісу в певній зоні вручну. В «Терміналі» слід задати команду sudo firewall-cmd --zone \u003d public --add-service \u003d http, де --zone \u003d public - зона для активації, а --add-service \u003d http - назва сервісу. Врахуйте, що така зміна буде діяти тільки в межах однієї сесії.

Перманентне додавання здійснюється через sudo firewall-cmd --zone \u003d public --permanent --add-service \u003d http, а результат «Success» свідчить про успішне завершення операції.

переглянути повний список постійних правил для певної зони можна, відобразивши список в окремому рядку консолі: sudo firewall-cmd --zone \u003d public --permanent --list-services.

Рішення неполадки з відсутністю доступу до сервісу

Стандартно в правилах брандмауера вказані найпопулярніші і безпечні сервіси як дозволені, проте деякі стандартні або сторонні додатки він блокує. У такому випадку користувачеві вручну потрібно змінити налаштування, щоб вирішити проблему з доступом. Зробити це можна двома різними методами.

проброс порту

Як відомо, всі мережеві сервіси використовують певний порт. Він запросто виявляється фаєрволом, і по ньому можуть виконуватися блокування. Щоб уникнути таких дій з боку фаервола, потрібно відкрити необхідний порт командою sudo firewall-cmd --zone \u003d public --add-port \u003d 0000 / tcp, де --zone \u003d public - зона для порту, --add-port \u003d 0000 / tcp - номер і протокол порту. Опція firewall-cmd --list-ports відобразить список відкритих портів.

Якщо ж вам необхідно відкрити порти, що входять в діапазон, скористайтеся рядком sudo firewall-cmd --zone \u003d public --add-port \u003d 0000-9999 / udp, де --add-port \u003d 0000-9999 / udp - діапазон портів і їх протокол.

Наведені вище команди лише дозволять протестувати застосування подібних параметрів. Якщо воно пройшло успішно, слід додати ці ж порти в постійні настройки, а робиться це шляхом введення sudo firewall-cmd --zone \u003d public --permanent --add-port \u003d 0000 / tcp або sudo firewall-cmd --zone \u003d public --permanent --add-port \u003d 0000-9999 / udp. Перелік відкритих постійних портів проглядається так: sudo firewall-cmd --zone \u003d public --permanent --list-ports.

визначення сервісу

Як бачите, додавання портів не викликає ніяких труднощів, але процедура ускладнюється в тому випадку, коли додатків використовується велика кількість. Відстежити всі використовуються порти стає важко, через що більш правильним варіантом стане визначення сервісу:


Вам залишається тільки вибрати найбільш підходящий метод вирішення проблеми з доступом до сервісу і виконати наведені інструкції. Як бачите, всі дії виконуються досить легко, і ніяких труднощів виникнути не повинно.

Створення призначених для користувача зон

Ви вже знаєте, що спочатку в FirewallD створено велику кількість різноманітних зон з певними правилами. Однак трапляються ситуації, коли системному адміністратору потрібно створити призначену для користувача зону, як, наприклад, «Publicweb» для встановленого веб-сервера або «PrivateDNS» - для DNS-сервера. На цих двох прикладах ми і розберемо додавання гілок:


З цієї статті ви дізналися, як створювати призначені для користувача зони і додавати в них сервіси. Щодо розміщення їх за замовчуванням і присвоєння інтерфейсів ми вже розповіли вище, вам залишається лише вказати правильні назви. Не забувайте перезавантажувати міжмережевий екран після внесення будь-яких перманентних змін.

Як бачите, брандмауер FirewallD - досить об'ємний інструмент, що дозволяє зробити максимально гнучку конфігурацію брандмауера. Залишилося тільки переконатися в тому, що утиліта запускається разом з системою і зазначені правила відразу ж починають свою роботу. Зробіть це командою sudo systemctl enable firewalld.

На захист сервера від зовнішніх загроз в першу чергу постає міжмережевий екран, який фільтрує вхідний і вихідний трафік. Налаштуванням iptables - окремого випадку фаервола на CentOS я хочу зайнятися в даній статті, а також розповісти про його встановлення і відключенні. Моє керівництво не буде вичерпним, я розгляну лише ті аспекти, які вважаю найбільш важливими і сам використовую у своїй роботі.

Дана стаття є частиною єдиного циклу статтею про сервер.

вступ

Iptables в даний час є стандартом де-факто в середовищі сучасних linux дистрибутивів. Я навіть відразу не можу пригадати, що ще використовують в якості фаєрвол. Так що будь-якому адміністратору линукс доводиться стикатися у своїй роботі з налаштуванням цього брандмауера.

До цього фаєрвол існують різні обв'язки, які використовуються для більш «зручною» настройки. У ubuntu є ufw, В centos - firewalld, З іншими не знайомий. Особисто я не бачу ніякого зручності у використанні цих інструментів. Я звик налаштовувати лінуксовий фаєрвол по-старому, як навчився на самому початку роботи. Мені здається це найбільш простим і зручним способом, яким я з вами і поділюся. Суть його зводиться до того, що створюється скрипт з правилами фаервола. Цей скрипт можна легко редагувати під свої потреби і переносити з сервера на сервер.

відключення firewalld

Питання відключення firewalld я вже торкався в темі по. Насамперед відключимо firewalld, який присутній в centos 7 по-замовчуванню відразу після установки:

# Systemctl stop firewalld

Тепер видалимо його з автозавантаження, щоб він не включився знову після рестарту:

# Systemctl disable firewalld

Після цього на сервері настройки мережевого екрану стають повністю відкритими. Подивитися правила iptables можна командою:

установка iptables

Насправді фаєрвол у нас на сервері вже стоїть і працює, просто немає ніяких правил, все відкрито. Встановити нам потрібно буде додаткові утиліти управління, без яких конфігурувати iptables неможливо. Наприклад, не можна буде перезапустити фаєрвол:

# Systemctl restart iptables.service Failed to issue method call: Unit iptables.service failed to load: No such file or directory.

Або додати в автозапуск не вийде:

# Systemctl enable iptables.service Failed to issue method call: No such file or directory

Щоб подібних помилок не було, встановимо необхідний пакет з утилітами:

# Yum -y install iptables-services

Тепер можна додати iptables в автозавантаження і запустити:

# Systemctl enable iptables.service # systemctl start iptables.service

Налаштування фаервола

Для управління правилами фаервола я використовую скрипт. Створимо його:

# Mcedit /etc/iptables.sh

Далі будемо наповнювати його необхідними правилами. Я буду розбирати всі значущі частини скрипта, а повністю його приведу в вигляді текстового файлу в кінці статті. Правила зроблені у вигляді картинок, щоб заборонити копіювання і вставку. Це може привести до помилок в роботі правил, з чим я сам зіткнувся під час підготовки статті.

Ми розглянемо ситуацію, коли сервер є шлюзом в інтернет для локальної мережі.

Насамперед поставимо всі змінні, які будемо використовувати в скрипті. Це не обов'язково робити, але рекомендується, тому що зручно переносити налаштування з сервера на сервер. Досить буде просто перепризначити змінні.

Перед застосуванням нових правил, очищаємо все ланцюжка:

Блокуємо весь трафік, який не відповідає жодному з правил:

Дозволяємо весь трафік локалхоста і локалки:

Дозволяємо робити ping:

Якщо вам це не потрібно, то не додавайте дозволяють правила для icmp.

Відкриваємо доступ в інет самому сервера:

Якщо ви хочете відкрити всі вхідні з'єднання сервера, то додавайте далі правило:

Тепер додамо захист від найбільш поширених мережевих атак. Спочатку відкинемо всі пакети, які не мають ніякого статусу:

Блокуємо нульові пакети:

Закриваємося від syn-flood атак:

Якщо ви не ставите обмежень на доступ з локальної мережі, то дозволяємо всім вихід в інтернет:

Слідом забороняємо доступ з інету в локальну мережу:

Щоб наша локальна мережа користувалася інтернетом, включаємо nat:

Щоб не втратити доступ до сервера, після застосування правил, дозволяємо підключення по ssh:

І в кінці записуємо правила, щоб вони застосували після перезавантаження:

Ми склали найпростіший конфиг, який блокує всі вхідні з'єднання, крім ssh і надати їм доступ з локальної мережі в інтернет. Попутно захистилися від деяких мережевих атак.

Зберігаємо скрипт, робимо виконуваним і запускаємо:

# Chmod 0740 /etc/iptables.sh # /etc/iptables.sh

Виконаємо перегляд правил і перевіримо, чи всі правила на місці:

# Iptables -L -v -n

Звертаю вашу увагу - застосовувати правила потрібно лише в тому випадку, якщо у вас є доступ до консолі сервера. При помилку в налаштуваннях ви можете втратити доступ. Переконайтеся, що в нештатної ситуації ви зможете відключити фаєрвол і скорегувати налаштування.

відкриття портів

Тепер трохи розширимо нашу конфігурацію і відкриємо в iptables порти для деяких сервісів. Припустимо, у нас працює веб-сервер і необхідно відкрити до нього доступ з інтернету. Додаємо правила для веб-трафіку:

Було додано дозвіл на вхідні з'єднання по 80-му і 443-му портам, які використовує web сервер у своїй роботі.

Якщо у вас встановлений поштовий сервер, То потрібно дозволити на нього вхідні з'єднання по всіх використовуваних портів:

Для коректної роботи DNS сервера, потрібно відкрити UDP порт 53

Проброс (forward) порту

Розглянемо ситуацію, коли необхідно виконати кидок портів з зовнішнього інтерфейсу на якийсь комп'ютер в локальній мережі. Припустимо, вам необхідно отримати rdp доступ до комп'ютера 10.1.3.50 з інтернету. Робимо кидок TCP порту 3389:

Якщо ви не хочете світити зовні відомим портом, то можна зробити перенаправлення з нестандартного порту на порт rdp кінцевого комп'ютера:

Якщо ви прокидаємо порт зовні всередину локальної мережі, то обов'язково закоментуйте правило, яке блокує доступ із зовнішньої мережі у внутрішню. У моєму прикладі це правило: $ IPT -A FORWARD -i $ WAN -o $ LAN1 -j REJECT

Або перед цим правилом створіть дозволяє правило для доступу зовні до внутрішнього сервісу, наприклад ось так:

$ IPT -A FORWARD -i $ WAN -d 10.1.3.50 -p tcp -m tcp --dport 3389 -j ACCEPT

включення логів

Під час налаштування корисно включити логи, щоб моніторити заблоковані пакети і з'ясовувати, чому відсутній доступ до необхідних сервісів, які ми начебто вже відкрили. Я відправляю всі заблоковані пакети в окремі ланцюжки (block_in, block_out, block_fw), відповідні напрямку трафіку і маркують в логах кожен напрямок. Так зручніше робити розбір польотів. Додаємо наступні правила в самий кінець скрипта, перед збереженням налаштувань:

Всі заблоковані пакети ви зможете відстежити в файлі / var / log / messages.

Після того, як закінчите настроювання, закоментуйте ці рядки, відключивши логирование. Обов'язково варто це зробити, так як логи дуже швидко розростаються. Практичного сенсу в зберіганні подібної інформації особисто я не бачу.

Як відключити iptables

Якщо ви раптом вирішите, що firewall вам більше не потрібен, то відключити його можна таким чином:

# Systemctl stop iptables.service

Ця команда зупиняє фаєрвол. А наступна видаляє з автозавантаження:

# Systemctl disable iptables.service

Відключивши мережевий екран, ми вирішили всі з'єднання.

висновок

Як і обіцяв, викладаю готовий скрипт з основним набором правил, які ми розглянули

Хочу ще раз звернути увагу, що при налаштуванні iptables необхідно бути гранично уважним. Не починайте цю справу, якщо не маєте доступу до консолі сервера. Навіть під час написання цієї статті я втратив доступ до сервера через безглузду помилку в правилах. Помилка ця виникла через копіювання і втрати подвійного тире - воно замінилося на одинарне.

онлайн-курсом «Адміністратор Linux» в OTUS. Курс не для новачків, для надходження потрібні базові знання з мереж і установці Linux на виртуалку. Навчання триває 5 місяців, після чого успішні випускники курсу зможуть пройти співбесіди у партнерів. Що дасть вам цей курс:

  • Знання архітектури Linux.
  • Освоєння сучасних методів та інструментів аналізу і обробки даних.
  • Уміння підбирати конфігурацію під необхідні завдання, управляти процесами і забезпечувати безпеку системи.
  • Володіння основними робочими інструментами системного адміністратора.
  • Розуміння особливостей розгортання, налаштування і обслуговування мереж, побудованих на базі Linux.
  • Здатність швидко вирішувати виникаючі проблеми і забезпечувати стабільну і безперебійну роботу системи.
Перевірте себе на вступний тест і дивіться докладніше програму по.

зони

Демон firewalld управляє групами правил за допомогою так званих зон.

Зони - це, по суті, набори правил, які керують трафіком на основі рівня довіри до тієї чи іншої мережі. Зони присвоюються мережних інтерфейсів і керують поведінкою брандмауера.

Комп'ютери, які часто підключаються до різних мереж (наприклад, ноутбуки) можуть використовувати зони, щоб змінювати набори правил в залежності від середовища. Наприклад, при підключенні до громадської мережі WiFi брандмауер може застосовувати суворіші правила, а в домашній мережі послаблювати обмеження.

У firewalld існують такі зони:

  • drop: найнижчий рівень довіри мережі. Весь вхідний трафік скидається без відповіді, підтримуються тільки вихідні з'єднання.
  • block: ця зона схожа на попередню, але при цьому вхідні запити скидаються з повідомленням icmp-host-prohibited або icmp6-adm-prohibited.
  • public: ця зона являє публічну мережу, якій не можна довіряти, однак підтримує вхідні з'єднання в індивідуальному порядку.
  • external: зона зовнішніх мереж. Підтримує маскування NAT, завдяки чому внутрішня мережа залишається закритою, але з можливістю отримання доступу.
  • internal: зворотна сторона зони external, внутрішні мережі. Комп'ютерів в цій зоні можна довіряти. Доступні додаткові сервіси.
  • dmz: використовується для комп'ютерів, розташованих в DMZ (ізольованих комп'ютерів, які не матимуть доступу до іншої частини мережі); підтримує тільки деякі вхідні з'єднання.
  • work: зона робочої мережі. Більшості машин в мережі можна довіряти. Доступні додаткові сервіси.
  • home: зона домашньої мережі. Оточенню можна довіряти, але підтримуються тільки певні користувачем вхідні з'єднання.
  • trusted: всім машинам в мережі можна довіряти.

збереження правил

Правила firewalld бувають постійними і тимчасовими. Якщо в наборі з'являється або змінюється будь-яке правило, поточна поведінка брандмауера змінюється відразу. Однак після перезавантаження все зміни будуть втрачені, якщо їх не зберегти.

Більшість команд firewall-cmd може використовувати прапор -permanent, який збереже правило, після чого воно буде використовуватися на постійній основі.

Увімкнути брандмауер firewalld

Для початку потрібно включити демон. Unit-файл systemd називається firewalld.service. Щоб запустити демон, введіть.

sudo systemctl start firewalld.service

Переконайтеся, що сервіс запущений:

firewall-cmd --state
running

Тепер брандмауер запущений і працює відповідно до конфігурації за замовчуванням.

На даний момент сервіс включений, але не буде запускатися автоматично разом з сервером. Щоб випадково не заблокувати себе на власному сервері, спочатку створіть набір правил, а потім налаштуйте автозапуск.

Правила брандмауера

Перегляд правил за замовчуванням

Щоб дізнатися, яка зона використовується за умовчанням, введіть:

firewall-cmd --get-default-zone
public

На даний момент firewalld не отримував ніяких інструкцій щодо інших зон, крім того, до інших зон не прив'язаний ні один інтерфейс, тому зараз зона public є зоною за замовчуванням, а також єдиною активною зоною.

Щоб отримати список активних зон, введіть:


public
interfaces: eth0 eth1

До зони public прив'язані два мережевих інтерфейсу: eth0 і eth1. Інтерфейси, прив'язані до зони, працюють згідно з правилами цієї зони.

Щоб дізнатися, які правила використовує зона за замовчуванням, введіть:

firewall-cmd --list-all
public (default, active)
interfaces: eth0 eth1
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Отже, тепер ви знаєте, що:

  • public є зоною за замовчуванням і єдиною активною зоною.
  • До неї прив'язані інтерфейси eth0 і eth1.
  • Вона підтримує трафік DHCP (привласнення IP-адрес) і SSH (віддалене адміністрування).

Інші зони брандмауера

Тепер слід ознайомитися з іншими зонами.

Щоб отримати список всіх доступних зон, введіть:

firewall-cmd --get-zones

Щоб отримати параметри конкретної зони, додайте в команду прапор -zone \u003d.

firewall-cmd --zone \u003d home --list-all
home
interfaces:
sources:
services: dhcpv6-client ipp-client mdns samba-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Щоб вивести визначення всіх доступних зон, додайте опцію -list-all-zones. Для більш зручного перегляду висновок можна передати в пейджер:

firewall-cmd --list-all-zones | less

Параметри зон інтерфейсів

Спочатку всі мережеві інтерфейси прив'язані до зони за замовчуванням.

Зміна зони інтерфейсу на одну сесію

Щоб перевести інтерфейс в іншу зону на одну сесію, використовуйте опції -zone \u003d і -change-interface \u003d.

Наприклад, щоб перевести eth0 в зону home, потрібно ввести:

sudo firewall-cmd --zone \u003d home --change-interface \u003d eth0
success

Примітка: При перекладі інтерфейсу в іншу зону потрібно враховувати, що це може вплинути на роботу деяких сервісів. Наприклад, зона home підтримує SSH, тому з'єднання цього сервісу не будуть скинуті. Але деякі зони скидають все з'єднання, включаючи SSH, і тоді ви можете випадково заблокувати собі доступ до власного сервера.

Щоб переконатися, що інтерфейс прив'язаний до нової зоні, введіть:

firewall-cmd --get-active-zones
home
interfaces: eth0
public
interfaces: eth1

Після перезавантаження брандмауера інтерфейс буде знову прив'язаний до зони за замовчуванням.

sudo systemctl restart firewalld.service
firewall-cmd --get-active-zones
public
interfaces: eth0 eth1

Зміна зони інтерфейсу на постійній основі

Якщо в налаштуваннях інтерфейсу не зазначена жодна інша зона, після перезапуску брандмауера інтерфейс буде знову прив'язаний до зони за замовчуванням. У CentOS такі конфігурації зберігаються в каталозі / etc / sysconfig / network-scripts, в файлах формату ifcfg-interface.

Щоб визначити зону інтерфейсу, відкрийте конфігураційний файл цього інтерфейсу, наприклад:

В кінець файлу додайте змінну ZONE \u003d і в якості значення вкажіть іншу зону, наприклад, home:

. . .
DNS1 \u003d 2001: 4860: 4860 :: 8844
DNS2 \u003d 2001: 4860: 4860 :: 8888
DNS3 \u003d 8.8.8.8
ZONE \u003d home

Збережіть і закрийте файл.

Щоб оновити настройки, запустіть мережевий сервіс і брандмауер:

sudo systemctl restart network.service
sudo systemctl restart firewalld.service

Після перезапуску інтерфейс eth0 буде прив'язаний до зони home.

firewall-cmd --get-active-zones
home
interfaces: eth0
public
interfaces: eth1

Налаштування зони за замовчуванням

Також ви можете вибрати іншу зону за замовчуванням.

Для цього використовується параметр -set-default-zone \u003d. Після цього всі інтерфейси будуть прив'язані до іншої зоні:

sudo firewall-cmd --set-default-zone \u003d home
home
interfaces: eth0 eth1

Створення правил для додатків

Додавання сервісу в зону

Найпростіше додати сервіс або порт в зону, яку використовує брандмауер. Перегляньте доступні сервіси:

firewall-cmd --get-services
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https

Примітка: Більше інформації про кожен конкретний сервісі можна знайти в файлах.xml в каталозі / usr / lib / firewalld / services. До приклад, відомості про сервіс SSH зберігаються в /usr/lib/firewalld/services/ssh.xml і виглядають так:



SSH

Щоб включити підтримку сервісу в тій чи іншій зоні, використовуйте опцію -add-service \u003d. Вказати цільову зону можна за допомогою опції -zone \u003d. За замовчуванням ці зміни будуть працювати протягом однієї сесії. Щоб зберегти зміни та використовувати їх на постійній основі, додайте прапор -permanent.

Наприклад, щоб запустити веб-сервер для обслуговування трафіку HTTP, для початку потрібно включити підтримку цього трафіку в зоні public на одну сесію:

sudo firewall-cmd --zone \u003d public --add-service \u003d http

Якщо сервіс потрібно додати в зону за замовчуванням, прапор -zone \u003d можна опустити.

Переконайтеся, що операція пройшла успішно:

firewall-cmd --zone \u003d public --list-services
dhcpv6-client http ssh

Протестуйте роботу сервісу і брандмауера. Якщо все працює правильно, можна змінити постійний набір правил і додати в нього правило для підтримки цього сервісу.

sudo firewall-cmd --zone \u003d public --permanent --add-service \u003d http

Щоб переглянути список постійних правил, введіть:

sudo firewall-cmd --zone \u003d public --permanent --list-services
dhcpv6-client http ssh

Тепер зона public підтримує HTTP і порт 80 на постійній основі. Якщо веб-сервер може обслуговувати трафік SSL / TLS, ви також можете додати сервіс https (для однієї сесії або в набір постійних правил):

sudo firewall-cmd --zone \u003d public --add-service \u003d https
sudo firewall-cmd --zone \u003d public --permanent --add-service \u003d https

Що робити, якщо потрібний сервіс недоступний?

Брандмауер firewalld за замовчуванням включає в себе багато найбільш поширені сервіси. Однак деяким додаткам необхідні сервіси, підтримка яких відсутня в firewalld. В такому випадку ви можете піти двома шляхами.

Спосіб 1: Налаштування порту

Найпростіше в такій ситуації відкрити порт додатки в необхідній зоні брандмауера. Потрібно просто вказати порт або діапазон портів і протокол.

Наприклад, додаток, яке використовує порт 5000 і протокол TCP, потрібно додати в зону public. Щоб включити підтримку програми на дну сесію, використовуйте параметр -add-port \u003d і вкажіть протокол tcp або udp.

sudo firewall-cmd --zone \u003d public --add-port \u003d 5000 / tcp

Переконайтеся, що операція пройшла успішно:

firewall-cmd --list-ports
5000 / tcp

Також можна вказати послідовний діапазон портів, відокремивши перший і останній порт діапазону за допомогою тире. Наприклад, якщо додаток використовує UDP-порти 4990-4999, щоб додати їх в зону public, потрібно ввести:

sudo firewall-cmd --zone \u003d public --add-port \u003d 4990-4999 / udp

Після тестування можна додати ці правила в постійні настройки брандмауера.

sudo firewall-cmd --zone \u003d public --permanent --add-port \u003d 5000 / tcp
sudo firewall-cmd --zone \u003d public --permanent --add-port \u003d 4990-4999 / udp
sudo firewall-cmd --zone \u003d public --permanent --list-ports
success
success
4990-4999 / udp 5000 / tcp

Спосіб 2: Визначення сервісу

Додавати порти в зони просто, але якщо у вас багато таких додатків, в результаті буде складно відстежити, для чого призначений той чи інший порт. Щоб уникнути такої ситуації, можна замість портів визначити сервіси.

Сервіси - це просто набори портів з певним ім'ям і описом. За допомогою сервісів простіше управляти настройками, але самі по собі вони складніше, ніж порти.

Для початку потрібно скопіювати існуючий сценарій з каталогу / usr / lib / firewalld / services в каталог / etc / firewalld / services (тут брандмауер шукає нестандартні налаштування).

Наприклад, можна скопіювати визначення сервісу SSH і використовувати його для визначення умовного сервісу example. Ім'я сценарію має збігатися з ім'ям сервісу і мати расшіреніе.xml.

sudo cp /usr/lib/firewalld/services/service.xml /etc/firewalld/services/example.xml

Відкоректуйте скопійований файл.

sudo nano /etc/firewalld/services/example.xml

У файлі знаходиться визначення SSH:



SSH
Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.

Більшу частину визначення сервісу складають метадані. Змінити коротке ім'я сервісу можна в тегах . Це человекочітаемое ім'я сервісу. Також потрібно додати опис сервісу. Єдина зміна, яку вплине на роботу сервісу - це зміна номера порту і протоколу.

Повернемося до сервісу example; допустимо, він вимагає відкрити TCP- порт 7777 і UDP- порт 8888. Визначення буде виглядати так:



Example Service
This is just an example service. It probably shouldn "t be used on a real system.

Збережіть і закрийте файл.

Перезапустіть брандмауер:

sudo firewall-cmd --reload

Тепер сервіс з'явиться в списку доступних сервісів:

firewall-cmd --get-services
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns example ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https

створення зон

Функції брандмауера включають багато зумовлених зон, яких в більшості випадків досить для роботи. Але в деяких ситуаціях виникає необхідність створити для користувача зону.

Наприклад, для веб-сервера можна створити зону publicweb, а для DNS-сервісу - зону privateDNS.

Створюючи зону, потрібно додати її в постійні настройки брандмауера.

Спробуйте створити зони publicweb і privateDNS:

sudo firewall-cmd --permanent --new-zone \u003d publicweb
sudo firewall-cmd --permanent --new-zone \u003d privateDNS

Переконайтеся, що зони існують:

sudo firewall-cmd --permanent --get-zones

У поточній сесії нові зони не будуть доступні:

firewall-cmd --get-zones
block dmz drop external home internal public trusted work

Щоб отримати доступ до нових зон, потрібно перезапустити брандмауер:

sudo firewall-cmd --reload
firewall-cmd --get-zones
block dmz drop external home internal privateDNS public publicweb trusted work

Тепер ви можете присвоїти новим зонам необхідні сервіси і порти. Наприклад, в зону publicweb можна додати SSH, HTTP і HTTPS.

sudo firewall-cmd --zone \u003d publicweb --add-service \u003d ssh
sudo firewall-cmd --zone \u003d publicweb --add-service \u003d http
sudo firewall-cmd --zone \u003d publicweb --add-service \u003d https
firewall-cmd --zone \u003d publicweb --list-all
publicweb
interfaces:
sources:
services: http https ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

У зону privateDNS можна додати DNS:

sudo firewall-cmd --zone \u003d privateDNS --add-service \u003d dns
firewall-cmd --zone \u003d privateDNS --list-all
privateDNS
interfaces:
sources:
services: dns
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Потім можна прив'язати мережеві інтерфейси до нових зон:

sudo firewall-cmd --zone \u003d publicweb --change-interface \u003d eth0
sudo firewall-cmd --zone \u003d privateDNS --change-interface \u003d eth1

Тепер можна протестувати налаштування. Якщо все працює правильно, ви можете додати ці правила в постійні настройки.

sudo firewall-cmd --zone \u003d publicweb --permanent --add-service \u003d ssh
sudo firewall-cmd --zone \u003d publicweb --permanent --add-service \u003d http
sudo firewall-cmd --zone \u003d publicweb --permanent --add-service \u003d https
sudo firewall-cmd --zone \u003d privateDNS --permanent --add-service \u003d dns

Після цього можна налаштувати мережеві інтерфейси для автоматичного підключення до правильної зоні.

Наприклад, eth0 буде прив'язаний до publicweb:

sudo nano / etc / sysconfig / network-scripts / ifcfg-eth0
. . .
IPV6_AUTOCONF \u003d no
DNS1 \u003d 2001: 4860: 4860 :: 8844
DNS2 \u003d 2001: 4860: 4860 :: 8888
DNS3 \u003d 8.8.8.8
ZONE \u003d publicweb

А інтерфейс eth1 буде прив'язаний до privateDNS:

sudo nano / etc / sysconfig / network-scripts / ifcfg-eth1
. . .
NETMASK \u003d 255.255.0.0
DEFROUTE \u003d "no"
NM_CONTROLLED \u003d "yes"
ZONE \u003d privateDNS

Перезапустіть мережеві сервіси та брандмауер:

sudo systemctl restart network
sudo systemctl restart firewalld

Перевірте зони:

firewall-cmd --get-active-zones
privateDNS
interfaces: eth1
publicweb
interfaces: eth0

Переконайтеся, що в зонах працюють необхідні послуги:

firewall-cmd --zone \u003d publicweb --list-services
http htpps ssh
firewall-cmd --zone \u003d privateDNS --list-services
dns

Призначені для користувача зони повністю готові до роботи. Ви можете зробити будь-яку з них зоною за замовчуванням. наприклад:

sudo firewall-cmd --set-default-zone \u003d publicweb

Автоматичний запуск брандмауера

Тепер, коли ви перевірили всі налаштування і переконалися, що всі правила працюють належним чином, ви можете налаштувати автозапуск брандмауера.

Для цього введіть:

sudo systemctl enable firewalld

Тепер брандмауер буде запускатися разом з сервером.

висновок

Брандмауер firewalld - дуже гнучкий інструмент. Зони дозволяють швидко змінювати політику брандмауера.

Тепер ви знаєте, як працює firewalld, знайомі з основними поняттями брандмауера, вмієте створювати призначені для користувача зони і додавати сервіси.

Tags:,

Сьогодні я познайомлю вас зі своїм баченням початкової конфігурації універсального сервера на популярній ОС. Я розповім про те, як зробити базову настройку сервера centos відразу після установки для використання його в будь-якій якості на ваш розсуд. наведені практичні поради підвищують безпеку і зручність роботи з сервером. Стаття буде актуальна для двох останніх релізів Centos - 7 і 8.

  1. Перерахувати початкові настройки centos, які я виконую на свіжовстановленому сервері.
  2. Показати приклади конфігурацій, які я використовую в типовій налаштуванні.
  3. Дати поради по налаштуванню centos на основі свого досвіду роботи з системою.
  4. Привести список типових програм і утиліт, які допомагають адмініструвати сервер.

Дана стаття є частиною єдиного циклу статтею про сервер.

Вступ

Після виходу нового релізу Centos 8, стало важко в єдиній статті описувати початкову настройку обох серверів, але мені не захотілося розділяти статтю, так як на неї йде багато вхідних посилань з різних місць. Зручніше підтримувати загальний матеріал по обом релізів, ніж я і займуся. Заодно наочно буде видно відмінності двох версій, які пару років після виходу centos 8 будуть актуальні обидві і використовувати доведеться і ту, і іншу версію, в залежності від ситуації.

У Centos 7 використовується пакетний менеджер yum, А в Centos 8 - dnf. При цьому залишили символьне посилання з yum на dnf, так що можна писати як перша назва, так і друге. Для однаковості я всюди буду використовувати yum, а вас попереджаю, просто щоб ви розуміли, чому я роблю саме так. Реально в CentOS 8 використовується dnf, це інший, більш сучасний пакетний менеджер, які дозволяє працювати з різними версіями одного і того ж софта. Для цього використовуються окремі репозиторії, які з'явилися для centos 8.

Початкова настройка CentOS

Особисто я будь-яку настройку системи, будь то centos або інша, після установки починаю з того, що повністю обновляю систему. Якщо інсталяційний образ був свіжий, або установка велася по мережі, то швидше за все оновлень ніяких не буде. Найчастіше вони є, так як установчі образи не завжди регулярно оновлюються.

оновлюємо систему

# Yum update

Для зручності адміністрування, я завжди встановлюю Midnight Commander, або просто mc:

# Yum install mc

І відразу ж для нього включаю підсвічування синтаксису всіх файлів, які не позначені явно в файлі / Usr / share / mc / syntax / Syntax синтаксисом для sh і bash скриптів. Цей універсальний синтаксис нормально підходить для конфігураційних файлів, з якими найчастіше доводиться працювати на сервері. Перезаписуємо файл unknown.syntax. Саме цей шаблон буде застосовуватися к.conf і.cf файлів, так як до них явно не прив'язане ніякого синтаксису.

# Cp /usr/share/mc/syntax/sh.syntax /usr/share/mc/syntax/unknown.syntax

Далі нам знадобляться мережеві утиліти. Залежно від набору початкових пакетів, які ви вибираєте при установці системи, у вас буде той чи інший набір мережевих утиліт. Ось список тих, до яких звик особисто я - ifconfig, netstat, nslookup і деякі інші. Якщо вона вам потрібні, так само як і мені, то пропоную їх встановити окремо, якщо вони ще не стоять. Якщо вам вони особливо не потрібні і ви ними не користуєтеся, то можете пропустити їх установку. Перевіримо, що у нас є в системі на поточний момент

# ifconfig

Якщо побачите відповідь:

Bash: ifconfig: command not found

Значить утиліта не встановлена. Замість ifconfig в CentOS тепер утиліта ip. Це відноситься не тільки до центос. Така картина майже в усіх популярних сучасних дистрибутивах Linux. Я з давніх часів звик до ifconfig, хоча останнім часом практично не користуюся. Мені завжди подобалося, що в різних дистрибутивах Лінукс все приблизно однакове. За допомогою ifconfig можна налаштувати мережу не тільки в linux, але і в freebsd. Це зручно. А коли в кожному дистрибутиві свій інструмент це не зручно. Хоча зараз це вже не дуже актуально, так як з Freebsd більше не працюю, а утиліта ip є у всіх дистрибутивах linux. Проте, якщо вам потрібен ifconfig, то можете встановити пакет net-tools, В який вона входить:

# Yum install net-tools

Щоб у нас працювали команди nslookup або, наприклад, host необхідно встановити пакет bind-utils. Якщо цього не зробити, то на команду:

# nslookup

Буде висновок:

Bash: nslookup: command not found

Так що встановлюємо bind-utils:

# Yum install bind-utils

відключити SELinux

Відключаємо SELinux. Його використання та налаштування окрема розмова. Зараз я не буду цим займатися. Так що відключаємо:

# Mcedit / etc / sysconfig / selinux

міняємо значення

SELINUX \u003d disabled

Щоб зміни вступили в силу, можна перезавантажитися:

# reboot

А якщо хочете без перезавантаження застосувати відключення SELinux, то виконайте команду:

# Setenforce 0

Постійно отримую дуже багато критики на тему відключення SELinux. Я знаю, як він працює, вмію його налаштовувати. Це реально не дуже складно і освоїти не важко. Це мій свідомий вибір, хоча іноді я його налаштовую. Мій формат роботи з системою такий, що SELinux мені частіше за все не потрібен, тому я не витрачаю на нього час і в базовому налаштуванні centos відключаю. Безпека системи - комплексна робота, особливо в сучасному світі web розробки, де правлять бал мікросервіси і контейнери. SELinux нішевий інструмент, які потрібен не завжди і не скрізь. Тому в даному статті йому не місце. Кому потрібно, буде окремо включати SELinux і налаштовувати.

Вказуємо мережеві параметри

Продовжуємо базову настройку centos після установки. Тепер зробимо, якщо з якоїсь причини не зробили це під час установки, або якщо вам треба їх змінити. У загальному випадку, мережа в Centos налаштовується за допомогою NetworkManager і його консольної утиліти nmtui. Вона йде в базовій устновка системи. Там простий і зрозумілий графічний інтерфейс, так що розповідати нічого. Я більше звик налаштовувати мережу через конфігураційні файли network-scripts. У centos 7-й версії вони є з коробки, в 8-й версії їх прибрали. Щоб скористатися ними для настройки мережі, треба окремо встановити пакет network-scripts.

# Yum install network-scripts

Тепер вона може змінювати мережі. Для цього відкриваємо файл / Etc / sysconfig / network-scripts / ifcfg-eth0

# Mcedit / etc / sysconfig / network-scripts / ifcfg-eth0

Якщо ви отримуєте мережеві настройки по dhcp, то мінімальний набір налаштувань в файлі конфігурації буде такою.

TYPE \u003d "Ethernet" BOOTPROTO \u003d "dhcp" DEFROUTE \u003d "yes" IPV4_FAILURE_FATAL \u003d "no" NAME \u003d "eth0" DEVICE \u003d "eth0" ONBOOT \u003d "yes"

Для настройки статичного ip адреси настройки будуть наступні.

TYPE \u003d "Ethernet" BOOTPROTO \u003d "none" DEFROUTE \u003d "yes" IPV4_FAILURE_FATAL \u003d "no" NAME \u003d "eth0" DEVICE \u003d "eth0" ONBOOT \u003d "yes" IPADDR \u003d 192.168.167.117 DNS1 \u003d 192.168.167.113 PREFIX \u003d 28 GATEWAY \u003d 192.168.167.113

В поле IPADDR вводимо свою адресу, в PREFIX маску мережі, в GATEWAY шлюз, DNS адресу ДНС сервера. Зберігаємо файл і перезапускаємо мережу для застосування налаштувань:

# Systemctl restart network

налаштовуємо firewall

Додавання репозиторіїв

При налаштуванні centos частенько потрібен софт, якого немає в стандартній ріпі. для інсталяції додаткових пакетів необхідно. Найбільш популярний це EPEL. Раніше був rpmforge, але вже як кілька років закритий. Про нього все забули. Підключаємо репозиторій EPEL. З ним все просто, він додається зі стандартної ріпи:

# Yum install epel-release

Так само для CentOS 7 вкрай корисний репозиторій REMI, який дозволяє встановити больее свіжі версії php, на відміну від тих, що є в стандартному репозиторії. Нагадаю, що це версія php 5.4, яка вже нікуди не годиться і знята з підтримки.

# Rpm -Uhv http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Для Centos 8 remi поки що не стоїть, але думаю, що це тимчасово. В принципі, мені цих двох репозиторіїв в centos зазвичай вистачає в загальному випадку. Інші підключаються вже під конкретні потреби для установки різного софту.

Налаштування зберігання історії в bash_history

Рухаємося далі по налаштуванню системи centos на сервері. Корисним буде внести деякі зміни в стандартний механізм збереження історії команд. Він часто виручає, коли треба згадати одну з раніше введених команд. Стандартні настройки мають деякі обмеження, які незручні. Ось їх список:

  1. За замовчуванням, зберігаються тільки останні 1000 команд. Якщо їх буде більше, то більше старі будуть видалятися і замінюватися новими.
  2. Чи не вказані дати виконання команд, тільки їх список в порядку виконання.
  3. Файл зі списком команд оновлюється після завершення сесії. При паралельних сесіях частина команд може бути загублена.
  4. Зберігаються абсолютно всі команди, хоча в зберіганні деяких немає ніякого сенсу.

Список останніх виконаних команд зберігається в домашній директорії користувача в файлі .bash_history (На початку точка). Його можна відкрити будь-яким редактором і подивитися. Для більш зручного виведення списку, можна в консолі ввести команду:

# history

і побачити пронумерований список. Швидко знайти конкретну команду, можна за допомогою фільтрації тільки потрібних рядків, наприклад ось так:

# History | grep yum

Так ми побачимо всі варіанти запуску команди yum, які зберігаються в історії. Виправимо перелічені недоліки стандартних налаштувань зберігання історії команд в CentOS. Для цього потрібно відредагувати файл .bashrc, Який знаходиться в тому ж каталозі, що і файл з історією. Додаємо в нього наступні рядки:

Export HISTSIZE \u003d 10000 export HISTTIMEFORMAT \u003d "% h% d% H:% M:% S" PROMPT_COMMAND \u003d "history -a" export HISTIGNORE \u003d "ls: ll: history: w: htop"

Перший параметр збільшує розмір файлу до 10000 рядків. Можна зробити і більше, хоча зазвичай вистачає такого розміру. Другий параметр вказує, що необхідно зберігати дату і час виконання команди. Третій рядок змушує відразу ж після виконання команди зберігати її в історію. В останньому рядку ми створюємо список виключень для тих команд, запис яких в історію не потрібно. Я навів приклад найпростішого списку. Можете доповнити його на свій розсуд.

Для застосування змін необхідно разлогініться і підключитися заново або виконати команду:

# Source ~ / .bashrc

По налаштуванню зберігання історії команд все. У файлі .bashrc можна багато чого налаштувати цікавого. Я у свій час захоплювався і експериментував, але потім все закинув, так як не має сенсу. Працюючи з серверами замовників я найчастіше бачу дефолтний bash, тому краще звикати і працювати саме в ньому. А окремі настройки і прикрашення це доля особистих комп'ютерів і серверів. Чи не робітників. Так що більше я нічого не налаштовувати за стандартом в centos сервері в цьому плані.

Автоматичне оновлення системи

Для підтримки безпеки сервера на належному рівні необхідно як мінімум своєчасно його оновлювати - як саме ядро \u200b\u200bз системними утилітами, так і інші пакети. Можна робити це вручну, але для більш ефективної роботи краще налаштувати автоматичне виконання. Не обов'язково саме встановлювати оновлення автоматично, але як мінімум перевіряти їх появу. Я зазвичай дотримуюся такої стратегії.

Yum-cron

Для автоматичної перевірки оновлень в Centos 7 нам допоможе утиліта yum-cron. Ставиться вона традиційно через yum зі стандартного сховища.

# Yum install yum-cron

Після установки yum-cron створюється автоматичне завдання на виконання утиліти в /etc/cron.daily і /etc/cron.hourly. За замовчуванням, утиліта викачує знайдені оновлення, але не застосовує їх. Замість цього, адміністратору на локальний поштовий ящик root надсилається повідомлення про оновлення. Далі ви вже в ручному режимі заходите і вирішуєте, встановлювати оновлення чи ні у зручний для вас час. Мені такий режим роботи бачиться найбільш зручним, тому я не змінюю ці настройки.

Налаштовувати yum-cron можна через, конфігураційні файли, які знаходяться за адресою /etc/yum/yum-cron.conf і yum-cron-hourly.conf. Вони непогано прокоментовані, так що в докладних роз'яснень не потребують. Звертаю увагу на розділ , Де можна вказати параметри відправлення повідомлень. За замовчуванням варто відправка пошти через локальний хост. Можна тут змінити параметри і відправляти повідомлення через сторонній поштовий сервер. Але замість цього особисто я віддаю перевагу глобально для всього сервера налаштувати пересилання локальної пошти root на зовнішній поштовий ящик через авторизацію на іншому smtp сервері.

Dnf-automatic

Як я вже говорив раніше, в Centos 8 використовується інший пакетний менеджер - dnf. Налаштування поновлення пакетів там виконується через утиліту dnf-automatic. Поставимо її і налаштуємо.

# Yum install dnf-automatic

Управлінням запуском за розкладом займається вже не cron, а systemd своїм вбудованим планувальником. Подивитися таймери автоматичного запуску можна командою:

# Systemctl list-timers * dnf- *

Якщо там немає жодного завдання, то додати таймер можна вручну:

# Systemctl enable --now dnf-automatic.timer

Дефолтний таймер налаштований на запуск dnf-automatic через годину після завантаження сервера і щоденне повторення. Конфиг таймера живе тут - /etc/systemd/system/multi-user.target.wants/dnf-automatic.timer.

Конфиг для dnf-automatic живе в /etc/dnf/automatic.conf. За замовчуванням він тільки викачує оновлення, але не застосують їх. Конфиг добре прокоментований, так що можете його налаштувати так, як забажаєте. Окремих пояснень не потрібно. Налаштуйте оновлення пакетів системи на свій розсуд. Як я вже сказав, автоматично тільки качаю їх. Установку завжди тримаю під контролем з ручним керуванням.

Відключаємо флуд повідомлень в / var / log / messages

Продовжуючи настройку centos, виправимо одне невелика незручність. У дефолтной установці системи 7-й версії, весь ваш системний лог / Var / log / messages через деякий час роботи сервера буде забитий такими записами.

Oct 16 14:01:01 xs-files systemd: Created slice user-0.slice. Oct 16 14:01:01 xs-files systemd: Starting user-0.slice. Oct 16 14:01:01 xs-files systemd: Started Session 14440 of user root. Oct 16 14:01:01 xs-files systemd: Starting Session 14440 of user root. Oct 16 14:01:01 xs-files systemd: Removed slice user-0.slice. Oct 16 14:01:01 xs-files systemd: Stopping user-0.slice. Oct 16 15:01:01 xs-files systemd: Created slice user-0.slice. Oct 16 15:01:01 xs-files systemd: Starting user-0.slice. Oct 16 15:01:01 xs-files systemd: Started Session 14441 of user root. Oct 16 15:01:01 xs-files systemd: Starting Session 14441 of user root. Oct 16 15:01:01 xs-files systemd: Started Session 14442 of user root. Oct 16 15:01:01 xs-files systemd: Starting Session 14442 of user root. Oct 16 15:01:01 xs-files systemd: Removed slice user-0.slice. Oct 16 15:01:01 xs-files systemd: Stopping user-0.slice. Oct 16 16:01:01 xs-files systemd: Created slice user-0.slice. Oct 16 16:01:01 xs-files systemd: Starting user-0.slice. Oct 16 16:01:01 xs-files systemd: Started Session 14443 of user root. Oct 16 16:01:01 xs-files systemd: Starting Session 14443 of user root. Oct 16 16:01:01 xs-files systemd: Removed slice user-0.slice.

У Centos 8 я їх не помітив, тому там нічого робити не треба. Ніякої практичної користі повідомлення не несуть, тому відключимо їх. Для цього створимо окремий правило для rsyslog, де перерахуємо всі шаблони повідомлень, які будемо вирізати. Розмістимо це правило в окремому файлі /etc/rsyslog.d/ignore-systemd-session-slice.conf.

# Cd /etc/rsyslog.d && mcedit ignore-systemd-session-slice.conf if $ programname \u003d\u003d "systemd" and ($ msg contains "Starting Session" or $ msg contains "Started Session" or $ msg contains "Created slice "or $ msg contains" Starting user- "or $ msg contains" Starting User Slice of "or $ msg contains" Removed session "or $ msg contains" Removed slice User Slice of "or $ msg contains" Stopping User Slice of " ) then stop

Зберігаємо файл і перезапускаємо rsyslog для застосування налаштувань.

# Systemctl restart rsyslog

Необхідно розуміти, що в даному випадку ми відключаємо флуд в лог файл тільки на локальному сервері. Якщо ви зберігаєте логи на, то дане правило потрібно буде налаштовувати саме на ньому.

Установка iftop, atop, htop, lsof на CentOS

І наостанок в завершенні настройки додамо кілька корисних утиліт, які можуть стати в нагоді в процесі експлуатації сервера.

iftop показує в режимі реального часу завантаження мережевого інтерфейсу, може запускатися з різними ключами, не буду зупинятися на цьому докладно, в інтернеті є інформація на цю тему. ставимо:

# Yum install iftop

І два цікавих диспетчера задач, я найчастіше користуюся htop, але іноді стане в нагоді і atop. Ставимо обидва, самі подивіться, розберетеся, що вам більше подобається, підходить:

# Yum install htop # yum install atop

Для виведення інформації про те, які файли використовуються тими чи іншими процесами, раджу поставити утиліту lsof. Вона швидше за все рано чи пізно стане в нагоді, коли будете діагностувати роботу сервера.

# Yum install wget bzip2 traceroute gdisk

На цьому у мене все. Базова настройка CentOS закінчена, можна приступати до встановлення та налаштування основного функціоналу.

Налаштування системної пошти

На завершення налаштування сервера CentOS зробимо так, що б пошта, адресована локальному root, відправлялася через зовнішній поштовий сервер на обраний поштову скриньку. Якщо цього не зробити, то вона буде локально складатися в файл / Var / spool / mail / root. А там може бути важлива і корисна інформація. Налаштуємо її відправку в ящик системного адміністратора.

Детально про це я розповів в окремій статті -. Тут коротко тільки команди і швидке налаштування. Ставимо необхідні пакети:

# Yum install mailx cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain postfix

Малюємо приблизно такий конфіг для postfix.

Cat /etc/postfix/main.cf ## DEFAULT CONFIG BEGIN ###################### queue_directory \u003d / var / spool / postfix command_directory \u003d / usr / sbin daemon_directory \u003d / usr / libexec / postfix data_directory \u003d / var / lib / postfix mail_owner \u003d postfix inet_interfaces \u003d localhost inet_protocols \u003d all unknown_local_recipient_reject_code \u003d 550 alias_maps \u003d hash: / etc / aliases alias_database \u003d hash: / etc / aliases debug_peer_level \u003d 2 debugger_command \u003d PATH \u003d / bin: / usr / bin: / usr / local / bin: / usr / X11R6 / bin ddd $ daemon_directory / $ process_name $ process_id & sleep 5 sendmail_path \u003d /usr/sbin/sendmail.postfix newaliases_path \u003d / usr / bin / newaliases.postfix mailq_path \u003d /usr/bin/mailq.postfix setgid_group \u003d postdrop html_directory \u003d no manpage_directory \u003d / usr / share / man sample_directory \u003d /usr/share/doc/postfix-2.10.1/samples readme_directory \u003d / usr / share / doc / postfix-2.10.1 / README_FILES ## DEFAULT CONFIG END ###################### # Ім'я сервера, яке виводить команда hostname myhostname \u003d centos-test. xs.local # Тут п про логіку потрібно залишати тільки домен, але в даному випадку краще залишити повне ім'я сервера, щоб в поле відправник # фігурувало повне ім'я сервера, так зручніше розбирати службові повідомлення mydomain \u003d centos-test.xs.local mydestination \u003d $ myhostname myorigin \u003d $ mydomain # Адреса сервера, через який будемо відправляти пошту relayhost \u003d mailsrv.mymail.ru:25 smtp_use_tls \u003d yes smtp_sasl_auth_enable \u003d yes smtp_sasl_password_maps \u003d hash: / etc / postfix / sasl_passwd smtp_sasl_security_options \u003d noanonymous smtp_tls_security_level \u003d may

Створюємо файл з інформацією про ім'я користувача та пароль для авторизації.

# Mcedit / etc / postfix / sasl_passwd mailsrv.mymail.ru:25 [Email protected]: password

Створюємо db файл.

# Postmap / etc / postfix / sasl_passwd

Тепер можна запустити знову postfix і перевірити роботу.

# Systemctl restart postfix

До стандартного АЛІАС для root в / Etc / aliases, Додайте зовнішню адресу, куди буде дублюватися пошта, адресована root. Для цього редагуємо вказаний файл, змінюючи останній рядок.

#root: marc

Root: root, [Email protected]

Оновлюємо базу сертифікатів:

# newaliases

Відправимо лист через консоль локальному руту:

# Df -h | mail -s "Disk usage" root

Лист повинен піти на зовнішній ящик. Якщо ви будете використовувати ящик від Яндекса, то швидше за все отримаєте помилку в балці поштового сервера і лист не буде відправлено.

Relay \u003d smtp.yandex.ru: 25, delay \u003d 0.25, delays \u003d 0/0 / 0.24 / 0.01, dsn \u003d 5.7.1, status \u003d bounced (host smtp.yandex.ru said: 553 5.7.1 Sender address rejected: not owned by auth user. (in reply to MAIL FROM command))

Помилка ця означає те, що у вас в якості відправника пошти вказано не той же ящик, що ви використовуєте для авторизації. Як це виправити, я розповідаю в окремій статті -. З іншими поштовими системами, де немає подібної перевірки, все повинно бути нормально і так.

На цьому настройка локальної пошти закінчена. Тепер всі листи, адресовані локальному root, наприклад, звіти від cron, будуть дублюватися на зовнішній поштовий ящик, причому з відправкою через повноцінний поштовий сервер. Так що листи будуть нормально доставлятися, не потрапляючи в спам (хоча не обов'язково, є ще евристичні фільтри).

висновок

Ми виконали деякі початкові кроки по налаштуванню сервера CentOS, які я зазвичай роблю при підготовці сервера відразу після установки. Я не претендую на абсолютну істину, можливо щось пропускаю або роблю не зовсім вірно. Буду радий розумним і осмисленим коментарям і зауваженням з пропозиціями.

..
  • Розуміння особливостей розгортання, налаштування і обслуговування мереж, побудованих на базі Linux.
  • Здатність швидко вирішувати виникаючі проблеми і забезпечувати стабільну і безперебійну роботу системи.
  • Перевірте себе на вступний тест і дивіться докладніше програму по.

    Але команди iptables складні, і багатьом користувачам важко запам'ятати всі опції і випадки, в яких їх треба використовувати. Тому розробники дистрибутивів створюють свої надбудови над iptables, які допомагають спростити управління фаєрволом. У CentOS надбудова для управління iptables називається Firewalld.

    У Firewalld є кілька важливих відмінностей, в порівнянні з iptables. Тут управління доступом до мережі виконується на рівні зон і сервісів, а не ланцюжків і правил. А також правила оновлюються динамічно, не перериваючи запущених сесій. У цій статті буде розглянута настройка Firewall CentOS 7 на прикладі Firewalld.

    Як я вже сказав вище, Firewalld працює не з ланцюжками правил, а з зонами. Кожному мережному інтерфейсу може бути присвоєна певна зона. Зона представляє собою набір правил, обмежень і дозволів, які застосовуються до цього мережевого інтерфейсу. Для одного інтерфейсу може бути обрана тільки одна зона. Розробники створили кілька попередньо зон:

    • drop - блокувати всі вхідні пакети, дозволити тільки вихідні
    • block - на відміну від попереднього варіанту відправнику пакета буде відправлено повідомлення з блокування його пакета;
    • public - підтримуються вхідні з'єднання тільки для ssh і dhclient;
    • external - підтримує NAT для приховування внутрішньої мережі;
    • internal - дозволені сервіси ssh, samba, mdns і dhcp;
    • dmz - використовується для ізольованих сервров, у яких немає доступу до мережі. Дозволено тільки підключення по SSH;
    • work - дозвіл сервіси ssh і dhcp;
    • home - аналогічно internal;
    • trusted - все дозволено.

    Таким чином, щоб дозволити або заборонити будь-якої сервіс, вам досить додати або видалити його з поточної зони або змінити зону інтерфейсу на ту, де він дозволений. Можна провести аналогію з політикою дій за замовчуванням для пакетів в iptables. Зона trusted має політику ACCEPT і дозволяє все підключення, зона block має політику DENY, яка забороняє будь-яке з'єднання, а всі інші зони можна вважати спадкоємцями зони block, плюс в них вже відомі наперед правила дозволу здійснювати підключення до мережі для деяких сервісів.

    Також у Firewalld є два види конфігурації:

    • runtime - дійсна тільки до перезавантаження, всі зміни, в яких явно не вказано інше, застосовуються до цієї конфігурації;
    • permanent - постійні настройки, які будуть працювати і після перезавантаження.

    Тепер ви знаєте все необхідне, тому перейдемо до утиліти firewalld-cmd.

    Синтаксис і опції firewall-cmd

    Керувати налаштуваннями Firewalld можна як за допомогою консольної утиліти firewall-cmd, так і в графічному інтерфейсі. CentOS найчастіше використовується на серверах, тому вам доведеться працювати в терміналі. Давайте розглянемо синтаксис утиліти:

    firewall-cmd опції

    Для управління зонами використовується такий синтаксис:

    firewall-cmd --конфігурація --zone \u003d зона опції

    Як конфігурації потрібно вказати опцію --permanent, щоб зберегти зміни після перезавантаження або нічого не вказувати, тоді зміни будуть дійсні тільки до перезавантаження. Як зони використовуйте ім'я потрібної зони. Давайте розглянемо опції утиліти:

    • --state - вивести стан брандмауера;
    • --reload - перезавантажити правила з постійною конфігурації;
    • --complete-reload - жорстка перезавантаження правил з розривом всіх з'єднань;
    • --runtime-to-permanent - перенести настройки конфігурації runtime в постійну конфігурацію;
    • --permanent - використовувати постійну конфігурацію;
    • --get-default-zone - відобразити зону, використовувану за замовчуванням;
    • --set-default-zone - встановити зону за замовчуванням;
    • --get-active-zones - відобразити активні зони;
    • --get-zones - відобразити всі доступні зони;
    • --get-services - вивести зумовлені сервіси;
    • --list-all-zones - вивести конфігурацію всіх зон;
    • --new-zone - створити нову зону;
    • --delete-zone - видалити зону;
    • --list-all - вивести все, що додано, з обраної зони;
    • --list-services - вивести всі сервіси, додані до зони;
    • --add-service - додати сервіс до зони;
    • --remove-service - видалити сервіс із зони;
    • --list-ports - відобразити порти, додані до зони;
    • --add-port - додати порт до зони;
    • --remove-port - видалити порт із зони;
    • --query-port - показати, доданий чи порт до зони;
    • --list-protocols - вивести протоколи, додані до зони;
    • --add-protocol - додати протокол до зони;
    • --remove-protocol - видалити протокол із зони;
    • --list-source-ports - вивести порти джерела, додані до зони;
    • --add-source-port - додати порт-джерело до зони;
    • --remove-source-port - видалити порт-джерело із зони;
    • --list-icmp-blocks - вивести список блокувань icmp;
    • --add-icmp-block - додати блокування icmp;
    • --add-icmp-block - видалити блокування icmp;
    • --add-forward-port - додати порт для перенаправлення в NAT;
    • --remove-forward-port - видалити порт для перенаправлення в NAT;
    • --add-masquerade - включити NAT;
    • --remove-masquerade - видалити NAT.

    Це далеко не всі опції утиліти, але для цієї статті нам буде їх достатньо.

    Налаштування Firewall в CentOS 7

    1. Статус брандмауера

    Насамперед необхідно подивитися стан брандмауера. Для цього виконайте:

    sudo systemctl status firewalld

    Якщо служба Firewalld відключена, то необхідно її включити:

    sudo systemctl start firewalld
    sudo systemctl enable firewalld

    Тепер потрібно подивитися, чи запущений Firewalld, за допомогою команди firewall-cmd:

    sudo firewall-cmd --state

    Якщо програма запущена і все добре, то ви отримаєте повідомлення "running".

    2. Управління зонами

    Як ви вже зрозуміли, зони - це основний інструмент для управління мережевими підключеннями. Щоб подивитися зону за замовчуванням, виконайте:

    sudo firewall-cmd --get-default-zone

    У моєму випадку це зона public. Ви можете змінити поточну зону за допомогою опції --set-default-zone:

    sudo firewall-cmd --set-default-zone \u003d public

    Щоб подивитися, які зони використовуються для всіх мережевих інтерфейсів, виконайте:

    sudo firewall-cmd --get-active-zones

    У списку будуть виведені зони і інтерфейси, для яких вони привласнені. Такою командою можна подивитися конфігурацію для певної зони. Наприклад, для зони public:

    3. Налаштування сервісів

    Ви можете подивитися всі зумовлені сервіси командою:

    sudo firewall-cmd --get-services

    Команда виведе всі доступні сервіси, ви можете додати будь-який з них до зони, щоб його вирішити. Наприклад, дозволимо підключення до http:

    sudo firewall-cmd --zone \u003d public --add-service \u003d http --permanent

    А щоб видалити цей сервіс, виконайте:

    sudo firewall-cmd --zone \u003d public --remove-service \u003d http --permanent

    В обох випадках ми використовували опцію --permanent, щоб конфігурація зберігалася після перезавантаження. Після змін потрібно оновити правила:

    sudo firewall-cmd --reload

    Потім, якщо ви подивитеся конфігурацію зони, то там з'явиться доданий сервіс:

    sudo firewall-cmd --zone \u003d public --list-all

    4. Як відкрити порт в Firewalld

    Якщо для потрібної вам програми немає сервісу, ви можете відкрити її порт вручну. Для цього просто додайте потрібний порт до зони. Наприклад порт 8083:

    sudo firewall-cmd --zone \u003d public --add-port \u003d 8083 / tcp --permanent

    Щоб видалити цей порт із зони, виконайте:

    sudo firewall-cmd --zone \u003d public --remove-port \u003d 8083 / tcp --permanent

    Аналогічно сервісів, щоб відкрити порт в firewall centos 7 треба перезавантажити брандмауер.

    sudo firewall-cmd --reload

    5. Проброс портів Firewalld

    Проборс портів в Firewalld налаштовується набагато простіше, ніж в iptables. Якщо вам потрібно, наприклад, перенаправити трафік з порту 2223 на порт 22, досить додати до зони перенаправлення:

    sudo firewall-cmd --zone \u003d public --add-forward-port \u003d port \u003d 2223: proto \u003d tcp: toport \u003d 22

    Тут перенаправлення виконується тільки на поточній машині. Якщо ви хочете налаштувати мережу NAT і прокидати порт на іншу машину, то вам потрібно спочатку включити підтримку masquerade:

    sudo firewall-cmd --zone \u003d public --add-masquerade

    Потім вже можна додати порт:

    sudo firewall-cmd --zone \u003d publiс --add-forward-port \u003d port \u003d 2223: proto \u003d tcp: toport \u003d 22: toaddr \u003d 192.168.56.4

    6. Розширені правила

    Якщо функціональності зон вам недостатньо, ви можете використовувати розширені правила. Загальний синтаксис розширених правил такої:

    rule family \u003d "семейтво" source значення destination значення log audit дію

    Ось значення основних параметрів:

    • В якості сімейства протоколів можна вказати ipv4 або ipv6 або нічого не вказувати, тоді правило буде застосовуватися до обох протоколах;
    • source і destination - це відправник і одержувач пакета. Як цих параметрів може бути використаний IP-адреса (address), сервіс (service name), порт (port), протокол (protocol) і так далі;
    • log - дозволяє логгіровать проходження пакетів, наприклад в syslog. В цій настройці ви можете вказати префікс рядка балки і рівень подробиці логгірованія;
    • audit - це альтернативний спосіб логгірованія, коли повідомлення будуть відправлятися в службу auditd.
    • Дія - це дія, яку потрібно зробити з поєднаним пакетом. Доступні: accept, drop, reject, mark.

    Давайте розглянемо кілька прикладів. Нам необхідно заблокувати доступ до сервера для користувача з IP 135.152.53.5:

    sudo firewall-cmd --zone \u003d public --add-rich-rule "rule family \u003d" ipv4 "source address \u003d 135.152.53.5 reject"

    Або нам потрібно заборонити для цього ж користувача тільки доступ до порту 22:

    sudo firewall-cmd --zone \u003d public --add-rich-rule "rule family \u003d" ipv4 "source address \u003d 135.152.53.5 port port \u003d 22 protocol \u003d tcp reject"

    Подивитися всі розширені правила можна командою:

    sudo firewall-cmd --list-rich-rules

    висновки

    У цій статті ми розібрали, як виконується настройка firewall в CentOS 7 і які завдання можна за допомогою нього виконати. Програмою набагато простіше користуватися, ніж iptables, але на мою думку надбудова фаервола від Ubuntu - ще простіше у використанні.



    Сподобалася стаття? поділіться їй