IZONE - http://www.izcity.com/ - бесплатный софт, вэб-сервисы, ресурсы для раскрутки, свежие номера журнала "Internet Zone".

Linux обеспечивает безопасность в сети. Продолжение.

Вторая часть статьи об обеспечении безопасности Linux в сети на примере дистрибутива Red Hat Linux 7.0. Укрепление защиты wu-ftp и web-сервера apache. Переконфигурирование ядра. Отслеживание и защита от вторжений в систему.

Андрей Матвеев

5. Смотрим в логи

Для этого качаем программку с freshmeat.net iplog, которая отслеживает TCP, UDP, ICMP трафик через сетевой интерфейс, определяет некоторые виды сетевых атак и сканирования портов. Распаковываем:
tar zxvf iplog-2.2.3.tar.gz
Переходим в созданный каталог и:
./configure
make
make install

Для автоматической загрузки теперь в /etc/rc.d/rc.local прописываем путь к iplog:
/usr/local/sbin/iplog -l /var/log/iplog

Как дополнение к PortSentry и iplog можно использовать программу scanlogd, которая выявляет и записывает с помощью syslogd в /var/log/messages IP адреса хостов, которые посылают пакеты на разные порты нашей системы в короткое время.
Качаем отсюда
Распаковываем:
tar zxvf scanlogd-2.2.tar.gz
Переходим в созданный каталог и устанавливаем:
make -f Makefile
make linux

В текущем каталоге будет создан исполняемый файл scanlogd, но запускать его еще рано. Для его работы требуется создание пользователя scanlogd в системе:
adduser scanlogd
вводим и подтверждаем пароль.
Так как смотреть в /var/log/messages и отыскивать там записи этой программы удовольствие не из приятных, то облегчим себе работу:
Создадим каталог /etc/cron.security
В нем создадим файл scanlogd.cron с таким содержанием:
#!/bin/sh
cat /var/log/messages | grep scanlogd | mail root

Установим для этого файла атрибут исполнения и добавим записи в файл /etc/crontab:
#scanlogd
00 21 1-31 * 0-6 root run-parts /etc/cron.security

Теперь каждый день в девять часов вечера будет приходить отчет scanlogd суперпользователю по почте.

Формат сообщений scanlogd выглядит так: IP адрес сканирующего хоста…IP адрес сканируемого хоста…порты… флаги…время жизни пакета…когда было выявлено сканирование. Пример:
Aug 16 16:55:40 midian scanlogd: 192.168.5.23 to 192.168.5.21 ports 686, 666, 446, 89, 302, 410, ..., fSrpauxy, TOS 00, TTL 64 @16:55:40

Для автоматической загрузки теперь в /etc/rc.d/rc.local прописываем путь к scanlogd. У меня это выглядит так:
/root/DOWNLOAD/SCANLOGD/scanlogd-2.2/scanlogd

Также не лишним будет записывать все сообщения ядра в файл /var/log/messages. Для этого в /etc/syslog.conf прописываем строчку:
kern.* /var/log/messages .

6. Отключение несущественных сервисов.

Нужно определиться, для каких целей будет использоваться хост. По умолчанию в OS Linux загружается много служб, такие как sendmail, pop3, wu-ftpd, finger, nfs, rpc, R services, telnet, SMB и другие. В дистрибутив Red Hat Linux входит удобная программа ntsysv для управления загрузкой служб. Единственное неудобство: для каждого режима работы придется загружать ntsysv. Необходимо определить назначение хоста, оценить полезность, преимущества и риск загружаемых сервисов.

7. Оберегаем демонов

Samba

Samba – это набор программ для реализации протокола Session Message Block в никсах. Позволяет совместно использовать файловые системы *nix в Windows и файловую систему FAT в *nix, а также принтеры, подключенные либо к компьютерам, с операционной системой *nix, либо к компьютерам с системой WindowsX. Лучше взять с www.ru.samba.org последнюю версию этого пакета 2.2.1а, где исправлены баги с безопасностью, улучшена совместимость с Win2000 и много еще все разного. Распаковываем архив tar zxvf samba-2.2.1a.tar.gz
переходим в созданный каталог и конфигурируем:
./configure --prefix=/usr/local/samba --with-smbmount --with-msdfs --with-mmap
make
make install

