Nftables nepodporuje doménová jména ani během načítání nebo reloadování firewallu.
Řeší se to přes sety. Ale problém je, jak spravovat ty sety. Když si reloadnete firewall máte předpřipravený prázdný set, protože nftables pseudo scriptem z doménový jmen naplnit nejdou. Takže celé je to velmi neelegantní, to už je snad i lepší ty ip adresy občas měnit ručně. Nebo je možné includovat další soubor, který generuje nějaký script, ale tam zase hrozí, že zapomenete ten skript spustit.
Dnes jsem ale konečně, se zdá, narazil na uspokojivé řešení.
Kromě souboru /etc/nftables.conf si vytvořím i soubor /etc/nftables.sh . Bash či jiný skriptovací jazyk nemá omezení jako /etc/nfttables.conf, takže je možná předem připravené sety naplnit. Aby se na to při restartu nebo změně firewallu nezapomínalo, přidám do souboru /lib/systemd/system/nftables.service další řádky pro pro ExecStart a ExecReload:
ExecStart=/usr/sbin/nft -f /etc/nftables.conf
ExecStart=/etc/nftables.sh
ExecReload=/usr/sbin/nft -f /etc/nftables.conf
ExecReload=/etc/nftables.sh
Změn se uplatní pomocí
systemctl daemon-reload
Obash souboru /etc/nftables.sh může vypadat třeba takto:
#!/bin/bash
# obsah setu mohu mohu vypsat pomocí: nft list set filter ssh_acc_set
nft add element filter ssh_acc_set { $(dig +short domena.mooo.com) comment \"domena.mooo.com $(date +%F_%H:%M:%S)\" }
Každá doména má další řádek, případně je možné to řešit i cyklem.
A pak mohu reloadnout firewall jak je obvyklé pomocí.
systemctl reload nftables
A při té příležitosti se automaticky občerství všechny ip adresy v setu.
Automatické občerstvování setu je možné přidat i do cronu. V setu v poznámce se uchovává i datum, kdy byla ip adresa přidána a doména ke které patří, což podstatně zlepšuje přehled. Pokud je již v setu obsažena, další přidání téže ip adresy se ignoruje.