Articles

Linux iptables Firewall förenklade exempel

i föregående inlägg pratade vi om hur man säkrar Linux-servern med hjälp av härdning av bästa praxis. Vissa människor frågade mig om brandväggsavsnittet, vilket var en kort introduktion till iptables brandvägg. Idag kommer vi att diskutera i detalj Linux iptables brandvägg och hur du säkrar din servertrafik med den fantastiska brandväggen.

Innehållsförteckning

Iptables på CentOS 7

om du använder CentOS 7 kommer du att upptäcka att firewalld hanterar iptables, så om du vill gå tillbaka till iptables måste du stoppa och maskera firewalld.

$ systemctl stop firewalld$ systemctl mask firewalld

Installera sedan iptables-tjänsten och aktivera den:

$ yum install iptables-services$ systemctl enable iptables

då kan du starta det:

$ systemctl start iptables

hur Linux firewall fungerar

Iptables firewall-funktioner är byggda på netfilter-ramverket som är tillgängligt i Linux-kärnan för paketfiltrering.

Brandväggstyper

det finns två typer av brandväggar:

statslös brandvägg bearbetar varje paket på egen hand, det betyder att det inte ser andra paket med samma anslutning.

Stateful firewall denna typ av brandvägg bryr sig om alla paket som skickas genom det, så det vet anslutningens tillstånd. Det ger mer kontroll över trafiken.

Netfilter innehåller tabeller. Dessa tabeller innehåller kedjor och kedjor innehåller individuella regler.

om ett paket matchar någon regel kommer iptables att tillämpa regelåtgärden på det paketet.

åtgärderna kan vara: acceptera, avvisa, ignorera eller skicka paketet vidare till andra regler för mer bearbetning.

Netfilter kan bearbeta inkommande eller utgående trafik med IP-adress och portnummer.

iptables-kommandot hanterar och konfigurerar Netfilter.

innan vi börjar skriva brandväggskommandon måste vi förstå brandväggsstrukturen lite så att vi enkelt kan skriva brandväggsregler.

iptables firewall tables

Netfilter har tre tabeller som kan bära regler för bearbetning.

iptables filtertabell är huvudtabellen för bearbetning av trafiken.

den andra är Nat-tabellen, som hanterar NAT-regler.

den tredje tabellen är mangle-tabellen för manglingpaket.

tabellkedjor

varje tabell i tabellerna som nämns ovan innehåller kedjor; dessa kedjor är behållaren för iptables regler.

filtertabellen innehåller framåt -, ingångs-och utgångskedjor. Du kan skapa en anpassad kedja för att spara dina regler på den.

om ett paket kommer till värden kommer iptables att bearbeta det med INMATNINGSKEDJEREGLER.

om paketet går till en annan värd betyder det att UTGÅNGSKEDJANS regler kommer att bearbeta det.

iptables använder framåtkedjan för hantering av paket som har åtkomst till värden men är avsedda för en annan värd.

Kedjepolicy

varje kedja i filtertabellen har en policy. Principen är standardåtgärden som iptables tar.

policyn kan vara DROP, REJECT och ACCEPT.

ACCEPT-principen tillåter paketen att passera brandväggen. DROP policy tappar ett paket utan att informera kunden. REJECT-policyn tappar också paketet och informerar avsändaren.

ur ett säkerhetsperspektiv bör du släppa alla paket som kommer till värden och acceptera endast de paket som kommer från betrodda källor.

lägga till iptables rules

Du kan lägga till en ny regel med iptables-kommandot så här:

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

låt oss bryta detta kommando i bitar så att vi kan förstå allt om det.

– A betyder att vi lägger till en ny regel. Som standard lägger iptables till alla nya regler i filtertabellen om du inte anger en annan tabell.

flaggan-i anger den enhet som ska tillämpa regeln på. Om du inte anger en enhet kommer iptables att tillämpa regeln på all inkommande trafik oavsett enheterna.

flaggan-p anger paketets protokoll som du vill bearbeta, vilket är TCP i vårt fall.

flaggan –dport anger destinationsporten, som är 80.

– d anger destinations-IP-adressen, som är 1.2.3.4. Om ingen destination IP-adress anges, regeln skulle gälla för all inkommande trafik på eth1 oavsett IP-adress.

– j anger åtgärden eller HOPPÅTGÄRDEN som ska göras. Här accepterar vi paketen med accept-policyn.

ovanstående regel tillåter inkommande HTTP-trafik, som är på port 80.

vad sägs om att tillåta utgående trafik?

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

Du kan använda flaggan-A för att lägga till regler i utgångskedjan.

– o-flaggan används för den enhet som används för utgående trafik.

flaggan-sport anger Källporten.

Du kan använda servicenamnet som http eller https istället för det numeriska portnumret på sport eller dport. Alla tjänster namn är i/etc / tjänster fil.

Du bör använda servicenamnet snarare än ett portnummer, vilket underlättar läsreglerna.

iptables rules order

iptables placerar nya regler i slutet av kedjan. Du kan lägga till den till toppen genom att använda-i alternativ.

sekvensen av reglerna är viktig som du kommer att se nu. Du kan infoga dina regler exakt var du vill använda i-flaggan.

titta på följande regler för att förstå hur regler beställer frågor:

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

den första regeln accepterar all UDP-trafik kommer till eth1, och nummer 3 är regelordningen.

den andra regeln släpper trafiken som går in i port 80.

den första regeln accepterar all trafik, då den andra regeln som ska släppa trafiken kommer att göra ingenting eftersom iptables passerar trafiken i den första regeln.