Теперь внесем коррективы в файл /usr/local/samba/lib/smb.conf для повышения уровня защиты и быстродействия:

Эти параметры определяют возможность обращения к ресурсу с определенных хостов или подсетей:
hosts deny = ALL
hosts allow = 192.168.5 127.

Параметр guest ok= определяет, будет ли иметь доступ к ресурсу пользователь без регистрационной записи. Синоним этого параметра public= guest ok=no

Параметр wide links= при значении no говорит Samba не следовать по символическим ссылкам вне экспортируемой области – это позволяет получить некоторые бонусы с точки зрения защиты, но в то же время это замедлит работу Samba примерно на 30 %, так как эта операция добавляет шесть дополнительных системных вызовов на каждое обращение к именам файлов. Значение yes или no выбираем сами…

Разрешаем шифрованные пароли:
encrypt passwords = yes

Устанавливаем права на файлы и директории, создаваемые или копируемые из виндовс в никсы:
create mask = 0644
directory mask = 0755
Ну и расставляем нужные пермишенсы на smb.conf и ресурсы.

Для увеличения производительности Samba, прописываем в smb.conf :
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=8192
SO_SNDBUF=8192
wide links = yes
read raw = no

Изменяем параметры виртуальной памяти в sysctl.conf :
vm.bdflush=100 1200 128 512 15 5000 500 1884 2
vm.buffermem=60 80 80

Для того, чтобы изменения в sysctl.conf вступили в силу:
/etc/rc.d/init.d/network restart

Apache

Apache – это свободно распространяемый Web-сервер, разработанный по принципу открытой модели исходного кода. В настоящее время по обзорам различных компаний Apache является самым популярным веб-сервером в интернете.

Скачиваем дистрибутивный пакет отсюда распаковываем и инсталлируем:
tar zxvf apache_1.3.19rusPL30.4.tar.gz
./confugure --prefix=/usr/local/apache
make
make install

По умолчанию сервер Apache устанавливается с оптимальными опциями защиты. Так, что, например, для разрешения работы CGI и SSI придется в /usr/local/apache/conf/httpd.conf прописать:
Options ExecCGI
AddHandler cgi-script .cgi
Options IncludesNOEXEC
Последняя опция включает поддержку директив включения SSI, но не разрешает исполнение директивы exec, чтобы нельзя было вставить злоумышленнику вставить свои команды и послать форму.

Разрешаем доступ к нашему веб-серверу только с авторизированной подсети: order deny, allow
allow from 192.168.5
deny from all

Также с помощью брандмауэра можно предоставить доступ к веб-серверу (192.168.5.1) только из своей сети:
ipchains -A input -i eth0 -p tcp -s 192.168.5.0/255.255.255.0 1024:65535 -d
192.168.5.1 80 -j ACCEPT
ipchains -A output -i eth0 -p tcp ! -y -s 192.168.5.1 80 -d
192.168.5.0/255.255.255.0 1024:65535 -j ACCEPT

Если на странице содержатся важные данные, то можно их защитить средствами апача:
<Location /secure>
AuthName secure
AuthType basic
AuthUserFile /www/secure/.htpasswd
Require valid-user
order deny, allow
allow from 192.168.5
deny from all
</Location>

Для создания парольного файла:
htpasswd –c /www/secure/.htpasswd username
Потом вводим и подтверждаем пароль.

Теперь при попытке зайти на http://www.blablabla.ru/secure придется ввести имя пользователя и пароль.

