Articles

Linux iptables Firewall egyszerűsített példák

az előző bejegyzésben arról beszéltünk, hogyan lehet biztosítani a Linux kiszolgálót a keményedés legjobb gyakorlataival. Néhányan megkérdezték a tűzfal szakaszról, amely rövid bevezetés volt az iptables tűzfalba. Ma részletesen megvitatjuk a Linux iptables tűzfalat, valamint azt, hogyan lehet a szerver forgalmát a félelmetes tűzfal segítségével biztosítani.

Tartalomjegyzék

Iptables a CentOS 7

Ha a CentOS 7, azt találjuk, hogy firewalld kezeli iptables, szóval, ha vissza akarsz menni, hogy iptables, ne pedig maszk firewalld.

$ systemctl stop firewalld$ systemctl mask firewalld

Ezután telepítse az iptables szolgáltatást és engedélyezze azt:

$ yum install iptables-services$ systemctl enable iptables

akkor elindíthatja:

$ systemctl start iptables

hogyan működik a Linux tűzfal

ipt tűzfalfunkciók a a netfilter keretrendszer, amely elérhető a Linux kernel csomagok szűrésére.

Tűzfaltípusok

kétféle tűzfal létezik:

a hontalan tűzfal minden csomagot önmagában dolgoz fel, ez azt jelenti, hogy nem látja ugyanazon kapcsolat többi csomagját.

Stateful firewall ez a fajta tűzfal törődik az összes rajta áthaladó csomaggal, így ismeri a kapcsolat állapotát. Nagyobb ellenőrzést biztosít a forgalom felett.

a Netfilter táblázatokat tartalmaz. Ezek a táblázatok láncokat tartalmaznak, a láncok pedig egyedi szabályokat tartalmaznak.

Ha egy csomag megfelel bármely szabálynak, az iptables a szabály műveletet alkalmazza a csomagra.

a műveletek lehetnek: fogadja el, utasítsa el, figyelmen kívül hagyja, vagy adja át a csomagot más szabályoknak a további feldolgozáshoz.

a Netfilter a bejövő vagy kimenő forgalmat az IP-cím és a portszám segítségével tudja feldolgozni.

az iptables parancs kezeli és konfigurálja a Netfiltert.

a tűzfalparancsok írásának megkezdése előtt egy kicsit meg kell értenünk a tűzfal szerkezetét, hogy könnyen írhassunk tűzfalszabályokat.

iptables firewall tables

a Netfilter három táblával rendelkezik, amelyek a feldolgozás szabályait hordozhatják.

az iptables szűrőasztal a forgalom feldolgozásának fő táblája.

a második a NAT táblázat, amely kezeli a NAT szabályokat.

a harmadik táblázat a mangle táblázat a csomagok darabolásához.

Table chains

a fent említett táblázatok minden táblázata láncokat tartalmaz; ezek a láncok az iptables szabályainak tartályai.

a szűrőasztal előre -, bemenet-és kimeneti láncokat tartalmaz. Létrehozhat egy egyéni láncot a szabályok mentéséhez.

Ha egy csomag érkezik a gazdagéphez, az iptables bemeneti láncszabályokkal dolgozza fel.

Ha a csomag egy másik gazdagépre megy, ez azt jelenti, hogy a kimeneti lánc szabályai feldolgozzák.

az iptables a továbbítási láncot használja olyan csomagok kezelésére, amelyek hozzáfértek a gazdagéphez, de egy másik gazdagéphez vannak rendelve.

Chain policy

a szűrőtáblázat minden láncának van egy házirendje. A házirend az iptables alapértelmezett művelete.

a politika lehet csepp, elutasítja, és elfogadja.

az elfogadás házirend lehetővé teszi a csomagok számára a tűzfal átadását. A DROP policy csepp egy csomagot anélkül, hogy tájékoztatná az ügyfelet. Az elutasítási szabályzat szintén ejti a csomagot, és tájékoztatja a feladót.

biztonsági szempontból le kell dobnia a gazdagéphez érkező összes csomagot, és csak azokat a csomagokat kell elfogadnia, amelyek megbízható forrásokból származnak.

iptables szabályok hozzáadása

az iptables paranccsal új szabályt adhat hozzá:

$ iptables -A INPUT -i eth1 -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT

törjük darabokra ezt a parancsot, hogy mindent megértsünk róla.

Az-a azt jelenti, hogy új szabályt adunk hozzá. Alapértelmezés szerint az iptables minden új szabályt hozzáad a szűrőasztalhoz, hacsak nem ad meg egy másik táblát.

