Suricata - File-store location - impossible to change
-
Hello every one,
I am using this version of PfSense 2.4.4-RELEASE-p3 and this version of Suricata Package 4.1.4.
I want to activate the file extraction feature (according to https://suricata.readthedocs.io/en/suricata-4.1.4/file-extraction/file-extraction.html# and https://suricata.readthedocs.io/en/suricata-4.1.4/configuration/suricata-yaml.html#suricata-yaml-file-store).
As explained by documentation, one of the most important part to take into account is the storage (Warning: This will consume a significant amount of disk..), so I mount on the pfsense a remote share on a remote nfs server (/mnt/suricata) and add it to /etc/fstab
here after the df -h command result:
[2.4.4-RELEASE][admin@fw.localdomain]/: df -h Filesystem Size Used Avail Capacity Mounted on /dev/ufsid/5c1d5ebb11c8d12f 29G 3.5G 23G 13% / devfs 1.0K 1.0K 0B 100% /dev /dev/md0 3.4M 108K 3.0M 3% /var/run devfs 1.0K 1.0K 0B 100% /var/dhcpd/dev 192.168.5.245:/home/nfsuser/nfs/www/pfsense 491G 115G 351G 25% /mnt/suricata
objective is to store all files in this location (/mnt/suricata/filestore), and only files
Then if I go to the Suricata GUI, I can only set the "Enable File-Store" to enable, but I cannot specify the location.
So I tried to modify the following yml file /usr/local/etc/suricata/suricata.yaml :# To prune the filestore directory see the "suricatactl filestore # prune" command which can delete files over a certain age. - file-store: version: 2 enabled: yes # Set the directory for the filestore. If the path is not # absolute will be be relative to the default-log-dir. dir: /mnt/suricata/filestore # Write out a fileinfo record for each occurrence of a # file. Disabled by default as each occurrence is already logged # as a fileinfo record to the main eve-log. #write-fileinfo: yes # Force storing of all files. Default: no. force-filestore: yes # Override the global stream-depth for sessions in which we want # to perform file extraction. Set to 0 for unlimited. #stream-depth: 0
and
# File extraction depends on a lot of things to be fully done: # - file-store stream-depth. For optimal results, set this to 0 (unlimited) # - http request / response body sizes. Again set to 0 for optimal results. # - rules that contain the "filestore" keyword. - file-store: enabled: yes # set to yes to enable log-dir: /mnt/suricata/filestore # directory to store the files force-magic: yes # force logging magic on all stored files # force logging of checksums, available hash functions are md5, # sha1 and sha256 #force-hash: [md5] force-filestore: yes # force storing of all files # override global stream-depth for sessions in which we want to # perform file extraction. Set to 0 for unlimited. #stream-depth: 0 #waldo: file.waldo # waldo file to store the file_id across runs # uncomment to disable meta file writing #write-meta: no # uncomment the following variable to define how many files can # remain open for filestore by Suricata. Default value is 0 which # means files get closed after each write #max-open-files: 1000 include-pid: no # set to yes to include pid in file names
When I relaunch suricata, the yaml file attached to the interface seems to but updated but without my location settings:
- file-store: version: 2 enabled: yes log-dir: files force-magic: yes force-hash: [md5] waldo: file.waldo
As you can see log_dir is set to file and a new folder is created in /var/log/suricata/[suricata_interface_name]/filestore
Did I do it in the right way ?
Best regards -
With all the pfSense packages, Suricata and Snort included, it it normal for the package code to completely rewrite its configuration file (in this case,
suricata.yaml
) each time you save a change in the GUI or the service is restarted. The package code stores its configuration info in theconfig.xml
file used by the firewall to store all configuration information. This information is read fromconfig.xml
by the package code and then used to create (as in rewrite) the package configuration file on disk with each GUI save operation or when the service is restarted. Thus any manual changes you make are lost when the file is recreated.There is currently no option for changing the logging root for Suricata. There is a feature request in the pfSense Redmine site for that option, but I have not coded it yet. It will require some extra work because of the way logging was originally implemented.
The only way to make the change you tried permanent is to edit the actual PHP code files that generate the
suricata.yaml
file for each interface. That file is/usr/local/pkg/suricata/suricata_generate_yaml.php
. If you are proficient in PHP coding, you can have a look at the file to find the section that creates the file-store configuration and edit it. However, if you edit the code in that file, it will of course be overwritten the next time you update the Suricata package.I am currently working on the next Suricata update, so I will look into adding the option of specifying a custom file-store logging path to the GUI code.
-
@bmeeks said in Suricata - File-store location - impossible to change:
/usr/local/pkg/suricata/
Ok I understood, so I took a look on the file /usr/local/pkg/suricata/suricata_generate_yaml.php and I did not put any modification but I did an update in the /usr/local/pkg/suricata/suricata_yaml_template.inc:
I replaced the "log-dir:" by "dir:" in file-store section (https://suricata.readthedocs.io/en/suricata-4.1.4/configuration/suricata-yaml.html#suricata-yaml-file-store) and I set my path (yes...harcoded..)
It works ! :)
It will be great to get an option in the GUI in the future :)thank you for your help
-
@karadoc said in Suricata - File-store location - impossible to change:
@bmeeks said in Suricata - File-store location - impossible to change:
/usr/local/pkg/suricata/
Ok I understood, so I took a look on the file /usr/local/pkg/suricata/suricata_generate_yaml.php and I did not put any modification but I did an update in the /usr/local/pkg/suricata/suricata_yaml_template.inc:
I replaced the "log-dir:" by "dir:" in file-store section (https://suricata.readthedocs.io/en/suricata-4.1.4/configuration/suricata-yaml.html#suricata-yaml-file-store) and I set my path (yes...harcoded..)
It works ! :)
It will be great to get an option in the GUI in the future :)thank you for your help
What you did is correct. I did not look before I replied and I did not remember which portions of the
suricata.yaml
are created from the template and which are populated from runtime string variables. The template is used by the PHP code to create the final file. Some parts are literal strings while others are populated by expanding string variables that are set by PHP code in thesuricata_generate_yaml.php
file. -
The option to specify a custom file-store logging directory is now available in the latest 4.1.6_1 version of the Suricata package. See the Release Notes in this post: https://forum.netgate.com/topic/149490/suricata-v4-1-6_1-package-update-release-notes.