pfSense интеграция со Snort

Snort

Snort - один из самых известных и широко используемых инструментов для обнаружения сетевых атак и вторжений (Intrusion Detection System - IDS). Он представляет собой программное обеспечение с открытым исходным кодом, разработанное для мониторинга сетевого трафика и выявления аномального или вредоносного поведения в сети. Snort использует набор правил для анализа сетевого трафика и обнаружения подозрительных или вредоносных действий, таких как сканирование портов, атаки на уязвимости и другие типы сетевых атак. Он может быть настроен для обнаружения и блокирования таких атак, что делает его полезным инструментом для защиты компьютерных сетей от вторжений и кибератак.

Установка Snort в pfSense

  1. Для установки Snort требуется открыть веб-интерфейс pfSense и перейти System –> Package Manager –> Available Packages.

В строке поиска следует ввести snort, как это показано на рисунке 1.

Рис. 1. Установка Snort

После этих действий Snort отобразится в списке пакетов. Пользователю необходимо нажать Install и дождаться процесса завершения установки, как это показано на рисунке 2.

Рис. 2. Завершение установки Snort

Теперь перейдите Services –> Snort

ННастройка Snort

  1. Первым шагом требуется перейти Services –> Snort.

Начать настройку необходимо с Global Settings:

  • Snort Subscriber Rules - выбирают те пользователи, у кого есть подписка и Snort Oinkmaster Code;
  • Snort GPLv2 Community Rules - требуется поставить “галочку” для Snort GPLv2 Community Rules;
  • Emerging Threats (ET) Rules - требуется поставить “галочку” для Enable ET Open;
  • Sourcefire OpenAppID Detectors - требуется поставить “галочку” для Enable OpenAppID;
  • FEODO Tracker Botnet C2 IP Rules - требуется поставить “галочку”для Enable FEODO Tracker Botnet C2 IP Rules;
  • Rules Update Settings - требуется установить Update Interval равный 1 DAY и время по желанию пользователя.

После всех настроек необходимо нажать кнопку Save.

  1. Следующим шагом требуется перейти в раздел Snort Interfaces и создать интерфейс для сенсора. Настройки оставить на усмотрение пользователя. Если по какой-то причине обновление с официальных серверов snort невозможны, можно воспользоваться альтернативными зеркалами.

Настройка зеркала для правил

Чтобы обновления скачивались не с официального сайта snort необходимо внести изменения в файл:

/usr/local/pkg/snort/snort_defs.inc

Для этого следует открыть файл в режиме редактирования и поменять snort.org на стороннее зеркало, например:

vi /usr/local/pkg/snort/snort_defs.inc

Необходимо найти строчку VRT_DNLD_URL,GPLV2_DNLD_URL,SNORT_OPENAPPID_DNLD_URL и поменять ее на свои значения.

⚠️
snort_defs.inc файл может быть перезаписан на значения по-умолчанию при обновление пакета snort

Ниже приведен пример полного файла с изменениями:

snort_defs.inc
<?php
/*
 * snort_defs.inc
 *
 * part of pfSense (https://www.pfsense.org)
 * Copyright (c) 2006-2023 Rubicon Communications, LLC (Netgate)
 * Copyright (c) 2009-2010 Robert Zelaya
 * Copyright (c) 2013-2022 Bill Meeks
 * All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

global $g;

/* Define some useful constants for Snort */
if (!defined("SNORT_BASEDIR")) {
	define("SNORT_BASEDIR", "/usr/local/");
}
if (!defined("SNORT_BINDIR"))
	define("SNORT_BINDIR", SNORT_BASEDIR . "bin/");
if (!defined("SNORTDIR"))
	define("SNORTDIR", SNORT_BASEDIR . "etc/snort");
if (!defined("SNORTLOGDIR"))
	define("SNORTLOGDIR", "{$g['varlog_path']}/snort");
if (!defined("SNORT_BIN_VERSION")) {
	// Grab the Snort binary version programmatically by
	// running the binary with the command-line argument
	// to display the version information.
	$snortbindir = SNORT_BINDIR;
	$snortver = exec_command("{$snortbindir}/snort -V 2>&1 |/usr/bin/grep Version | /usr/bin/cut -c20-31");

	// Extract just the numbers and decimal point
	// delimiters at the front of the version string.
	$matches = array();
	if (preg_match('/^[^\s]+/', $snortver, $matches)) {
		define("SNORT_BIN_VERSION", $matches[0]);
	}
	else {
		define("SNORT_BIN_VERSION", "2.9.20");
	}
}