az-i zászló megadja azt az eszközt, amelyre a szabályt alkalmazni fogja. Ha nem ad meg egy eszközt, az iptables az eszköztől függetlenül minden bejövő forgalomra alkalmazza a szabályt.

A-P zászló megadja a feldolgozni kívánt csomag protokollját, ami esetünkben TCP.

a-dport zászló adja meg a célportot, ami 80.

A-d megadja a cél IP-címét, ami 1.2.3.4. Ha nincs megadva rendeltetési IP-cím, a szabály az eth1 összes bejövő forgalmára vonatkozik, IP-címtől függetlenül.

A-j megadja a végrehajtandó műveletet vagy ugrási műveletet. Itt elfogadjuk a csomagokat az elfogadás házirend használatával.

a fenti szabály lehetővé teszi a bejövő HTTP forgalmat, amely a 80-as porton található.

mi a helyzet a kimenő forgalom engedélyezésével?

$ iptables -A OUTPUT -o eth1 -p tcp --sport 80 -j ACCEPT

használhatja a-a zászlót, hogy szabályokat adjon a kimeneti lánchoz.

A-o jelzőt a kimenő forgalomhoz használt eszközhöz használják.

a-sport zászló megadja a forrásportot.

használhatja a szolgáltatás nevét, mint a http vagy https helyett a numerikus port számát sport vagy dport. Minden szolgáltatás neve az / etc / services fájlban található.

a portszám helyett a szolgáltatás nevét kell használnia, ami megkönnyíti az olvasási szabályokat.

iptables rules order

az iptables új szabályokat helyez el a lánc végén. Felveheti azt a tetejére az-I opció használatával.

a szabályok sorrendje számít, ahogy most látni fogja. Akkor helyezze be a szabályokat, hogy pontosan hol szeretné az I zászló.

nézze meg a következő szabályokat, hogy megértse, hogyan fontosak a szabályok megrendelése:

$ iptables -I INPUT 3 -i eth1 -p udp -j ACCEPT$ iptables -I INPUT 4 -i eth1 -p udp --dport 80 -j DROP

az első szabály elfogadja az összes UDP forgalmat az eth1-re, a 3-as szám pedig a szabályrend.

a második szabály csökkenti a 80-as portba belépő forgalmat.

az első szabály elfogadja az összes forgalmat, majd a második szabály, amely le kell állítania a forgalmat, semmit sem fog tenni, mivel az iptables áthalad a forgalomon az első szabályban.

a szabályoknak értelmesnek kell lenniük, mivel a láncban lévő szabályok sorrendje számít.

List iptables rules

felsorolhatja a szabályokat egy láncban a-L flag használatával:

$ iptables -L INPUT

meg tudja mutatni a szabályok sorszámát a –line-numbers használatával:

$ iptables -L INPUT --line-numbers

a lista a szolgáltatások nevét mutatja. A-n opció használata helyett portszámokat jeleníthet meg:

$ iptables -L INPUT -n --line-numbers

a fenti szabály gyorsabbá teszi a listát, mert megakadályozza az iptables DNS felbontását és a szolgáltatáskeresést.

felsorolhatja az összes szabályt az összes láncra, mint ez:

$ iptables -L -n --line-numbers

ahhoz, hogy megkapja az egyes szabályok által feldolgozott csomagokat, használhatja a-v zászlót:

$ iptables -L -v

a számlálókat nullára állíthatja a-Z zászló segítségével.

most hozzáadhatunk egy új szabályt bármelyik lánchoz, amit akarunk, beilleszthetjük a szabályt egy adott sorrendbe, és felsorolhatjuk a lánc vagy az összes lánc szabályait, de mi van a szabály törlésével?

szabályok törlése

törölhet egy szabályt-D zászlóval:

$ iptables -D INPUT -i eth1 -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT

Ez a parancs törli a korábban megadott HTTP szabályt.

mielőtt törölne egy szabályt, csak győződjön meg róla, hogy a szabály specifikációja felsorolja, majd törölje.

a szabályt a rendelési szám segítségével törölheti a szabály SPECIFIKÁCIÓK írása helyett.

$ iptables -D INPUT 2

törölheti az összes szabályt egy adott láncban A-F zászló használatával, ami azt jelenti, hogy az összes szabályt öblítse le.

$ iptables -F INPUT

Ha elfelejtette megemlíteni a lánc nevét-F zászló használatakor, akkor az összes láncszabály törlődik.

szabályok cseréje

a meglévő szabályokat saját szabályokkal helyettesítheti-R zászló:

$ iptables -R INPUT 1 -i eth1 -p tcp --dport httpht -d 1.2.3.4 -j ACCEPT

Ez a parancs a bemeneti lánc első szabályát helyettesíti a gépelt szabálygal.

meghatározott táblázat felsorolása

egy adott táblázat felsorolásához használja a-T zászlót a táblázat nevével:

$ iptables -L -t nat

itt felsoroljuk a Szabályokat a nat táblázatban.

Iptables User Defined Chain

felhasználó által definiált lánc létrehozásához használja a-N zászlót.

$ iptables -N MY_CHAIN

is, akkor nevezze át a-E zászló.

$ iptables -E MY_CHAIN NEW_NAME

és törölheti a felhasználó által definiált láncot-X zászló használatával.

$ iptables -X MY_CHAIN

ha nem említi a lánc nevét-X zászló használatakor, akkor törli az összes felhasználó által definiált láncot. Nem lehet törölni a beépített láncok, mint a bemeneti vagy kimeneti.

átirányítás egy felhasználó által definiált láncra

a csomagokat átirányíthatja egy felhasználó által definiált láncra, például a beépített láncokra a-j zászló használatával.

$ iptables -A INPUT -p icmp -j MY_CHAIN

a fenti szabály átirányítja az összes ICMP forgalmat a MY_CHAIN láncra.

A láncok alapértelmezett házirendjének beállítása

használhatja a-P zászlót egy adott lánc alapértelmezett házirendjének beállításához. Az alapértelmezett házirend lehet elfogadás, elutasítás és ejtés.

$ iptables -P INPUT DROP

tehát most a bemeneti lánc minden csomagot eldob, hacsak nem ír egy szabályt a bejövő forgalom engedélyezésére.

SYNAR

a támadó csak a TCP kézfogás befejezése nélkül küld SYN csomagokat, ennek eredményeként a fogadó gazdagépnek sok nyitott kapcsolata lenne, a szerver pedig túl elfoglalt ahhoz, hogy válaszoljon más ügyfelekre.

tudjuk használni a limit modul iptables tűzfal, hogy megvédjen minket a SYN árvíz.

$ iptables -A INPUT -i eth1 -p tcp --syn -m limit --limit 10/second -j ACCEPT

itt csak másodpercenként 10 SYN csomagot adunk meg. Ezt az értéket a hálózati igényeknek megfelelően állíthatja be.

Ha ez korlátozza a hálózatot, használhatja a SYN cookie-kat.

In

/etc/sysctl.conf

file and add this line:

net.ipv4.tcp_syncookies = 1

majd save and reload.

$ sysctl -p

csepp érvénytelen Állapotcsomagok

Az érvénytelen állapotcsomagok olyan csomagok, amelyek nem tartoznak semmilyen kapcsolathoz, és azokat eldobja.

$ iptables -A INPUT -m state --state INVALID -j DROP

Ez a szabály az összes bejövő érvénytelen állapotcsomagot eldobja.

Drop fragmentált csomagok

a fragmentált csomagok nagy hibás csomagok törött darabjai, ezért szabályokat kell írni, hogy eldobják őket.

az-f zászló azt mondja az iptables tűzfalnak, hogy válassza ki az összes töredéket. Tehát, ha nem használ iptables mint router, akkor csepp töredezett csomagokat.

$ iptables -A INPUT -f -j DROP

iptables szabályok mentése

ha újraindítja a kiszolgálót, akkor elveszíti az összes írt szabályt, tehát hogyan kell őket megtartani?

az iptables-save paranccsal mentheti az összes szabályt, ha CentOS vagy Red Hat-ot használ.

iptables-save > /etc/sysconfig/iptables

a CentOS 7-en mentheti az ilyen szabályokat:

$ service iptables save

csak olyan konkrét táblákat menthet, mint a szűrőasztal:

$ iptables-save -t filter

is használhatja iptables-restore visszaállítani a szabályokat.

A Debian alapú disztribúciókon az iptables-perzisztens csomag segítségével mentheti és visszaállíthatja a szabályokat.

először telepítse:

$ apt-get install iptables-persistent

ezután mentheti és visszaállíthatja a szabályokat:

$ netfilter-persistent save
$ netfilter-persistent reload

remélem, könnyen megtalálja az iptables tűzfalat. Gyere vissza.

köszönöm.

a LikeGeeks alapítója. 2010 óta dolgozom Linux rendszergazdaként. Én vagyok a felelős a Linux szerverek karbantartásáért, biztonságáért és hibaelhárításáért világszerte több ügyfél számára. Szeretek shell és Python szkripteket írni, hogy automatizáljam a munkámat.