LINUX-сервер пошаговые инструкции инсталляции и настройки - Бруй В. В. , Карлов С. В
..pdf
Глава 18. PortSentry – программное обеспечение для атоматического ограничения доступа... |
241 |
#192.168.0.0/16
#192.168.2.1/32
#Etc.
#If you don't supply a netmask it is assumed to be 32 bits.
127.0.0.0/8
0.0.0.0
172.16.181.100
172.16.181.101
192.168.14.85
ЗАМЕЧАНИЕ В данном конфигурационном файле строка 0.0.0.0 запрещает PortSentry блокировать
– в случае сканирования портов с фальсифицируемого IP-адреса 0.0.0.0 – доступ к вашей системе со всех возможных адресов.
Шаг 2
Установите права доступа к файлу и определите его владельцем пользователя root:
[root@www tmp]# chmod 600 /etc/portsentry/portsentry.ignore [root@www tmp]# chown 0.0 /etc/portsentry/portsentry.ignore
Конфигурационный файл /etc/portsentry/portsentry.modes
Файл служит для определения режима работы PortSentry. В версии portsentry-1.1 доступны следующие шесть опций, предназначенных для задания режимов работы:
•tcp – основной режим обнаружения сканирования для протокола TCP;
•udp – основной режим обнаружения сканирования для протокола UDP;
•stcp – «незаметный» режим обнаружения сканирования для протокола TCP;
•sudp – «незаметный» режим обнаружения сканирования для протокола UDP;
•atcp – расширенный «незаметный» режим обнаружения сканирования для протокола TCP;
•audp – расширенный «незаметный» режим обнаружения сканирования для протокола UDP. Одновременно для каждого протокола (TCP или UDP) может быть запущен только один режим. На-
пример, совместно не смогут работать два режима для TCP протокола – tcp и atcp. Для полного использования своих возможностей программу PortSentry лучше запускать в режимах atcp и audp. Более подробную информацию о режимах обнаружения сканирования можно найти в файлах readme.install и readme.stealth в корневом каталоге исходных кодов PortSentry.
Для задания режима работы PortSentry выполните простые операции.
Шаг 1
Создайте файл /etc/portsentry/portsentry.modes, содержащий следующие строки:
#These are the available startup modes for PortSentry. Uncomment the
#modes you want PortSentry to run in. For information about each
#available mode, please see the PortSentry documentation.
#
#Normal TCP/UDP scanning: #tcp
#udp
#Steal TCP/UDP scanning: #stcp
#sudp
#Advanced Stealth TCP/UDP scanning: atcp
audp
Шаг 2
Установите права доступа к файлу и определите его владельцем пользователя root:
[root@www tmp]# chmod 600 /etc/portsentry/portsentry.modes [root@www tmp]# chown 0.0 /etc/portsentry/portsentry.modes
242 |
Часть 4. Программное обеспечение для ограничения доступа к серверу... |
Файл инициализации /etc/init.d/portsentry
Для автоматического запуска PortSentry при загрузке системы выполните следующие операции.
Шаг 1
Создайте файл /etc/init.d/portsentry, содержащий следующие строки:
#!/bin/bash
#This shell script takes care of starting and stopping the Port Scan Detector.
#chkconfig: 345 98 05
#description: PortSentry Port Scan Detector is part of the Abacus Project \
# |
suite of tools. The Abacus Project is an initiative to re- |
lease \ |
|
# |
low-maintenance, generic, and reliable host based intru- |
sion \ |
|
# |
detection software to the Internet community. |
# |
|
#processname: portsentry
#config: /etc/portsentry/portsentry.conf
#pidfile: /var/run/portsentry.pid
#Source function library.
. /etc/rc.d/init.d/functions
#Source networking configuration.
. /etc/sysconfig/network
#Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
RETVAL=0
prog="PortSentry"
start() { SENTRYDIR=/etc/portsentry
if [ -s $SENTRYDIR/portsentry.modes ] ; then modes=`cut -d "#" -f 1 $SENTRYDIR/portsentry.modes` else
modes="tcp udp" fi
for i in $modes ; do
action "Starting $prog -$i: " /usr/sbin/portsentry -$i RETVAL=$?
done
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/portsentry return $RETVAL
}
stop() {
echo -n "Shutting down $prog: " killproc portsentry
RETVAL=$? echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/portsentry return $RETVAL
}
# See how we were called. case "$1" in
Глава 18. PortSentry – программное обеспечение для атоматического ограничения доступа... |
243 |
start)
start
;;
stop)
stop
;;
restart|reload) stop start RETVAL=$?
;;
condrestart)
[ -f /var/lock/subsys/portsentry ] && restart || :
;;
status)
status portsentry
;;
*)
echo "Usage: portsentry {start|stop|restart|reload|condrestart|status}"
exit 1
esac
Шаг 2
Сделайте файл исполняемым и определите его владельцем пользователя root:
[root@www /]# chmod 700 /etc/irit.d/portsentry [root@www /]# chown 0.0 /etc/irit.d/portsentry
Шаг 3 Создайте необходимые символьные ссылки:
[root@www /]# chkconfig --add portsentry [root@www /]# chkconfig --level 345 portsentry on
Тестирование PortSentry
Для тестирования правильности установки настройки PortSentry необходимо выполнить следующие операции.
Шаг 1
Запустите PortSentry:
[root@www /]# /etc/init.d/portsentry start
Starting PortSentry [OK]
Шаг 2
Просканируйте порты системы, на которой установлен PortSentry, с помощью программы-сканера, например, Nmap:
[root@drwalbr /]# nmap -O www.dymatel.und
Starting nmap V. 2.54BETA34 ( www.insecure.org/nmap/ ) Insufficient responses for TCP sequencing (0), OS detection may be less accurate
Interesting ports on www.dymatel.und (172.16.181.100): (The 1553 ports scanned but not shown below are in state:
closed) |
|
|
Port |
State |
Service |
22/tcp |
open |
ssh |
80/tcp |
open |
http |
443/tcp |
open |
https |
Remote operating system guess: Linux Kernel 2.4.0 - 2.4.18 (X86)
Nmap run completed -- 1 IP address (1 host up) scanned in 8 seconds
244 |
Часть 4. Программное обеспечение для ограничения доступа к серверу... |
В нашем случае сканируется сервер www.dymatel.und c рабочей станции drwalbr.und. При этом также определяется тип операционной системы (опция -O). Для большей наглядности сервер был запущен со стандартным ядром версии 2.4.18, входящий в комплект поставки дистрибутива ASPLinux 7.3. Система сетевой защиты была выключена.
Шаг 3
Просканируйте порты системы, на которой установлен PortSentry, повторно:
[root@drwalbr /]# nmap -O www.dymatel.und
Starting nmap V. 2.54BETA34 ( www.insecure.org/nmap/ ) Note: Host seems down. If it is really up, but blocking our ping probes, try -P0
Nmap run completed -- 1 IP address (0 hosts up) scanned in 30 seconds
Nmap сообщает, что сканируемый компьютер, скорее всего, неработоспособен и для надежности рекомендует просканировать его скрытно, т. е. с использованием опции -P0. При этом сервер доступен с других систем, просто PortSentry обнаружил сканирование портов drwalbr.und и выполнил команду, определенную в конфигурационном файле/etc/portsentry/portsentry.conf в строке:
KILL_ROUTE="/sbin/route add -host $TARGET$ reject"
Шаг 4
Просканируйте порты системы, на которой установлен PortSentry в третий раз с использованием опции -P0:
[root@drwalbr /]# nmap -O -P0 www.dymatel.und
Starting nmap V. 2.54BETA34 ( www.insecure.org/nmap/ ) Warning: OS detection will be MUCH less reliable because we did not find at least 1 open and 1 closed TCP port
All 1556 scanned ports on www.dymatel.und (172.16.181.100) are: filtered
Too many fingerprints match this host for me to give an accurate OS guess
Nmap run completed -- 1 IP address (1 host up) scanned in 1946 seconds
Nmap выдает сообщение о том, что все порты на сканируемом сервере закрыты. Тем не менее, с других систем сервер www.dymatel.und доступен.
Шаг 5
Для определения компьютеров, доступ с которых к серверу с установленной программой PortSentry закрыт, c консоли сервера выполните команду:
[root@www /]# /sbin/route |
|
|
|
|
|
|
… |
|
255.255.255.255 !H 0 - 0 - |
||||
drwalbr.und |
- |
|||||
172.16.181.0 |
* |
255.255.255.0 |
U 0 |
0 |
0 |
eth0 |
192.168.0.0 |
* |
255.255.0.0 |
U 0 |
0 |
0 |
eth1 |
127.0.0.0 |
* |
255.0.0.0 |
U 0 |
0 |
0 |
lo |
default |
172.16.181.1 |
0.0.0.0 |
UG 0 |
0 |
0 |
eth0 |
Шаг 6
Для снятия блокировки доступа с drwalbr.und выполните команду:
[root@www /]# route del -host drwalbr.und reject
и удалите строки, содержащие сведения о блокировке доступа c drwalbr.und.
Из файла /var/portsentry/portsentry.history – строку:
1051283728 - 04/25/2003 19:15:28 Host: 172.16.181.103/172.16.181.103
Port: 410 TCP Blocked
и строку:
1051283729 - 04/25/2003 19:15:29 Host: 172.16.181.103/172.16.181.103 Port: 1 UDP Blocked
Глава 18. PortSentry – программное обеспечение для атоматического ограничения доступа... |
245 |
Из файла /var/portsentry/portsentry.blocked.atcp – строку:
1051283728 - 04/25/2003 19:15:28 Host: 172.16.181.103/172.16.181.103 Port: 410 TCP Blocked
Из файла /var/portsentry/portsentry.blocked.audp – строку:
1051283729 - 04/25/2003 19:15:29 Host: 172.16.181.103/172.16.181.103 Port: 1 UDP Blocked
Удаление этих строк необходимо для возможности осуществления повторной блокировки доступа с drwalbr.und, т. к. перед выполнением блокировки PortSentry осуществляет проверку наличия блокировки, руководствуясь содержимым файлов portsentry.history, portsentry.blocked.atcp
и portsentry.blocked.audp.
Для проверки восстановления доступа с drwalbr.und повторно выполните команду:
[root@www /]# /sbin/route |
|
|
|
|
|
|
… |
|
|
|
|
|
|
172.16.181.0 |
* |
255.255.255.0 |
U 0 0 0 eth0 |
|||
192.168.0.0 |
* |
255.255.0.0 |
U 0 |
0 |
0 |
eth1 |
127.0.0.0 |
* |
255.0.0.0 |
U 0 |
0 |
0 |
lo |
default |
172.16.181.1 |
0.0.0.0 |
UG 0 |
0 |
0 |
eth0 |
В выводе команды должна отсутствовать строка, содержащая запись для блокировки доступа с сис- |
||||||
темы drwalbr.und, т. е.: |
255.255.255.255 !H 0 |
|
|
|
||
drwalbr.und |
- |
- 0 |
- |
|||
246 |
Часть 4. Программное обеспечение для ограничения доступа к серверу... |
Глава 19
Snort – программное обеспечение для обнаружения попыток вторжения
В этой главе:
1. Ограничения и допущения
2.Пакеты
3.Компиляция, оптимизация и инсталляция Snort
4.Конфигурирование Snort
5.Тестирование Snort
6.Выполнение Snort в среде chroot-jail
Глава 19. Snort – программное обеспечение для обнаружения попыток вторжения |
247 |
Как бы хорошо ни была защищена система, всегда существует возможность ее взлома. И для системного администратора было бы лучше узнавать о попытках взлома еще до того, как одна из них увенчается успехом. Поэтому особенно важны средства, позволяющие не только обнаружить факт проникновения в систему, но и предупредить о предстоящем вторжении.
Snort – это сетевая система обнаружения вторжений (Intrusion Detection Systems, IDS), способная выполнять в режиме реального времени анализ сетевого трафика с целью обнаружения попыток взлома или поиска уязвимостей вашей системы (например, таких, как переполнения буфера, CGI-атак, сканирования портов, определения типа операционной системы, идентификации версий используемых сетевых сервисов и т. п.).
Авторы настоятельно рекомендуют установить Snort и использовать его в качестве оружия в борьбе против спамеров, различных взломщиков программной защиты и других покушений на вашу безопасность.
Ограничения и допущения
Исходные коды находятся в каталоге /var/tmp.
Все операции выполняются пользователем с учетной записью root. Используется дистрибутив ASPLinux 7.3 (Vostok). Перекомпиляция ядра не требуется.
Процедуры, описанные в этой главе, могут оказаться применимыми для других версий ядра и дистрибутивов Linux, но авторы это не проверяли.
Пакеты
Последующие рекомендации основаны на информации, полученной с домашней страницы проекта Snort по состоянию на 20.04.2003. Регулярно посещайте домашнюю страницу проекта http://www.snort.org/ и отслеживайте обновления. Исходные коды Snort содержатся в архиве snort-version.tar.gz (последняя доступная на момент написания главы стабильная версия snort-
1.9.1.tar.gz).
Для нормальной работы Snort необходимо программное обеспечение, разрабатываемое в рамках проекта tcpdump/libcap. Регулярно посещайте домашнюю страницу проекта http://www.tcpdump.org/ и отслеживайте обновления.
Snort использует функции библиотеки LIBCAP. Исходные коды библиотеки содержатся в архиве libpcap-version.tar.gz (последняя доступная на момент написания главы стабильная версия
libpcap-0.7.2.tar.gz);
Для реализации некоторых дополнительных настроек Snort необходима программа TCPDUMP, позволяющая переводить сетевую плату в режим promiscuous. В этом режиме фиксируется каждый пакет, проходящий по кабелю, к которому подключен сетевой интерфейс. В обычном режиме сетевые платы регистрируют только пакеты, адресованные на поддерживаемый ею адрес и широковещательные адреса. Исходные коды программы содержатся в архиве tcpdump-version.tar.gz (последняя доступная на момент написания главы стабильная версия tcpdump-3.7.2.tar.gz).
Компиляция, оптимизация и инсталляция Snort
Шаг 1 Осуществите проверку подлинности имеющегося в вашем распоряжении архива с исходными кодами
с использованием процедур, описанных в шаге 1 раздела «Компиляция, оптимизация и инсталляция
OpenSSL» главы 12.
Шаг 2
Распакуйте архив с исходными кодами libpcap-0.7.2.tar.gz в каталоге /var/tmp, откомпилируйте и проинсталлируйте библиотеку:
[root@drwalbr tmp]# tar xzpf libpcap-0.7.2.tar.gz
[root@drwalbr tmp]# cd libpcap-0.7.2 [root@drwalbr libpcap-0.7.2]# ./configure [root@drwalbr libpcap-0.7.2]# make
[root@drwalbr libpcap-0.7.2]# find /* > /root/libcap1 [root@drwalbr libpcap-0.7.2]# make install [root@drwalbr libpcap-0.7.2]# find /* > /root/libcap2
[root@drwalbr libpcap-0.7.2]# diff /root/libcap1 /root/libcap2 >
/root/libcap.installed
[root@drwalbr libpcap-0.7.2]# mv /root/libcap.installed
/very_reliable_place/libcap.installed.YYYYMMDD
248 |
Часть 4. Программное обеспечение для ограничения доступа к серверу... |
ЗАМЕЧАНИЕ Вы можете установить библиотеку из rpm-пакета libcap-1.10-8.i386.rpm, для этого перейдите в каталог, в котором находятся пакеты, входящие в состав дистрибутива ASPLinux 7.3, и выполните команду:
[root@drwalbr distrib]# rpm –ihv libcap-1.10-8.i386.rpm
Шаг 3
Распакуйте архив с исходными кодами tcpdump-3.7.2.tar.gz в каталоге /var/tmp, откомпилируйте и проинсталлируйте программу:
[root@drwalbr tmp]# tar xzpf tcpdump-3.7.2.tar.gz
[root@drwalbr tmp]# cd tcpdump-3.7.2 [root@drwalbr tcpdump-3.7.2]# ./configure [root@drwalbr tcpdump-3.7.2]# make
[root@drwalbr tcpdump-3.7.2]# find /* > /root/tcpdump1 [root@drwalbr tcpdump-3.7.2]# make install [root@drwalbr tcpdump-3.7.2]# find /* > /root/tcpdump1
[root@drwalbr tcpdump-3.7.2]# diff /root/tcpdump1 /root/ tcpdump2 >
/root/tcpdump.installed
[root@drwalbr tcpdump-3.7.2]# mv /root/libcap.installed
/very_reliable_place/libcap.installed.YYYYMMDD
ЗАМЕЧАНИЕ Вы можете установить программу из rpm-пакета tcpdump-3.6.2-12.asp.i386.rpm, для этого перейдите в каталог в котором находятся пакеты, входящие в состав дистрибутива ASPLinux 7.3, и выполните команду:
[root@drwalbr distrib]# rpm –ihv tcpdump-3.6.2-12.asp.i386.rpm
Шаг 4
Распакуйте архивы с исходными кодами Snort в каталоге /var/tmp:
[root@drwalbr tmp]# tar xzpf snort-1.9.1.tar.gz
[root@drwalbr tmp]# cd snort-1.9.1
Шаг 5
Создайте специального пользователя, от имени которого будет запускаться Snort:
[root@drwalbr snort-1.9.1]# groupadd -g 69 snort > /dev/null 2>&l || : [root@drwalbr snort-1.9.1]# useradd -u 69 -g 69 -s /bin/false -M -r -d
/var/log/snort snort > /dev/null 2>&l || :
Шаг 6
Проверьте наличие, а при необходимости добавьте в конец файла /etc/shells строку:
/bin/false/
Шаг 7
Отконфигурируйте исходные коды Snort:
[root@drwalbr snort-1.9.1]# CFLAGS="-O2 -march=i686 -funroll-loops"; export CFLAGS
./configure \ --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --mandir=/usr/share/man \ --with-openssl
Шаг 8
Откомпилируйте и проинсталлируйте Snort, создайте список проинсталлированных файлов и сохра-
ните его в надежном месте: |
make |
[root@drwalbr snort-1.9.1]# |
|
[root@drwalbr snort-1.9.1]# |
find /* > /root/snort1 |
[root@drwalbr snort-1.9.1]# |
make install |
[root@drwalbr snort-1.9.1]# |
mkdir -p /var/log/snort |
[root@drwalbr snort-1.9.1]# |
mkdir -p /etc/snort |
[root@drwalbr snort-1.9.1]# |
chown -R snort.snort /var/log/snort/ |
[root@drwalbr snort-1.9.1]# |
cd etc/ |
[root@drwalbr etc]# install |
classification.config /etc/snort/ |
[root@drwalbr etc]# cd ../rules
Глава 19. Snort – программное обеспечение для обнаружения попыток вторжения |
249 |
[root@drwalbr rules]# install snort.conf *.rules /etc/snort/ [root@drwalbr rules]# chmod 0644 /etc/snort/*
[root@drwalbr rules]# strip /usr/bin/snort [root@drwalbr rules]# cd /var/tmp/snort-1.9.1 [root@drwalbr rules]# find /* > /root/snort2
[root@drwalbr rules]# diff /root/snort1 /root/snort2 >
/root/snort.installed
[root@drwalbr rules]# mv /root/snort.installed
/very_reliable_place/snort.installed.YYYYMMDD
Шаг 9 Удалите архивы и каталоги с исходными кодами программ:
[root@drwalbr snort-1.9.1]# cd /var/tmp
[root@drwalbr tmp]# rm –r snort-1.9.1.tar.gz tcpdump-3.7.2.tar.gz libpcap-0.7.2.tar.gz
[root@drwalbr tmp]# rm –rf snort-1.9.1 tcpdump libpcap-0.7.2
Конфигурирование Snort
Конфигурирование Snort осуществляется с использованием следующих файлов:
•основного конфигурационного файла /etc/snort/snort.conf;
•файла инициализации /etc/init.d/snort.
Шаг 1 Отредактируйте в соответствии с приведенными ниже рекомендациями и вашими потребностями
файл /etc/snort/snort.conf:
var HOME_NET $eth0_ADDRESS var EXTERNAL_NET any
var SMTP $HOME_NET
var HTTP_SERVERS $HOME_NET var SQL_SERVERS $HOME_NET var DNS_SERVERS $HOME_NET var RULE_PATH ./ preprocessor frag2
preprocessor stream4: detect_scans,detect_state_problems preprocessor stream4_reassemble: both,ports all preprocessor http_decode: 80
preprocessor rpc_decode: 111 32771 preprocessor bo
preprocessor telnet_decode
preprocessor portscan: $HOME_NET 4 3 portscan.log
preprocessor portscan-ignorehosts: 212.45.28.122 212.45.28.123 output alert_syslog: LOG_AUTH LOG_ALERT
include classification.config
где строка:
var HOME_NET $eth0_ADDRESS
определяет прослушиваемый сетевой интерфейс. Строка:
var EXTERNAL_NET any
определяет отслеживаемые IP-адреса. В рассматриваемом примере отслеживаются все адреса. Строка:
var SMTP $HOME_NET
предписывает отслеживать атаки на службы SMTP на системах вашей сети. Строка:
var HTTP_SERVERS $HOME_NET
предписывает отслеживать атаки на службы HTTP на системах вашей сети. Строка:
var SQL_SERVERS $HOME_NET
предписывает отслеживать атаки на службы SQL на системах вашей сети. Строка:
var DNS_SERVERS $HOME_NET
предписывает отслеживать атаки на службы DNS на системах вашей сети.
250 Часть 4. Программное обеспечение для ограничения доступа к серверу...
Строка:
var RULE_PATH ./
определяет путь к файлам, содержащим правила Snort. Строка:
preprocessor frag2
предписывает обнаруживать дефрагментацию IP-пакетов и основанных на ней атаках. Строка:
preprocessor stream4: detect_scans,detect_state_problems
предписывает осуществлять детальный анализ TCP и регистрировать на его основе попытки сканирования портов, определения типа операционной системы и др. Для конфигурирования используются следующие опции:
•detect_scans – используется для обнаружения незаметных сканирований портов и выдачи предупреждений;
•detect_state_problems – используется для обнаружения сбоев в работе TCP;
•keepstats – используется для сохранения статистики сеанса;
•noinspect – используется только для выключения режима детального анализа трафика TCP;
•timeout – используется для установки или изменения заданного по умолчанию счетчика времени блокировки сеанса;
•memcap – используется для ограничения объема памяти;
•log_flushed_streams – используется для записи всей информации, накопленной в буфере, на
диск.
В рассматриваемом примере используются только опции detect_scans и
detect_state_problems, позволяющие регистрировать сканирование портов и сбои TCP. Строка:
preprocessor stream4_reassemble: both, ports all
предписывает использовать дополнительные возможности детального анализа трафика TCP. Для конфигурирования дополнительных возможностей используются следующие опции:
•clientonly – используется для детального анализа трафика только со стороны клиента;
•serveronly – используется для детального анализа трафика только со стороны сервера;
•both – используется для детального анализа трафика, как со стороны клиента, так и сервера;
•noalerts м используется для выключения всех предупреждений во время анализа трафика;
•ports – используется для задания отслеживаемых номеров портов.
В рассматриваемом примере используются только опции detect_scans и detect_state_problems, позволяющие осуществлять детальный анализ трафика как со стороны клиента, так и сервера для всех номеров портов.
Строка:
preprocessor http_decode: 80
предписывает отслеживать деструктивные воздействия на вашу систему по протоколу HTTP. Строка:
preprocessor rpc_decode: 111 32771
предписывает отслеживать деструктивные воздействия на вашу систему по протоколу RPC. В рассматриваемом примере в качестве опций используются номера портов, задаваемые по умолчанию.
Строка:
preprocessor bo
предписывает отслеживать трафик Back Orifice. Строка:
preprocessor telnet_decode
предписывает отслеживать деструктивные воздействия на вашу систему по протоколу TELNET и FTP. Строка:
preprocessor portscan: $HOME_NET 4 3 portscan.log
предписывает обнаруживать и регистрировать сканирование портов с использованием UDP или TCPпакетов с SYN-битом. В рассматриваемом примере регистрируются пакеты, обращающиеся к четырем различным портам за время меньшее, чем три секунды.
Строка:
preprocessor portscan-ignorehosts: 212.45.28.122 212.45.28.123
предписывает не анализировать и не регистрировать трафик с IP-адресов 212.45.28.122 и 212.45.28.123. Строка:
output alert_syslog: LOG_AUTH LOG_ALERT
предписывает регистрировать все обращения Snort с помощью syslogd. Строка:
include classification.config