if (!defined("SNORT_SID_MODS_PATH"))
	define('SNORT_SID_MODS_PATH', "{$g['vardb_path']}/snort/sidmods/");
if (!defined("SNORT_IPREP_PATH"))
	define("SNORT_IPREP_PATH", "{$g['vardb_path']}/snort/iprep/");
if (!defined('SNORT_APPID_ODP_PATH'))
	define('SNORT_APPID_ODP_PATH', SNORTDIR . "/appid/");
if (!defined('SNORT_APPID_RULES_PATH'))
        define('SNORT_APPID_RULES_PATH', SNORTDIR . "/rules/");

// Rules filenames, download URLs and prefixes.
// Be sure to include the trailing backslash on URLs.
if (!defined("SNORT_ENFORCING_RULES_FILENAME"))
	define("SNORT_ENFORCING_RULES_FILENAME", "snort.rules");
if (!defined("FLOWBITS_FILENAME"))
	define("FLOWBITS_FILENAME", "flowbit-required.rules");
if (!defined("SNORT_RULES_UPD_LOGFILE"))
	define("SNORT_RULES_UPD_LOGFILE", SNORTLOGDIR . "/snort_rules_update.log");
if (!defined("VRT_DNLD_URL"))
	define("VRT_DNLD_URL", "https://snort.comcloud.xyz/rules/");
if (!defined("ET_VERSION"))
	define("ET_VERSION", "2.9.0");
if (!defined("ET_BASE_DNLD_URL"))
	define("ET_BASE_DNLD_URL", "https://rules.emergingthreats.net/"); 
if (!defined("ETPRO_BASE_DNLD_URL"))
	define("ETPRO_BASE_DNLD_URL", "https://rules.emergingthreatspro.com/"); 
if (!defined("SNORT_ET_DNLD_FILENAME"))
	define("SNORT_ET_DNLD_FILENAME", "emerging.rules.tar.gz");
if (!defined("SNORT_ETPRO_DNLD_FILENAME"))
	define("SNORT_ETPRO_DNLD_FILENAME", "etpro.rules.tar.gz");
if (!defined("SNORT_GPLV2_DNLD_FILENAME"))
	define("SNORT_GPLV2_DNLD_FILENAME", "community-rules.tar.gz");
if (!defined("GPLV2_DNLD_URL"))
	define("GPLV2_DNLD_URL", "https://snort.comcloud.xyz/downloads/community/");
if (!defined("SNORT_OPENAPPID_DNLD_URL"))
	define("SNORT_OPENAPPID_DNLD_URL", "https://snort.comcloud.xyz/downloads/openappid/");
if (!defined("SNORT_OPENAPPID_DNLD_FILENAME"))
	define("SNORT_OPENAPPID_DNLD_FILENAME", "snort-openappid.tar.gz");
if (!defined("SNORT_OPENAPPID_RULES_URL"))
	define("SNORT_OPENAPPID_RULES_URL", "https://files.netgate.com/openappid/");
if (!defined("SNORT_OPENAPPID_RULES_FILENAME"))
	define("SNORT_OPENAPPID_RULES_FILENAME", "appid_rules.tar.gz");
if (!defined("SNORT_RULES_UPD_LOGFILE"))
	define("SNORT_RULES_UPD_LOGFILE", SNORTLOGDIR . "/snort_rules_update.log");
if (!defined("VRT_FILE_PREFIX"))
	define("VRT_FILE_PREFIX", "snort_");
if (!defined("GPL_FILE_PREFIX"))
	define("GPL_FILE_PREFIX", "GPLv2_");
if (!defined("ET_OPEN_FILE_PREFIX"))
	define("ET_OPEN_FILE_PREFIX", "emerging-");
if (!defined("ET_PRO_FILE_PREFIX"))
	define("ET_PRO_FILE_PREFIX", "etpro-");
if (!defined("OPENAPPID_FILE_PREFIX"))
	define("OPENAPPID_FILE_PREFIX", "openappid-");
if (!defined("FEODO_TRACKER_DNLD_FILENAME"))
	define("FEODO_TRACKER_DNLD_FILENAME", "feodotracker.tar.gz");
if (!defined("FEODO_TRACKER_DNLD_URL"))
	define("FEODO_TRACKER_DNLD_URL", "https://feodotracker.abuse.ch/downloads/");

?>