Към съдържанието

Настройки за бисквитки

Изберете кои видове бисквитки разрешавате. Можете да промените избора си по всяко време чрез „Настройки за бисквитки“ в долната част на всяка страница. Декларация за поверителност

Необходими

Винаги включени

Нужни са за вход, за запазване на количката и на Вашите избори. Те са винаги включени.

Кои бисквитки?
  • weboke_sessie, weboke_klant, weboke_remember: Вашата сесия и оставането в акаунта
  • weboke_basket: Вашата количка
  • wkBtwIncl: показване на цените с или без ДДС
  • wok_cookies: Вашият избор за бисквитките, 12 месеца

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

Кои бисквитки?
  • Google Ads чрез Google Tag Manager (_gcl_au, _gcl_aw), до 90 дни
  • OpenAI Ads, реклами в ChatGPT
  • wok_aff: кой партньор Ви е препратил към нас (партньорска програма), 60 дни

4,6

Държава и език

Всяка държава има собствен сайт, с цените и ДДС на тази държава.

Преглед

Защитна стена с ufw и nftables

Модул 5: Защита на мрежата · Време за четене: 12 минути

Цел на урока: След този урок ще можете да настроите защитна стена, която пропуска само необходимото, за IPv4 и за IPv6, без да блокирате собствения си достъп. Ще знаете също от какво защитната стена на Вашия сървър не Ви предпазва.

Основни понятия: пакетен филтър, netfilter, nftables, iptables-nft, ufw, политика по подразбиране, allow, deny, reject, limit, IPv6 в ufw, защитна стена на доставчика, firewalld, Docker и защитната стена

Какво прави защитната стена

Защитната стена (firewall) на Вашия сървър е пакетен филтър: за всеки входящ мрежов пакет тя проверява списък с правила и решава дали той може да премине. В Linux този филтър се намира в ядрото и се нарича netfilter. Настройвате го с програма:

  • nftables (команда nft) е съвременният инструмент. Debian го използва по подразбиране от Debian 10 насам.
  • iptables е старият инструмент. На съвременните системи iptables обикновено превежда командите към nftables (iptables-nft), така че старите ръководства продължават да работят.
  • ufw (Uncomplicated Firewall) е опростен слой над него. Той е наличен по подразбиране в Ubuntu, а в Debian се инсталира с една команда. За единичен сървър ufw е най-лесният избор. В този урок използваме ufw, а след това показваме как изглеждат същите правила в nftables.

Защитната стена е Вашият втори защитен слой. Първият е услугите да слушат само на правилния адрес (урок 5.1). Заедно те гарантират, че грешка в единия слой не означава веднага отворена врата.

Първо: как да се върнете, ако нещо се обърка?

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

  1. Уверете се, че знаете как да отворите конзолата на Вашия доставчик (урок 1.2). Тя работи извън мрежата, затова е достъпна дори когато защитната стена блокира всичко. Влезте там и въведете ufw disable.
  2. Направете snapshot, ако се колебаете.
  3. Оставете текущата си SSH сесия отворена и тествайте с втора сесия.

ufw в пет стъпки

Настройване на firewall с ufw 1:07

Стъпка 1: инсталиране и избор на поведение по подразбиране.

anna@web1:~$ sudo apt install ufw
anna@web1:~$ sudo ufw default deny incoming
Default incoming policy changed to 'deny'
anna@web1:~$ sudo ufw default allow outgoing
Default outgoing policy changed to 'allow'

Политиката по подразбиране важи за всичко, за което няма правило. "Deny incoming" означава: всичко входящо е забранено, освен това, което разрешите по-нататък. Това е единствената сигурна основа. Изходящия трафик (сървърът Ви изтегля актуализации) разрешавате.

Стъпка 2: разрешете SSH, преди да включите защитната стена.

anna@web1:~$ sudo ufw allow OpenSSH
Rules updated
Rules updated (v6)

OpenSSH е профил на приложение, който ufw познава (той означава порт 22/tcp). Ако SSH работи на друг порт, използвайте номера: sudo ufw allow 2222/tcp. Обърнете внимание на "Rules updated (v6)": ufw създава правилото и за IPv6. Това става, защото в /etc/default/ufw е зададено IPV6=yes, което е настройката по подразбиране. Проверете го; ако стойността е no, защитната стена важи само за IPv4.

Стъпка 3: всичко останало, от което имате нужда.

anna@web1:~$ sudo ufw allow 80/tcp
anna@web1:~$ sudo ufw allow 443/tcp
anna@web1:~$ sudo ufw allow 443/udp       # само ако използвате HTTP/3

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

anna@web1:~$ sudo ufw allow from 198.51.100.20 to any port 9090 proto tcp

Стъпка 4: включване.

anna@web1:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Стъпка 5: проверка. Отворете втори прозорец и влезте отново. Ако успеете, SSH е настроен правилно. След това прегледайте правилата:

anna@web1:~$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)

Премахването на правило става чрез номера: sudo ufw status numbered, а след това sudo ufw delete 3.

deny, reject и limit

  • deny тихо отхвърля пакета: отвън портът изглежда "филтриран" (урок 5.1).
  • reject връща отказ: отвън портът изглежда "затворен". Това е по-коректно за Вашите собствени услуги, но издава, че там има сървър.
  • limit пропуска връзката, но блокира адрес, който се опита да се свърже шест или повече пъти в рамките на 30 секунди. Удобно е за SSH: sudo ufw limit OpenSSH вместо allow. Методът е груб (брои връзки, а не неуспешни влизания); fail2ban (урок 5.3) е по-прецизен.

