Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Часть II. Безопасность и оптимизация

Глава 3. Общая системная безопасность

Обзор

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

Безопасность BIOS, установка пароля на загрузку

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

Политика безопасности

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

  • Как Вы определяете конфиденциальную и важную информацию?
  • Нужен ли удаленным пользователям доступ к Вашей системе?
  • Находится ли на сервере конфиденциальная или важная информация?
  • Обеспечивают ли пароли или шифрование достаточную защиту?
  • Нужен ли Вам доступ в Интернет?
  • Как много доступа Вы хотите разрешить из Интернета?
  • Какие действия нужно предпринять в случае нарушения защиты?

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

Выбор правильного пароля

Исходной точкой Вашего тура в безопасность Linux является пароль. Многие люди используют единственный пароль всю жизнь, доверяя ему защиту всех своих данных. Вопреки популярной вере, не взламываемых паролей не существует. Любой из них поддается либо социальной разработке, либо грубой силе.

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

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

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

Длина пароля

Минимально допустимая длина пароля, задаваемая по умолчанию в Linux, 5 символов. Это значит, что когда новому пользователю разрешается доступ на сервер, то длина строки, представляющей собой пароль, должна быть минимум 5 букв, цифр или специальных знаков. Кроме того, она должна быть не больше 8 символов. Чтобы нерадивые пользователи не использовали пароли длиной 5 символов, можно увеличить его минимальный размер до 8, отредактировав файл /etc/login.defs.

Редактируйте файл login.defs (vi /etc/login.defs) изменив строку:

PASS_MIN_LEN 5
на:
PASS_MIN_LEN 8

Этот файл является конфигурационным для программы login. Здесь Вы можете изменить и другие параметры, чтобы они соответствовали Вашей стратегии защиты (время действия пароля, длина пароля и многое другое).

Логин пользователя root

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

Установка таймаута подключения для root

Часто бывает, что администратор войдя в систему под пользователем root забывает выйти, и его сессия остается открытой. Решением этой проблемы может быть переменная TMOUT в BASH, которая определяет время, через которое пользователь автоматически отключается от системы, если он не активен. Она содержит время в секундах до отключения.

Редактируйте файл /etc/profile и добавьте следующую строку сразу после строки с HISTFILESIZE=:

TMOUT=7200

Мы определяем значение для TMOUT равное 2 часам (60*60*2). Следует отметить, что если Вы добавили эту строку в файл /etc/profile, то переменная определяется для любого подключаемого пользователя, а не только для root. Чтобы установить ее для конкретного пользователя измените файл .bashrc в его домашнем каталоге.

Файл /etc/exports

Если Вы экспортируете свои файловые системы с использованием NFS, то необходимо сконфигурировать файл /etc/exports с максимально возможными ограничениями. В нем не следует использовать групповые символы (?, *), нельзя позволять доступ для записи пользователю root и следует монтировать в режиме "только для чтения" все, что только возможно.

Отредактируйте файл /etc/exports, добавив в него:

/dir/to/export host1.mydomain.com (ro,root_squash)
/dir/to/export host2.mydomain.com (ro,root_squash)

Где dir/to/export задает каталог для экспортирования, host1.mydomain.com имя машины, с которой разрешается доступ, ro монтирование только для чтения, root_squash не позволять пользователю root доступа с правом на запись.

Чтобы изменения вступили в действие, необходимо выполнить команду:

/usr/sbin/exportfs -a

Замечание. Использование NFS-сервера увеличивает риск нарушения безопасности Вашей системы. Лучше его не использовать.

Отключение доступа к консольным программам

Одной из самых простых и необходимых настроек является блокирование консольно-эквивалентного доступа к программам halt и shutdown. Чтобы это сделать выполните:

[root@deep]# rm -f /etc/security/console.apps/servicename

где servicename имя программы, к которой Вы хотите запретить консольно-эквивалентный доступ. Если Вы не используете xdm, будьте внимательны, не удалите файл xserver, иначе никто, кроме пользователя root, не сможет запустить X-сервер (если Вы всегда используете xdm для запуска X-сервера, и только пользователь root должен запускать X-сервер, то тогда можно подумать об удалении файла xserver). Пример:

[root@deep]# rm -f /etc/security/console.apps/halt
[root@deep]# rm -f /etc/security/console.apps/poweroff
[root@deep]# rm -f /etc/security/console.apps/reboot
[root@deep]# rm -f /etc/security/console.apps/shutdown
[root@deep]# rm -f /etc/security/console.apps/xserver
(если удалите, то только root сможет запустить X).

В результате будет запрещен консольно-эквивалентный доступ к программам halt, shutdown, reboot и poweroff. Программа xserver используется, если у Вас установлен X Window.

Замечание. Если Вы инсталлировали систему как описано в этой книге, то X Window у Вас не установлен, и файлы, описанные выше, в каталоге /etc/security не появятся, поэтому Вы этот шаг можете пропустить.

Отключение всего консольного доступа

Чтобы блокировать весь консольный доступ, включая программу и файл доступа в каталоге /etc/pam.d, закомментируйте все строки, в которых вызывается pam_console.so. Этот шаг является продолжением предыдущего. Нижеприведенный скрипт сделает это автоматически за Вас. Создайте файл disabling.sh (touch disabling.sh) и внесите в него следующие строки:

# !/bin/sh
cd /etc/pam.d
for i in * ; do
sed '/[^#].*pam_console.so/s/^/#/' < $i > foo && mv foo $i
done

Сделайте его исполняемым:

[root@deep]# chmod 700 disabling.sh
[root@deep]# ./disabling.sh

Он будет комментировать все строки, ссылающиеся на pam_console.so во всех файлах в каталоге /etc/pam.d. После того, как скрипт выполнит свою работу, удалите его из системы.

Файл /etc/inetd.conf

Inetd называется суперсервером, который запускает другие демоны по запросам из сети. Inetd.conf говорит inetd, какие порты слушать и какие сервисы запускать для каждого порта. Как только Вы подключаете Вашу систему к сети, подумайте, какие сервисы Вам нужны.