dina regler bör vara meningsfulla eftersom ordningen på reglerna i kedjan är viktig.

lista iptables rules

Du kan lista reglerna i en kedja med – L flagga:

$ iptables -L INPUT

Du kan visa radnumren för regler med –radnummer:

$ iptables -L INPUT --line-numbers

listan visar namnen på tjänsterna. Du kan visa portnummer istället med-n-alternativet:

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

ovanstående regel gör listan snabbare eftersom den förhindrar iptables från DNS-upplösning och serviceuppslag.

Du kan lista alla regler för alla kedjor så här:

$ iptables -L -n --line-numbers

för att få hur många paket som behandlas av varje regel kan du använda-v-flaggan:

$ iptables -L -v

Du kan också återställa räknarna till noll med-Z-flaggan.

Nu kan vi lägga till en ny regel i vilken kedja vi vill, vi kan infoga regeln i en viss ordning och vi kan lista reglerna för alla kedjor eller alla kedjor, men hur är det med att radera en regel?

radera regler

Du kan radera en regel med-D flagga:

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

detta kommando tar bort HTTP-regeln som du angav tidigare.

innan du tar bort en regel, kontrollera bara regelspecifikationen genom att lista den och ta bort den.

Du kan radera regeln med ordernumret istället för att skriva regelspecifikationerna.

$ iptables -D INPUT 2

Du kan ta bort alla regler i en viss kedja med-F flagga, vilket betyder spola alla regler.

$ iptables -F INPUT

om du glömmer att nämna kedjans namn när du använder-f-flaggan raderas alla kedjeregler.

ersätta regler

Du kan ersätta befintliga regler med din egen regel med-R flagga:

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

detta kommando ersätter den första regeln i INMATNINGSKEDJAN med den typade regeln.

Listing Specific Table

för att lista en specifik tabell, använd-t-flaggan med tabellnamnet så här:

$ iptables -L -t nat

Här listar vi reglerna i nat-tabellen.

Iptables användardefinierad kedja

använd flaggan-N för att skapa en användardefinierad kedja.

$ iptables -N MY_CHAIN

Du kan också byta namn på det med-E-flaggan.

$ iptables -E MY_CHAIN NEW_NAME

och du kan ta bort den användardefinierade kedjan med-X-flaggan.

$ iptables -X MY_CHAIN

om du inte nämner kedjans namn när du använder-X-flaggan raderas alla användardefinierade kedjor. Du kan inte ta bort inbyggda kedjor som INPUT och OUTPUT.

omdirigering till en användardefinierad kedja

Du kan omdirigera paket till en användardefinierad kedja som inbyggda kedjor med-j flagga.

$ iptables -A INPUT -p icmp -j MY_CHAIN

ovanstående regel omdirigerar all ICMP-trafik till kedjan MY_CHAIN.

ställa in Standardprincipen för kedjor

Du kan använda-p-flaggan för att ställa in standardprincipen för en viss kedja. Standardprincipen kan vara acceptera, avvisa och släpp.

$ iptables -P INPUT DROP

så nu kommer ingångskedjan att släppa alla paket om du inte skriver en regel för att tillåta inkommande trafik.

SYN Flooding

angriparen skickar SYN-paket endast utan att slutföra TCP-handskakningen och som ett resultat skulle den mottagande värden ha många öppnade anslutningar och din server blir för upptagen för att svara på andra klienter.

Vi kan använda gränsmodulen för iptables firewall för att skydda oss från SYN-översvämningar.

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

Här anger vi endast 10 SYN-paket per sekund. Du kan justera detta värde efter dina nätverksbehov.

om detta stryper ditt nätverk kan du använda SYN-cookies.

SYN Cookies

i

/etc/sysctl.conf

fil och Lägg till den här raden:

net.ipv4.tcp_syncookies = 1

spara sedan och ladda om.

$ sysctl -p

släpp ogiltiga Tillståndspaket

de ogiltiga tillståndspaketen är paket som inte tillhör någon anslutning och du släpper dem.

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

denna regel kommer att släppa alla inkommande ogiltiga tillståndspaket.

Drop fragmenterade paket

fragmenterade paket är trasiga bitar av stora missbildade paket, och du bör skriva regler för att släppa dem.

flaggan-f talar om för iptables brandvägg att välja alla fragment. Så om du inte använder iptables som en router kan du släppa fragmenterade paket.

$ iptables -A INPUT -f -j DROP

spara iptables Rules

om du startar om din server kommer du att förlora alla regler du skrev, så Hur fortsätter du dem?

Du kan spara alla dina regler med kommandot iptables-save om du använder CentOS eller Red Hat.

iptables-save > /etc/sysconfig/iptables

på CentOS 7 kan du spara regler så här:

$ service iptables save

Du kan bara spara specifika tabeller som filtertabell:

$ iptables-save -t filter

Du kan också använda iptables-restore för att återställa regler.

på Debianbaserade distros kan du använda iptables-persistent-paketet för att spara och återställa regler.

Installera först det:

$ apt-get install iptables-persistent

då kan du spara och återställa regler:

$ netfilter-persistent save
$ netfilter-persistent reload

Jag hoppas att du hittar iptables brandvägg lätt. Fortsätt komma tillbaka.

Tack.

grundare av LikeGeeks. Jag arbetar som Linux-systemadministratör sedan 2010. Jag ansvarar för att underhålla, säkra och felsöka Linux-servrar för flera kunder runt om i världen. Jag älskar att skriva shell och Python skript för att automatisera mitt arbete.