Пишем систему динамической защиты ресурсов сети::Журнал СА 6.2006
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

Разбор полетов  

Ошибок опыт трудный

Как часто мы легко повторяем, что не надо бояться совершать ошибки, мол,

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6143
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6856
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4139
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 2978
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3781
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3789
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6283
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3134
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3434
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7246
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10616
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12336
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 13969
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9100
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7053
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5362
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4594
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3402
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3129
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3379
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3000
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Пишем систему динамической защиты ресурсов сети

Архив номеров / 2006 / Выпуск №6 (43) / Пишем систему динамической защиты ресурсов сети

Рубрика: Безопасность /  Механизмы защиты   | Дополнительные материалы

Андрей Бирюков

Пишем систему динамической защиты ресурсов сети

Аудит журналов безопасности операционной системы – неотъемлемая часть работы системного администратора. Если обнаружены попытки проникновения, на них необходимо немедленно отреагировать. Автоматизируем данный процесс с помощью сценария Perl.

Что собираемся защищать

Серверные журналы, проще говоря протоколы, содержат в себе информацию о различных событиях, происходящих в системе. Например, информацию об ошибках приложений или о попытках несанкционированного проникновения в сеть. Автоматизация «реакции» на эти сообщения является важным элементом в обеспечении бесперебойного функционирования всей сети. Конечно, каждый администратор, придя на работу, первым делом должен проверить протоколы своих серверов, не произошло ли что-нибудь в течение ночи или за выходные, и в случае необходимости принять соответствующие меры.

Однако иногда такая реакция может оказаться запоздалой, особенно это касается попыток осуществления несанкционированного входа в систему. Если какие-либо ресурсы вашей сети (например, электронная почта, веб-сервер или доступ по протоколу SSH) опубликованы в Интернете, то вам наверняка приходилось наблюдать записи в протоколах, свидетельствующие о попытке осуществления несанкционированного доступа к ресурсам сети. Конечно, это попытки взлома с помощью «грубой силы» (brute force, подбор пароля по словарю), такой способ, как правило, не приносит результата. Хотя иногда начинающие хакеры с упорством, достойным лучшего применения, «натравливают» словари на учетную запись root.

Но тут следует заметить, что зачастую наш потенциальный противник охотится вовсе не за паролем к учетной записи пользователя, а, к примеру, ему необходимо определить существует ли пользователь с таким именем на сервере или нет. Такая информация будет весьма полезна для спамеров. Ведь на очень многих почтовых серверах имя пользователя совпадает с именем почтового ящика, точнее, с той его частью, которая идет до знака @ (например, user@mydomain.ru), а база корпоративных электронных адресов стоит дороже чем база адресов с бесплатных почтовых серверов. Для того чтобы избежать подобного рода сканирования, можно просто закрыть соответствующие порты от использования снаружи. Но в большинстве современных компаний сотрудники хотят иметь доступ к своей почте из дома или находясь в командировке, поэтому вариант с запретом нам не подходит.

Из всего этого делаем вывод, что нам необходимо средство, которое могло бы обнаруживать и адекватно реагировать на попытки подбора логинов/паролей к ресурсам нашей сети.

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

Попробуем самостоятельно разработать простейшую IDS. В качестве инструментов будем использовать сценарии Perl под ОС Linux.

Как собираемся защищать

В качестве основы для реализации я использовал сценарий, находящийся на cpan.org [1]. Идея довольно проста: через определенные промежутки времени сканируется файл /var/log/messages. В случае обнаружения сообщений, информирующих о попытках несанкционированного доступа с определенного IP-адреса, по протоколу ssh в iptables добавляется строка, блокирующая получение пакетов с данного адреса. Список заблокированных IP-адресов автор предлагает передавать в сообщениях syslog.

Обратите внимание на то, что перед запуском сценария необходимо создать iptables chain Block и поместить текущую конфигурацию iptables в файл /etc/sysconfig/iptables. Тут следует сразу отметить, что пример сценария (см. листинг 1) ориентирован на использование в дистрибутивах Fedora/Red Hat. Для применения с другими дистрибутивами Linux необходимо будет произвести небольшие изменения.

Листинг 1. Сценарий, блокирующий атаки на ssh

#!/usr/bin/perl -w

use Sys::Syslog; # модуль для работы с syslog

$max=10; # максимально разрешенное число попыток

# файл журнала, с которым мы и работаем

$watchfile=         '/var/log/messages';

