Tűzfal iptables és az UFW ellenőrzi, hogy a webszerver mely kapcsolatokat fogadja el, és melyeket blokkolom - ez határozza meg a támadási felületet és a hibákat. Ebben a gyakorlatias cikkben egyértelmű szabályokat, biztonságos alapértelmezéseket és tesztelt parancsokat mutatok az SSH, HTTP(S), adatbázisok, naplózás, IPv6 és Docker számára - közvetlenül alkalmazható a produktív hosztokon.
Központi pontok
A következő kulcspontok gyors eligazítást adnak, mielőtt elkezdeném a konfigurációt.
- Korlátozó Start: Alapértelmezett tiltás a bejövő, kifejezetten nyitott bejövők számára
- SSH Engedélyezze először: Ne kockáztassa a hozzáférést
- UFW mint interfész: egyszerű szintaxis, iptables a háttérben
- Naplózás aktiválni: Szabályok ellenőrzése, támadások felismerése
- Kitartás biztosítják: Az újraindításokra vonatkozó szabályok fenntartása
Alapok: iptables és UFW egy pillantással
Számítok a iptablesamikor finomabb ellenőrzésre van szükségem a csomagok, láncok és egyezések felett. Az UFW-t akkor használom, amikor gyorsan szeretnék megbízható szabályokat alkalmazni, amelyek belsőleg iptables-szabályokként [1] végzik. Ez lehetővé teszi számomra, hogy egyszerű parancsokat kombináljak a Linux netfilter erejével anélkül, hogy elvesznék a részletekben. Webszerverek esetében ez azt jelenti: az Apache, az Nginx vagy a Node elé építek egy egyértelmű szűrőt, hogy csak a kívánt forgalom érkezzen [2]. Ez a szétválasztás csökkenti a támadási felületeket, és lehetővé teszi, hogy a támadások gyakrabban bukjanak meg.
Mindkét eszköz kiegészíti egymást, és én döntöm el, melyik illik az adott helyzethez. Az UFW a tiszta olvashatósággal pontoz, különösen Ubuntun és Debianon [3]. Az iptables kibővített lehetőségeket ad, például NAT, specifikus interfészek és összetett egyezések esetén. Fontos: tömören dokumentálom a szabályaimat, hogy később könnyű legyen a karbantartás. Ha többet szeretnél megtudni a biztonsági koncepcióról, itt találsz egy világos bevezetőt: Tűzfal mint védőpajzs.
Konfiguráció indítása: Alapértelmezett házirendek biztonságos beállítása
Kezdem a Alapértelmezett-Policy: Bejövő blokkolása, kimenő engedélyezése. Így akadályozom meg, hogy az új szolgáltatások véletlenül elérhetők legyenek. Mindig engedélyezem a loopbacket, hogy a belső folyamatok stabilan működjenek. A meglévő kapcsolatokat elfogadom, hogy elkerüljem a törléseket. Ez a sorrend minimalizálja a hibákat a tűzfal aktiválásakor [2][5].
Az UFW-t használom az alap beállításához, mindössze néhány paranccsal. Ezután részletesen ellenőrzöm az állapotot, hogy azonnal észrevegyem a gépelési hibákat. Különösen érzékeny hosztok esetében a kimenő portokat is korlátozom. Ez csökkenti az adatszivárgás kockázatát, ha egy szolgáltatás veszélybe került. Gyakran használom a következő parancsokat:
# UFW: Alapértelmezett szabályok
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Alternatív szigorúbb kimenő házirend
sudo ufw default deny outgoing (alapértelmezett kimenő tiltása)
sudo ufw allow out 53
sudo ufw allow out 80
sudo ufw allow out 443
# Állapot ellenőrzése
sudo ufw status verbose
Állapotfüggő szűrés: állapotok és szekvencia
A tiszta csomagáramlás áll és bukik A Conntrack szerint. Először elfogadom a létrehozott kapcsolatokat, az érvénytelen csomagokat korán eldobom, és nyitva hagyom a loopbacket. Ez csökkenti a terhelést és megakadályozza a késői leállásokból eredő mellékhatásokat. Az iptables esetében szándékosan állítom be a sorrendet:
# iptables: szilárd alapok
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Mindig engedélyezi a loopbacket
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Létező/asszociált kapcsolatok engedélyezése
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Érvénytelen csomagok korai eldobása
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
Az UFW-nél az ESTABLISHED/RELATED már belsőleg figyelembe van véve. Arra is odafigyelek, hogy a DROP (néma) vagy REJECT (aktív, gyorsabb átállás). Belső hálózatoknál a REJECT-et, a nyilvános hálózatban általában a DROP-ot részesítem előnyben.
A webkiszolgálókra vonatkozó alapvető szabályok: SSH, HTTP és HTTPS
Bekapcsolom SSH először, különben könnyen kizárhatom magam. Ezután engedélyezem a HTTP-t és a HTTPS-t, hogy a webszerver elérhető legyen. Csak azokat a portokat állítom be, amelyekre valóban szükségem van. Később opcionálisan hozzáadok rate limitinget vagy Fail2ban-t, hogy megfékezzem a brutális bejelentkezési kísérleteket. Minden változást azonnal ellenőrzök status vagy list parancsokkal.
Az erre vonatkozó parancsokat egyszerűnek tartom. Az UFW beszélő aliasokat kínál a webportokhoz, ami növeli az olvashatóságot. Az iptables segítségével pontos portokat és protokollokat tudok beállítani. Az iptables szabályokat utólag elmentem, hogy túléljék az újraindítást. Itt vannak a minimális lépések:
# SSH
sudo ufw allow 22
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# HTTP/HTTPS
sudo ufw allow http
sudo ufw allow https
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Biztonságos SSH: Korlátozás és szelektív nyitás
A felszabadítás mellett a támadásokat is csillapítom a Árfolyamkorlátozás vagy fehér listák. Az UFW egyszerű védelmet nyújt:
# SSH sebességkorlátozás (UFW)
sudo ufw limit 22/tcp comment "SSH sebességkorlátozás"
Az iptables segítségével finomabb korlátokat állítok be. Ez megakadályozza a tömeges jelszó-kitalálást anélkül, hogy kizárná a jogos adminokat:
# SSH: Kapcsolati kísérletek korlátozása forrásonként
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --name SSH --set
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --name SSH --update --seconds 60 --hitcount 10 -j DROP
Ahol lehetséges, csak az SSH-t engedélyezem Admin IP-címek és SSH-kulcsokkal dolgozhat. A portok megváltoztatása nem helyettesíti a biztonságot, de csökkentheti a zajt. Dokumentálom a kivételeket, és rendszeresen ellenőrzöm őket.
Adatbázisok védelme és IP-források korlátozása
Soha nem nyitok adatbázis portokat globálisan, hanem csak helyi vagy meghatározott forrás IP-címek esetén. Ez megakadályozza, hogy a szkennerek nyitott MySQL, PostgreSQL vagy MongoDB portokat találjanak. A helyi alkalmazások esetében a 127.0.0.1 elegendő célpontként; a külső adminisztrátori hozzáférést szigorúan IP-n keresztül ellenőrzöm. A változásokat röviden dokumentálom, például a szerver wikiben. Ezzel időt takarítok meg az ellenőrzések során.
Gyakran használom a következő példákat a projektekben. Előzetesen ellenőrzöm az egyes engedélyezett IP-k helyességét. Az UFW lehetővé teszi a tiszta "from-to" jelölést, az iptables technikailag ugyanezt a logikát valósítja meg. További engedélyezési szabályokat használok az ideiglenes karbantartási ablakokhoz, és utólag törlöm őket. Ezáltal a felület kicsi marad:
# Csak helyi: MySQL
sudo ufw allow 127.0.0.0.1-től bármelyik 3306-os portig
iptables -A INPUT -p tcp -s 127.0.0.0.1 --dport 3306 -j ACCEPT
# Egyetlen IP engedélyezése
sudo ufw allow from 203.0.113.10
iptables -A INPUT -s 203.0.113.10 -j ACCEPT
# Port engedélyezése adott IP-nek
sudo ufw allow a 10.1.2.3-tól bármelyik 4444-es portra
iptables -A INPUT -p tcp -s 10.1.2.3 --dport 4444 -j ACCEPT
# Ismert támadók blokkolása
sudo ufw deny from 192.0.2.24
iptables -A INPUT -s 192.0.2.24 -j DROP
A naplózás, az interfészek és az IPv6 tiszta kezelése
Bekapcsolom Naplózás a szabályok ellenőrzésére és a feltűnő forgalom felismerésére. Az UFW "on" szintje elegendő a legtöbb hoszthoz, én csak szelektíven használok magasabb szinteket. A naplókat journalctl, fail2ban vagy SIEM eszközökkel elemzem. Ez lehetővé teszi számomra, hogy felismerjem a mintákat a szkennelésekből vagy a nyers erővel végrehajtott próbálkozásokból. Rendellenességek esetén azonnal módosítom a szabályokat [2].
Gyakran kötök szabályokat egy adott Interfészpéldául eth0 nyilvános hálózatokban. Ez megakadályozza, hogy a belső hálózatokat szükségtelenül érintse. Az UFW "engedélyezheti az eth0-n a 80-as port bármelyikét", az iptables a -i-t használja a bemeneti interfészekre. IPv6 esetén az /etc/default/ufw-ban az aktiválásnál ellenőrzöm az "IPV6=yes" opciót, és az ip6tables-t használom a natív szabályokhoz [2]. Ezzel a szétválasztással elkerülhetőek a hiányosságok a dual-stack hostoknál.
ICMP és ICMPv6: hézagmentes elérhetőség
Hagyom a szükséges ICMP-típusok, hogy az útvonal MTU felderítése, az időkorlátok és a diagnosztika működjön. Az ICMP nem ellenség, hanem az IP protokoll magja. Én csak a túlzott visszhangokat korlátozom.
# IPv4: Visszhang korlátozása, fontos ICMP típusok engedélyezése
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 5/second --limit-burst 20 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
# UFW: ICMP engedélyezése általánosságban (finomhangolás a before.rules-ban lehetséges)
sudo ufw allow in proto icmp
A címen. IPv6 Az ICMPv6 feltétlenül szükséges (Neighbour Discovery, Router Advertisement). Engedélyezem a magtípusokat és korlátozom a visszhangkéréseket:
# IPv6 (ip6tables)
ip6tables -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type router-advertisement -j ACCEPT
ip6tables -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type neighbour-solicitation -j ACCEPT
ip6tables -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type neighbour-advertisement -j ACCEPT
ip6tables -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type echo-request -m limit --limit 5/second --limit-burst 20 -j ACCEPT
Kimenő korlátozások és NAT/maszkírozás helyes használata
Korlátozom a kimenő forgalmat, amikor Kockázati profil és a megfelelés. Engedélyezem a DNS-t és a HTTPS-t, és a meghatározott célpontok kivételével minden mást blokkolok. Ez csökkenti a kiszivárgott adatok számát, ha egy szolgáltatást eltérítenek. Meghatározott kivételeket hozok létre a frissítéseket vagy API-kat igénylő alkalmazások számára. Ezeket a kivételeket egyértelműen dokumentálom és rendszeresen ellenőrzöm.
Az útválasztási beállításokhoz NAT/Masqueradinget használok az UFW-Before-Rules segítségével vagy nyersen az iptables segítségével. Figyelek a láncok sorrendjére, hogy a csomagok helyesen legyenek átírva. A módosítások után tesztelem a kapcsolódást és a késleltetést. A termelő rendszerek esetében karbantartási ablakot tervezek, és biztonsági másolatot készítek a konfigurációról. Ez lehetővé teszi számomra, hogy a hálózati útvonalak nyomon követhetőek maradjanak [7].
Kimenő részletek: rendszerszolgáltatások és protokollok
Szigorú kimenő irányelvekkel kifejezetten engedélyezem, hogy DNS (53/udp), HTTPS (443/tcp) és szükség esetén NTP (123/udp). A levelezőszerverekhez 25/tcp és 587/tcp. A tartomány alapú kivételeket nem csomagszinten oldom fel, hanem proxykon vagy alkalmazási logikán keresztül.
# UFW: tipikus rendszerszolgáltatások
sudo ufw allow out 123/udp # NTP
sudo ufw allow out 25/tcp # SMTP - csak akkor, ha levelezőszerver
sudo ufw allow out 587/tcp # Küldés - csak ha szükséges
# iptables: specifikus engedélyezés
iptables -A OUTPUT -p udp --dport 123 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 587 -j ACCEPT
Docker és tűzfalak: a buktatók elkerülése
A Docker beállítja a saját iptables-szabályok, amelyek befolyásolhatják a politikámat. Ezért minden egyes összeállítás vagy démon indítása után ellenőrzöm a NAT és FORWARD láncokat. Szándékosan felszabadítom a kitett portokat, és kerülöm a "-p 0.0.0.0.0:PORT"-ot. Ehelyett a menedzsment IP-hez vagy a fordított proxyhoz kötöm őket. Ezáltal a támadási vektor kisebb és jobban látható marad [1].
A Docker ellenére aktívan tartom az állomás tűzfalát. A biztonsági csoportokat az infrastruktúra szintjén is ellenőrzöm, ha rendelkezésre állnak. Az UFW és a Docker közötti konfliktusok esetén dokumentált megoldásokat használok, vagy szabályokat állítok be a DOCKER-USER-ben. Fontos, hogy egyértelműek legyenek a felelősségi körök: a host mindig blokkol, a konténerek csak explicit módon nyitnak. Ez a sorrend megakadályozza az öntudatlan kiadásokat.
# DOCKER-USER: a globális host házirend érvényesítése a Docker-szabályok előtt
iptables -N DOCKER-USER 2>/dev/null || true
iptables -I DOCKER-USER -s 192.0.2.24 -j DROP
iptables -A DOCKER-USER -j RETURN
UFW finom beállítások: Sorrend, profilok és irányított forgalom
Ha a pontosság számít, akkor a "beillesztése", "számozott" és alkalmazásprofilok. Így tartom tisztán a szabálysorozatot és használok tesztelt szolgáltatásdefiníciókat.
# Vezérlési sorrend
sudo ufw insert 1 deny in from 198.51.100.0/24
# Számozott nézet és célzott törlés
sudo ufw status numbered
sudo ufw delete 3
# Alkalmazásprofilok (pl. Nginx Full)
sudo ufw app list
sudo ufw app info "Nginx Full"
sudo ufw allow "Nginx Full"
# Alapértelmezés szerint blokkolja az átirányított forgalmat (továbbítás)
sudo ufw default deny routed
A bonyolultabb kivételeket a before.rules resp. after.rules. Ott pontosan elhelyezhetem az ICMP finomhangolást vagy a NAT-ot anélkül, hogy a szabványos szabályok olvashatóságát elveszíteném.
Állandó szabályok: Mentés és visszaállítás
Az UFW szabályai a következők tartós és automatikusan túléli az újraindításokat. Ez nagyban leegyszerűsíti az adminisztrációt a Debian/Ubuntu hosztokon. Az iptables esetében a változtatások után elmentem a szabályokat, és indításkor visszaállítom őket. Erre az iptables-save/restore vagy a netfilter-persistent eszközt használom. Ezek nélkül a lépések nélkül egyébként újraindítás után elveszítem a változtatásokat [5].
Szisztematikusan tesztelem a perzisztenciát: ütemezek egy újraindítást, majd ellenőrzöm az állapotot. Ha a számlálók és a láncok helyesek, a konfiguráció szilárd. Ha a szabályok hiányoznak, akkor az init vagy systemd kontextusban javítom a betöltési útvonalat. Ez a rutin megelőzi a meglepetéseket a karbantartás során. A dokumentáció és a szabályfájlok biztonsági mentése teszi teljessé az eljárást.
# Debian/Ubuntu: Megmaradás az iptables számára
sudo apt-get install -y iptables-persistent
sudo netfilter-persistent save
# Kézi mentés
sudo iptables-save | sudo tee /etc/iptables/rules.v4
sudo ip6tables-save | sudo tee /etc/iptables/rules.v6
# visszaállítása (ha szükséges)
sudo iptables-restore < /etc/iptables/rules.v4
sudo ip6tables-restore < /etc/iptables/rules.v6
Teljesítmény és védelem: korlátok, készletek és rendszermag-hangolás
Ha nagy a terhelés, csökkentem a vezérlők számát, és célzottan használom a Árfolyamkorlátok. A nagy blokklisták esetében az ipset-tel dolgozom, hogy csökkentsem a keresési időt. Rendszeralapú védelmi mechanizmusokat is használok:
# Tartalmazza a SYN floodot (kernel)
sudo sysctl -w net.ipv4.tcp_syncookies=1
# A HTTP-kapcsolatok sebességének korlátozása forrás IP-nként (példa)
iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW
-m hashlimit --hashlimit-név http_rate --hashlimit-above 50/second
--hashlimit-burst 100 --hashlimit-mode srcip -j DROP
A méretét megtartom a Conntrack táblázat egy pillantásra. Ha sok egyidejű kapcsolat van, megnövelem az nf_conntrack_max-ot, de előbb tesztelem a hatását.
Irányítás, tesztek és hibamegelőzés
Elmegyek SSH mielőtt aktiválnám a "bejövő üzenetek tiltását". Ezután egy második munkamenetből tesztelem, hogy a hozzáférés stabil marad-e. Minden új szabályt az "ufw status verbose" vagy az "iptables -L -v" segítségével ellenőrzök. Ez lehetővé teszi számomra, hogy felismerjem a találati számlálókat, és lássam, hogy a csomagok a várt láncban landolnak-e. Minden nagyobb változtatás előtt biztonsági másolatot készítek a tűzfal fájljairól.
Az átfogó biztonság érdekében a tűzfalat kombinálom a rendszer keményítési lépéseivel. Ezek közé tartoznak a biztonságos SSH-beállítások, a javításkezelés és a minimális szolgáltatások. Szeretek egy gyakorlati útmutatót használni ellenőrzőlistaként: Kiszolgálói keményítés Linuxhoz. Ezeket az ellenőrzéseket rendszeresen megismétlem, és betartom a rögzített karbantartási ablakokat. Ez megbízhatóan formában tartja a szervereimet.
Haladó tesztelés és megfigyelés
Ellenőrzöm a külső hatást a Kikötői szkennelések külső hálózatról, és ellenőrizze a nyitott aljzatokat belsőleg. Kezdetben szorosan figyelemmel kísérem a naplókat, hogy a téves következtetéseket korán felismerjem.
# Nyitott aljzatok
ss -lntup
# iptables áttekintés kompakt
sudo iptables -S
sudo iptables -L -v -n
# UFW: részletes állapot és naplók
sudo ufw status verbose
journalctl -k | grep -i ufw
# Külső ellenőrzés (másik állomásról/hálózatról)
nmap -Pn -p 22,80,443
A nagy kockázatú változásokra tervezek egy Visszalépési szint on. A Screen/Tmux-ban dolgozom, és ha szükséges, beállítok egy idővezérelt resetet, ha kizárom magam. Sikeres tesztelés után ismét törlöm a visszaesési műveletet.
# Példa: automatikus deaktiválás vészhorgonyként (óvatosan használandó)
echo "ufw disable" | at now + 2 minutes
# Sikeres teszt után újra törlés: atrm
A tárhelyszolgáltatók összehasonlítása: Fókuszban a tűzfal-integráció
A tárhelyszolgáltatáshoz a következőkre támaszkodom Biztonság a peron közelében. A testreszabott házirendek, a szabályok gyors bevezetése és a jó felügyelet kifizetődő. A jelenlegi összehasonlításokban a webhoster.de a jól integrált tűzfalopciókkal és a gyors támogatással nyűgöz le. Azok, akik a panelbeállításokat részesítik előnyben, világos útmutatásokat kapnak a következőkre vonatkozóan Plesk tűzfal. A következő táblázat a fő kritériumokat kategorizálja.
| Szolgáltató | Tűzfal integráció | Teljesítmény | Támogatás | Elhelyezés |
|---|---|---|---|---|
| webhoster.de | egyénileg konfigurálható. | Nagyon magas | top | 1 |
| B szolgáltató | Standard | magas | jó | 2 |
| Szolgáltató C | Standard | jó | Elégséges | 3 |
Gyakorlati példák: A teszteléstől a gyártási szabályig
Minden szabálykészletet a Képernyő vagy egy második SSH-munkamenetben. Így még mindig meg tudom menteni magam egy esetleges működési hiba esetén. Csak akkor alkalmazok szabályokat a termelésben, ha a tesztállomás megfelelően működik. A visszatérési útvonal szabályok és a visszaállítási terv további biztonságot nyújtanak számomra. A végén a változtatásokat tömören dokumentálom a változásnaplóban.
A webszervereknél visszatérő építőelemeket használok: SSH engedélyezése, HTTP/S felszabadítása, belső portok helyi kötése, bejelentkezés, ICMP korlátozása, felesleges protokollok blokkolása. Ezután gondoskodom az IPv6 tükrözési szabályokról, hogy ne maradjanak hiányosságok. A Docker-láncokat mindig külön ellenőrzöm, mert saját útvonalakat állítanak be. Végül külső ellenőrzésekkel és monitorozással validálom a hozzáférést. Ezáltal a felület tiszta és nyomon követhető marad [1][2].
Összefoglaló adminok számára
Tiszta Szabályok és néhány parancs segítségével megbízhatóan biztosítom a webszervereket. Bejövő alapértelmezett tagadás, SSH először, HTTP/S felszabadítás - ez képezi a stabil alapot. Adatbázis portok csak helyben vagy fehérlistán keresztül, naplózás aktív, IPv6 megfigyelése, docker láncok ellenőrzése. Tartós tárolás és rendszeres tesztek megelőzik a kellemetlen meglepetéseket. Ez a rutin elérhetővé teszi a szolgáltatásokat és jelentősen csökkenti a kockázatokat.
Akár az UFW-t, akár közvetlenül az iptables-t használom, a világos, gazdaságos szabályzat kulcsfontosságú. Röviden dokumentálom, rendszeresen ellenőrzöm, és a kivételeket a minimumra szorítom. A kimenő forgalom korlátozása megállítja a felesleges kapcsolatokat, és kompromittálódás esetén korlátozza a károkat. A naplófájlok gyakorlott figyelésével gyorsabban felismerem az anomáliákat, és megfelelően reagálok. Ezáltal a webszerver rugalmas marad, a támadási felület pedig kicsi.


