NFTABLES Logging

Tags: #<Tag:0x00007feddc22ec88>

Bonjour,

N’ayant pas trouvé de catégorie nftables, je crée ce sujet dans iptables.

Je rencontre un problème de logging avec nftables dont les logs sont injectés dans une base Mysql.
Dans la documentation je trouve :

"% nft add rule filter input tcp dport 22 ct state new log prefix \"New SSH connection: \" accept"

Cependant, si je mets des antislash pour échapper les quote → j’ai une erreur lors de l’implementation.

Si je tente de faire un « log flags all » puis le group de logging j’ai aussi une erreur

nft -f /etc/nftables.conf
/etc/nftables.conf:57:44-48: Error: syntax error, unexpected group, expecting newline or semicolon
                log flags all prefix "Drop" group 2 counter 
                                                         ^^^^^

Sans le « flags all » ça passe.

Si quelqu’un a des compétences dans ce domaine, je suis preneur !

Merci

Bonjour,

De quelle façon tes logs sont-ils injectés dans une base mysql?
Utilises tu ulog?

Oui avec le fichier de configuration ulog.conf
J’ai bien mes logs mais ma syntaxe n’accepte pas les antislash bien que ce soit dans la documentation et l’option « flags full » n’est pas accepté si je spécifie le groupe d’affectation « group 2 » pour moi.

Sinon j’ia bien mes logs dans la base sql mais la plupart des champs (tous les flags de la session tcp) sont NULL evidement

peux-tu nous montrer ta configuration s’il te plait? à la fois coté ulog/ulogd2 mais aussi coté parefeu.

[global]
######################################################################
# GLOBAL OPTIONS
######################################################################


# logfile for status messages
logfile="/var/log/ulog/ulog.log"

# loglevel: debug(1), info(3), notice(5), error(7) or fatal(8) (default 5)
loglevel=5

######################################################################
# PLUGIN OPTIONS
######################################################################

plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_inppkt_NFLOG.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_inppkt_ULOG.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_inpflow_NFCT.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_filter_IFINDEX.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_filter_IP2STR.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_filter_IP2BIN.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_filter_IP2HBIN.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_filter_PRINTPKT.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_filter_HWHDR.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_filter_PRINTFLOW.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_filter_MARK.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_output_SYSLOG.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_output_MYSQL.so"
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_raw2packet_BASE.so"

# this is a stack for logging packet to MySQL
stack=log2:NFLOG,base1:BASE,ifi1:IFINDEX,ip2bin1:IP2BIN,mac2str1:HWHDR,mysql1:MYSQL

[ct2]
hash_enable=0

# Logging of system packet through NFLOG
[log1]
# netlink multicast group (the same as the iptables --nflog-group param)
# Group O is used by the kernel to log connection tracking invalid message
group=0

# packet logging through NFLOG for group 1
[log2]
group=2 # Group has to be different from the one use in log1

[log3]
group=2 # Group has to be different from the one use in log1/log2
numeric_label=1 # you can label the log info based on the packet verdict

[ulog1]
# netlink multicast group (the same as the iptables --ulog-nlgroup param)
nlgroup=1
#numeric_label=0 # optional argument

[nuauth1]
socket_path="/tmp/nuauth_ulogd2.sock"

[emu1]
file="/var/log/ulog/syslogemu.log"
sync=1

[op1]
file="/var/log/ulog/oprint.log"
sync=1

[gp1]
file="/var/log/ulog/gprint.log"
sync=1
timestamp=1

[xml1]
directory="/var/log/ulog/"
sync=1

[json1]
sync=1

[pcap1]
#default file is /var/log/ulogd.pcap
#file="/var/log/ulog/ulogd.pcap"
sync=1

[mysql1]
db="xxxxx"
host="localhost"
user="xxxxxx"
table="ulog"
pass="xxxxxxxx"
procedure="INSERT_PACKET_FULL"

[mysql2]
db="xxxxxx"
host="localhost"
user="xxxxxx"
table="conntrack"
pass="changeme"
procedure="INSERT_CT"

[sys2]
facility=LOG_LOCAL2

[nacct1]
sync = 1
#file = /var/log/ulog/nacct.log

[mark1]
mark = 1

[acct1]
pollinterval = 2

[graphite1]
host="127.0.0.1"
port="2003"
# Prefix of data name sent to graphite server
prefix="netfilter.nfacct"

côté parfeu pas grand chose a montrer :
Les regles accept ne log pas et la derniere regle par defaut Drop.
Je recupere les drops avec : log prefix « Drop » group 2 counter

Tu ne devrais pas conserver le paramétrage de base de ulogd2.
Commente tout ce qui ne concerne pas ton système de log.

hmm cette fois j’ai un message plus parlant : Error: flags and group are mutually exclusive

c’est normal. Tu as deux déclaration de group=2

Supprimer toutes les définition qui ne soit pas la tienne. Les définition présentent par défaut dans le fichier, commentes les.

non c’est le message que j’ai apres avoir fait du tri.
mais il est explicite : pas de possibilité d’avoir flags full accocié a group.
je crois que ça repond a ma question

C’est compliqué de trouver de la DOC sur le logging ulogd ou alors c’est très basique

d’un autre coté je n’utilise pas l’injection directement dans une BDD. Je passe plutôt par un système comme ELK ou Splunk.

oui mais comme j’ai eu besoin de me faire un dashboard en PHP, la mise en forme et tri dans une DB etait beaucoup plus simple