Конфигурирайте FirewallD на сървър с CentOS 8 и 7

Започвайки с CentoOS 7, се появи нов инструмент за конфигуриране на правила за филтриране на трафика. firewalld. Препоръчва се да го използвате за управление на правила за iptables. В CentOS 8 вместо стандартния пакет за филтриране на iptables, сега се използва рамката nftables и когато конфигурирате правилата на защитната стена чрез firewalld, всъщност конфигурирате nftables. В тази статия ще разгледаме инсталацията, основните концепции и конфигурацията на firewalld на сървър, работещ CentOS 8 (в CentOS 7 всичко е същото).


Съдържание:

  • Основни понятия, зони и правила на Firewalld
  • Инсталирайте и активирайте firewalld на CentOS
  • Работете с правила за firewalld
  • Firewalld: блокиране на IP, изключение
  • Препращане на пристанище в firewalld

FirewallD - защитна стена за защита на сървъра от нежелан трафик с поддръжка за динамично управление на правила (без рестартиране) и прилагането на постоянни правила на защитната стена. Работи като интерфейс за iptables и nftables. FirewallD може да се използва в почти всички дистрибуции на Linux.

Основни понятия, зони и правила на Firewalld

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

Firewalld филтрира входящия трафик по зони, в зависимост от правилата, приложени към зоната. ако IP-адресът на подателя на заявка отговаря на правилата на всяка зона, пакетът ще бъде изпратен през тази зона. Ако адресът не съвпада с която и да е от зоните, конфигурирани на сървъра, пакетът ще бъде обработен от зоната по подразбиране. При инсталиране firewalld зоната по подразбиране се извиква обществен.

В firewalld има зони, където разрешенията за различни услуги вече са предварително конфигурирани. Можете да използвате тези настройки или да създадете свои собствени зони. Списъкът на зони по подразбиране, които се създават по време на инсталирането на firewalld (съхранява се в директорията / usr / lib / firewalld / zone /):

капкаминимално ниво на доверие. Всички входящи връзки са блокирани без отговор, разрешени са само изходящи връзки;
блокзоната е подобна на предишната, но когато се отхвърлят входящите заявки, се изпраща съобщение, забранено от icmp-хост за Ipv4 или съобщение, забранено с icmp6-adm за Ipv6;
общественПредставлява обществени, ненадеждни мрежи. Можете да разрешите избрани входящи връзки поотделно;
външенвъншни мрежи, когато използвате защитна стена като шлюз. Той е конфигуриран да маскира NAT, така че вашата вътрешна мрежа остава частна, но достъпна;
вътрешенантоним на външната зона. Домакинът има достатъчно ниво на доверие, налични са редица допълнителни услуги;
DMZизползва се за компютри, разположени в DMZ (изолирани компютри без достъп до останалата част от мрежата). Разрешени са само определени входящи връзки;
работазона за работещи машини (повечето компютри в мрежата са надеждни);
у домазона на домашната мрежа. Можете да се доверите на повечето компютри, но се поддържат само определени входящи връзки;
доверенДоверете се на всички машини в мрежата. Най-отворената от всички налични опции изисква съзнателна употреба.

Най- firewalld се използват два набора правила - постоянни и временни. Временните правила работят, докато сървърът не се рестартира. По подразбиране, когато добавяте правила към firewalld, правилата се считат за временни (по време на работа). За да добавите постоянно правило, трябва да използвате флага - постоянен. Тези правила ще се прилагат след рестартиране на сървъра..

Инсталирайте и активирайте firewalld на CentOS

В CentOS 7/8 firewalld е инсталиран по подразбиране при инсталиране на ОС. Ако сте го изтрили и искате да инсталирате firewalld, можете да използвате стандартния yum / dnf мениджър:

# yum инсталирате firewalld -y - за Centos 7
# dnf инсталирайте firewalld -y - за Centos 8

За демон firewalld тя стартира автоматично със старта на сървъра, трябва да го добавите към стартиране:

# systemctl активира firewalld

И стартирайте:

# systemctl start firewalld

Проверете състоянието на услугата:

# systemctl статус firewalld

