Hvordan sikre nettverkstjenester ved hjelp av TCP-innpakninger i Linux


I denne artikkelen vil vi forklare hva TCP-innpakninger er og hvordan du konfigurerer dem til konfigurert brannmur.

I denne forbindelse kan du tenke på dette verktøyet som et ultimat sikkerhetstiltak for systemet ditt. Ved å bruke en brannmur og TCP-innpakninger, i stedet for å favorisere den ene fremfor den andre, vil du sørge for at serveren din ikke står igjen med et enkelt feilpunkt.

Forstå hosts.allow og hosts.deny

Når en nettverksforespørsel når serveren din, bruker TCP wrappers hosts.allow og hosts.deny (i den rekkefølgen) for å avgjøre om klienten skal ha tillatelse til å bruke en gitt tjeneste .

Som standard er disse filene tomme, alle kommentert ut eller eksisterer ikke. Dermed er alt tillatt gjennom TCP-innpakningslaget og systemet ditt kan stole på brannmuren for full beskyttelse. Siden dette ikke er ønsket, på grunn av grunnen vi oppga i introduksjonen, sørg for at begge filene eksisterer:

# ls -l /etc/hosts.allow /etc/hosts.deny

Syntaksen til begge filene er den samme:

<services> : <clients> [: <option1> : <option2> : ...]

hvor,

  1. tjenester er en kommadelt liste over tjenester gjeldende regel skal brukes på.
  2. klienter representerer listen over kommadelte vertsnavn eller IP-adresser som påvirkes av regelen. Følgende jokertegn godtas:
    1. ALLE samsvarer med alt. Gjelder både for kunder og tjenester.
    2. LOCAL matcher verter uten punktum i FQDN, for eksempel lokalvert.
    3. KJENT indikerer en situasjon der vertsnavnet, vertsadressen eller brukeren er kjent.
    4. UKJENT er det motsatte av KJENT.
    5. PARANOID fører til at en tilkobling avbrytes hvis omvendte DNS-oppslag (først på IP-adresse for å bestemme vertsnavn, deretter på vertsnavn for å få IP-adresser) returnerer en annen adresse i hvert tilfelle.

    Det kan være lurt å huske på at en regel som gir tilgang til en gitt tjeneste i /etc/hosts.allow har forrang over en regel i /etc/hosts.deny som forbyr den. I tillegg, hvis to regler gjelder for samme tjeneste, vil bare den første bli tatt i betraktning.

    Dessverre støtter ikke alle nettverkstjenester bruken av TCP-innpakninger. For å finne ut om en gitt tjeneste støtter dem, gjør du:

    # ldd /path/to/binary | grep libwrap
    

    Hvis kommandoen ovenfor returnerer utdata, kan den være TCP-innpakket. Et eksempel på dette er sshd og vsftpd, som vist her:

    Slik bruker du TCP-innpakninger for å begrense tilgangen til tjenester

    Når du redigerer /etc/hosts.allow og /etc/hosts.deny, pass på at du legger til en ny linje ved å trykke Enter etter den siste ikke-tomme linjen.

    For å tillate SSH- og FTP-tilgang kun til 192.168.0.102 og localhost og nekte alle andre, legg til disse to linjene i /etc/hosts.deny:

    sshd,vsftpd : ALL
    ALL : ALL
    

    og følgende linje i /etc/hosts.allow:

    sshd,vsftpd : 192.168.0.102,LOCAL
    
    #
    # hosts.deny	This file contains access rules which are used to
    #		deny connections to network services that either use
    #		the tcp_wrappers library or that have been
    #		started through a tcp_wrappers-enabled xinetd.
    #
    #		The rules in this file can also be set up in
    #		/etc/hosts.allow with a 'deny' option instead.
    #
    #		See 'man 5 hosts_options' and 'man 5 hosts_access'
    #		for information on rule syntax.
    #		See 'man tcpd' for information on tcp_wrappers
    #
    sshd,vsftpd : ALL
    ALL : ALL
    
    #
    # hosts.allow	This file contains access rules which are used to
    #		allow or deny connections to network services that
    #		either use the tcp_wrappers library or that have been
    #		started through a tcp_wrappers-enabled xinetd.
    #
    #		See 'man 5 hosts_options' and 'man 5 hosts_access'
    #		for information on rule syntax.
    #		See 'man tcpd' for information on tcp_wrappers
    #
    sshd,vsftpd : 192.168.0.102,LOCAL
    

    Disse endringene skjer umiddelbart uten behov for omstart.

    I det følgende bildet kan du se effekten av å fjerne ordet LOCAL fra den siste linjen: FTP-serveren vil bli utilgjengelig for localhost. Etter at vi har lagt til jokertegnet igjen, blir tjenesten tilgjengelig igjen.

    For å tillate alle tjenester til verter der navnet inneholder example.com, legg til denne linjen i hosts.allow:

    ALL : .example.com
    

    og for å nekte tilgang til vsftpd til maskiner på 10.0.1.0/24, legg til denne linjen i hosts.deny:

    vsftpd : 10.0.1.
    

    På de to siste eksemplene, legg merke til prikken på begynnelsen og slutten av klientlisten. Den brukes til å indikere \ALLE verter og/eller klienter der navnet eller IP-en inneholder den strengen.

    Var denne artikkelen nyttig for deg? Har du spørsmål eller kommentarer? Send oss gjerne en melding ved å bruke kommentarskjemaet nedenfor.