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:

    1. FILTER - dette er standardtabellen, der indeholder de indbyggede kæder til:
      1. INPUT - pakker bestemt til lokale sockets
      2. FORWARD - pakker dirigeret gennem systemet
      3. OUTPUT - pakker genereret lokalt

      1. FORUDSÆTNING - bruges til at ændre en pakke, så snart den er modtaget
      2. OUTPUT - bruges til at ændre lokalt genererede pakker
      3. POSTROUTING - bruges til at ændre pakker, når de er ved at gå ud

      1. PREROUTING - til ændring af indgående forbindelser
      2. OUTPUT - til ændring af lokalt genererede pakker
      3. INPUT - til indkommende pakker
      4. POSTROUTING - til at ændre pakker, når de er ved at gå ud
      5. 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 i NAT -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ærk 192.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 port 25 til port 2525 . 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 til 200 . 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.