25 Nyttige IPtable-brannmurregler alle Linux-administratorer bør kjenne til


Å administrere nettverkstrafikk er en av de tøffeste jobbene en systemadministrator må håndtere. Han må konfigurere brannmuren på en slik måte at den oppfyller systemets og brukernes krav for både innkommende og utgående tilkoblinger, uten å gjøre systemet sårbart for angrep.

Det er her iptables kommer til nytte. Iptables er en Linux-kommandolinjebrannmur som lar systemadministratorer administrere innkommende og utgående trafikk via et sett med konfigurerbare tabellregler.

Iptables bruker et sett med tabeller som har kjeder som inneholder sett med innebygde eller brukerdefinerte regler. Takket være dem kan en systemadministrator filtrere nettverkstrafikken til systemet hans på riktig måte.

I følge iptables-manualen er det for øyeblikket 3 typer tabeller:

    1. FILTER – dette er standardtabellen, som inneholder de innebygde kjedene for:

      1. INPUT  – pakker beregnet på lokale stikkontakter
      2. VIDERE – pakker rutet gjennom systemet
      3. OUTPUT – pakker generert lokalt
    2. NAT – en tabell som konsulteres når en pakke prøver å opprette en ny tilkobling. Den har følgende innebygd:

      1. PREROUTING – brukes til å endre en pakke så snart den er mottatt
      2. OUTPUT – brukes til å endre lokalt genererte pakker
      3. POSTROUTING – brukes til å endre pakker når de er i ferd med å gå ut
    3. MANGLE – denne tabellen brukes for pakkeendring. Inntil kjerneversjon 2.4 hadde denne tabellen bare to kjeder, men de er nå 5:

      1. PREROUTING – for å endre innkommende tilkoblinger
      2. OUTPUT – for å endre lokalt genererte  pakker
      3. INPUT – for innkommende pakker
      4. POSTROUTING – for å endre pakker når de er i ferd med å gå ut
      5. VIDERE – for pakker rutet gjennom boksen

I denne artikkelen vil du se noen nyttige kommandoer som vil hjelpe deg med å administrere din Linux-boks brannmur gjennom iptables. For formålet med denne artikkelen vil jeg starte med enklere kommandoer og gå til mer komplekse til slutten.

1. Start/stopp/start Iptables-brannmuren på nytt

Først bør du vite hvordan du administrerer iptables-tjenesten i forskjellige Linux-distribusjoner. Dette er ganske enkelt:

På SystemD-baserte Linux-distribusjoner

------------ On Cent/RHEL 7 and Fedora 22+ ------------
systemctl start iptables
systemctl stop iptables
systemctl restart iptables

På SysVinit-baserte Linux-distribusjoner

------------ On Cent/RHEL 6/5 and Fedora ------------
/etc/init.d/iptables start 
/etc/init.d/iptables stop
/etc/init.d/iptables restart

2. Sjekk alle IPtables brannmurregler

Hvis du vil sjekke de eksisterende reglene dine, bruk følgende kommando:

iptables -L -n -v

Dette bør returnere utdata som ligner på det nedenfor:

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 foretrekker å sjekke reglene for en spesifikk tabell, kan du bruke -t-alternativet etterfulgt av tabellen du vil sjekke. For å sjekke reglene i NAT-tabellen kan du for eksempel bruke:

iptables -t nat -L -v -n

3. Blokker spesifikk IP-adresse i IPtables-brannmuren

Hvis du finner en uvanlig eller støtende aktivitet fra en IP-adresse, kan du blokkere denne IP-adressen med følgende regel:

iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

Hvor du må endre "xxx.xxx.xxx.xxx" med den faktiske IP-adressen. Vær veldig forsiktig når du kjører denne kommandoen, siden du ved et uhell kan blokkere din egen IP-adresse. Alternativet -A legger til regelen på slutten av den valgte kjeden.

I tilfelle du bare ønsker å blokkere TCP-trafikk fra den IP-adressen, kan du bruke -p-alternativet som spesifiserer protokollen. På den måten vil kommandoen se slik ut:

iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP

4. Fjern blokkering av IP-adresse i IPtables-brannmuren

Hvis du har bestemt deg for at du ikke lenger vil blokkere forespørsler fra spesifikke IP-adresser, kan du slette blokkeringsregelen med følgende kommando:

iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