● firewalld.service - firewalld - динамичен демон на защитната стена Зареден: зареден (/usr/lib/systemd/system/firewalld.service; активиран; предварително зададен доставчик: активиран) Активен: активен (работи) от поне 2019-10-14 14:54 : 40 +06; Преди 22s Документи: мъж: firewalld (1) Основен PID: 13646 (firewalld) CGroup: /system.slice/firewalld.service └─13646 / usr / bin / python2 -Es / usr / sbin / firewalld --nofork --nopid 14 октомври 14:54:40 server.vpn.ru systemd [1]: Стартиране на firewalld - динамичен демон за защитна стена ... 14 октомври 14:54:40 server.vpn.ru systemd [1]: Стартиран firewalld - динамичен демон на защитната стена.

Или от командата:

# firewall-cmd - state

Командата-firewall-cmd е firewalld frontend към nftables / iptables.

# firewall-cmd - state

тичане

Работете с правила за firewalld

Правила по подразбиране:

Преди да конфигурирате правилата на firewalld, трябва да проверите коя зона се използва по подразбиране:

# firewall-cmd - зона -по подразбиране

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

Проверете сърцевината. Тя също е една - публична:

# firewall-cmd --get-active-зони

обществени интерфейси: eth0

Както можете да видите, мрежовият интерфейс eth0 се контролира от зоната. обществен.

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

# ip показване на връзки
или
# nmcli състояние на устройството

За да видите основните правила, въведете:

# firewall-cmd --list-all

обществена (активна) цел: icmp-block-inversion по подразбиране: няма интерфейси: eth0 източници: услуги: dhcpv6-клиент ssh портове: протоколи: маскарад: няма напред-портове: изходни портове: icmp-блокове: разширени правила:

Както можете да видите от списъка, обичайните операции, свързани с DHCP клиента и ssh са добавени към тази зона..

Налични зони

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

# firewall-cmd --get-зони

Получих следния списък:

блокирайте dmz drop външен дом вътрешен публичен доверен труд

За да проверите правилата на конкретна зона, добавете флага - зона.

# firewall-cmd --zone = home --list-all

начална цел: icmp-block-inversion по подразбиране: няма интерфейси: източници: услуги: dhcpv6-client mdns samba-client ssh портове: протоколи: маскарад: няма напред-портове: изходни портове: icmp-блокове: богати правила:

Правилата на всички зони могат да се видят с командата:

# firewall-cmd - списък-всички-зони

Списъкът ще бъде доста голям, тъй като може да има много зони.

Промяна на зоната по подразбиране.

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

# firewall-cmd --zone = home -change-interface = eth0

След параметър -зона = посочете желаната зона.

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

# firewall-cmd --set-default-zone = home

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

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

# firewall-cmd --get-services

Резултатът ще съдържа голям брой услуги. Подробности за услугата се съдържат в XML файл. Тези файлове се намират в директорията / usr / lib / firewalld / услуги.

Например:

# cd / usr / lib / firewalld / услуги

# cat smtp.xml

  Поща (SMTP) Тази опция позволява входяща SMTP доставка на поща. Ако трябва да разрешите на отдалечените хостове да се свързват директно с вашата машина, за да доставят поща, активирайте тази опция. Не е необходимо да активирате това, ако събирате пощата си от сървъра на вашия интернет доставчик чрез POP3 или IMAP или ако използвате инструмент като fetchmail. Обърнете внимание, че неправилно конфигуриран SMTP сървър може да позволи на отдалечените машини да използват вашия сървър за изпращане на спам.  

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

Когато добавяте правила, можете да използвате параметъра -добавка услуга, За да отворите достъп до конкретна услуга:

# firewall-cmd --zone = public --add-service = http

успех

# firewall-cmd --zone = public --add-service = https

успех

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

# firewall-cmd --zone = public --list-services

dhcpv6-клиент http https ssh

Ако искате да направите тези правила постоянни, трябва да добавите параметър, когато добавяте -постоянен.

За да премахнете услуга от зона:

# firewall-cmd - постоянна --zone = обществена --remove-service = http

# защитна стена-cmd --zone = обществена - постоянен - ​​списък-услуги

dhcpv6-клиент https ssh тест

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

Копирайте файла smtp.xml към директорията за работа с потребителски услуги:

# cp /usr/lib/firewalld/services/smtp.xml / и т.н. / firewalld / услуги