Создать свои html файлы для директивы ErrorDocument с различными ошибками. Не стоит включать разрешение просмотра содержимого каталогов (директиву построения индексов Options Indexes). Можно заставить демона httpd прослушивать другой порт, например, 8080
Port 8080 Так как злоумышленники при сканировании сетей обычно сканируют только привилигированные порты.
Кроме аутентификации типа basic, сервер апачи поддерживает криптографическую аутентификацию с помощью алгоритма MD5. Аутентификацию на базе MD5 можно добавь с помощью утилиты htdigest.

wu-ftpd

FTP – File Transfer Protocol. Стандартный метод передачи файлов из одной системы в другую. В дистрибутиве Red Hat Linux используется бесплатный сервер wu-ftpd.

Редактируем файл /etc/ftpaccess :
Отключаем клиента после достижения им определенного числа неудачных попыток регистрации :
loginfails 1
Разрешаем обращаться к нашему фтп-серверу (192.168.5.1) только из пределов нашей сети, пользователь anonymous не имеет доступа :
class localclass guest,real 192.168.5.*/255.255.255.0
guestuser username
Пользователя username необходимо зарегистрировать в системе.
Ограничить доступ можно и с помощью firewall :
ipchains -A input -i eth0 -p tcp -s 192.168.5.0/255.255.255.0 1024:65535 -d
192.168.5.1 21 -j ACCEPT
ipchains -A output -i eth0 -p tcp ! –y -s 192.168.5.1 21 -d 192.168.5.0/255.255.255.0 1024:65535 -j ACCEPT
ipchains -A output -i eth0 -p tcp -s 192.168.5.1 20 -d 192.168.5.0/255.255.255.0 1024:65535 -j ACCEPT
ipchains -A input -i eth0 -p tcp ! –y -s 192.168.5.0/255.255.255.0 1024:65535 - d 192.168.5.1 20 -j ACCEPT
ipchains -A output -i eth0 -p tcp -s 192.168.5.1 1024:65535 -d 192.168.5.0/255.255.255.0 1024:65535 -j ACCEPT
ipchains -A input -i eth0 -p tcp ! –y -s 192.168.5.0/255.255.255.0 1024:65535 - d 192.168.5.1 1024:65535 -j ACCEPT

Делаем проверку по rfc822 (самая строгая из трех возможных) :
passwd-check rfc822 warn

Все кидаем в логи :
log commands guest,real
log transfers guest,real inbound,outbound

И расставляем permissions :
delete no guest,real
overwrite no guest,real
rename no guest,real
chmod no guest,real
umask no guest,real
upload /var/ftp * no nodirs
upload /var/ftp /bin no
upload /var/ftp /etc no
upload /var/ftp /pub no
upload /var/ftp /upload yes * * 0600 nodirs

И в файле /etc/ftpusers прописываем пользователей, которые НЕ имеют доступа к локальному ftp-серверу.

Secure Shell

SSH – это защищенная система регистрации, приходящая на замену telnet, rlogin, rsh и других. Аутентификация и шифрование сеанса выполняется незаметно для пользователя, а инициализация практически также проста, как и у telnet. Установка дистрибутива ssh стандартная: tar , ./configure, make, make install. При первом запуске автоматически произойдет создание необходимых ключей. Редактируем /etc/ssh/sshd_config :
Указываем, с каких хостов возможно подключение к нашему sshd (192.168.5.1)
AllowHosts 192.168.5.2

Или создаем правила ipchains :
ipchains -A input -i eth0 -p tcp -s 192.168.5.2 1024:65535 -d 192.168.5.1 22 -j ACCEPT
ipchains -A output -i eth0 -p tcp ! -y -s 192.168.5.1 22 -d 192.168.5.2 1024:65535 -j ACCEPT
ipchains -A input -i eth0 -p tcp -s 192.168.5.2 1020:1023 -d 192.168.5.1 22 -j ACCEPT
ipchains -A output -i eth0 -p tcp ! -y -s 192.168.5.1 22 -d 192.168.5.2 1020:1023 -j ACCEPT

Указываем группы, которые могут получать доступ к службе : AllowGroups sshadmin

Ведем тщательные логи :
FascistLogging yes

