Firewalld в примери: Пълно ръководство за начинаещи

Сподели

Това ръководство ще ви научи на всичко, което трябва да знаете, за да започнете с firewalld, за да добавяте, променяте и премахвате правила от зоните на вашата защитна стена.

В днешно време конфигурирането и внедряването на надеждна защитна стена за вашите сървъри и мрежа е задължително. Без него въпросът вече не е дали, а кога злонамерените атаки ще ви навредят, за съжаление са често срещани в интернет тези дни.

Това е мястото, където Firewalld влиза в игра. Firewalld, защитната стена по подразбиране в дистрибуции на Linux като Red Hat Enterprise Linux, Fedora, Oracle Linux, openSUSE, AlmaLinux, Rocky Linux и други, осигурява цялата защита, от която се нуждаете, за да защитите вашите сървъри и мрежа. Но преди да разберем как да го използваме, нека първо обясним какво представлява.

Какво е Firewalld?

Firewalld е инструмент за управление на защитна стена, базиран на зони, който осигурява динамично управлявана защитна стена с поддръжка за мрежови зони, които определят нивото на доверие за мрежови връзки или интерфейси.

В допълнение, той действа като преден край за рамката Netfilter на ядрото на Linux, осигурявайки функционалност на защитната стена.

За разлика от веригите iptables, той управлява правилата на защитната стена, използвайки зони и услуги. Тези правила се използват за сортиране на входящия трафик и определяне дали трябва да бъде блокиран или разрешен.

Как да управлявате правилата на защитната стена с Firewalld

Основният инструмент за управление на правилата на Firewalld е firewall-cmd. Това е инструмент от командния ред, който предоставя интерфейс за управление на времето за изпълнение и постоянната конфигурация на Firewalld. Когато го използвате, промените влизат в сила веднага и не е необходимо да рестартирате услугата.

Проверка на състоянието на защитната стена

Изпълнете следната команда, за да видите дали вашата защитна стена е активна:

sudo firewall-cmd --state
Проверка на състоянието на защитната стена

Изходът трябва да казва или „работи“, или „не работи“.

Освен това, за да видите състоянието на услугата Firewalld, изпълнете следното:

sudo systemctl status firewalld
Проверка на състоянието на услугата Firewall

Ако услугата не е стартирана по някаква причина, можете да я стартирате и да я настроите да се стартира автоматично, когато системата се стартира като run:

sudo systemctl start firewalld
sudo systemctl enable firewalld

По същия начин можете да спрете и деактивирате автоматичното стартиране на услугата Firewalld, като направите следното:

sudo systemctl stop firewalld
sudo systemctl disable firewalld

Зони и интерфейси

Firewalld, както беше посочено по-горе, е защитна стена, базирана на зони. Но какво точно означава това и какво представляват зоните?

Накратко, те са компонент от най-високо ниво на организацията Firewalld. Така че зоните могат да осигурят различни нива на сигурност за различните зони на свързване. Идеята е да има отделни мерки за сигурност за различните мрежови зони.

Всяка зона е свързана с поне един мрежов интерфейс – хардуерен или виртуален мрежов адаптер. Получаването на списък с предварително конфигурираните зони на Firewalld е лесно. Въведете командата:

sudo firewall-cmd --get-zones
Избройте зоните на защитната стена

Както можете да видите, зоните, които са изброени по подразбиране, са:

  • блок: Входящите мрежови връзки се отхвърлят със съобщение icmp-host-prohibited. Разрешени са само мрежови връзки, инициирани от тази система.
  • dmz: За публично достъпни компютри във вашата демилитаризирана зона с ограничен достъп до вашата вътрешна мрежа. Приемат се само определени входящи връзки.
  • изпускайте: Всички входящи мрежови връзки се прекъсват и не се изпраща отговор. Разрешени са само изходящи мрежови връзки.
  • външен: За използване във външни мрежи с разрешено маскиране, главно рутери. Не вярвате на други компютри в мрежите да не навредят на вашия. Приемат се само определени типове входящи връзки.
  • У дома: За използване в дома. Обикновено се доверявате на други компютри в мрежите да не навредят на вашия. Приемат се само определени типове входящи връзки.
  • вътрешни: За използване във вътрешни мрежи. Обикновено вярвате, че другите компютри в мрежата няма да навредят на вашия компютър. Приемат се само определени входящи връзки.
  • публичен: За използване във външни мрежи. Не вярвате на други компютри в мрежите да не наранят вашия. Приемат се само определени типове входящи връзки.
  • доверен: Всяка мрежова връзка е разрешена.
  • работа: За използване на работни места. Обикновено вярвате, че други компютри в мрежите няма да навредят на вашия компютър. Приемат се само определени входящи връзки.

