ipset create track_hosts hash:net,net family inet hashsize 262144 maxelem 333000 counters comment
Se você ficar sem entradas em um mês, aumente o número 333000 para um número maior.
iptables -t raw -I PREROUTING 1 -j SET --add-set track_hosts src,dst
Você também pode adicionar -i eth0 entre o 1 e o -j para limitá-lo a 1 adaptador de rede.
ipset save track_host
terá imediatamente resultados
add track_hosts 192.168.3.220,192.168.3.2 packets 1 bytes 60
add track_hosts 192.168.3.251,192.168.3.2 packets 1 bytes 1356
add track_hosts 192.168.3.248,233.89.188.1 packets 1 bytes 186
add track_hosts 192.168.3.222,192.168.3.2 packets 1 bytes 40
add track_hosts 192.168.3.248,239.255.255.250 packets 1 bytes 441
add track_hosts 192.168.3.249,255.255.255.255 packets 1 bytes 186
Estatísticas não são boas se não forem salvas entre as reinicializações.
Se o seu roteador tiver systemd:
note alterar o caminho do arquivo para atender às suas necessidades -f /src/all.txt
[Unit]
Description=IP sets for iptables
After=ufw.service
Before=network.target
Before=iptables.service
Before=webmin-iptables.service
AssertPathExists=/src/all.txt
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=-/bin/echo 'Loading ipset sets'
ExecStart=/sbin/ipset restore -f /src/all.txt
ExecStop=/sbin/ipset save -f /src/all.txt
ExecStartPost=-/bin/echo 'Saving ipsets to disk'
#ExecReload=/usr/libexec/ipset/ipset.start-stop reload
# Save current ipset entries on stop/restart.
# Value: yes|no, default: no
# Saves all ipsets to /etc/sysconfig/ipset if ipset gets stopped
Environment=IPSET_SAVE_ON_STOP=yes IPSET_SAVE_ON_RESTART=no
ReadWriteDirectories=/src
NoNewPrivileges=yes
[Install]
WantedBy=basic.target
Por favor, mude o caminho primeiro. Restaurar o iptables pode ser feito desta maneira
[Unit]
Description=IPtables load rules
DefaultDependencies=no
After=ipset.service network-pre.target
Before=network-online.target network.target
[Service]
Type=oneshot
ExecStartPre=-/bin/echo 'Starting iptables'
ExecStart=/usr/sbin/iptables-restore /etc/webmin/firewall/iptables.save
ExecReload=/usr/sbin/iptables-restore /etc/webmin/firewall/iptables.save
#ExecStop=/usr/lib/systemd/scripts/iptables-flush
ExecStopPost=-/bin/echo 'Flushing iptables'
RemainAfterExit=yes
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW
[Install]
WantedBy=basic.target
Agora, tudo o que resta em um cronjob para
ipset save -f /somewhere/month-year && ipset --flush track_hosts
A primeira metade salva as estatísticas, e a segunda metade as limpa para começar o novo mês. Claro, você não precisa flush se não quiser.
Você pode analisar a saída da maneira que quiser assim.
ipset save track_hosts|sed 's/.*track_hosts //'|sed 's/,/ -> /'|sed 's/packets [0-9].//'
cat month-year|sed 's/.*track_hosts //'|sed 's/,/ -> /'|sed 's/packets [0-9].//'
Os resultados finais:
192.168.3.220 -> 192.168.3.2 bytes 60
192.168.3.2 -> 239.255.255.253 bytes 105
192.168.3.251 -> 192.168.3.2 bytes 1356
192.168.3.248 -> 233.89.188.1 bytes 186
192.168.3.222 -> 192.168.3.255 bytes 78
216.17.8.11 -> 192.168.3.2 bytes 40
192.168.3.222 -> 192.168.3.2 bytes 40