Запрещаем регистрацию с пустым паролем :
PasswordAuthentication yes
PermitEmptyPasswords no

Под учетной записью root зарегистрироваться нельзя :
PermitRootLogin no

Также можно заставить sshd прослушивать другой порт(по умолчанию 22), например, 1022
Port 1022
и включить параметр, определяющий по истечению какого времени простаивающее подключение будет разорвано (например, один час):
IdleTimeout -h 1

Ранние версии ssh имели существенные проблемы с защитой (склонность к переполнению буфера и т.д.). От использования версий ssh до и включительно SSH-1.5-OpenSSH-1.2.3 необходимо отказаться по причине возможного перехвата и расшифровки злоумышленником с помощью анализаторов пакетов посредством методов man in the middle и decrypt ваших зашифрованных паролей. Всегда старайтесь использовать последнюю версию ssh.

8. Установка нового ядра на примере Red Hat Linux 7.0

Переход с 2.2.16 на 2.4.8 необходимость? Решать вам. Вот краткий список (с полным можно ознакомиться на www.kernel.org) исправлений, улучшений и нововведений: поддержка нового оборудования, оптимизация, повышение уровня безопасности, исправление ошибок, улучшенная поддержка SMP, порты на другие архитектуры, поддержка различных файловых систем, iptables и т.д.

Итак загружаем архив с http://ftp.kernel.org/pub/linux/kernel/v2.4/
Распаковываем:
tar zxvf linux-2.4.8.tar.gz
cd linux
make mrproper

и смотрим в Changes, что же нам требуется обновить:
o Gnu C 2.91.66
o Gnu make 3.77
o binutils 2.9.1.0.25
o util-linux 2.10o
o modutils 2.4.2
o e2fsprogs 1.19
o reiserfsprogs 3.x.0j
o pcmcia-cs 3.1.21
o PPP 2.4.0
o isdn4k-utils 3.1pre1

Качаем, если чего то нет. Но обычно в свежих дистрибутивах все это есть и гораздо более новые версии.

В данном случае pcmcia-cs, PPP, isdn4k-utils я не использую.

Устанавливать лучше всего перезагрузившись в single mode, когда практически ничего не загружено (в приглашении lilo boot: указать загрузчику linux single или linux 1). Быстрее все скомпилируется.

Для всего перечисленного для инсталляции подходит правило:
./configure
make
make install

За исключением ksymoops - ./configure не нужен и e2fsprogs после make сделать make check, а потом make install.

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

Снова переходим в новый каталог linux и:
make xconfig

Конфигурируем ядро под себя, сохраняемся, для проверки смотрим в созданный Makefile.

Вырабатываем файл зависимостей:
make dep

Убираем лишний исходный код:
make clean

Делаем сжатый модуль ядра:
make bzImage

Устанавливаем модули:
make modules
make modules_install

Копируем новое ядро в /boot и прописываем новое ядро в /etc/lilo.conf:
boot = /dev/hda
map = /boot/map
timeout = 50
prompt
message = /boot/message
default = kernel-2.2.16
vga = normal
read-only
install=/boot/boot.b
image = /boot/bzImage
label = kernel-2.2.16
root = /dev/hda3
image = /boot/kernel-2.4.8
label = kernel-2.4.8
root = /dev/hda3
other = /dev/hda1
label = dos

Даем лило перечитать свой конфигурационный файл:
lilo

Все. reboot
Если загрузилось все нормально, проверяем версию ядра : uname -r
Должна появиться версия: 2.4.8
и не забываем создать загрузочный диск нового ядра:
mkbootdisk --device /dev/fd0 2.4.8

Продолжение следует…


Линки по теме:
Использование LILO

Portsentry - защита от вторжения извне.

LIDS - система обнаружения и защиты от вторжения

Stunnel: Шифрование трафика

Источник - SoftТерра, http://www.softerra.ru

 


Copyright © "Internet Zone", http://www.izcity.com/, info@izcity.com