Начало > Помощен център > Cloud сървъри > Администрация на сървър > CentOS 7 - конфигуриране на защитна стена

CentOS 7 - конфигуриране на защитна стена

Помощен център

CentOS 7 - конфигуриране на защитна стена

Какво е Firewalld?

Firewalld е услуга от типа защитната стена, достъпна за много Linux дистрибуции, която действа като предмостие (frontend) на системата за филтриране на iptables пакети и се осигурява от Linux ядрото.

В статията ще разгледаме какво представлява и как работи защитната стена, как може да се настрои защитна стена за CentOS 7 сървър и ще ви покажем основните команди за управление.

Основни концепции на Firewalld

Firewalld използва концепциите за зони и услуги, вместо iptables правила (iptables chain and rules). Чрез зоните и услугите, които конфигурирате, вие решавате кой трафик е разрешен или забранен към и от сървъра.

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

Зони на защитната стена (firewalld zones)

Зоните са предварително дефинирани набори от правила, определящи какъв трафик трябва да бъде разрешен въз основа на нивото на доверие в мрежите, към които е свързан сървъра. Вие може да присвоявате мрежови интерфейси и източници към зона.

По-долу са зоните, предоставени от FirewallD, подредени според нивото на доверие на зоната от ненадеждна до доверена:

  • drop: Всички входящи връзки се отказват без никакво уведомяване. Разрешени са само изходящи връзки.
  • block: Всички входящи връзки се отхвърлят с уведомяване. Разрешени са само изходящи връзки.
  • public: За използване в независими обществени зони. Не вярвате на други компютри в мрежата, но може да разрешите избрани входящи връзки.
  • external: За използване във външни мрежи с активирано NAT маскиране, когато вашата система действа като gateway или рутер. Разрешени са само избрани входящи връзки.
  • internal: За използване във вътрешни мрежи, когато системата ви действа като gateway или рутер. На други системи в мрежата обикновено се вярва. Разрешени са само избрани входящи връзки.
  • dmz: Използва се за компютри, разположени във вашата демилитаризирана зона, които ще имат ограничен достъп до останалата част от мрежата. Разрешени са само избрани входящи връзки.
  • work: Използва се за работни машини. На другите компютри в мрежата обикновено се вярва. Разрешени са само избрани входящи връзки.
  • home: Използва се за локални машини. На другите компютри в мрежата обикновено се вярва. Разрешени са само избрани входящи връзки.
  • trusted: Всички мрежови връзки се приемат. Доверяваме се на всички компютри в мрежата.

Функции на firewalld zones

За всяка зона може да дефинирате следните характеристики:

  • Услуги: Предварително определени или персонализирани услуги, на които да се доверите. Доверените услуги са комбинация от портове и протоколи, които са достъпни от други системи и мрежи.
  • Портове: Допълнителни портове или диапазони от портове и свързани протоколи, които са достъпни от други системи и мрежи.
  • Маскиране (masquerading): Маскиране на IPv4 адресите като един външен адрес. При активирано маскиране адресите на частна мрежа се картографират и скриват зад публичен адрес.
  • Пренасочване на порт: Пренасочване на входящ мрежов трафик от конкретен порт или диапазони от портове към алтернативен порт в локалната система или към порт на друг IPv4 адрес.
  • ICMP Filter: Блокиране на избраните съобщения за протокол за съобщения от интернет контрол.
  • Разширени правила: Разширяване на съществуващите правила на защитната стена чрез включване на допълнителни източници и адреси на местоназначение.
  • Интерфейси: Мрежови интерфейси, свързани към зона. Зоната за интерфейса се посочва с ZONE=option във файла /etc/sysconfig/network-scripts/ifcfg. Ако опцията липсва, интерфейсът се свързва към зоната по подразбиране.

Услуги на защитната стена (firewalld services)

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

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