# путь к iptables (для разных дистрибутивов Linux он может различаться)

$iptables=          '/sbin/iptables';

# тоже iptables, но после сохранения изменений

$iptables_save=     '/sbin/iptables-save';

# исходные значения iptables

$iptables_restore=  '/sbin/iptables-restore';

# файл конфигураций iptables

$cfgfile=           '/etc/sysconfig/iptables';

open(LFILE, "<$watchfile"); # открываем лог на чтение

%tries=();      # количество попыток для IP

%blocked=();    # уже заблокированных IP

# восстанавливаем конфигурацию, это нужно для того, чтобы «устаревшие» IP-адреса не оставались запрещенными

`$iptables_restore < $cfgfile`;

# получаем уже заблокированные IP-адреса из iptables

open(IPTPIPE, "$iptables -L -v -n|");

$blockChain=0;

while (<IPTPIPE>){

  $blockChain=1 if (/^Chain block \(\d+ references\)$/);

  next unless $blockChain;

  last if (/^$/ );

  $blocked{$1}=1 if (/(\d+\.\d+\.\d+\.\d+)/);

}

close IPTPIPE;

# преобразуем в строку

$blk_ips=join(", ",keys(%blocked));

# отправляем сообщение syslog

syslog('warning',"sshwatch.pl started. currently blocked ip's are: $blk_ips");

# просматриваем /var/log/messages

while (1) {

  for ($curpos = tell(LFILE); $_ = <LFILE>; $curpos = tell(LFILE)) {

    # искомая строка

    if (/sshd\[\d+\]: Failed password for .+ from \D+(\d+\.\d+\.\d+\.\d+)/) {

      $ip=$1;

    next if defined($blocked{$ip});

      $tries{$ip}+=1; #увеличиваем счетчик

      if ($tries{$ip} eq $max){

       # если превышено максимальное значение,

       # пакеты с данного адреса должны быть заблокированы

         `$iptables -I block -s $ip -j DROP ; $iptables_save > $cfgfile`;

         $blocked{$ip}=1;

         # снова сообщение syslog

         syslog('warning', "IP $ip has been blocked !");

      }

    }

  }

  sleep 1;

  seek(LFILE, $curpos, 0);

}

Как видите, сценарий довольно прост, мы всего лишь отслеживаем нужные строки в файле и реагируем на них заданным образом, блокируя доступ к сети для IP-адреса атакующего.

Расширяем функциональность

Попробуем расширить функциональность сценария, написанного нашим коллегой.

Во-первых, допустим, у нас открыты наружу не только ssh, но и, к примеру, POP3.

И во-вторых, рассмотрим различные варианты построения сети: как с использованием демилитаризованной зоны (DMZ), так и без нее. Суть DMZ заключается в том, что она не входит непосредственно ни во внутреннюю, ни во внешнюю сеть и доступ к ней может осуществляться только по заранее заданным правилам межсетевого экрана. В DMZ нет пользователей – там располагаются только серверы. Демилитаризованная зона, как правило, служит для предотвращения доступа из внешней сети к хостам внутренней сети за счет выноса из локальной сети в особую зону всех сервисов, требующих доступа извне. Фактически получается, что эта зона будет являться отдельной подсетью с публичными адресами, защищенной (или отделенной) от публичных и корпоративных сетей межсетевыми экранами.

При попытке получения доступа к почтовому ящику по протоколу POP3, в случае неверного указания логина/пароля получаем сообщение:

Apr 22 21:25:24 MexBSD qpopper[782]: [AUTH] Failed attempted

login to admin from host (TestBSD) 172.29.1.19

Здесь в качестве POP3-демона использовался qpopper, но и для других серверов вид сообщения будет аналогичен.

По поводу топологии сети будем предполагать, что у нас имеется единственный сервер и необходимо блокировать пакеты, непосредственно приходящие на него.

Также сценарий, предназначенный для защиты от подбора протокола POP3, применялся на FreeBSD, поэтому вместо iptables воспользуемся утилитой ipfw, с помощью которой создаются правила фильтрации. Для запрета доступа у ipfw существуют директивы deny и reject.

Директива deny сводит к минимуму риск определенных атак типа «отказ в обслуживании» и усложняет взломщику задачу сканирования системы. В то же время директива reject позволяет скрыть факт наличия брандмауэра, так как она заставляет систему вернуть отправителю сообщение о том, что хост или порт недоступен (как если бы маршрутизатор не смог найти хост или на нем отсутствует приложение, контролирующее заданный порт).

