ACL med SystemD

Fra og med Fedora 28 er TCP-wrappers ikke lenger tilgjengelig. Dette dokumentet beskriver en metode der man bruker SystemD til å begrense tilgangen til tjenester.

Advarsel

Gjelder kun Fedora

I RHEL8 (RHEL 8.1 i skrivende stund) er eBPF-støtte markert som Technology Preview, og ACL med SystemD fungerer ikke.

1   Bakgrunn

Bakgrunn og begrunnelse for denne endringen, som gjelder fra og med Fedora 28, er godt dokumentert her:

https://fedoraproject.org/wiki/Changes/Deprecate_TCP_wrappers

Merk at dette foreløpig kun gjelder Fedora. Oppskriften under vil ikke fungere på RHEL7, ettersom versjonen av SystemD der er for gammel og mangler støtte for eBPF-filtre.

2   Eksempel for SSH

Dette er et eksempel (overførbart til andre tjenester) på hvordan man kan begrense tilgangen til SSH via SystemD. Tidligere ville TCP-wrappers per default begrense tilgangen til kun UiO-adresser via følgende konstruksjon i /etc/hosts.allow:

# Allow everything from localhost
ALL: localhost 127.0.0.1 [::1]

# Allow everything from UiO
ALL: 129.240. .uio.no [2001:700:100::]/40

For å oppnå tilsvarende for en tjeneste (her: ssh) legger man inn IPAddressDeny og IPAddressAllow i unit-filen til tjenesten. Vi vil ikke redigere direkte på unit-filen, som man finner her:

/usr/lib/systemd/system/sshd.service

Denne oppskriften bruker en mekanisme i SystemD der man kan legge til eller endre innholdet i unit-filen ved å opprette en katalog med samme navn som unit-filen pluss .d på slutten under /etc/systemd/system:

/etc/systemd/system/<unit>.d

I denne katalogen oppretter man så en eller flere filer som ender på .conf, som inneholder de ønskede tilleggene eller endringene. Dette kan naturligvis brukes til å endre andre verdier i unit-filen, men her er oppskriften for OpenSSH:

  1. Opprett en katalog med samme navn som unit-filen til tjenesten:

    # mkdir /etc/systemd/system/sshd.service.d
    
  2. Opprett en fil <navn>.conf. I eksemplet velger vi navnet 10-acl.conf:

    /etc/systemd/system/sshd.service.d/10-acl.conf
    
  3. Denne filen skal ha følgende innhold:

    [Service]
    IPAddressDeny=any
    IPAddressAllow=localhost
    IPAddressAllow=129.240.0.0/16 2001:700:100::/40
    
  4. Gjør en reload av SystemD slik at systemet får med seg at vi har gjort en endring på unit-filen:

    # systemctl daemon-reload
    
  5. Restart SSH-tjenesten:

    # systemctl restart sshd
    
Av Trond Hasle Amundsen
Publisert 26. juni 2024 12:24