Променете описанието на услугата във файла.

Самият xml файл също трябва да бъде преименуван от името на вашата услуга. След което трябва да рестартирате firewalld и да проверите дали нашата услуга е в списъка:

# firewall-cmd --get-services

Обадих се на службата тест и в списъка той се появи:

syslog-tls telnet тест tftp

Сега можете да добавите създадената услуга към всяка зона:

# firewall-cmd --zone = public --add-service = test - постоянен

успех

# защитна стена-cmd --zone = обществена - постоянен - ​​списък-услуги

dhcpv6-client http https ssh test

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

# firewall-cmd --zone = public -add-port = 77 / tcp - отворен порт 77 TCP
# firewall-cmd --zone = public -add-port = 77 / udp - отворен порт 77 UDP
# firewall-cmd --zone = public -add-port = 77-88 / udp - отворен обхват на порта 77-88 UDP
# firewall-cmd --zone = public -list-портове - проверете списъка с разрешени портове

Блокиране / разрешаване на ICMP отговори:

# firewall-cmd --zone = public --add-icmp-block = echo-reply
# firewall-cmd --zone = public --remove-icmp-block = echo-reply

Изтриване на добавения порт:

# firewall-cmd --zone = public -remove-port = 77 / udp - премахнете временно правило 77 UDP

# firewall-cmd - постоянен --zone = public -remove-port = 77 / udp - премахнете устойчиво правило

Добавяне на персонализирани зони

Можете да създадете своя собствена зона (аз ще я кръстя наш):

# firewall-cmd - постоянна --new-зона = нашата

След създаването на нова зона, както и след създаването на услугата, трябва да рестартирате firewalld:

# firewall-cmd - зареждане

успех

# firewall-cmd --get-зони

блок dmz капка външен дом вътрешен нашата обществена работа с доверие

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

Firewalld: блокиране на IP, изключение

Можете да добавите надеждни IP адреси към изключения firewalld или да блокирате нежелани.

За да добавите конкретен IP адрес (например 8.8.8.8) на вашия сървър чрез изключения firewalld, използвайте командата:

# firewall-cmd --zone = public --add-rich-rule = 'правило семейство = "ipv4" източник на адрес = "8.8.8.8" приемам "

Проверете района и се уверете IP добавени към изключения от правилото за богати правила:

# firewall-cmd --zone = public --list-all

public (active) target: icmp-block-inversion по подразбиране: няма интерфейси: eth0 източници: услуги: dhcpv6-client http https ssh test ports: protocols: masquerade: no forward-ports: source-ports: icmp-block: rich rules: rule family = "ipv4" source address = "8.8.8.8" приемам

За да блокирам IP, трябва да се замени приемам за отхвърляне:

# firewall-cmd --zone = public --add-rich-rule = 'семейство правило = "ipv4" адрес на източника = "8.8.4.4" отхвърляне "

# firewall-cmd --zone = public --list-all

public (active) target: icmp-block-inversion по подразбиране: няма интерфейси: eth0 източници: услуги: dhcpv6-client http https ssh test ports: protocols: masquerade: no forward-ports: source-ports: icmp-block: rich rules: семейство правило = "ipv4" източник на адрес = "8.8.8.8" приемете семейство правило = "ipv4" адрес на източника = "8.8.4.4" отхвърлете

Можете да активирате конкретна услуга само за заявки от конкретен IP адрес:

# firewall-cmd - постоянен --add-rich-rule 'правило семейство = "ipv4" адрес на източника = "10.10.1.0/24" име на услугата = "https" приемете "

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

# firewall-cmd --panic-on

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

# firewall-cmd - off-off

Или рестартиране на сървъра.

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

# firewall-cmd - блокиране

Деактивиране на режима на заключване:

# firewall-cmd - блокиране-изключване

Препращане на пристанище в firewalld

Можете да създадете правило за пренасочване към порт в firewalld. За да препратите порт 443 до 9090:

# firewall-cmd --zone = public --add-forward-port = port = 443: proto = tcp: toport = 9090 - постоянен

В Windows можете да конфигурирате пренасочване на порт с netsh.

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

# firewall-cmd --zone = public --remove-forward-port = port = 443: proto = tcp: toport = 9090