Ако не сте направили никакви допълнителни промени, зоната по подразбиране на Firewalld е зададена на „публична“. За да проверите зоната по подразбиране:

sudo firewall-cmd --get-default-zone
Проверете зоната по подразбиране на Firewalld

За да промените зоната по подразбиране, например „дом“, въведете:

sudo firewall-cmd --set-default-zone=home
Промяна на зоната по подразбиране

За да изброите активните зони и присвоените им мрежови интерфейси, изпълнете следното:

sudo firewall-cmd --get-active-zones
Избройте активните зони и присвоените им мрежови интерфейси

За да присвоите мрежов интерфейс (enp1s0 в нашия случай) към друга зона, като например „home“, въведете:

sudo firewall-cmd --zone=home --change-interface=enp1s0
Присвояване на мрежов интерфейс към зона

Не забравяйте, че ако имате само един мрежов интерфейс на вашата система и го присвоите на друга зона, тази зона ще стане активна по подразбиране.

За да получите всички конфигурации за конкретна зона, например „публична“, изпълнете:

sudo firewall-cmd --zone=public --list-all
Получете подробности за зоната

По същия начин, за да получите конфигурации за всички зони наведнъж:

sudo firewall-cmd --list-all-zones

Разрешаване и отказ по име на услуга

Firewalld може да разреши трафик за конкретни мрежови услуги въз основа на предварително зададени правила. Най-простият метод е да добавите услугите, които трябва да разрешите към зоните, които използвате.

Разбира се, първо трябва да знаете името на услугата. Но е трудно да запомните имената на всички услуги, въпреки че са според очакванията. Така че, използвайки следната команда, можем да видим имената на всички налични предварително дефинирани.

sudo firewall-cmd --get-services
Избройте услуги

Можете да намерите повече подробности за тези услуги в свързаните с тях .xml файл в /usr/lib/firewalld/справочник за услуги. Например услугата MySQL се дефинира по следния начин:

cat /usr/lib/firewalld/services/mysql.xml
Опишете услугата

Да приемем, че искаме да активираме услугата MySQL. За да постигнем това, добавяме името на услугата след --add-service= към firewalld-cmd команда и използвайте --zone= опция за указване на коя зона да се присвои услугата.

sudo firewall-cmd --zone=public --add-service=mysql
Активирайте услугата Firewalld

Нека сега проверим отново подробностите за „публичната“ зона.

sudo firewall-cmd --zone=public --list-all
Получете подробности за зоната

Страхотен. Добавихме правило за защитна стена, което позволява входящи връзки към MySQL сървъра. Това правило обаче е временно. Това означава, че правилото няма да оцелее по време на рестартиране на системата.

За да гарантираме устойчивостта на правилото, трябва да добавим --permanent опция към командата. По този начин, дори след рестартиране, Firewalld автоматично ще го зареди.

sudo firewall-cmd --zone=public --add-service=mysql --permanent

Трябва да отбележим една важна подробност: добавяне на правило без --permanent опцията го прави достъпен и влиза в сила незабавно. Използвайки обаче --permanent няма да има ефект, докато системата не се рестартира.

И така, за да направим нашето ново постоянно правило активно незабавно, трябва да презаредим Firewalld, като изпълним:

sudo firewall-cmd --reload

По този начин презареждаме правилата на защитната стена, като запазваме информацията за състоянието. С други думи, текущата постоянна конфигурация ще стане нова конфигурация по време на изпълнение.

Нека да разгледаме как можем да премахнем правилата от нашата защитна стена сега. Процедурата е почти идентична с добавянето, но опцията --remove-service се използва този път.

Например, за да премахнем услугата MySQL, трябва да издадем следната команда:

sudo firewall-cmd --zone=public --remove-service=mysql
Премахнете услугата Firewalld

Отново, за да премахнем достъпа за постоянно, трябва да добавим --permanent опция и след това презаредете правилата, така че промяната да влезе в сила незабавно.

