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