В нашем случае предпочтительнее будет указать директиву deny, потому что она заставляет систему игнорировать пакет, чтобы отправитель думал, будто пакет потерялся или хост-адресат выключен. Я бы еще добавил, что такая реакция сильно замедляет автоматическое сканирование.

Например, команда, добавляющая правило, которое запрещает доступ к нашему серверу 172.29.1.1 для атакующего хоста 172.29.1.19, будет выглядеть следующим образом:

ipfw add deny ip from 172.29.1.19 to 172.29.1.1

В отсутствии явно указанного индекса (положения правила в списке), который присваивается каждому правилу, он будет присвоен автоматически, причем значение этого индекса будет на 100 больше чем номер самого последнего правила, за исключением правила по умолчанию (имеет номер 65535).

Не забудьте проверить список настроек ipfw с помощью команды «ipfw list». Это необходимо для того, чтобы ваше запрещающее правило не лишилось смысла из-за стоящего перед ним уже есть разрешающего. В случае если у вас уже используются разрешающие правила для данного трафика, проследите за тем, чтобы запрет оказался выше по списку.

Можно, конечно, ограничиться только запретом tcp, но лучше, чтобы все выглядело, как будто сервер не просто недоступен, а выключен. Такого результата легче добиться, запретив любой IP-трафик. Вообще утилита ipfw обладает довольно большими возможностями, подробно ознакомиться с которыми можно в справочнике [2].

Итак, мы определились с тем, какие записи в журнале событий нам необходимо просматривать и как на них реагировать. Для разнообразия будем список заблокированных IP-адресов с указанием времени блокирования отправлять на почту системному администратору. Хотелось бы сразу предупредить, что этих писем будет довольно много и поэтому необходимо заранее создать в почтовом клиенте соответствующую папку и правило для перенаправления писем.

Листинг 2. Сценарий, блокирующий атаки на POP3

#!/usr/bin/perl -w

use Mail::Sendmail;

# максимально разрешенное число попыток

$max=10;

# файл журнала, с которым мы и работаем

$watchfile=         '/var/log/messages';

$ipfw=          '/sbin/ipfw';

# то же ipfw но после сохранения изменений

$ipfw_save=     '/sbin/ipfw_save';

# исходные значения ipfw

$ipfw_restore=  '/sbin/ipfw-restore';

# файл конфигураций ipfw

$cfgfile=           '/etc/sysconfig/ipfw'

# открываем лог на чтение

open(LFILE, "<$watchfile");

# количество попыток для IP

%tries=();

# уже заблокированных IP

%blocked=();

# восстанавливаем конфигурацию, это нужно для того, чтобы «устаревшие» IP-адреса не оставались запрещенными

`$ipfw_restore < $cfgfile`;

`$ipfw list > out`;

# получаем уже заблокированные IP-адреса из iptables

open(IPTPIPE, "out");

$blockChain=0;

while (<IPTPIPE>){

  $blockChain=1 if (/^Chain block \(\d+ references\)$/);

  next unless $blockChain;

  last if (/^$/ );

  $blocked{$1}=1 if (/(\d+\.\d+\.\d+\.\d+)/);

}

close IPTPIPE;

# просматриваем /var/log/messages

while (1) {

  for ($curpos = tell(LFILE); $_ = <LFILE>; $curpos = tell(LFILE)) {

    # искомая строка

   if (/qpopper\[\d+\]: Failed attempted login to .+ from \D+(\d+\.\d+\.\d+\.\d+)/) {

      $ip=$1;

    next if defined($blocked{$ip});

      $tries{$ip}+=1; #увеличиваем счетчик

      if ($tries{$ip} eq $max){

       # если превышено максимальное значение,

       # пакеты с данного адреса должны быть заблокированы

         `$ipfw deny $ip; $ipfw_save > $cfgfile`;

         $blocked{$ip}=1;

         # отправляем письмо

    %mail = ( To      => 'admin@test.local',

    From    => 'firewall@test.local',

    Message => "IP $ip has been blocked !",

          SMTP    => 'smtp.mail.ru'

           );

    sendmail(%mail) or die $Mail::Sendmail::error;

      }

    }

  }

  sleep 1;

  seek(LFILE, $curpos, 0);

}