sudo firewall-cmd --zone=public --remove-service=mysql --permanent
sudo firewall-cmd --reload
Премахнете услугата Firewall за постоянно

Разрешаване и отказ по номер на порт

Понякога обаче трябва да разрешим достъп, като посочим номер на порт. Да предположим например, че имате услуга, слушаща нестандартния TCP порт 10069. Така че ще ни трябва нещо различно от предварително дефиниране на услуги по име.

За щастие Firewalld предлага начин за разрешаване на достъп чрез порт и протокол, който е напълно идентичен с този на имената на услугите. Например, за да разрешите трафик към порт 10069 на TCP, изпълнете:

sudo firewall-cmd --zone=public --add-port=10069/tcp

Проверяваме разрешените портове, изпълнявайки:

sudo firewall-cmd --zone=public --list-ports
Разрешаване на трафик по номер на порт

Разбира се, можем да получим преглед на голямата картина за цялата зона по познат начин:

sudo firewall-cmd --zone=public --list-all
Вземете информация за зоната

Тук се прилагат същите правила за постоянство, както при използване на имена на услуги. В резултат на това, за да гарантираме, че нашето правило за защитна стена оцелява между рестартирането, трябва да изпълним следното:

sudo firewall-cmd --zone=public --add-port=10069/tcp --permanent
sudo firewall-cmd --reload

Освен това, ако портът, който искате да активирате, използва UDP протокола вместо TCP, трябва да замените tcp с udp в firewall-cmd линия.

Подходът за премахване на порт от списъка с правила е идентичен, като единствената разлика е замяната на --add-port= с --remove-port= опция.

sudo firewall-cmd --zone=public --remove-port=10069/tcp --permanent
sudo firewall-cmd --reload

Богати правила на Firewalld

Тези, които са запознати с iptables, ще бъдат спокойни, като използват обогатените правила на защитната стена. Както подсказва името, те ви позволяват да създавате сложни правила с множество критерии, които не могат да бъдат постигнати с помощта на име или базирани на порт правила.

С други думи, богатите правила на защитната стена осигуряват много по-високо ниво на контрол чрез повече персонализирани детайлни опции. Освен това те могат също така да конфигурират регистриране, маскиране, пренасочване на портове и ограничаване на скоростта.

Използването им може да има безброй вариации, така че ако искате да научите повече за тях, трябва да се консултирате с официална документация. Тук ще предоставим някои опростени примери, за да ви дадем представа какво можете да правите с обогатените правила на Firewalld.

Да предположим например, че искаме да разрешим достъп до MySQL сървъра, който, както знаем, слуша на порт 3306 от IP адрес 192.168.1.69. Правилото би изглеждало така:

sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.69" port port=3306 protocol=tcp accept'
Добавете богати правила на Firewall

Както при правилата, базирани на име и порт, богатите правила на Firewalld не са постоянни, освен ако --permanent е посочен флаг.

Командата за премахване на това правило е идентична с тази по-горе, с изключение на това, че --add-rich-rule опцията трябва да бъде заменена с --remove-rich-rule.

sudo firewall-cmd --zone=public --remove-rich-rule 'rule family="ipv4" source address="192.168.1.69" port port="3306" protocol="tcp" accept'

Ако искаме да направим обратното и да блокираме достъпа до MySQL сървъра от IP адрес 192.168.1.69, нашето правило ще бъде:

sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.69" port port="3306" protocol="tcp" reject'

Като последен пример искаме да пренасочим целия входящ трафик от порт 80 към порт 8080 на хост 192.168.1.200, където сме инсталирали Tomcat сървър. За да постигнем това, нашето богато правило на Firewall трябва да бъде:

sudo firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=192.168.1.200'

Можете да прегледате богатите правила, като изпълните следното:

sudo firewall-cmd --zone=public --list-rich-rules
Избройте богати правила

Заключение

Това завършва нашето ръководство. Надявам се да ви е било полезно. Вече трябва да разбирате добре какво представлява Firewalld и как да го използвате, за да защитите вашите компютри и мрежа. Познаването му ще ви позволи да използвате гъвкавостта и мощността на инструмента.

За по-задълбочен преглед на Firewalld препоръчваме да посетите официален сайт или гледайки тази статия на уебсайта на Red Hat, които са автори на Firewalld.

Публикациите се превеждат автоматично с google translate


Сподели