Hello,
Je dois pas être futé, mais je bloque depuis des jours sur une tentative de création de règles pour nftables.
Voici ce que je veux faire : faire un script qui tourne tous les jours pour aller choper 2 fichiers de botnets avérés, déclarés par spamhaus. Cette liste étant mise à jour tous les jours, je voudrais injecter cette liste de réseaux dans nftables, dans une table à part, avec une rule toute simple.
En gros et pour prendre un exemple existant, mes tables devraient ressembler à ceci :
table ip filter {
set blacklist-v4 {
type ipv4_addr
flags interval
auto-merge
elements = { 37.44.224.0/22, 80.94.96.0/20,
82.113.0.0/19, 87.238.104.0/21,
87.254.224.0/19, 88.209.64.0/18,
91.199.109.0/24, 176.114.96.0/20,
185.47.116.0/22, 185.162.120.0/22,
185.250.4.0/22, 188.191.136.0/21,
194.9.12.0/23, 195.20.192.0/23,
195.78.0.0/19, 213.133.72.0/21,
213.137.128.0/19 }
}
chain input {
type filter hook input priority 0; policy accept;
iifname lo accept
ct state { established, related } accept
ip saddr @blacklist-v4 drop
ip protocol icmp accept
tcp dport {http, https, ssh} ct state new accept
drop
}
}
Et c’est Element que je souhaiterais rendre dynamique.
Mais chez moi, ça se complique :
root@test:~# nft add table ip ban-ipv4
root@test:~# nft add chain ip ban-ipv4 input { type filter hook input priority 0 \; }
root@test:~# nft list ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy accept;
ct state { established, related } accept
tcp flags != syn ct state new log prefix "DROP : Premier paquet non SYN" drop
tcp flags & (fin | syn) == fin | syn log prefix "DROP : Port scan possible (1)" drop
tcp flags & (syn | rst) == syn | rst log prefix "DROP : Port scan possible (2)" drop
tcp flags & (fin | syn | rst | psh | ack | urg) < fin log prefix "DROP : Port scan possible (3)" drop
tcp flags & (fin | syn | rst | psh | ack | urg) == fin | psh | urg log prefix " DROP : Port scan possible (4)" drop
ct state invalid log prefix "DROP : Etat conntrack invalide " flags all counter packets 46 bytes 2057 drop
iifname "lo" accept
ip protocol icmp accept
ip6 nexthdr ipv6-icmp accept
tcp dport { 2278, 3389, munin } ip saddr { *****,******,***** } accept
counter packets 15792 bytes 849825 drop
}
chain forward {
type filter hook forward priority 0; policy accept;
drop
}
chain output {
type filter hook output priority 0; policy accept;
accept
}
}
table inet fail2ban {
chain INPUT {
type filter hook input priority 100; policy accept;
}
}
table ip ban-ipv4 {
chain input {
type filter hook input priority 0; policy accept;
}
}
Après, je souhaite créer une liste d’IP via un set, mais impossible de le faire :
root@test:~# nft add element ban-ipv4 blackhole { 192.168.1.4, 192.168.1.5 }
Error: Could not process rule: No such file or directory
D’ailleurs, je suis obligé de tout faire en bash car en zsh certaines commandes renvoient des erreurs.
Quelqu’un peut-il me dire comment créer mon set ?