Alternativet -D sletter én eller flere regler fra den valgte kjeden. Hvis du foretrekker å bruke det lengre alternativet, kan du bruke --delete.

5. Blokker spesifikk port på IPtables-brannmuren

Noen ganger vil du kanskje blokkere innkommende eller utgående tilkoblinger på en bestemt port. Det er et godt sikkerhetstiltak, og du bør virkelig tenke på den saken når du setter opp brannmuren.

For å blokkere utgående tilkoblinger på en bestemt port, bruk:

iptables -A OUTPUT -p tcp --dport xxx -j DROP

For å tillate innkommende tilkoblinger, bruk:

iptables -A INPUT -p tcp --dport xxx -j ACCEPT

I begge eksemplene endre "xxx" med den faktiske porten du ønsker å tillate. Hvis du vil blokkere UDP-trafikk i stedet for TCP, endrer du bare "tcp" med "udp" i ovenfor iptables-regelen.

6. Tillat flere porter på IP-tabeller som bruker Multiport

Du kan tillate flere porter samtidig, ved å bruke multiport, nedenfor kan du finne en slik regel for både innkommende og utgående tilkoblinger:

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. Tillat spesifikt nettverksområde på en bestemt port på IP-tabeller

Det kan være lurt å begrense visse tilkoblinger på en bestemt port til et gitt nettverk. La oss si at du vil tillate utgående tilkoblinger på port 22 til nettverket 192.168.100.0/24.

Du kan gjøre det med denne kommandoen:

iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

8. Blokker Facebook på IPtables brannmur

Noen arbeidsgivere liker å blokkere tilgangen til Facebook for sine ansatte. Nedenfor er et eksempel på hvordan du blokkerer trafikk til Facebook.

Merk: Hvis du er systemadministrator og trenger å bruke disse reglene, husk at kollegene dine kan slutte å snakke med deg :)

Finn først IP-adressene som brukes av 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 deretter blokkere det Facebook-nettverket med:

iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP

Husk at IP-adresseområdet som brukes av Facebook kan variere i ditt land.

9. Sett opp portvideresending i IP-tabeller

Noen ganger vil du kanskje videresende trafikken til en tjeneste til en annen port. Du kan oppnå dette med følgende kommando:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

Kommandoen ovenfor videresender all innkommende trafikk på nettverksgrensesnittet eth0, fra port 25 til port 2525. Du kan endre portene med de du trenger.

10. Blokker Network Flood på Apache-porten med IP-tabeller

Noen ganger kan IP-adresser be om for mange tilkoblinger til nettporter på nettstedet ditt. Dette kan forårsake mange problemer, og for å forhindre slike problemer kan du bruke følgende regel:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

Kommandoen ovenfor begrenser innkommende tilkoblinger fra per minutt til 100 og setter en grenseskur til 200. Du kan redigere grensen og limit-burst til dine egne spesifikke krav.

11. Blokker innkommende ping-forespørsler på IP-tabeller

Noen systemadministratorer liker å blokkere innkommende ping-forespørsler på grunn av sikkerhetshensyn. Selv om trusselen ikke er så stor, er det godt å vite hvordan du blokkerer en slik forespørsel:

iptables -A INPUT -p icmp -i eth0 -j DROP

12. Tillat tilbakekoblingstilgang

Loopback-tilgang (tilgang fra 127.0.0.1) er viktig, og du bør alltid la den være aktiv:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

13. Hold en logg over mistede nettverkspakker på IP-tabeller

Hvis du vil logge de droppede pakkene på nettverksgrensesnittet eth0, kan du bruke følgende kommando:

iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"

Du kan endre verdien etter "--log-prefix" med noe etter eget valg. Meldingene er logget inn /var/log/messages og du kan søke etter dem med:

grep "IPtables dropped packets:" /var/log/messages

14. Blokker tilgang til spesifikk MAC-adresse på IP-tabeller

Du kan blokkere tilgang til systemet ditt fra spesifikk MAC-adresse ved å bruke:

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

Selvfølgelig må du endre "00:00:00:00:00:00" med den faktiske MAC-adressen du vil blokkere.

15. Begrens antall samtidige tilkoblinger per IP-adresse

Hvis du ikke vil ha for mange samtidige tilkoblinger etablert fra én IP-adresse på gitt port, kan du bruke kommandoen nedenfor:

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

