Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Les logs ne parsent pas #2

Closed
flaowflaow opened this issue Mar 21, 2024 · 8 comments
Closed

Les logs ne parsent pas #2

flaowflaow opened this issue Mar 21, 2024 · 8 comments

Comments

@flaowflaow
Copy link

flaowflaow commented Mar 21, 2024

Hello,
Thanks a lot for this amazing job !
Je me permets de continuer en français.
Mes logs contiennent des valeurs avec et sans guillemets et ne se parsent pas.
Auriez vous des pistes ?
J'ai un stormshield en v 4.4.1 et graylog 5.2.5
Cordialement

@s0p4L1n3
Copy link
Owner

s0p4L1n3 commented Mar 21, 2024

Hello,

Pouvez vous me retourner le contenu du champ message et/ou copier un des message du Stream stormshield.

Mes champs messages correspondent à ceci, peut être que cela diffère pour la version 4.4.1.

  • logtype filter
id=firewall time="2024-03-21 16:16:35" fw="gw-wan.iss.lan" tz=+0100 startime="2024-03-21 16:16:34" pri=5 confid=01 slotlevel=2 ruleid=20 rulename="block_all" srcif="Ethernet1" srcifname="in" ipproto=udp dstif="Ethernet0" dstifname="out" proto=udp src=192.168.1.228 srcport=55691 srcportname=ephemeral_fw_udp srcname=CLI-LAB-01 srcmac=xx:xx:xx:xx:xx:xx dst=xxx.xxx.xxx.xxx dstport=443 dstname=passwordsleakcheck-pa.googleapis.com dstcontinent="na" dstcountry="us" ipv=4 sent=0 rcvd=0 duration=0.00 action=block logtype="filter"
  • logtype connection
id=firewall time="2024-03-21 16:16:35" fw="gw-wan.lab.lan" tz=+0100 startime="2024-03-21 16:15:43" pri=5 confid=01 slotlevel=2 ruleid=12 rulename="web_general" srcif="Ethernet1" srcifname="in" ipproto=tcp dstif="Ethernet0" dstifname="out" proto=https src=192.168.1.228 srcport=30556 srcportname=ephemeral_fw_tcp srcname=CLI-LAB-01 srcmac=xx:xx:xx:xx:xx:xx dst=xxx.xxx.xxx.xxx dstport=443 dstportname=https dstname=gitlab.hosted-by-discourse.com dstcontinent="na" dstcountry="us" modsrc=xxx.xxx.xxx.xxx modsrcport=30556 origdst=xxx.xxx.xxx.xx origdstport=443 ipv=4 sent=2927 rcvd=3981 duration=50.56 action=pass logtype="connection"

Si vous allez dans Pipeline > Manage Rules > Stormshield Parser:

rule "Stormshield Parser"

when
has_field("message") AND contains(to_string($message.source),"firewallname.lab.lan")

then
set_fields(
		fields:
				key_value(
					value: to_string($message.message),
					trim_value_chars: "\"",
					trim_key_chars:"",
					delimiters:" ",
					kv_delimiters:"="
					)
		);
end

Je m'étais aidé de ce guide pour réaliser le pipeline, et j'avais testé en fonction de ce que ça me ressortais en champ.

@flaowflaow
Copy link
Author

flaowflaow commented Mar 21, 2024

Merci pour votre réactivité :)
Voici un des messages contenus dans le stream

{ "gl2_accounted_message_size": 757, "level": 6, "gl2_remote_ip": "192.168.200.254", "gl2_remote_port": 17966, "streams": [ "65fc25b921652d4dcc5c1fd2" ], "gl2_message_id": "01HSGTBMH80000V1N24QZ0X5C2", "source": "SN310A17I4879A7", "message": "id=firewall time=\"2024-03-21 16:34:01\" fw=\"SN310A17I4879A7\" tz=+0100 startime=\"2024-03-21 16:32:04\" pri=5 confid=01 slotlevel=2 ruleid=2 rulename=\"18d651c99f3_2\" srcif=\"vlan0\" srcifname=\"VL61_PRIVE\" ipproto=tcp dstif=\"Ethernet4\" dstifname=\"out_4g\" proto=http src=192.168.61.101 srcport=55346 srcportname=ephemeral_fw_tcp srcmac=f8:e4:e3:13:b8:34 dst=34.107.221.82 dstport=80 dstportname=http dstcontinent=\"na\" dstcountry=\"us\" dstiprep=\"googlepublicips\" modsrc=192.168.0.112 modsrcport=55346 origdst=34.107.221.82 origdstport=80 ipv=4 sent=640 rcvd=596 duration=116.40 action=pass logtype=\"connection\"", "gl2_source_input": "65fc25b921652d4dcc5c1fd5", "application_name": "asqd", "facility_num": 1, "gl2_source_node": "aa515546-f59d-44e7-a542-afcaf031d887", "_id": "75752200-e798-11ee-9187-000c2965ba50", "facility": "user-level", "timestamp": "2024-03-21T15:34:01.000Z" }

J'ai adapté la rule de pipeline ainsi :

rule "Stormshield Parser"

when
has_field("message") AND contains(to_string($message.source),"SN310A17I4879A7")

then
set_fields(
		fields:
				key_value(
					value: to_string($message.message),
					trim_value_chars: "\"",
					trim_key_chars:"",
					delimiters:" ",
					kv_delimiters:"="
					)
		);
end

Nos logs semblent être structurés de la même manière.

@flaowflaow
Copy link
Author

flaowflaow commented Mar 21, 2024

Une capture serait peut être plus lisible pour le rendu sur graylog du Stream

image

@s0p4L1n3
Copy link
Owner

Pour éliminer une autre piste déjà,
Est-ce que dans Système > Configuration tu as cet ordre là ?

image

@flaowflaow
Copy link
Author

image
Tiercé pas gagnant je fais la modifs et jevous dis

@flaowflaow
Copy link
Author

Parfaiiiiit !! Merci beaucoup pour votre aide !

@s0p4L1n3
Copy link
Owner

Super, je me doutais que ça venais de là car j'ai galéré au début et il faut le savoir :)
Si vous faite éxecuter les pipeline avant même que graylog ne processe les message du stream, ça ne peut pas marcher.
Il faut d'abord que les messages soient lu, ensuite le stream puis le pipeline passe par dessus tout ça ;)

Vous verrez les Dashboard sont basiques je n'ai pas été dans le détails mais ait fournit un minimum d'infos pour se dépatouiller.

Il faut que je prenne le temps d'aller plus loin sur mon lab chez moi pour créer des Dashboard plus sophistiquer avec + d'infos.

@s0p4L1n3
Copy link
Owner

Je l'ajoute au prérequis du README

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants