Защитната стена на Linux играе жизненоважна роля за защитата на компютърната система. Той действа като бариера, контролирайки и филтрирайки мрежовия трафик, за да защити системата от неоторизиран достъп, атаки и други заплахи. Без правилно конфигурирана защитна стена, сървърът може да бъде уязвим на различни видове кибератаки, което води до сериозни последствия за сигурността и поверителността на данните.
В тази статия ще разгледаме два основни инструмента за конфигуриране на защитната стена на Linux: firewalld и iptables. Ще проведем сравнителен анализ на техните характеристики, функционалност и предимства. Освен това ще предоставим подробни инструкции за настройване и използване на всеки от тези инструменти, както и ще обсъдим най-добрите практики за защита на вашата система със защитна стена на Linux платформа. Всички действия ще бъдат демонстрирани на виртуален сървър с root достъп.
Конфигуриране на защитна стена на Linux
Firewalld (Firewall Daemon) е програма за управление на защитната стена (firewall) в операционни системи Linux. Тя предоставя потребителски интерфейс за конфигуриране на правила за защитната стена, разрешаване или блокиране на връзки на мрежови приложения. Предварително е инсталирана по подразбиране в повечето сървърни дистрибуции. Ако Firewalld не е предварително инсталирана, тя може да бъде инсталирана независимо от официалните хранилища на дистрибуцията.
За Red Hat системи (като RHEL, CentOS, Fedora) инсталацията се извършва с командата:
yum install firewalld
За Debian/Ubuntu:
apt-get install firewalld
След инсталирането може да се стартира и активира веднага с командата:
systemctl start firewalld
След това трябва да добавите услугата към стартиране:
systemctl enable firewalld
На този етап препоръчваме да деактивирате ufw, тъй като не се препоръчва едновременното използване на този инструмент с firewalld или iptables. Проверете състоянието:
systemctl status ufw
За да го спрете, въведете командата:
systemctl stop ufw
За пълно деактивиране:
ufw disable
След тези действия можете да продължите да конфигурирате защитната стена.
Първо, необходимо е да се определят зони на доверие. Firewalld използва концепцията за зони, за да определи нивото на доверие за мрежовите интерфейси. На всеки интерфейс се присвоява една зона и правилата на защитната стена се прилагат въз основа на зоната. Списъкът с всички налични зони се отваря с командата:
firewall-cmd --get-zones
Обикновено се използват 4 основни зони:
- Обществен: Тази зона е за мрежи, които смятате за опасни;
- частен: Отнася се за домашни мрежи или други надеждни мрежови връзки;
- вътрешен: Използва се за вътрешни мрежи, като тези в рамките на организация или корпоративна мрежа;
- DMZ: Тази зона е мястото, където обикновено се поставят сървъри, които трябва да са достъпни от интернет.
Това обаче е само един пример. Можете да добавите своя собствена зона с помощта на командата:
firewall-cmd --permanent --new-zone=nameyourzone
След добавяне е необходимо презареждане:
firewall-cmd --reload
За изтриване на зона се използва подобен метод
firewall-cmd --permanent --delete-zone=nameyourzone
След дефиниране на зони е необходимо да се разреши трафик за необходимите услуги и портове. За да разрешите определена услуга, използвайте командата:
firewall-cmd --zone=public --add-service=name
Където „име“ е името на услугата. Например, за да разрешите трафик за Apache:
firewall-cmd --zone=public --add-service=http
За да определите допустимите портове, използвайте командата:
firewall-cmd --zone=public --add-port=number/protocol
Например стандартният 22 порт за SSH ще изглежда така:
firewall-cmd --zone=public --add-port=22/tcp
На този етап основните правила вече са създадени. След това определете как ще се обработва трафикът в зависимост от източника, местоназначението, порта и други критерии. За да добавите правило (използвайки публичната зона като пример):
firewall-cmd --zone=public rule
Например, за да разрешите входящ трафик от всеки източник към порт 80 (HTTP):
firewall-cmd --zone=public --add-port=80/tcp --permanent
За да премахнете правило:
firewall-cmd --permanent --remove-rule=rule_specification
Където rule е типът правило (напр. порт, услуга, rich-rule и т.н.), а rule_specification е спецификацията на самото правило.
След като направите промени в конфигурацията на Firewalld, е необходимо да ги запазите и приложите. За да запазите промените, използвайте командата:
firewall-cmd --runtime-to-permanent
За да приложите промените:
firewall-cmd --reload
След като завършите настройката, можете да проверите избраните параметри, като отворите списъка с всички правила:
firewall-cmd --list-all
Ако възникнат проблеми, проверете регистрационните файлове на Firewalld с командата:
journalctl -u firewalld
Забележка: Разгледахме само общия алгоритъм за настройване на връзката. Инструментът има обширна функционалност. За пълна информация относно всички налични опции можете да използвате официалната документация или да отворите помощната страница:
firewall-cmd --help
Конфигуриране на iptables на Linux
За разлика от Firewalld, iptables е по-стар, но все още широко използван инструмент в Linux за управление на защитната стена. Той предоставя по-директен и гъвкав подход към правилата за филтриране на пакети на ниво ядро на Linux. Въпреки това, iptables изисква по-напреднали знания и опит в сравнение с Firewalld, което го прави по-малко достъпен за начинаещи. Проверете предварително инсталираната версия на инструмента с командата:
iptables -V
Ако инструментът не е инсталиран, ще трябва да бъде инсталиран. Командата за инсталиране на Ubuntu, Debian:
apt install iptables
За системи Red Hat (напр. CentOS, Fedora):
yum install iptables
Командата за активиране след инсталация:
systemctl start iptables
За да добавите към стартиране, изпълнете:
systemctl enable iptables
Преди да започнете конфигурацията на iptables, важно е да разберете как работи. Това се подпомага от синтаксиса на програмата. Изглежда по следния начин:
iptables -t table action chain additional_parameters
Нека се задълбочим във всеки елемент.
Iptables има четири основни таблици: filter, nat, mangle и raw . Всяка от тях е предназначена за обработка на определени типове пакети и има свои собствени вериги от правила:
- филтриране: Това е най-често използваната таблица, съдържаща правила за филтриране на пакети. Използва се за вземане на решения дали да се разрешат или откажат пакети.
- NAT: Тази таблица се използва за модифициране на мрежови адреси и портове в пакети. Често се използва за настройка на маскиране (NAT).
- развалям: В тази таблица можете да променяте заглавките на пакети. Използва се за специализирани операции с пакети, като например маркиране.
- суров: Тази таблица се използва за конфигуриране на правила, които се прилагат, преди да преминат през системата за проследяване на връзката. Обикновено се използва за настройка на правила, които не трябва да се променят от системата за проследяване, като например изхвърляне на пакети от определени адреси.
Всяка таблица съдържа набор от вериги. Веригите са поредица от правила, които се проверяват последователно. Има три предварително дефинирани вериги:
- ВХОД (входящ). Правилата в тази верига определят какво да се прави с входящите пакети.
- ИЗХОД (изходящ). Тази верига се прилага за всички пакети, които вашият компютър изпраща до други устройства или компютри в мрежата.
- НАПРЕД (препращане). Правилата в тази верига определят какво да се прави с препратените пакети.
И накрая, всяка верига притежава някакво действие (цел). На практика се използват 5 основни действия:
- Приемам: Позволете на пакета да премине през защитната стена.
- Капка: Отхвърлете пакета и го изхвърлете без никакъв отговор.
- ОТХВЪРЛЕТЕ: Отхвърлете пакета и изпратете на изпращача ICMP съобщение за грешка.
- LOG: Регистрирайте пакета в системния дневник и изпълнете друго действие (напр. ПРИЕМАНЕ или ОТПУСКАНЕ).
- RETURN: Спрете да проверявате правилата в текущата верига и се върнете към веригата за повикване (ако е приложимо).
За да започнете настройката, отворете списъка със съществуващи правила с командата:
iptables -L
Като ръководство за конфигуриране на Iptables, нека разгледаме практически примери за най-често използваните команди. За улеснение ще разделим примерите на 3 групи в зависимост от конкретната верига.
Вход на веригата :
- Разрешаване на входящ трафик през TCP протокол на порт 80:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
2. Разрешаване на входящ трафик през UDP протокол на порт 22:
iptables -A INPUT -p udp --dport 22 -j ACCEPT
3. Блокирайте входящия трафик от определен IP адрес:
iptables -A INPUT -s 192.168.1.100 -j DROP
ИЗХОД НА ВЕРИГАТА :
- Разрешаване на изходящ трафик през TCP протокол на порт 443:
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
2. Разрешаване на изходящ трафик през UDP протокол на порт 80:
iptables -A OUTPUT -p udp --dport 80 -j ACCEPT
3. Блокирайте изходящия трафик към определен порт (например 21):
iptables -A OUTPUT -p tcp --dport 21 -j DROP
Верига НАПРЕД :
- Блокирайте препратен трафик от определен диапазон от IP адреси:
iptables -A FORWARD -s 172.16.0.0/24 -j DROP
2. Блокирайте препращането на пакети от определен мрежов интерфейс:
iptables -A FORWARD -i eth1 -j DROP
3. Ограничете броя на едновременните връзки за конкретен порт (в този пример 10 връзки в минута на порт 80):
iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/minute -j ACCEPT
Както можете да видите, във всеки отделен случай се използва допълнителен аргумент (команда). За да получите пълен списък с възможни аргументи и цялостна поддръжка за функционалността на инструмента, въведете:
iptables -h
За да сте сигурни, че настройките са правилни, въведете отново командата, за да видите списъка с правила:
iptables -L
За да изтриете конкретно правило, използвайте командата:
iptables -D chain rule_number
Например, ако искате да изтриете правило номер 1 от веригата INPUT, командата ще изглежда така:
iptables -D INPUT 1
За да изтриете всички правила с една команда:
iptables -F
Важна забележка : правилата на iptables не се запазват автоматично след рестартиране на системата или услугата. За да запазите правилата, те трябва да бъдат добавени към конфигурационен файл и възстановени след рестартиране. Помощните програми iptables-save и iptables-restore могат да помогнат с това. За да запазите правилата, въведете командата:
iptables-save > /etc/iptables/rules.v4
Това запазва текущите правила на iptables във файла rules.v4. За да възстановите след рестартиране, въведете:
iptables-restore < /etc/iptables/rules.v4
Тази команда възстановява правилата от файла rules.v4.
Заключение
Конфигурирането на защитна стена на Linux с помощта на firewalld или iptables е важен аспект за гарантиране на сигурността на сървъра. И двата инструмента предлагат надеждни средства за управление на мрежовия трафик и защита на системата от неоторизиран достъп и кибератаки. Изборът между firewalld и iptables зависи от специфичните нужди и предпочитания на потребителя, като се има предвид тяхната различна функционалност и силни страни.