Ненужные сервисы надо отключить, а лучше деинсталлировать, чтобы у Вас стало меньше головной боли, а у атакующего меньше шансов найти лазейку в Вашу систему. Просмотрите файл /etc/inetd.conf, и Вы увидите, какие сервисы он предлагает. Закомментируйте строки (# в начале строки) с ненужными сервисами, а затем пошлите процессу inetd сигнал SIGHUP.

Шаг 1.

Измените права доступа к файлу на 600:

[root@deep]# chmod 600 /etc/inetd.conf

Шаг 2.

Удостоверьтесь, что владельцем файла является root:

[root@deep]# stat /etc/inetd.conf
File: "/etc/inetd.conf"
Size: 2869 Filetype: Regular File
Mode: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Device: 8,6 Inode: 18219 Links: 1
Access: Wed Sep 22 16:24:16 1999(00000.00:10:44)
Modify: Mon Sep 20 10:22:44 1999(00002.06:12:16)
Change: Mon Sep 20 10:22:44 1999(00002.06:12:16)

Шаг 3.

Редактируйте файл inetd.conf (vi /etc/inetd.conf) и отключите следующие сервисы: ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger, auth и т. д. пока Вы не планируете их использовать. Чем меньше сервисов включено, тем меньше риск для системы:

# Чтобы изменения вошли в силу дайте команду killall -HUP inetd
#echo    stream    tcp    nowait     root    internal
#echo    dgram     udp    wait       root    internal
#discard stream    tcp    nowait     root    internal
#discard dgram     udp    wait       root    internal
#daytime stream    tcp    nowait     root    internal
#daytime dgram     udp    wait       root    internal
#chargen stream    tcp    nowait     root    internal
#chargen dgram     udp    wait       root    internal
#time    stream    tcp    nowait     root    internal
#time    dgram     udp    wait       root    internal
#
# Это стандартные сервисы
#ftp    stream     tcp    nowait     root    /usr/sbin/tcpd in.ftpd -l -a
#telnet stream     tcp    nowait     root    /usr/sbin/tcpd in.telnetd
#
# Shell, login, exec, comsat и talk являются протоколами BSD.
#shell  stream  tcp   nowait root   /usr/sbin/tcpd in.rshd
#login  stream  tcp   nowait root   /usr/sbin/tcpd in.rlogind
#exec   stream  tcp   nowait root   /usr/sbin/tcpd in.rexecd
#comsat dgram   udp   wait   root   /usr/sbin/tcpd in.comsat
#talk   dgram   udp   wait   root   /usr/sbin/tcpd in.talkd
#ntalk  dgram   udp   wait   root   /usr/sbin/tcpd in.ntalkd
#dtalk  stream  tcp   wait   nobody /usr/sbin/tcpd in.dtalkd
#
# Почтовые Pop и imap сервисы
#pop-2  stream  tcp   nowait root   /usr/sbin/tcpd ipop2d
#pop-3  stream  tcp   nowait root   /usr/sbin/tcpd ipop3d
#imap   stream  tcp   nowait root   /usr/sbin/tcpd imapd
#
# Internet UUCP сервис.
#uucp   stream  tcp   nowait uucp   /usr/sbin/tcpd /usr/lib/uucp/uucico -l
#
# Сервис Tftp предоставляется в первую очередь для удаленной загрузки.
# В большинстве случаев, он используется только на "серверах загрузки".
# Не удаляйте символы комментариев, если Вы не уверены, что это Вам нужно.
#tftp   dgram   udp   wait   root   /usr/sbin/tcpd in.tftpd
#bootps dgram   udp   wait   root   /usr/sbin/tcpd bootpd
#
# Finger, systat и netstat дают информацию внешним пользователям, которая
# может быть использована для взлома системы. На многих серверах
# некоторые или все из них отключены с целью улучшения безопасности.
#finger  stream tcp   nowait root   /usr/sbin/tcpd in.fingerd
#cfinger stream tcp   nowait root   /usr/sbin/tcpd in.cfingerd
#systat  stream tcp   nowait guest  /usr/sbin/tcpd /bin/ps -auwwx
#netstat stream tcp   nowait guest  /usr/sbin/tcpd /bin/netstat -f inet
#
# Аутентификация
#auth    stream tcp   nowait nobody /usr/sbin/in.identd in.identd -l -e -o

Замечание. Не забудьте послать сигнал SIGHUP процессу inetd (killall -HUP inetd) после редактирования файла /etc/inetd.conf:

[root@deep /root]# killall -HUP inetd

Шаг 4.

Для большего улучшения безопасности, Вы можете сделать файл inetd.conf неизменным, используя команду chattr:

[root@deep]# chattr +i /etc/inetd.conf

Файл с атрибутом i не может быть модифицирован, его нельзя удалить или переименовать, к нему нельзя создать ссылки, и никакие данные не могут быть дописаны в файл. Только суперпользователь может установить или снять этот атрибут. Если Вы захотите модифицировать файл inetd.conf, то дайте следующую команду:

[root@deep]# chattr -i /etc/inetd.conf

TCP_WRAPPERS

По умолчанию Red Hat отвечает на все запросы к имеющимся сервисам. Используя TCP_Wrappers, Вы легко сможете оградить сервер от внешних вторжений когда это нужно. Запретите все хосты, добавив ALL: ALL@ALL, PARANOID в /etc/hosts.deny, и определите список тех, кому доступ разрешен в файле /etc/host.allow: это самая безопасная конфигурация. TCP_Wrappers контролируется двумя файлами. Поиск завершается при первом совпадении.

/etc/hosts.allow
/etc/hosts.deny
  • Доступ будет разрешен если пара (клиент, демон) найдена в файле /etc/host.allow.
  • Доступ будет запрещен если пара (клиент, демон) найдена в файле /etc/host.deny.
  • Если пара (клиент, демон) не найдена ни в одном из файлов (/etc/host.allow, /etc/host.deny), то доступ будет разрешен.

Шаг 1.

Редактируйте файл hosts.deny (vi /etc/hosts.deny) добавив следующие строки. По умолчанию доступ запрещен:

# Запрещаем доступ для всех.
ALL: ALL@ALL, PARANOID # Соответствует любому компьютеру, чье имя
                       # не соответствует адресу.

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

Замечание. Для параметра PARANOID. Если Вы хотите запускать telnet и ftp-сервисы на сервере, то не забудьте добавить адрес клиентской машины и IP-адрес в файл /etc/hosts на сервере, иначе будьте готовы ждать несколько минут, пока DNS lookup не завершится по таймауту, до получения строки login.

Шаг 2.

Отредактируйте файл hosts.allow и добавьте в него, к примеру, следующие строки:

# Список серверов которым разрешен доступ.
sshd: 208.164.186.1 gate.openarch.com

Машина с IP-адресом 208.164.186.1 и именем gate.openarch.com является одним из клиентов сервиса sshd.

Шаг 4.

Программа tcpdchk занимается проверкой правильности конфигурационного файла TCP_Wrapper. Она выдает сообщения о потенциальных и реальных проблемах.

После того, как конфигурирование завершено, запустите программу tcpdchk:

[root@deep]# tcpdchk

Замечание. Ошибка может выглядеть следующим образом:
warning: /etc/hosts.allow, line 6: can't verify hostname: gethostbyname(win.openna.com) failed.

Если Вы получили подобное сообщение, то проверьте Ваш конфигурационный файл DNS-сервера на наличие в нем этого имени компьютера.

Не позволяйте системе выводить файл issue

Если Вы не хотите, чтобы файл issue выводился на экран, когда удаленный пользователь подключается к серверу, измените опцию telnetd в файле /etc/inetd.conf:

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h

Флаг -h говорит демону не выводить любую системную информацию, ограничиться только запросом login:. Эту возможность необходимо использовать только, когда на сервере запускается демон telnet (вместо него я рекомендую использовать ssh).

Файл /etc/host.conf

Linux использует библиотеку resolver для преобразования IP=адресов в имена машин. Файл /etc/host.conf определяет порядок работы этой библиотеки. Он говорит, какой сервис и в каком порядке использовать для преобразования адресов.

Редактируйте файл host.conf (vi /etc/host.conf) и добавьте следующие строки:

# Вначале использовать lookup через DNS, а затем файл /etc/hosts.
order bind,hosts
# Мы имеем компьютеры с несколькими IP-адресами.
multi on
# Осуществлять проверку подмены IP-адресов.
nospoof on

Опция order определяет порядок использования сервисов. Для улучшения производительности и повышения безопасности рекомендуется настроить библиотеку определителей так, чтобы вначале использовался DNS, а затем файл /etc/hosts. Конечно, DNS должен быть предварительно настроен.

Опция multi говорит, что компьютеры, описанные в файле /etc/hosts, могут иметь несколько IP-адресов (несколько интерфейсов ethN). Например, шлюз всегда имеет несколько адресов, и у них эта опция должна быть всегда определена в ON.

Опция nospoof: не разрешать подмену адресов. IP-Spoofing это способ атаки при котором удаленный компьютер представляется кем-то, кем он не является. При этом виде нападения удаленный компьютер представляется как законный сервер, а затем использует установленные соединения для взаимодействия с другими компонентами сети. Эта опция должна быть установлена в ON на всех типах серверов.

Файл /etc/securetty

Файл /etc/securetty позволяет Вам определить, с каких TTY-устройств может входить в систему пользователь root. Этот файл читается программой login (/bin/login). Он имеет очень простой формат. В каждой строке перечислены имена tty-устройств, с которых root может входить в систему, а с остальных доступ ему будет запрещен.

Отключите любые tty, которые Вам не нужны, закомментировав их (знак # в начале строки):

tty1
#tty2
#tty3
#tty4
#tty5
#tty6
#tty7
#tty8

В результате root сможет входить в систему только с терминала tty1. С остальных терминалов Вы сможете переключаться на root, используя команду su.

Специальные пользователи

Это очень важно. Выключите все ненужные специальные логины пользователей, которые созданы по умолчанию в Вашей системе (это необходимо проделывать после каждого обновления). Linux использует их для выполнения различных операций, которые Вам скорее всего не нужны. Если Вы не нуждаетесь в каких-либо логинах, то удалите их. Чем больше у Вас заведено пользователей, тем легче проникнуть в систему.

Мы предполагаем, что Вы используете механизм теневых паролей. Если это не так, то установите Shadow password suite это улучшит безопасность сервера. Если Вы следовали нашим инструкциям при инсталляции системы и отметили в разделе "Authentication Configuration" пункт "Enable Shadow Passwords", то в системе активизирован механизм теневых паролей.

Для удаления пользователей используйте команду:

[root@deep]# userdel username

Для удаления группы используйте команду:

[root@deep]# groupdel username

Шаг 1.

Введите следующие команды на терминале для удаления специальных пользователей:

[root@deep]# userdel adm
[root@deep]# userdel lp
[root@deep]# userdel sync
[root@deep]# userdel shutdown
[root@deep]# userdel halt
[root@deep]# userdel news
[root@deep]# userdel uucp
[root@deep]# userdel operator
[root@deep]# userdel games (удалите если не используете X Window).
[root@deep]# userdel gopher
[root@deep]# userdel ftp (удалите если не используете анонимный ftp).

Шаг 2.

Удалите ненужные группы пользователей:

[root@deep]# groupdel adm
[root@deep]# groupdel lp
[root@deep]# groupdel news
[root@deep]# groupdel uucp
[root@deep]# groupdel games (удалите если не используете X Window).
[root@deep]# groupdel dip
[root@deep]# groupdel pppusers
[root@deep]# groupdel popusers (удалите если не используете POP-сервер).
[root@deep]# groupdel slipusers

Шаг 3.

Добавьте необходимых Вам пользователей. Чтобы добавить нового пользователя используйте команду:

[root@deep]# useradd username

Для добавления или изменения пароля для пользователя используйте команду:

[root@deep]# passwd username

Например:

[root@deep]# useradd admin
[root@deep]# passwd admin

На экране должен появиться следующий текст:

Changing password for user admin
New UNIX password: somepasswd
passwd: all authentication tokens updated successfully

Шаг 4.

Бит постоянства может быть использован для предотвращения случайного удаления или переписывания файлов, которые должны быть защищены. Они также могут быть защищены от создания символических ссылок, которые могут быть использованы для атак на файлы /etc/passwd, /etc/shadow, /etc/group или /etc/gshadow.

Для установки бита постоянства на файлы /etc/passwd, /etc/shadow, /etc/group и /etc/gshadow выполните следующие команды:

[root@deep]# chattr +i /etc/passwd
[root@deep]# chattr +i /etc/shadow
[root@deep]# chattr +i /etc/group
[root@deep]# chattr +i /etc/gshadow

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

Блокирование выполнения команды su root от других пользователей

Если Вы не хотите, чтобы кто-нибудь выполнял команду su root или хотите ограничить пользователей, которые могут пользоваться этой командой, то добавьте следующие две строки в начало файла конфигурации su, расположенного в каталоге /etc/pam.d. Я настоятельно рекомендую ограничить пользователей, которые могут выполнять команду su.

Шаг 1.

Редактируйте файл su (vi /etc/pam.d/su) и добавьте в него две строки:

auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=wheel

После добавления этих строк файл /etc/pam.d/su должен выглядеть так:

#%PAM-1.0
auth       sufficient   /lib/security/pam_rootok.so   debug
auth       required     /lib/security/pam_wheel.so    group=wheel
auth       required     /lib/security/pam_pwdb.so     shadow nullok
account    required     /lib/security/pam_pwdb.so
password   required     /lib/security/pam_cracklib.so
password   required   /lib/security/pam_pwdb.so   shadow use_authtok nullok
session    required     /lib/security/pam_pwdb.so
session    optional     /lib/security/pam_xauth.so

Который говорит, что только члены группы wheel могут использовать команду su root, и все действия будут регистрироваться. Заметим, что группа wheel является специальным логином, который используется для этой цели. Подобное ограничение пользователей, способных выполнять команду su root совместно с ограничением терминалов, с которых root может входить в систему, существенно увеличит безопасность сервера.

Шаг 2.

После того, как Вы изменили файл /etc/pam.d/su, самое время определить пользователей, которые могут выполнять su root. Например, если Вы хотите чтобы admin был членом группы wheel введите следующую команду:

[root@deep]# usermod -G10 admin

Здесь опцией G определяется список цифровых значений групп, в которые входит пользователь admin. В данном случае группе wheel соответствует 10. Используйте приведенную выше команду для всех пользователей, которым будет разрешено переходить к root.

Замечание. Если Вы не можете выполнить команду su в терминале GNOME, то это потому, что Вы используете неправильный терминал.

Ограничение ресурсов

Файл limits.conf, находящийся в каталоге /etc/securitty, может быть использован для ограничения ресурсов, потребляемых пользователями Вашей системы. Ограничьте ресурсы всем пользователям, чтобы они не смогли осуществить DoS-атаки (количество процессов, объем памяти и т. д.). Эти ограничения будут накладываться на пользователей как только они будут входить в систему. Для примера, ограничьте пользователей так, как это описано здесь.

Шаг 1.

Редактируйте файл limits.conf (vi /etc/security/limits.conf) и добавьте в него следующие строки:

*       hard        core           0
*       hard        rss         5000
*       hard        nproc         20

Он говорит, что необходимо запретить создание core-файлов (core 0), ограничить число процессов не более 20 (nproc 20) и объем используемой памяти не более 5М (rss 5000) для всех пользователей, кроме root. Все вышесказанное относится только к пользователям, которые могут подключаться к системе через login. Символ "*" означает всех пользователей, имеющих доступ на данный сервер.

Шаг 2.

Вы должны отредактировать файл /etc/pam.d/login и добавить в его конец следующие строки:

session required /lib/security/pam_limits.so

После этого файл должен выглядеть так:

#%PAM-1.0
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_pwdb.so shadow nullok
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_pwdb.so nullok use_authtok md5 shadow
session required /lib/security/pam_pwdb.so
session required /lib/security/pam_limits.so
#session optional /lib/security/pam_console.so

Больший контроль над монтируемыми файловыми системами

Вы можете получить больший контроль над смонтированными файловыми системами (например, /home и /tmp), используя опции noexec, nodev и nosuid. Они могут быть определены в файле /etc/fstab, который содержит описания каждой монтируемой файловой системой. Для получения большей информации об этих опциях читайте man страницу о mount (8).

Опции, связанные с безопасностью, используемые в /etc/fstab:
Defaults позволяет все (quota, read-write и suid) на этом разделе.
Noquota не использовать квоты пользователей на этом разделе.
nosuid не использовать SUID/SGID-доступ на этом разделе.
nodev нет символьных и специальных устройств на этом разделе.
noexec нет исполняемых программ на этом разделе.
quota пользовательские квоты действуют на этом разделе.
ro позволять доступ только для чтения к этому разделу.
rw позволять доступ на чтение/запись к этому разделу.
suid позволять SUID/SGID-доступ на этом разделе.

Редактируйте файл fstab (vi /etc/fstab) и измените то, что Вам нужно:

/dev/sda11 /tmp  ext2 defaults 1 2
/dev/sda6  /home ext2 defaults 1 2

Должны теперь читаться:

/dev/sda11 /tmp  ext2 defaults,nosuid,nodev,noexec 1 2
/dev/sda6  /home ext2 defaults,nosuid,nodev        1 2

nodev указывает не интерпретировать символьные и блочный специальные устройства на файловой системе, nosuid предписывает не позволять работать биту смены идентификатора пользователя и идентификатора группы, noexec не позволяет выполнять любые двоичные файлы на файловой системе.

Замечание: для нашего примера, устройство /dev/sda11 представляется как /tmp и dev/sda6 как /home на нашей системе. Конечно, у Вас это будет выглядеть по-другому, в зависимости от того, как разбит диск, и диски какого типа Вы используете (IDE: hda, hdb, hdc и т.д или SCSI: sda, sdb, sdc и т.д.).

Перемещение программы RPM и изменение прав доступа к ней

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

Переместите RPM на флоппи-диск:

[root@deep]# mount /dev/fd0 /mnt/floppy
[root@deep]# mv /bin/rpm /mnt/floppy
[root@deep]# umount /mnt/floppy

Замечание. Никогда не деинсталлируйте RPM полностью.

Также можно изменить права доступа к RPM c 755 на 700. В этом случае никто, кроме пользователя root, не сможет использовать эту программу.

Измените права доступа к файлу /bin/rpm:

[root@deep]# chmod 700 /bin/rpm

Настройка shell

Чтобы сделать легким повторный ввод длинных команд, bash shell может запоминать до 500 команд в файле ~/.bash_history (где ~/ Ваш домашний каталог). Каждый пользователь, который имеет shell-доступ в систему, имеет такой .bash_history файл в своем домашнем каталоге. Уменьшая количество команд, запоминаемых в этом файле, Вы защищаете систему. Когда пользователь случайно ввел в командной строке свой пароль, то он еще долгое время будет хранится в файле .bash_history.

Строки HISTFILESIZE и HISTSIZE в файле /etc/profile определяют количество старых команд, запоминаемых в .bash_history. Для всех пользователей я рекомендую выбрать значения этих переменных поменьше, например, 20.

Редактируйте файл profile (vi /etc/profile) и измените следующие строки:

HISTFILESIZE=20
HISTSIZE=20

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

Шаг 2.

Администратор должен добавить в файл /etc/skel/.bash_logout строку rm -f $HOME/.bash_history. В результате, каждый раз, когда пользователь выходит из системы, его файл .bash_history будет удаляться. Поэтому хакер не сможет получить к нему доступ, когда пользователь не подключен к серверу. Редактируйте файл .bash_logout (vi /etc/skel/.bash_logout) и добавьте следующую строку:

rm -f $HOME/.bash_history

Замечание. Приведенная выше операция будет действовать только на вновь заводимых пользователей. Для уже существующих необходимо вручную отредактировать их файлы .bash_logout.

Файл /etc/lilo.conf

LILO это универсальный загрузчик для Linux. Он не зависит от файловой системы и может загружать ядро Linux как с гибкого диска, так и с жесткого диска. Кроме того, LILO может служить загрузчиком других операционных систем.

LILO очень важен для Linux, и поэтому мы должны защитить его как можно лучше. Наиболее важным конфигурационным файлом является /etc/lilo.conf. С его помощью Вы можете настраивать и улучшать безопасность LILO и всей системы. Следующие три опции чрезвычайно важны для улучшения безопасности.

  1. Добавьте: timeout=00
    Эта опция контролирует, как долго (в десятых долях секунды) LILO ждет ввода информации от пользователя перед тем, как продолжит загрузку по умолчанию. Одним из требований уровня безопасности C2 является возможность установки интервала, равного 0. Установите эту опцию в 0, если у Вас нет необходимости в различных вариантах загрузки.
  2. Добавьте: restricted
    Эта опция ослабляет парольную защиту, так как она требует введение пароля только, если были определены параметры загрузки (например, linux single). Она может использоваться только совместно с опцией "password". Убедитесь, что Вы используете эту опцию с каждым образом.
  3. Добавьте: password=<password>
    Это опция требует запроса пароля у пользователя, если он загружает linux в однопользовательском режиме. Пароль является зависимым от регистра. Обязательно проверьте, чтобы файл /etc/lilo.conf мог читать только пользователь root.

Ниже приведена процедура защиты LILO.

Шаг 1.

Измените файл /etc/lilo.conf:

boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=00
Default=linux
restricted
password=<password>   Определите свой пароль!
image=/boot/vmlinuz-2.2.12-20
label=linux
initrd=/boot/initrd-2.2.12-10.img
root=/dev/sda6
read-only

Шаг 2.

Сделайте этот файл доступным для чтения только пользователем root (в файле хранится пароль в незашифрованном виде):

[root@deep]# chmod 600 /etc/lilo.conf

Шаг 3.

Выполните следующую команду, чтобы все изменения вошли в силу:

[root@deep]# /sbin/lilo -v

Шаг 4.

Защитите файл от изменения и удаления установив на него атрибут неизменчивости:

[root@deep]# chattr +i /etc/lilo.conf

Теперь, чтобы внести в /etc/lilo.conf какие-нибудь изменения, этот атрибут надо снять:

[root@deep]# chattr -i /etc/lilo.conf

Запрещение перезагрузки системы по комбинации клавиш Control-Alt-Delete

Если Вы закомментируете строку, описанную ниже, в файле /etc/inittab, то будет отключена возможность использования комбинации клавиш ctrl-alt-del для перезагрузки компьютера. Это чрезвычайно важно, если Вы не можете обеспечить полную физическую безопасность Вашего сервера.

Редактируйте файл inittab (vi /etc/inittab) и измените строку:

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

на:

#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

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

[root@deep]# /sbin/init q

Физические твердые копии всех важных файлов регистрации

Один из важнейших аспектов защиты это целостность лог-файлов, расположенных в /var/log. Если взломщик преодолел все Ваши оборонительные редуты, то вся Ваша надежда остается на них. Поэтому очень важно продумать методы, которые позволят Вам контролировать целостность лог-файлов. Если на Вашем сервере установлен сервер печати или подобный сервер есть в сети, то можно создавать твердые копии всех, на Ваш взгляд, важных логов. Это легко осуществить, имея принтер с непрерывной подачей бумаги и перенаправляя все сообщения syslog в /dev/lp0. Взломщик может изменить на сервере любые файлы и программы, но он ничего не сможет поделать с бумагой.

Пример:

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

Редактируйте файл syslog.conf (vi /etc/syslog.conf) и добавьте в его конец следующую строку:

authpriv.*;mail.*;local7.*;auth.*;daemon.info /dev/lp0

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

[root@deep]# /etc/rc.d/init.d/syslog restart

Пример:

Регистрация всех telnet, почтовых, ssh-соединений и загрузочных сообщений с Вашего сервера на принтере удаленного сервера, находящегося в Вашей сети.

Если Вы не имеете принтера в Вашей сети, то можно перенаправлять все syslogd-сообщения на удаленный сервер. Для этого, во-первых, добавьте в файл syslogd.conf вышеприведеднную строку, только замените в ней /dev/lp0 на имя или адрес удаленного сервера. Во-вторых, запустите на удаленном сервере демон syslogd с опцией -r. Используя этот метод, Вы легко можете собирать все логи на одной машине, что существенно облегчает администрирование. Редктируйте файл syslog.conf (vi /etc/syslog.conf) на удаленном сервере (например, на mail.openarch.com) и добавьте в его конец следующую строку:

authpriv.*;mail.*;local7.*;auth.*;daemon.info /dev/lp0

По умолчанию, демон syslogd не принимает сообщения от удаленных компьютеров. Для включения этого добавьте опцию -r при запуске syslogd:

Вместо

daemon syslogd -m 0

используйте:

daemon syslogd -r -m 0

Перезапустите демон syslogd, чтобы изменения вступили в силу:

[root@mail]# /etc/rc.d/init.d/syslog restart

Если на удаленном сервере настроен брандмауэр, то необходимо добавить в него следующее правило:

ipchains -A input -i $EXTERNAL_INTERFACE -p udp -s $SYSLOG_CLIENT \
         -d $IPADDR 514 -j ACCEPT

где, EXTERNAL_INTERFACE="eth0" в файле настроек firewall.
IPADDR="208.164.186.2" в файле настроек firewall.
SYSLOG_CLIENT="208.164.168.0/24" в файле настроек firewall.

Сейчас перезагрузите firewall на удаленном сервере, чтобы сделанные изменения вступили в силу.

Это правило разрешает удаленному серверу принимать сообщения от клиента на порт 514 (порт сервиса syslog). Для получения большей информации о firewall читайте главу 7 "Сетевой брандмауэр".

В заключение, редактируйте файл /etc/syslog.conf Вашего локального сервера, добавив в его конец следующую строку:

authpriv.*;mail.*;local7.*;auth.*;daemon.info @mail

где mail имя удаленного сервера. Теперь, если взломщик сотрет все лог-файлы Вашего сервера, у Вас останутся их копии на другой машине. По ним Вы сможете отследить, кто и какие действия предпринял.

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

[root@deep]# /etc/rc.d/init.d/syslog restart

Так же как и на удаленном сервере, Вам надо добавить новое правило для firewall и на локальной машине:

ipchains -A output -i $EXTERNAL_INTERFACE -p udp -s $IPADDR 514 \
         -d $SYSLOG_SERVER 514 -j ACCEPT

где
EXTERNAL_INTERFACE="eth0" в файле настроек firewall.
IPADDR="208.164.186.1" в файле настроек firewall.
SYSLOG_SERVER="mail.openarch.com" в файле настроек firewall.

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

[root@deep]# /etc/rc.d/init.d/firewall restart

Это правило разрешает прохождение исходящих пакетов к удаленному серверу на порт 514 (порт сервиса syslog).

Для получения большей информации о firewall читайте главу 7 "Сетевой брандмауэр".

Замечание: никогда не используйте в качестве syslog-сервера маршрутизирующие сервера. При использовании программы sysklogd существует множество опций. Для получения более подробной информации читайте man к sysklogd (8), syslog(2), и syslog.conf(5).

Установка прав доступа к скриптам запуска сервисов, расположенных в каталоге /etc/rc.d/init.d.

Установите права доступа к скриптам, которые отвечают за запуск и остановку сервисов:

[root@deep]# chmod -R 700 /etc/rc.d/init.d/*

Только пользователю root позволено читать, записывать и запускать эти скрипты. Я не думаю, что обычным пользователям необходимо знать об их содержании.

Замечание. Если Вы устанавливаете новую программу или обновляете существующую, которая использует инициализационные скрипты System V, расположенные в /etc/rc.d/init.d, то не забудьте проверить и при необходимости изменить права доступа к ним.

Файл /etc/rc.d/rc.local

По умолчанию, когда Вы подключаетесь к Linux-системе, Вам выдается сообщение об имени дистрибутива, его версии, версии ядра и имени сервера. Это совершенно не нужно, так как дает много информации злоумышленнику. Вы должны оставить только запрос "Login:".

Шаг 1.

Чтобы сделать это, закомментируйте следующие строки в файле /etc/rc.d/rc.local:

# Эти строки будут заменять содержимое файла /etc/issue
# при каждой перезагрузке.
#echo "" > /etc/issue
#echo "$R" >> /etc/issue
#echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue
#cp -f /etc/issue /etc/issue.net
#echo >> /etc/issue

Шаг 2.

Удалите файлы issue.net и issue в каталоге /etc:

[root@deep]# rm -f /etc/issue
[root@deep]# rm -f /etc/issue.net

Замечание. Файл /etc/issue.net содержит информации, которая выдается всякий раз, когда осуществляется сетевое подключение к серверу (например, через telnet или ssh). Он может быть найден в каталоге /etc, также как и файл issue, содержащий аналогичную информацию для локальных пользователей. Это простые текстовые файлы, и Вы можете их легко настраивать под свои нужды, но при этом необходимо изменить скрипт /etc/rc.d/rc.local, так как он при каждой перезагрузке пересоздает эти файлы.

Биты программ, подчиненных пользователю root

Все программы и файлы на Вашем компьютере с символом s в поле режима доступа имеют включенным бит SUID (-rwsr-xr-x) или SGID (-r-xr-sr-x). Так как эти программы дают особые привилегии пользователям, которые их выполняют, то важно удалить бит s с программ, владельцем которых является root и которым не нужны подобные возможности. Это осуществляется выполнением команды chmod a-s с именем файла в качестве аргумента.

К таким программам относятся:

  1. Программы, которые никогда не используются.
  2. Программы, которые должен запускать только root.
  3. Программы используемые редко и которые могут использоваться через механизм su root.

Мы поместили знак * рядом с программами, для которых бит s должен быть снят. Помните, что для корректной работы системы необходимы некоторые suid-программы.

Для нахождения всех файлов имеющих бит s, владельцами которых является root используйте команду:

[root@deep]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls \
                    -lg {} \;
*-rwsr-xr-x 1 root root 35168 Sep 22 23:35 /usr/bin/chage
*-rwsr-xr-x 1 root root 36756 Sep 22 23:35 /usr/bin/gpasswd
*-r-xr-sr-x 1 root tty 6788 Sep 6 18:17 /usr/bin/wall
-rwsr-xr-x 1 root root 33152 Aug 16 16:35 /usr/bin/at
-rwxr-sr-x 1 root man 34656 Sep 13 20:26 /usr/bin/man
-r-s--x--x 1 root root 22312 Sep 25 11:52 /usr/bin/passwd
-rws--x--x 2 root root 518140 Aug 30 23:12 /usr/bin/suidperl
-rws--x--x 2 root root 518140 Aug 30 23:12 /usr/bin/sperl5.00503
-rwxr-sr-x 1 root slocate 24744 Sep 20 10:29 /usr/bin/slocate
*-rws--x--x 1 root root 14024 Sep 9 01:01 /usr/bin/chfn
*-rws--x--x 1 root root 13768 Sep 9 01:01 /usr/bin/chsh
*-rws--x--x 1 root root 5576 Sep 9 01:01 /usr/bin/newgrp
*-rwxr-sr-x 1 root tty 8328 Sep 9 01:01 /usr/bin/write
-rwsr-xr-x 1 root root 21816 Sep 10 16:03 /usr/bin/crontab
*-rwsr-xr-x 1 root root 5896 Nov 23 21:59 /usr/sbin/usernetctl
*-rwsr-xr-x 1 root bin 16488 Jul 2 10:21 /usr/sbin/traceroute
-rwxr-sr-x 1 root utmp 6096 Sep 13 20:11 /usr/sbin/utempter
-rwsr-xr-x 1 root root 14124 Aug 17 22:31 /bin/su
*-rwsr-xr-x 1 root root 53620 Sep 13 20:26 /bin/mount
*-rwsr-xr-x 1 root root 26700 Sep 13 20:26 /bin/umount
*-rwsr-xr-x 1 root root 18228 Sep 10 16:04 /bin/ping
*-rwxr-sr-x 1 root root 3860 Nov 23 21:59 /sbin/netreport
-r-sr-xr-x 1 root root 26309 Oct 11 20:48 /sbin/pwdb_chkpwd

Для отключения бита s введите следующие команды:

[root@deep]# chmod a-s /usr/bin/chage
[root@deep]# chmod a-s /usr/bin/gpasswd
[root@deep]# chmod a-s /usr/bin/wall
[root@deep]# chmod a-s /usr/bin/chfn
[root@deep]# chmod a-s /usr/bin/chsh
[root@deep]# chmod a-s /usr/bin/newgrp
[root@deep]# chmod a-s /usr/bin/write
[root@deep]# chmod a-s /usr/sbin/usernetctl
[root@deep]# chmod a-s /usr/sbin/traceroute
[root@deep]# chmod a-s /bin/mount
[root@deep]# chmod a-s /bin/umount
[root@deep]# chmod a-s /bin/ping
[root@deep]# chmod a-s /sbin/netreport

Если Вы хотите узнать, что делает каждая из программ используйте руководство man. Например,

[root@deep]# man netreport

Параметры, настраиваемые в ядре

В новой версии Red Hat 6.2 все параметры ядра, доступные через /proc/sys могут быть настроены при запуске. Вы можете использовать для этого новый файл /etc/sysctl.conf. Он читается и загружается каждый раз при загрузке системы. Все изменения в /proc/sys должны осуществляться через /etc/sysctl.conf, так как он загружается раньше rc.local и других пользовательских скриптов. Ниже мы опишем все опции, связанные с сетевой безопасностью, которые Вы должны настроить для Вашего сервера Red Hat 6.1 и Red Hat 6.2.

Предохранение Вашей системы от ответов на ping-запросы

Предохранение Вашей системы от ответов на ping-запросы существенно улучшит сетевую безопасность Вашей системы, так как никто не сможет послать к Вам ping и получить на него ответ. Протокол TCP/IP имеет ряд слабых мест, которые позволяют нападающим использовать в своих целях внешне благоприятные пакеты. Защита сервера от ping может уменьшить эту проблему.

Под Red Hat 6.1

[root@deep /]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера. Невосприимчивость к ping спасет Вас от многих хакеров, потому что они даже не узнают о Вашем существовании. Для восстановления способности отвечать на ping введите следующую команду:

[root@deep /]# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

Под Red Hat 6.2

Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:

# Enable ignoring ping request
net.ipv4.icmp_echo_ignore_all = 1

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

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters      [ OK ]
Bringing up interface lo        [ OK ]

Предохранение Вашей системы от ответов на широковещательные запросы

Так же как и ping-запросы, необходимо отключить и широковещательные сообщения. Когда IP-пакет отправляется на широковещательный адрес (например, 192.168.1.255), он принимается всеми машинами в сети. Затем все машины отвечают на него ICMP эхо-ответом, в результате может возникнуть перегрузка в сети или полный выход из строя (DoS-атака). Для получения большей информации читайте RFC 2644.

Под Red Hat 6.1

[root@deep /]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:

# Enable ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts = 1

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

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters      [ OK ]
Bringing up interface lo        [ OK ]
Bringing up interface eth0      [ OK ]
Bringing up interface eth1      [ OK ]

Протоколы маршрутизации

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

Чтобы заблокировать IP-маршрутизацию от источника введите следующую команду:

Под Red Hat 6.1

[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
> echo 0 > $f
> done

Добавьте эти строки в файл /etc/rc.d/rc.local, чтобы они выполнялись при каждой загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:

# Disables IP source routing
net.ipv4.conf.all.accept_source_route = 0

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

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters      [ OK ]
Bringing up interface lo        [ OK ]
Bringing up interface eth0      [ OK ]
Bringing up interface eth1      [ OK ]

Замечание. Введенные выше команды будет отключать маршрутизацию от источника для всех интерфейсов (lo, ethN, pppN и т. д.).

Включение защиты от TCP SYN Cookie

SYN Attack относится к классу атак "Отказ в обслуживании", которая отбирает на себя все ресурсы сервера и вызывает его перезагрузку. DoS-атаки (нападения, которые выводят сервер из строя из-за большого трафика к серверу, в результате чего сервер не может ответить на поступающие запросы) легко осуществляются из внутренней сети и Интернета. В ядрах 2.1 появилась опция, которая позволяет защитить компьютер от подобной атаки, но по умолчанию она не включена. Для ее включения сделайте следующее:

Под Red Hat 6.1

[root@deep]# echo 1 > /proc/sys/net/ipv4/tcp_syncookies

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:

# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1

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

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters      [ OK ]
Bringing up interface lo        [ OK ]
Bringing up interface eth0      [ OK ]
Bringing up interface eth1      [ OK ]

Замечание. Если при выполнении вышеприведенной команды Вы получили сообщение об ошибке, то проверьте, включена ли у Вас в ядре опция TCP syncookies. (IP: TCP syncookie support (not enabled per default) (CONFIG_SYN_COOKIES) [Y/n/?]).

Запрещение приема ICMP redirect-пакетов

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

Под Red Hat 6.1

[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
> echo 0 > $f
> done

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:

# Disable ICMP Redirect Acceptance
net.ipv4.conf.all.accept_redirects = 0

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

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters      [ OK ]
Bringing up interface lo        [ OK ]
Bringing up interface eth0      [ OK ]
Bringing up interface eth1      [ OK ]

Замечание. Введенные выше команды будет отключать прием ICMP redirect-пакетов для всех интерфейсов (lo, ethN, pppN и т. д.).

Включение always-defragging защиты

Эта защиту необходимо включить, если Вы используете Linux-сервер как шлюз с маскарадингом трафика (IP Masquerading).

Под Red Hat 6.1

[root@deep /]# echo 1 > /proc/sys/net/ipv4/ip_always_defrag

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:

# Enable always defragging Protection
net.ipv4.ip_always_defrag = 1

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

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters      [ OK ]
Bringing up interface lo        [ OK ]
Bringing up interface eth0      [ OK ]
Bringing up interface eth1      [ OK ]

Включение защиты от неправильных сообщениях об ошибках

Эта опция будет предупреждать Вас обо все неправильных сообщениях об ошибке.

Под Red Hat 6.1

[root@deep /]# echo 1>/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:

# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1

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

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters      [ OK ]
Bringing up interface lo        [ OK ]
Bringing up interface eth0      [ OK ]
Bringing up interface eth1      [ OK ]

Включение защиты от IP-spoofing

Защита от IP-spoofing предупреждает Вашу сеть от взаимодействия с ложными источниками сообщений, которые часто используются в DoS-атаках.

Под Red Hat 6.1

[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
> echo 1 > $f
> done

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:

# Enable IP spoofing protection, turn on Source Address Verification
net.ipv4.conf.all.rp_filter = 1

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

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters      [ OK ]
Bringing up interface lo        [ OK ]
Bringing up interface eth0      [ OK ]
Bringing up interface eth1      [ OK ]

Фиксирование пакетов с поддельными адресами (spoof), пакетов с маршрутизацией от источника и Redirect-пакетов

Эта защита будет фиксировать все пакеты с поддельными адресами (spoof), пакеты с маршрутизацией от источника и Redirect-пакеты в Ваших лог-файлах.

Под Red Hat 6.1

[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/log_martians; do
> echo 1 > $f
> done

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:

# Log Spoofed Packets, Source Routed Packets, Redirect Packets
net.ipv4.conf.all.log_martians = 1

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

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters [ OK ]
Bringing up interface lo        [ OK ]
Bringing up interface eth0      [ OK ]
Bringing up interface eth1      [ OK ]

Странные или скрытые файлы

Проверьте Вашу систему на наличие странных или скрытых файлов (файлы, которые запускаются периодически и не показываются командой ls), поскольку они могут использоваться для скрытия утилит и информации (программы взлома паролей, парольные файлы из других систем и др.). Обычной методикой в UNIX-системах является расположение скрытых каталогов с необычными именами в пользовательских логинах, например, ".", ".. " (точка точка пробел) или "..^G" (точка точка ctrl-G). Программа find может быть использована для поиска таких программ. Например:

[root@deep]# find / -name ".. " -print -xdev
[root@deep]# find / -name ".*" -print -xdev | cat -v

Также часто используются файлы с именами подобными .mail или .xx.

Поиск всех файлов с включенными битами SUID/SGID

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

Любимым трюком взломщиков является exploit SUID root программ, чтобы в дальнейшем использовать их как скрытый вход в систему. Поэтому Вам необходимо находить и внимательно следить за всеми SUID/SGID-программами, чтобы вовремя заметить изменения, внесенные кем-то в них. Используйте следующую команду для поиска всех SUID/SGID-программ на сервере:

[root@deep]# find / -type f \( -perm -04000 -o -perm -02000 \) \
                    -exec ls -lg {} \;

Замечание. Читайте в этой книге главу 10 "Программное обеспечение обеспечения безопасности (утилиты слежения)", где приведена информация о программе sXid, которая поможет автоматизировать подобные задачи и будет высылать отчеты по электронной почте.

Поиск программ и каталогов, в которые разрешена запись для группы и всех остальных пользователей

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

Для нахождения файлов и каталогов полностью открытых для записи используйте следующие команды:

[root@deep]# find / -type f \( -perm -2 -o -perm -20 \) -exec ls -lg {} \;
[root@deep]# find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg {} \;

Замечание. Для облегчения регулярного поиска и проверки подобных файлов и каталогов можно использовать специализированное программное обеспечение, например, Tripwire. Большую информацию об этом программном продукте можно прочитать в главе 12 "Программы обеспечения безопасности (целостность системы)".

Файлы, не имеющие владельцев

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

Для поиска файлов и каталогов не имеющих владельца используйте команду:

[root@deep]# find / -nouser -o -nogroup

Замечание. Файлы, найденные в каталоге /dev, не считаются неправильными.

Поиск .rhosts-файлов

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

[root@deep]# find /home -name .rhosts

Можно использовать задания cron, чтобы регулярно искать, проверять и удалять файлы $HOME/.rhosts. Не забудьте предупредить пользователей о подобной проверке.

Чтобы использовать cron для периодической проверки и отсылки отчетов через электронную почту о наличие всех .rhosts-файлов сделайте следующее: Создайте от пользователя root скрипт find_rhosts_files в каталоге /etc/cron.daily (touch /etc/cron.daily/find_rhosts_files) и внесите в него следующие строки:

#!/bin/sh
/usr/bin/find /home -name .rhosts | (cat <<EOF
This is an automated report of possible existent ".rhosts" files
on the server deep.openarch.com, generated by the find utility command.
New detected ".rhosts" files under the "/home" directory include:
EOF
cat
) | /bin/mail -s "Content of .rhosts file audit report" root

Сделайте этот скрипт исполняемым и проверьте, чтобы пользователем и группой, владеющими этим файлом, были root:

[root@deep]# chmod 755 /etc/cron.daily/find_rhosts_files
[root@deep]# chown 0.0 /etc/cron.daily/find_rhosts_files

Каждый день по почте пользователю root будут поступать письма с темой: "Content of .rhosts file audit report", содержащие список найденных файлов .rhosts.

Система была взломана

Если Вы поняли, что Ваша система была взломана, то взаимодействуйте с CERT Coordination Center или с Вашим представителем в FIRST (Forum of Incident Response and Security Teams).
Internet Email: cert@cert.org
CERT Hotline: (+1) 412-268-7090
Facsimile: (+1) 412-268-6989
CERT/CC отвечает на личные вопросы 8:00 a.m.-8:00 p.m. EST (GMT -5)/EDT (GMT -4)) по рабочим дным, в критических ситуациях можно звонить в выходные и праздничные дни.