Kommandoen ovenfor tillater ikke mer enn 3 tilkoblinger per klient. Selvfølgelig kan du endre portnummeret for å matche en annen tjeneste. Også --connlimit-above bør endres for å samsvare med ditt krav.

16. Søk i IPtables-regelen

Når du har definert iptables-reglene dine, vil du søke fra tid til annen og må kanskje endre dem. En enkel måte å søke innenfor reglene dine er å bruke:

iptables -L $table -v -n | grep $string

I eksemplet ovenfor må du endre $table med den faktiske tabellen du ønsker å søke i og $string med den faktiske strengen du leter etter.

Her er et eksempel:

iptables -L INPUT -v -n | grep 192.168.0.100

17. Definer ny IPTables-kjede

Med iptables kan du definere din egen kjede og lagre tilpassede regler i den. For å definere en kjede, bruk:

iptables -N custom-filter

Nå kan du sjekke om det nye filteret ditt er der:

iptables -L
Eksempelutgang
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. Skyll IPtables brannmurkjeder eller regler

Hvis du vil tømme brannmurkjedene dine, kan du bruke:

iptables -F

Du kan spyle kjeder fra et bestemt bord med:

iptables -t nat -F

Du kan endre "nat" med den faktiske tabellen hvilke kjeder du ønsker å tømme.

19. Lagre IPtables-regler til en fil

Hvis du vil lagre brannmurreglene dine, kan du bruke kommandoen iptables-save. Du kan bruke følgende for å lagre og lagre reglene dine i en fil:

iptables-save > ~/iptables.rules

Det er opp til deg hvor du vil lagre filen og hvordan du vil navngi den.

20. Gjenopprett IPtables-regler fra en fil

Hvis du vil gjenopprette en liste over iptables-regler, kan du bruke iptables-restore. Kommandoen ser slik ut:

iptables-restore < ~/iptables.rules

Selvfølgelig kan banen til regelfilen din være annerledes.

21. Konfigurer IPtables-regler for PCI-samsvar

Noen systemadministratorer kan bli pålagt å konfigurere serverne til å være PCI-kompatible. Det er mange krav fra forskjellige PCI-samsvarsleverandører, men det er få vanlige.

I mange av tilfellene må du ha mer enn én IP-adresse. Du må bruke reglene nedenfor for nettstedets IP-adresse. Vær ekstra forsiktig når du bruker reglene nedenfor og bruk dem bare hvis du er sikker på hva du gjør:

iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP

Hvis du bruker cPanel eller lignende kontrollpanel, kan det hende du må blokkere portene til den også. 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

Merk: For å være sikker på at du oppfyller PCI-leverandørens krav, sjekk rapporten nøye og bruk de nødvendige reglene. I noen tilfeller må du kanskje blokkere UDP-trafikk på enkelte porter også.

22. Tillat etablerte og relaterte tilkoblinger

Siden nettverkstrafikken er atskilt på innkommende og utgående, vil du tillate etablert og relatert innkommende trafikk. For innkommende tilkoblinger gjør det med:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

For utgående bruk:

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

23. Slipp ugyldige pakker i IP-tabeller

Det er mulig å ha noen nettverkspakker merket som ugyldige. Noen mennesker foretrekker kanskje å logge disse pakkene, men andre foretrekker å droppe dem. For å droppe ugyldige pakker kan du bruke:

iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 

24. Blokker tilkobling på nettverksgrensesnitt

Noen systemer kan ha mer enn ett nettverksgrensesnitt. Du kan begrense tilgangen til det nettverksgrensesnittet eller blokkere tilkoblinger fra bestemte IP-adresser.

For eksempel:

iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

Endre “xxx.xxx.xxx.xxx ” med den faktiske IP-adressen (eller nettverket) du ønsker å blokkere.

25. Deaktiver utgående e-post via IPTables

Hvis systemet ditt ikke skal sende noen e-poster, kan du blokkere utgående porter på SMTP-porter. Du kan for eksempel bruke dette:

iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

Konklusjon

Iptables er en kraftig brannmur som du enkelt kan dra nytte av. Det er viktig for enhver systemadministrator å lære i det minste det grunnleggende om iptables. Hvis du vil finne mer detaljert informasjon om iptables og dens alternativer, anbefales det på det sterkeste å lese manualen:

man iptables

Hvis du synes vi bør legge til flere kommandoer til denne listen, vennligst del dem med oss ved å sende dem inn i kommentarfeltet nedenfor.