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:
Opprett en katalog med samme navn som unit-filen til tjenesten:
# mkdir /etc/systemd/system/sshd.service.d
Opprett en fil <navn>.conf. I eksemplet velger vi navnet 10-acl.conf:
/etc/systemd/system/sshd.service.d/10-acl.conf
Denne filen skal ha følgende innhold:
[Service] IPAddressDeny=any IPAddressAllow=localhost IPAddressAllow=129.240.0.0/16 2001:700:100::/40
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
Restart SSH-tjenesten:
# systemctl restart sshd