
Je rencontre quelques difficultés pour mettre en place des règles simples de filtrage pour le pare-feu avec nftables
Pour que les choses soient claires : J'ai zéro expérience avec iptables que je ne compte jamais utiliser, puisque c'est déjà du passé.
J'ai lu, traduit, résumé le gros de la doc ; du moins en ce qui concerne les commandes nft ...
Mon but
Pour l'installation de base d'un poste d'administrateur sécurisé,
dans un 1er temps je souhaite autoriser uniquement le trafic d'APT
entre le poste et les dépôts du sources.list — soit le minimum pour la mise à jour du poste.
La situation
Code : Tout sélectionner
$ cat /etc/apt/sources.list
deb [arch=amd64] http://deb.debian.org/debian/ buster main non-free contrib
deb [arch=amd64] http://security.debian.org/debian-security buster/updates main contrib non-free
deb [arch=amd64] http://deb.debian.org/debian/ buster-updates main contrib non-free
Déjà un léger soucis :
Sur mon poste de travail habituel (testing) j'ai :
Code : Tout sélectionner
$ ping -c 1 security.debian.org
PING security.debian.org (151.101.130.132): 56 data bytes
64 bytes from 151.101.130.132: icmp_seq=0 ttl=57 time=11,086 ms
--- security.debian.org ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max/stddev = 11,086/11,086/11,086/0,000 ms
$ ping -c 1 deb.debian.org
PING debian.map.fastlydns.net (199.232.178.132): 56 data bytes
64 bytes from 199.232.178.132: icmp_seq=0 ttl=57 time=10,235 ms
--- debian.map.fastlydns.net ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max/stddev = 10,235/10,235/10,235/0,000 ms
et sur le poste Admin (stable)
Code : Tout sélectionner
# ping -c 1 deb.debian.org
PING deb.debian.org(2a04:4e42:6c::644 (2a04:4e42:6c::644)) 56 data bytes
64 bytes from 2a04:4e42:6c::644 (2a04:4e42:6c::644): icmp_seq=1 ttl=57 time=10.8 ms
--- deb.debian.org ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 10.823/10.823/10.823/0.000 ms
# ping -c 1 security.debian.org
PING security.debian.org(2a04:4e42:600::644 (2a04:4e42:600::644)) 56 data bytes
64 bytes from 2a04:4e42:600::644 (2a04:4e42:600::644): icmp_seq=1 ttl=57 time=11.7 ms
--- security.debian.org ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 11.740/11.740/11.740/0.000 ms
donc en IPv6
et je n'ai pas trouvé dans : man ping
l'information sur le choix de type d'adresse test/sortie ???
NFTABLES
Code : Tout sélectionner
# apt install nftables
# systemctl enable nftables
# systemctl start nftables
# systemctl status nftables
● nftables.service - nftables
Loaded: loaded (/lib/systemd/system/nftables.service; enabled; vendor preset: enabled)
Active: active (exited) since Sun 2021-03-14 14:07:13 UTC; 18min ago
Docs: man:nft(8)
http://wiki.nftables.org
Process: 289 ExecStart=/usr/sbin/nft -f /etc/nftables.conf (code=exited, status=0/SUCCESS)
Main PID: 289 (code=exited, status=0/SUCCESS)
Donc le service est Actif
Règles de filtrage
J'ai placé dans : /etc/nftables/admin.rules
Code : Tout sélectionner
#!/sbin/nft -f
flush ruleset
table ip filter {
chain input {
type filter hook input priority 0; policy drop;
ip saddr 199.232.178.132 accept
ip saddr 151.101.130.132 accept
}
chain forward {
type filter hook forward priority 0; policy drop;
counter comment "count dropped packets"
}
chain output {
type filter hook output priority 0; policy drop;
ip daddr 199.232.178.132 accept
ip daddr 151.101.130.132 accept
}
}
table ip6 filter {
chain input {
type filter hook input priority 0; policy drop;
ip6 saddr 2a04:4e42:6c::644 accept
ip6 saddr 2a04:4e42::644 accept
}
chain forward {
type filter hook forward priority 0; policy drop;
counter comment "count dropped packets"
}
# If you're not counting packets, this chain can be omitted.
chain output {
type filter hook output priority 0; policy drop;
ip6 daddr 2a04:4e42:6c::644 accept
ip6 daddr 2a04:4e42::644 accept
}
}
Puis :
# nft -f /etc/nftables/admin.rules
Les régles sont correctement prises en compte :
Code : Tout sélectionner
# nft list ruleset
table ip filter {
chain input {
type filter hook input priority 0; policy drop;
ip saddr 199.232.178.132 accept
ip saddr 151.101.130.132 accept
}
chain forward {
type filter hook forward priority 0; policy drop;
counter packets 0 bytes 0 comment "count dropped packets"
}
chain output {
type filter hook output priority 0; policy drop;
ip daddr 199.232.178.132 accept
ip daddr 151.101.130.132 accept
}
}
table ip6 filter {
chain input {
type filter hook input priority 0; policy drop;
ip6 saddr 2a04:4e42:6c::644 accept
ip6 saddr 2a04:4e42::644 accept
}
chain forward {
type filter hook forward priority 0; policy drop;
counter packets 0 bytes 0 comment "count dropped packets"
}
chain output {
type filter hook output priority 0; policy drop;
ip6 daddr 2a04:4e42:6c::644 accept
ip6 daddr 2a04:4e42::644 accept
}
}
Sauf que :
Code : Tout sélectionner
# apt update
Err :1 http://deb.debian.org/debian buster InRelease
Erreur temporaire de résolution de « deb.debian.org »
Err :2 http://security.debian.org/debian-security buster/updates InRelease
Erreur temporaire de résolution de « security.debian.org »
Err :3 http://deb.debian.org/debian buster-updates InRelease
Erreur temporaire de résolution de « deb.debian.org »
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
5 paquets peuvent être mis à jour. Exécutez « apt list --upgradable » pour les voir.
W: Impossible de récupérer http://deb.debian.org/debian/dists/buster/InRelease Erreur temporaire de résolution de « deb.debian.org »
W: Impossible de récupérer http://security.debian.org/debian-security/dists/buster/updates/InRelease Erreur temporaire de résolution de « security.debian.org »
W: Impossible de récupérer http://deb.debian.org/debian/dists/buster-updates/InRelease Erreur temporaire de résolution de « deb.debian.org »
W: Le téléchargement de quelques fichiers d'index a échoué, ils ont été ignorés, ou les anciens ont été utilisés à la place.
idem pour ping
Code : Tout sélectionner
# ping -c 1 deb.debian.org
ping: deb.debian.org: Échec temporaire dans la résolution du nom
# ping -c 1 security.debian.org
ping: security.debian.org: Échec temporaire dans la résolution du nom
Par contre après :
# nft flush ruleset
Code : Tout sélectionner
# ping -c 1 deb.debian.org
# ping -c 1 security.debian.org
# ping -c 1 199.232.178.132
# ping -c 1 151.101.130.132
# ping -c 1 2a04:4e42:6c::644
# ping -c 1 2a04:4e42::644
Question
Que faut-il modifier dans le script : /etc/nftables/admin.rules
pour atteindre le but recherché ?
Merci.