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

> Установка и настройка IDS Snort на pfSense в Яндекс Облаке - активация правил обнаружения вторжений, конфигурация интерфейсов и анализ оповещений

Source: https://opennix.org/docs/yc/pfsense/snort-integration/

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

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

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

![Установка Snort через менеджер пакетов pfSense](/img/pf-snort-pkg.webp)
<p style="text-align: center;">Рис. 1. Установка Snort</p>

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

![Завершение установки Snort в pfSense](/img/pf-snort-install-done.webp)
<p style="text-align: center;">Рис. 2. Завершение установки Snort</p>

## Настройка 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` - требуется поставить “галочку”для E`nable FEODO Tracker Botnet C2 IP Rules`;
* `Rules Update Settings` - требуется установить `Update Interval` равный `1 DAY` и время по желанию пользователя. 

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

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

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

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

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

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

```shell
vi /usr/local/pkg/snort/snort_defs.inc
```
Необходимо найти строчку   `VRT_DNLD_URL`,`GPLV2_DNLD_URL`,`SNORT_OPENAPPID_DNLD_URL` и поменять ее на свои значения.

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

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

```php
<?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/");

?>

```