Същите правила в nftables

ufw всъщност записва правила в netfilter. Ако искате да работите без ufw, сами пишете файл за nftables. В Debian той се намира в /etc/nftables.conf и се зарежда от услугата nftables:

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        ct state established,related accept
        ct state invalid drop
        iif "lo" accept
        meta l4proto { icmp, ipv6-icmp } accept
        tcp dport { 22, 80, 443 } accept
    }
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

Ето как да го прочетете. Таблицата се казва filter и е от семейството inet: една таблица едновременно за IPv4 и IPv6, така че не можете да забравите IPv6. Във веригата input политиката е drop. След това: отговорите на вече установени връзки се пропускат (established,related), всичко през loopback е разрешено, ICMP е разрешен (необходим е, наред с друго, за IPv6 и за съобщенията за грешки при размера на пакетите), а портовете 22, 80 и 443 са отворени.

anna@web1:~$ sudo nft -c -f /etc/nftables.conf    # проверка без зареждане
anna@web1:~$ sudo systemctl enable --now nftables
anna@web1:~$ sudo nft list ruleset

Използвайте или ufw, или собствен файл за nftables, не и двете: те записват в един и същ netfilter и могат да си пречат взаимно с правилата.

От какво защитната стена не Ви предпазва

  • Услугите, които сами разрешавате. Порт 443 е отворен за Вашия уебсайт; следователно уязвимост в уебсайта е напълно достъпна. Защитната стена пази само затворените портове.
  • Docker. Когато публикувате порт с Docker (-p 5432:5432), Docker задава свои собствени правила в netfilter, които пренасочват трафика, преди да се приложат правилата на ufw. Документацията на Docker изрично казва, че Docker и ufw не работят добре заедно. Така порт на контейнер може да е отворен отвън, докато ufw status не го показва. Решението (публикуване на 127.0.0.1) ще научите в урок 9.3.
  • Изходящият трафик. При "allow outgoing" една хакната програма може да се свърже навсякъде. За повечето малки сървъри това е приемлив избор; в строги среди ограничават и изходящия трафик.

Защитната стена на Вашия доставчик

Много доставчици предлагат и защитна стена в мрежата, пред Вашия сървър, която настройвате в клиентския панел (понякога се нарича "cloud firewall" или "security group"). Тя е отличен допълнителен слой и работи дори ако сгрешите нещо на самия сървър. Но тя не замества защитната стена на сървъра: ако преместите сървъра или смените доставчика, тя не идва с Вас, а и не всеки доставчик я предлага. Затова винаги поддържайте защитна стена и на самия сървър.

В AlmaLinux и Rocky Linux

Там по подразбиране е включен firewalld, който работи със зони. Най-важните команди:

[root@web1 ~]# firewall-cmd --list-all
[root@web1 ~]# firewall-cmd --permanent --add-service=http --add-service=https
[root@web1 ~]# firewall-cmd --reload

Без --permanent промяната важи само до следващото рестартиране; с --permanent тя влиза в сила едва след --reload. В зоната по подразбиране SSH вече е отворен.

На практика

Ако все пак блокирате собствения си достъп до VPS при WebOké, отворете конзолата в екрана на VPS, влезте и изключете защитната стена (ufw disable) или отменете последното правило. При други доставчици този авариен вход също се нарича console, VNC или rescue. Разберете къде е този бутон, преди да Ви потрябва.

Обобщение

  • Защитната стена е Вашият втори слой след принципа "слушай само където е нужно"; nftables е инструментът за ядрото, а ufw е опростен слой над него.
  • Започнете с default deny incoming, разрешете SSH преди ufw enable, тествайте с втора сесия и се запознайте с конзолата на Вашия доставчик.
  • Проверете дали ufw покрива и IPv6 (IPV6=yes); в nftables семейството inet прави това наведнъж.
  • deny показва отвън "филтриран", reject показва "затворен"; limit забавя повтарящите се връзки.
  • Портовете на Docker заобикалят ufw (урок 9.3); защитната стена на доставчика е допълнителен слой, а не заместител.

Тест (quiz)

1. В какъв ред включвате ufw за първи път на сървър, в който сте влезли през SSH?



2. След ufw enable уебсайтът Ви вече не работи през IPv4, но SSH работи. Каква е най-вероятната причина?



3. Публикувате с Docker порт 5432 на контейнер с база данни. ufw status не показва правило за 5432. Достъпна ли е базата данни отвън?



4. Защо примерът с nftables използва таблица от семейството inet?



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



Задача

Задача O5.2: Настройване на Вашата защитна стена. Включете на сървъра си защитна стена с ufw (или nftables, или firewalld на AlmaLinux/Rocky): по подразбиране всичко входящо е затворено, разрешени са SSH и само това, от което наистина имате нужда. Тествайте с втора сесия, проверете дали IPv6 е покрит и проверете отвън с nc дали неразрешен порт е затворен или филтриран. Попълнете контролния списък и поставете резултата от ufw status verbose (или nft list ruleset); за всеки отворен порт посочете за какво служи.

Задача O5.2: Настройване на Вашата защитна стена

Тази задача изпълнявате сами; никой не я проверява. Отбележете какво сте направили и маркирайте задачата като изпълнена.



Вашите отметки и бележки остават само в този браузър; не ги изпращаме никъде. Ако сте влезли, в Моите курсове запазваме само че сте изпълнили задачата.

Още за четене

Моля, изчакайте…

Настройте домейните си

За всеки домейн настройте сървърите за имена, връзката с хостинга и кой ще бъде собственикът.

Домейните Ви се зареждат…