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.
Leave a Reply