Пример в целом аналогичен предыдущему, но содержит ряд отличий, свойственных утилите ipfw и формату тех записей, которые ищет данный сценарий.

Защита по периметру

Мы рассмотрели упрощенный случай топологии сети, когда у нас имеется сервер, не защищенный какими-либо дополнительными аппаратными брандмауэрами, и единственной защитой для него являются те средства, которые на нем установлены. Но очень часто сеть имеет более сложную структуру. Ресурсы, доступ к которым необходим как из внутренней сети, так и из Интернета, помещают в демилитаризованную зону. Примерная топология сети на рис. 1. Рассмотрим случай, когда наш почтовый сервер находится в этой DMZ. Как уже упоминалось, к нему есть доступ из глобальной сети. При такой топологии лучше всего отсекать трафик атакующего еще на брандмауэре.

Рисунок 1. Размещение серверов в DMZ

Рисунок 1. Размещение серверов в DMZ

Будем предполагать, что в качестве межсетевого экрана у нас используется оборудование Cisco, тогда для осуществления блокирования нам необходимо воспользоваться командами Cisco IOS.

Приведем необходимый набор команд для доступа к консоли и изменения списка доступа. Приводить здесь команды для настройки NAT и связи с ACL я не буду, так как это не является темой статьи, и предполагаю, что у вас уже всё настроено и нормально функционирует. Приведу лишь те команды, которые необходимо будет передавать с помощью Perl-сценария. В моем примере использовался скромный PIX 501, однако для других моделей существенных различий не будет.

login as: user

Sent username "user"

user@1.1.1.1"s password:

Secure Access

Type help or "?" for a list of available commands.

ipfw add deny ip from 172.29.1.19 to 172.29.1.1

Password: ********

pixfirewall# configure terminal

Так как если в список доступа просто добавить запись, то она будет поставлена в конец, а в нашем случае это запрещающая запись, то соответственно ее добавление будет бессмысленно и не приведет к желаемому результату. Поэтому нам необходимо сначала убрать старый список доступа, а потом уже прописать новый. Естественно, что кроме наших записей, запрещающих трафик с определенных узлов там должны быть еще другие записи, обеспечивающие нормальный доступ к ресурсам сети.

В нашем случае необходимо лишь заблокировать трафик с конкретного хоста (2.2.2.2). Запись, которая осуществляет данные действия, мы разместим в начале нашего нового ACL. Реализовать все эти действия можно следующим образом:

pixfirewall(config)# no access-list 110

pixfirewall(config)# access-list 110 deny ip host 2.2.2.2 host 1.1.1.254

pixfirewall(config)# access-list 110 permit ip 172.16.0.0 0.0.255.255 1.1.1.0 0.0.0.255

pixfirewall(config)# end

Не забудьте, что по умолчанию действует неявный запрет, то есть все то, что не разрешено, будет запрещено.

Изменения в конфигурацию внесены, остается только сохранить их и отключиться.

pixfirewall# write mem

pixfirewall# logout

Такие действия нужны для того, чтобы закрыть атакующему доступ к ресурсам нашей сети.

Теперь можно приступать к написанию сценария, реализующего эти действия на практике. Так как исходный текст сценария подвергается существенным изменениям, приведем его полностью.

use Net::Telnet ();

use Mail::Sendmail;

#!/usr/bin/perl -w

use Mail::Sendmail;

# максимально разрешенное число попыток

$max=10;

# файл журнала, с которым мы и работаем

$watchfile=         '/var/log/messages';

# открываем лог на чтение

open(LFILE, "<$watchfile");

# количество попыток для IP

%tries=();

# уже заблокированных IP

%blocked=();

# получаем доступ к консоли

    $t = new Net::Telnet ;

    $hostname="1.1.1.254";

    $t->open($hostname);

    $t->waitfor('/login:.*$/')

       or die "bad login: ", $t->lastline;

    $t->print("user");

    $t->waitfor('/Password:.*$/')

       or die "bad password: ", $t->lastline;

    $t->print("password");

    $t->waitfor('/pixfirewall>:.*$/')

       or die "No user mode: ", $t->lastline;

    $t->print("enable");

    $t->waitfor('/login:.*$/')

       or die "bad login: ", $t->lastline;

    $t->print("user");

    $t->waitfor('/Password:.*$/')

       or die "bad password: ", $t->lastline;

    $t->print("password");

    $t->waitfor('/pixfirewall#:.*$/')

       or die "No router privilege mode: ", $t->lastline;

     $t->print("configure terminal");

    $t->waitfor('/# pixfirewall(config):.*$/')

       or die "No router configure mode: ", $t->lastline;

     $t->print("no access list 110");