Услугата може да се разглежда като мрежови протоколи или портове, както и списък на помощни модули на защитната стена, които автоматично се зареждат при активиране на услугата. Ако искате да стартирате услуга като HTTP, FTP или SSH , трябва да ги посочите в firewalld services по време на конфигурацията.

Управление на firewalld зони

Зоните на защитната стена се управляват с командата firewall-cmd, като се добавят допълнителни параметри като:

  • --get-zone - показва всички зони във вашата среда;
  • --get-default-zone - показва действителната зона по подразбиране;
  • --list-all - показва само конфигурацията (услугите) на зоната по подразбиране;
  • --list-all-zones - изброява конфигурацията (услугите) на всички зони на един екран;
  • --get-active-zone - показва всички активни зони (може да имате повече от една активна зона);

Инсталиране, активиране и autostart на защитната стена

firewalld се инсталира по подразбиране в много Linux дистрибуции, включително CentOS 7. Ако се наложи сами да инсталирате firewalld, следвайте следните стъпки:

sudo yum install firewalld

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

sudo systemctl enable firewalld

sudo reboot

Когато сървърът се рестартира, вашата защитна стена ще бъде активирана (up), вашите мрежови интерфейси трябва да бъдат конфигурирани към определени зони (или ще се управляват от посочената зона по подразбиране) и всички правила, свързани със зоната/ите, ще бъдат приложени към асоциираните интерфейси.

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

[commonuser@centos7 ~]$ sudo firewall-cmd --state
running
[commonuser@centos7 ~]$

Това показва, че защитната стена работи с настройките по подразбиране.

Основни команди за управление на защитната стена

В това ръководство ще правим промени само в зоната по подразбиране.

[commonuser@centos7 ~]$ sudo firewall-cmd --get-default-zone
public
[commonuser@centos7 ~]$

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

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

Ако не сте променили порта, на който работи SSH (sshd), може да активирате услугата по име, като въведете:

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

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

sudo firewall-cmd --permanent --zone=public --remove-service=ssh

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

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

Ако имате намерение да стартирате HTTP уеб сървър, ще трябва да активирате http услугата:

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

Тъй като работата на уеб сървъра с включен SSL/TLS вече е неотменимо изискване, трябва да разрешите трафика и за https:

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

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

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

Активирането на услуга по име отваря достъпа само през порта по подразбиране. Ако на ваш тестов сървър решите http да работи на различен порт от този по подразбиране (80), трябва в конфигурацията на уеб сървъра да посочите новия порт с параметъра LISTEN 8080, да премахнете услугата http от firewalld и накрая да отворите новия порт в firewalld с командата:

sudo firewall-cmd --permanent --zone=public --remove-service=http

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

За да премахнете отворен порт изпълнете командата:

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

Следващата команда пренасочва трафика от порт 80 към порт 12345:

sudo firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=12345

Вижте списък с услугите, които можете да активирате по име:

sudo firewall-cmd --get-services

Списък с отворените портове:

sudo firewall-cmd --list-ports

[commonuser@centos7 ~]$ sudo firewall-cmd --list-ports
51234/tcp
[commonuser@centos7 ~]$

sudo firewall-cmd --list-services

[commonuser@centos7 ~]$ sudo firewall-cmd --list-services
ssh dhcpv6-client http
[commonuser@centos7 ~]$

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

sudo firewall-cmd --permanent --zone=public --list-all

Когато сте готови да активирате промените, рестартирайте защитната стена:

sudo firewall-cmd --reload

Ако след тестването всичко работи според очакванията, трябва да се уверите, че защитната стена ще се стартира автоматично при старт/рестарт на сървъра:

sudo systemctl enable firewalld

Не забравяйте, че ще трябва изрично да отвaряте защитната стена (чрез услуга или порт) за всичка допълнителна услуга, която решите да конфигурирате на сървъра по-късно.

Firewalld е модерна програма и предоставя голям брой настройки за управление на зони, услуги, портове, протоколи, интерфейси... На сайта на програмата https://firewalld.org/ ще намерите много полезна допълнителна информация