25 Nyttige IPtable Firewall-regler, som enhver Linux-administrator burde vide
konfigurere firewallen på en sådan måde, at den opfylder systemets og brugernes krav til både indgående og udgående forbindelser uden at lade systemet være sårbart over for angreb.
Det er her iptables
er nyttigt. Iptables er en Linux-kommandolinj firewall, der giver systemadministratorer mulighed for at administrere indgående og udgående trafik via et sæt konfigurerbare tabelregler.
Iptables bruger et sæt tabeller, der har kæder, der indeholder sæt indbyggede eller brugerdefinerede regler. Takket være dem kan en systemadministrator korrekt filtrere netværkstrafikken i sit system.
Per iptables-manual er der i øjeblikket 3 typer tabeller:
-
FILTER
- dette er standardtabellen, der indeholder de indbyggede kæder til:- INPUT - pakker bestemt til lokale sockets
- FORWARD - pakker dirigeret gennem systemet
- OUTPUT - pakker genereret lokalt
- FORUDSÆTNING - bruges til at ændre en pakke, så snart den er modtaget
- OUTPUT - bruges til at ændre lokalt genererede pakker
- POSTROUTING - bruges til at ændre pakker, når de er ved at gå ud
- PREROUTING - til ændring af indgående forbindelser
- OUTPUT - til ændring af lokalt genererede pakker
- INPUT - til indkommende pakker
- POSTROUTING - til at ændre pakker, når de er ved at gå ud
- FORWARD - for pakker, der dirigeres gennem kassen
I denne artikel vil du se nogle nyttige kommandoer, der hjælper dig med at administrere din Linux box firewall gennem iptables. Med henblik på denne artikel vil jeg starte med enklere kommandoer og gå til mere kompliceret til slutningen.
1. Start/Stop/Genstart Iptables Firewall
For det første skal du vide, hvordan du styrer iptables-tjenesten i forskellige Linux-distributioner. Dette er ret let:
------------ On Cent/RHEL 7 and Fedora 22+ ------------ # systemctl start iptables # systemctl stop iptables # systemctl restart iptables
------------ On Cent/RHEL 6/5 and Fedora ------------ # /etc/init.d/iptables start # /etc/init.d/iptables stop # /etc/init.d/iptables restart
2. Kontroller alle IPtables Firewall-regler
Hvis du vil kontrollere dine eksisterende regler, skal du bruge følgende kommando:
# iptables -L -n -v
Dette skal returnere output svarende til nedenstående:
Chain INPUT (policy ACCEPT 1129K packets, 415M bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes) pkts bytes target prot opt in out source destination
Hvis du foretrækker at kontrollere reglerne for en bestemt tabel, kan du bruge indstillingen
-t
efterfulgt af den tabel, som du vil kontrollere. For at kontrollere reglerne iNAT
-tabellen kan du f.eks. Bruge:# iptables -t nat -L -v -n
3. Bloker specifik IP-adresse i IPtables Firewall
Hvis du finder en usædvanlig eller voldelig aktivitet fra en IP-adresse, kan du blokere den IP-adresse med følgende regel:
# iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP
Hvor du skal ændre
"xxx.xxx.xxx.xxx"
med den aktuelle IP-adresse. Vær meget forsigtig, når du kører denne kommando, da du ved et uheld kan blokere din egen IP-adresse. Indstillingen-A
tilføjer reglen i slutningen af den valgte kæde.Hvis du kun vil blokere TCP-trafik fra denne IP-adresse, kan du bruge indstillingen
-p
, der specificerer protokollen. På den måde vil kommandoen se sådan ud:# iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP
4. Fjern blokering af IP-adresse i IPtables Firewall
Hvis du har besluttet, at du ikke længere vil blokere anmodninger fra en bestemt IP-adresse, kan du slette blokeringsreglen med følgende kommando:
# iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP
Indstillingen
-D
sletter en eller flere regler fra den valgte kæde. Hvis du foretrækker at bruge den længere mulighed, kan du bruge- slet
.5. Bloker specifik port på IPtables Firewall
Nogle gange vil du måske blokere indgående eller udgående forbindelser på en bestemt port. Det er en god sikkerhedsforanstaltning, og du bør virkelig tænke over det spørgsmål, når du konfigurerer din firewall.
For at blokere udgående forbindelser på en bestemt portbrug:
# iptables -A OUTPUT -p tcp --dport xxx -j DROP
For at tillade indgående forbindelser skal du bruge:
# iptables -A INPUT -p tcp --dport xxx -j ACCEPT
I begge eksempler skal du ændre
"xxx"
med den aktuelle port, du vil tillade. Hvis du vil blokere UDP-trafik i stedet for TCP, skal du blot ændre"tcp"
med"udp"
i ovenstående iptables-regel.6. Tillad flere porte på IP-tabeller ved hjælp af Multiport
Du kan tillade flere porte på én gang ved hjælp af multiport, nedenfor kan du finde en sådan regel for både indgående og udgående forbindelser:
# iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT # iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT
7. Tillad specifikt netværksområde på en bestemt port på IP-tabeller
Det kan være en god idé at begrænse bestemte forbindelser på en bestemt port til et givet netværk. Lad os sige, at du vil tillade udgående forbindelser på port
22
til netværk192.168.100.0/24
.Du kan gøre det med denne kommando:
# iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT
8. Bloker Facebook på IPtables Firewall
Nogle arbejdsgivere kan lide at blokere adgangen til Facebook for deres medarbejdere. Nedenfor er et eksempel på, hvordan du blokerer trafik til Facebook.
Bemærk: Hvis du er systemadministrator og har brug for at anvende disse regler, skal du huske på, at dine kolleger måske holder op med at tale med dig :)
Find først IP-adresserne, der bruges af Facebook:
# host facebook.com facebook.com has address 66.220.156.68
# whois 66.220.156.68 | grep CIDR CIDR: 66.220.144.0/20
Du kan derefter blokere det Facebook-netværk med:
# iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP
Husk, at IP-adresseområdet, der bruges af Facebook, kan variere i dit land.
9. Opsætning af portvideresendelse i IP-tabeller
Nogle gange vil du muligvis videresende en tjenestes trafik til en anden havn. Du kan opnå dette med følgende kommando:
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525
Ovenstående kommando videresender al indgående trafik på netværksgrænsefladen
eth0
, fra port25
til port2525
. Du kan ændre porte med dem, du har brug for.10. Bloker netværksflod på Apache-port med IP-tabeller
Nogle gange kan IP-adresser anmode om for mange forbindelser til webporte på dit websted. Dette kan forårsage antal problemer, og for at forhindre sådanne problemer kan du bruge følgende regel:
# iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
Ovenstående kommando begrænser de indgående forbindelser fra pr. Minut til
100
og indstiller en limit burst til200
. Du kan redigere grænsen og limit-burst til dine egne specifikke krav.11. Bloker indgående Ping-anmodninger på IPtables
Nogle systemadministratorer kan lide at blokere indgående ping-anmodninger på grund af sikkerhedsproblemer. Selvom truslen ikke er så stor, er det godt at vide, hvordan man blokerer en sådan anmodning:
# iptables -A INPUT -p icmp -i eth0 -j DROP
12. Tillad loopback-adgang
Loopback-adgang (adgang fra
127.0.0.1
) er vigtig, og du skal altid lade den være aktiv:# iptables -A INPUT -i lo -j ACCEPT # iptables -A OUTPUT -o lo -j ACCEPT
13. Hold en log over droppede netværkspakker på IPtables
Hvis du vil logge de tabte pakker på netværksgrænsefladen
eth0
, kan du bruge følgende kommando:# iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"
Du kan ændre værdien efter
"--log-præfiks"
med noget efter eget valg. Beskederne er logget ind/var/log/messages
, og du kan søge efter dem med:# grep "IPtables dropped packets:" /var/log/messages
14. Bloker adgang til specifik MAC-adresse på IPtables
Du kan blokere adgang til dit system fra en bestemt MAC-adresse ved at bruge:
# iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP
Naturligvis skal du ændre
"00: 00: 00: 00: 00: 00"
med den aktuelle MAC-adresse, som du vil blokere.15. Begræns antallet af samtidige forbindelser pr. IP-adresse
Hvis du ikke vil have for mange samtidige forbindelser oprettet fra en enkelt IP-adresse på den givne port, kan du bruge kommandoen nedenfor:
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
Ovenstående kommando tillader højst
3
-forbindelser pr. Klient. Selvfølgelig kan du ændre portnummeret for at matche forskellige tjenester. Også--connlimit-above
skal ændres for at matche dit krav.16. Søg inden for IPtables-reglen
Når du har defineret dine iptables-regler, vil du søge fra tid til anden og muligvis ændre dem. En nem måde at søge inden for dine regler er at bruge:
# iptables -L $table -v -n | grep $string
I ovenstående eksempel skal du ændre
$ -tabel
med den aktuelle tabel, inden for hvilken du vil søge, og$ string
med den aktuelle streng, som du leder efter.Her er et eksempel:
# iptables -L INPUT -v -n | grep 192.168.0.100
17. Definer ny IPTables-kæde
Med iptables kan du definere din egen kæde og gemme brugerdefinerede regler i den. For at definere en kæde skal du bruge:
# iptables -N custom-filter
Nu kan du kontrollere, om dit nye filter er der:
# iptables -L
Chain INPUT (policy ACCEPT) target prot opt source destination
Chain FORWARD (policy ACCEPT) target prot opt source destination
Chain OUTPUT (policy ACCEPT) target prot opt source destination
Chain custom-filter (0 references) target prot opt source destination
18. Flush IPtables Firewall-kæder eller regler
Hvis du vil skylle dine firewallkæder, kan du bruge:
# iptables -F
Du kan skylle kæder fra et specifikt bord med:
# iptables -t nat -F
Du kan ændre
"nat"
med den aktuelle tabel, hvilke kæder du vil skylle.19. Gem IPtables-regler i en fil
Hvis du vil gemme dine firewallregler, kan du bruge kommandoen
iptables-save
. Du kan bruge følgende til at gemme og gemme dine regler i en fil:# iptables-save > ~/iptables.rules
Det er op til dig, hvor gemmer du filen, og hvordan du navngiver den.
20. Gendan regler for IPtables fra en fil
Hvis du vil gendanne en liste over iptables-regler, kan du bruge
iptables-gendannelse
. Kommandoen ser sådan ud:# iptables-restore < ~/iptables.rules
Selvfølgelig kan stien til din reglerfil være anderledes.
21. Opsæt IPtables-regler for PCI-overholdelse
Nogle systemadministratorer skal muligvis konfigurere deres servere til at være PCI-kompatible. Der er mange krav fra forskellige leverandører af PCI-overholdelse, men der er få almindelige.
I mange af tilfældene skal du have mere end en IP-adresse. Du bliver nødt til at anvende nedenstående regler for webstedets IP-adresse. Vær ekstra forsigtig, når du bruger nedenstående regler, og brug dem kun, hvis du er sikker på, hvad du laver:
# iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP
Hvis du bruger cPanel eller lignende kontrolpanel, skal du muligvis også blokere dets porte. Her er et eksempel:
# iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports 2082,2083,2095,2096,2525,2086,2087 -j DROP
Bemærk: For at sikre, at du lever op til din PCI-leverandørs krav, skal du kontrollere deres rapport omhyggeligt og anvende de krævede regler. I nogle tilfælde skal du muligvis også blokere UDP-trafik i visse porte.
22. Tillad etablerede og relaterede forbindelser
Da netværkstrafikken er adskilt ved indgående og udgående, skal du tillade etableret og relateret indgående trafik. For indgående forbindelser gør det med:
# iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Til udgående brug:
# iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
23. Slip ugyldige pakker i IP-tabeller
Det er muligt at få nogle netværkspakker markeret som ugyldige. Nogle mennesker foretrækker måske at logge disse pakker, men andre foretrækker at droppe dem. For at fjerne ugyldige pakker kan du bruge:
# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
24. Bloker forbindelse på netværksgrænsefladen
Nogle systemer kan have mere end en netværksgrænseflade. Du kan begrænse adgangen til netværksgrænsefladen eller blokere forbindelser fra en bestemt IP-adresse.
For eksempel:
# iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP
Skift “xxx.xxx.xxx.xxx” med den aktuelle IP-adresse (eller netværk), som du vil blokere.
25. Deaktiver udgående mails via IPTables
Hvis dit system ikke sender nogen e-mails, kan du blokere udgående porte på SMTP-porte. For eksempel kan du bruge dette:
# iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT
Konklusion
Iptables er en stærk firewall, som du nemt kan drage fordel af. Det er vigtigt for enhver systemadministrator at lære mindst det grundlæggende i iptables. Hvis du vil finde mere detaljerede oplysninger om iptables og dens muligheder, anbefales det stærkt at læse den manual:
# man iptables
Hvis du mener, at vi skal tilføje flere kommandoer til denne liste, så del dem med os ved at indsende dem i kommentarfeltet nedenfor.