# просматриваем /var/log/messages

while (1) {

  for ($curpos = tell(LFILE); $_ = <LFILE>; $curpos = tell(LFILE)) {

    # искомая строка

    if (/sshd\[\d+\]: Failed password for .+ from \D+(\d+\.\d+\.\d+\.\d+)/) {

      $ip=$1;

    next if defined($blocked{$ip});

      $tries{$ip}+=1; # увеличиваем счетчик

      if ($tries{$ip} eq $max){

       # если превышено максимальное значение,

       # пакеты с данного адреса должны быть заблокированы

         $blocked{$ip}=1;

         # добавляем в список доступа запись о запрете

         # доступа с IP

         $t->waitfor('/# pixfirewall(config):.*$/')

         or die "No router configure mode: ", $t->lastline;

         $t->print("access list 110 deny ip host $ip host 1.1.1.254");

         # отправляем письмо

    %mail = ( To      => 'admin@test.local',

    From    => 'firewall@test.local',

    Message => "IP $ip has been blocked !",

           SMTP    => 'smtp.mail.ru'

           );

    sendmail(%mail) or die $Mail::Sendmail::error;

      }

    }

  }

  sleep 1;

  seek(LFILE, $curpos, 0);

}

$t->waitfor('/# pixfirewall(config):.*$/')

       or die "No router configure mode: ", $t->lastline;

    $t->print("access list 110 permit ….");

# здесь добавляем другие записи в список доступа

$t->waitfor('/# pixfirewall(config):.*$/')

       or die "No router configure mode: ", $t->lastline;

    $t->print("end");

$t->waitfor('/# pixfirewall#:.*$/')

       or die "No router configure mode: ", $t->lastline;

    $t->print("write mem");

$t->waitfor('/# pixfirewall#:.*$/')

       or die "No router configure mode: ", $t->lastline;

    $t->print("logout");

    $result=$t->getline;

Перед тем как начать поиск попыток проникновения в сеть, подключаемся к консоли брандмауэра с помощью протокола Telnet. Как и в предыдущих сценариях, мы ищем вхождения искомых строк, и в случае, если количество попыток проникновения превосходит заданное значение, добавляем запись в список доступа. Затем, после того как все «новые» записи добавлены, мы добавляем основные, разрешающие записи, сохраняем измененную конфигурацию и отключаемся от консоли. Конечно, кому-то такой подход может показаться не слишком удобным, так как необходимо вносить изменения в конфигурацию работающего устройства, однако такой вариант позволяет отсекать вредоносный трафик еще до того, как он проникает в вашу локальную сеть. Естественно необходимо позаботиться о безопасности доступа по Telnet, разрешив подключения только определенным узлам из внутренней сети [3].

Автоматизируем запуск

После написания сценария нам необходимо автоматизировать его работу. Сделаем это с помощью cron. По поводу работы с данной утилитой и ее синтаксиса написано уже достаточно, поэтому приведу лишь несколько примеров. Прежде всего рекомендовую не запускать сценарий слишком часто, по крайней мере не каждые пять минут. Это связано с тем, что на активно работающем сервере, как правило, файл messages имеет весьма внушительный размер, и поиск текстовых вхождений может существенно нагрузить систему. К тому же слишком частые обращения к консоли сетевого оборудования тоже не очень желательны. Я бы рекомендовал запуск сценария каждый час. Задать выполнение сценария по такому расписанию можно следующим образом:

@hourly /tmp/pop3watch.pl

Итак, мы рассмотрели различные сценарии, позволяющие обнаружить и адекватно реагировать на попытки несанкционированного доступа к ресурсам сети. Конечно, приведенные способы поиска можно расширить, например, искать информацию не только о попытках проникновения, но и о неисправностях и сбоях, возникающих в системе, например, в случае аварийного завершения работы какого-либо демона или сценария. Поэтому данный сценарий может оказаться полезен и при решении других задач автоматизации системного администрирования.

Использованные источники:

  1. http://cpan.org/authors/id/D/DR/DRAGOS/sshwatch-0.01.pl – исходный сценарий.
  2. Родерик Смит. Полный справочник по FreeBSD.
  3. Основы организации сетей Cisco. Справочное руководство.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru