Добро Пожаловать  Ru.Board
 

Навигация
  • Главная
  • Форум
  • Темы
  • Топ лист
  • Файловый архив

  • Реклама





    Проголосуй!
    Статьи на какие темы вы бы желали видеть на нашем сайте?

    Системное администрирование Windows
    Администрирование *nix систем
    Обзоры пользовательского программного обеспечения
    Вебмастеринг: тонкости сайтостроения
    Вебмастеринг: юзабилити сайтов
    Вебпрограмминг: полезные решения
    Linux-системы: вопросы по работе
    Вопросы по аппаратной части компьютеров
    Обзоры программ для администраторов
    Компьютерная безопасность (для пользователей)
    Компьютерная безопасность (для администраторов)
    Другое


    Результаты
    Другие Опросы

    голосов: 16198

    Избранное
  • Установка Php-Nuke
  • Установка IkonBoard на локалхосте



    Форум по движку IkonBoard V.2

    Файловый архив для вебмастеров: полезные скрипты

    Форум по операционным системам: Linux, Windows, Mac

  • Поиск по сайту




    В помощь сисадмину: Защита серверов на базе FreeBSD
    Опубликовал Zmey 19.08.2003 03:36

    В помощь сисадмину
    Оригинал документа:
    www.sddi.net/FBSDSecCheckList.html
    Перевод и добавления: by ZmeY (zmey@kahovka.net)

    Этот документ является списком параметров защиты для применения на FreeBSD серверах.

    Существует огромное количество статей, обзоров и инструкций, в которых описаны методы защиты вашей FreeBSD системы. Но все они касаются отдельных методов и способов. Этот документ является списком, который удобно использовать при настройке сервера. Рекомендации, собранные в документе, помогут вам настроить наиболее защищенный сервер. Более подробное описание всех настроек и проблем безопасности вы можете найти, обратившись к списку использованных источников, в конце этого документа.

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

    В этом документе описывается использование некоторых приложений, которые включены в дерево портов FreeBSD, эти приложения помогут сделать ваш сервер еще более защищенным. Мы не описываем конфигурацию брандмауэров (ipfw, ipf, pf), почтовых агентов или веб-сервера, для этого существуют отдельные статьи, которые помогут вам наиболее безопасно установить, настроить и использовать данные приложения. В данном документе мы опишем использование chrootkit - программы для проверки наличия в системе root-kit-ов; rdate - замена для ntp; cvsup и portupgrade для обновления системы и дерева портов.

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

    1. Инсталяция

     
    При разметке диска, лучше всего не использовать значения по умолчанию, а разметить его в ручную, это позволит вам применить различные опции для каждого раздела.
    Если у вас мало пользователей, то нет необходимости делать раздел /usr/home большим. Если вы будете настраивать удаленную регистрацию событий, то раздел /var можно делать не очень большим. Например, разметка диска может выглядеть вот так:

    none(swap)
    /
    /tmp
    /usr
    /usr/home
    /var
    /root

     
    2. Настройка

     
    Отключаем inetd.
    Отключаем port_map (если не планируется использовать NFS).
    Откажемся от ntp, вместо этого мы используем rdate, при обновлении будут использоваться ntp-сервера.
    Нам необходимо установить коллекцию портов, которая будет расположена в /usr/ports.
    После этого мы должны установить следующие порты:

    /security/chrootkit
    /sysutils/rdate
    /sysutils/portupgrade
    /net/cvsup-without-gui
    (считаю, что на серверах не должно быть графического интерфейса).
     

    3. Пользователи

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

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

    vi /etc/group
    sshusers:*:1001:список пользователей находящихся в этой группе

    Сохраним файл и выйдем из vi, для этого зажмите кнопку shift и нажмите дважды кнопку zz (далее это действие будет обозначаться как ZZ).
     

    4. Сообщение дня

     
    cp /etc/motd /etc/motd.old
    rm /etc/motd
    vi /etc/motd

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

    Сохраняем и выходим из vi. ZZ

    cp /etc/motd /etc/issue

    # мы будем использовать motd для показа
    # при удаленной регистрации.
    # см. также /etc/ssh/sshd_config
     

    5. OpenSSH

     
    Мы будем настраивать авторизацию через DSA ключи, без использования паролей. Конечно если кто-то получит доступ к вашему ssh-клиенту с dsa ключами, у вас возникнут проблемы, точно также если кто-то узнает ваш пароль. Используя dsa ключи, мы избавляемся от возможности взломать нашу систему путем перебора паролей. Можете использовать dsa-ключи или пароли, выбирать вам, но никогда не пользуйтесь telnet-ом для удаленного доступа.

    Откройте и отредактируйте файл /etc/ssh/sshd_config для настроек параметров демона, к которому обращаются пользователи при удаленном доступе к вашему серверу.

    vi /etc/ssh/sshd_config

    Port 22

    Protocol 2

    #Hostkey /etc/ssh/ssh_host_key

    PermitRootLogin no

    MaxStartups 5:50:10
    # после 5 неправильных регистраций,
    # отторгать 50% новых подключений, и
    # не отвечать совсем, если число
    # неправильных регистраций превысило 10

    X11Forwarding no

    PrintLastLog yes

    SyslogFacility auth
    # писать информацию о регистрациях в
    # лог-файл to /var/log/auth.

    LogLevel VERBOSE
    # обычно OpenSSH - это единственный путь
    # удаленного доступа к системе, мы
    # хотим получать наиболее полную
    # информацию от этого сервиса.

    PasswordAuthentication no

    PermitEmptyPasswords no

    Banner /etc/issue

    AllowGroups sshusers
    # группа, которой разрешена
    # регистрация через SSH; можно указать
    # несколько групп через запятую.

     

    Сохраняем и выходим из vi. ZZ

    Теперь откроем и отредактируем файл /etc/ssh/ssh_config

    vi /etc/ssh/ssh_config

    ForwardAgent no
    ForwardX11 no
    PasswordAuthentication no
    CheckHostIP yes
    Port 22
    Protocol 2

    Сохраняем и выходим из vi. ZZ

    Теперь, давайте сгенерируем DSA ключи для авторизации с пользователем, AKA <noprivuser>

    su - noprivuser
    ssh-keygen -d

    На экране появится строка:

    Generating public/private dsa key pair.

    Enter file in which to save the key
    #введите файл, в который сохранить ключ

    (/home//.ssh/id_dsa):
    # значение по умолчанию

    Enter pass phrase (empty for no pass phrase):
    # введите пароль для ключа или без пароля

    Enter pass phrase (empty for no pass phrase):
    # подтверждение пароля

    Your identification has been saved in /home//.ssh/id_dsa.
    #Идентификационный ключ сохранен в ....

    Your public key has been saved in /home//.ssh/id_dsa.pub
    #Публичный ключ сохранен в ...

    The key fingerprint is (отпечаток ключа):
    xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx <nonprivuser>@<host>

    cd .ssh
    cat id_dsa.pub > authorized_keys2

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

    6. rc.conf

     
    vi /etc/rc.conf

    inetd_enable="NO"
    # Better ways to run your daemons

    syslogd_enable="YES"
    # Конечно мы хотим вести регистрацию событий. Если вы планируете настроить
    # удаленную регистрацию событий, тогда пропустите следующую строку.
    # Если файлы регистрации событий будут расположены на локальном диске,
    # убедитесь что у вас смонтирован раздел /var.

    syslogd_flags="-ss"
    # Этим мы закроем 514 udp порт если мы не хотим использовать удаленную
    # регистрацию событий на или с этого сервера. Естественно не нужно добавлять
    # эту строчку, если вы планируете настроить удаленную регистрацию событий.

    icmp_drop_redirect="YES"
    # Отключаем прием и отправку переадресовующих ICMP пакетов.

    icmp_log_redirect="YES"
    # Регистрировать переадресовующие ICMP пакеты в журнальном файле

    clear_tmp_enable="YES"
    # Очищать директорию /tmp при загрузке.

    portmap_enable="NO"
    # Если не используется NFS

    icmp_bmcastecho="NO"
    # Предотвращает springboarding и smurf атаки, запрещая серверу отвечать
    # на широковещательные ping-пакеты.

    fsck_y_enable="YES"
    # При ошибках файловой системы на этапе загрузки утилита fsck будет
    # запущена с флагом -y (man fsck)

    update_motd="NO"
    #Не обновлять файл с сообщением дня /etc/motd

    tcp_drop_synfin="YES"
    # Отбрасывать synfin пакеты. Смотри ниже, необходимые изменения в ядре.

    log_in_vain="YES"
    # Установите эту опцию, если вы хотите записывать все попытки подключения
    # к закрытым портам вашего сервера.

    sshd_enable="YES"
    # Это позволит сделать удаленный доступ к серверу более защищенным.

    Сохраняем и выходим из vi. ZZ


     

    7. login.conf & auth.conf

     
    Алгоритм md5, использующийся для шифрования паролей будет заменен на Blowfish алгоритм, который еще не взломан. Надежный алгоритм криптования необходим. Запомните: надежное криптование паролей это тоже часть безопасности. Как было сказано на встрече в Нью-Йорке, наличие надежного алгоритма криптования паролей похоже на прихожую, которая отлично защищена. Никто не может справится с этой защитой, но есть много других способов, чтобы обойти прихожую. Будут сделаны дополнительные настройки для защиты паролей, которые помогут обезопасить ваш сервер.

    vi /etc/login.conf

    Делаем исправления в секции default:\

      :passwd_format=blf:\
      # заменяем алгоритм криптования паролей на
      # Blowfish вместо идущего по умолчанию md5.

      :passwordtime=52d:\
      # период устаревания паролей 52 дня.

      :mixpasswordcase=true:\
      # предупреждать пользователей о том что пароли должны содержать
      # разные символы (mixed-case passwords)

      :minpasswordlen=9:\
      # минимальная длина пароля 9 символов

      :idletime=32:\
      # автоматически отключать пользователей после
      # 32-х минут бездействия

    Сохраняем и выходим из vi. ZZ

    Теперь делаем базу.

    cap_mkdb /etc/login.conf

    Далее необходимо изменить пароли всех пользователей, для того, что бы они были закриптованы при помощи алгоритма Blowfish.
    Убедитесь в этом при помощи vipw, это утилита для быстрого редактирования базы паролей /etc/master.passwd.
    Обратите внимание на второе и последнее поля, которые разделены:
    Второе поле содержит пароль пользователя в зашифрованном виде. Убедитесь, что он начинается с $2. Это говорит о том, что вы удачно перешли с md5 алгоритма криптования на Blowfish.
    Последнее поле определяет шелл пользователя. Для пользователей, которые будут использовать bash должно быть написано /usr/local/bin/bash. Для пользователей, которые не должны иметь права регистрироваться в системе, например пользователь www для Apache, должно быть написано /sbin/nologin Удалите пользователя toor (нажмите dd на строке с пользователем toor).

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

    vi auth.conf crypt_default=blf

    Сохраняем и выходим из vi. ZZ


     

    8. sysctl.conf

     
    vi /etc/sysctl.conf

    net.inet.tcp.blackhole=2
    # Это превращает машину в черную дыру при попытке подключиться к портам, # которые не обслуживаются вашим сервером.

    net.inet.udp.blackhole=1

    kern.ps_showallprocs=0
    # только пользователь root может видеть все запущенные процессы
     

    9. fstab

     
    Теперь добавим некоторые параметры к некоторым точкам монтирования. Например, нет надобности кому-либо иметь возможность запускать программы из /tmp Есть более серьезные ограничения, которые вы можете сделать при помощи настроек в файле /etc/fstab. Например, вы можете сделать некоторые точки монтирования только читаемые, такие как /usr/local/, но это значит, что вы должны иметь копию менее ограничивающего файла /etc/fstab на случай обновлений системы или установки дополнительного программного обеспечения. В нашем случае мы установим только те параметры, которые не придется менять в течение работы.

    #Device Mountpoint   FStype   Options Dump Pass#
    /dev/ad0s1b    none swap sw 0 0
    /dev/ad0s1a / ufs rw 1 1
    /dev/ad0s1f /tmp ufs rw,noexec 2 2
    /dev/ad0s1g /usr ufs rw 2 2
    /dev/ad0s1h /usr/home ufs rw,nosuid,noexec 2 2
    /dev/ad0s1i /var ufs rw,noexec 2 2
    /dev/fd0 /floppy MSDOS rw,noauto,noexec,nosuid,nodev,noatime 0 0
    /dev/acd0c /cdrom cd9660 ro,noauto 0 0
    proc /proc procfs rw 0 0

    Список опций, которые были заданы:

    ro: только чтение,
    rw: чтение запись (устанавливается по умолчанию),
    sw: своп,
    nosuid: опция suid не работает,
    noexec: запрет на запуск файлов,
    nodev: запрещает отображение файлов в виде устройств,
    noauto: не монтируется автоматически во время загрузки,
    noatime: препятствует файловой системе делать запись о доступе к файлу.
     

    10. CVSup

     
    Для того, чтобы исходные коды и документация всегда были обновленными, мы должны регулярно запускать cvsup при помощи задач cron. Обратите внимание, что мы не используем обновление портов, а просто будем регулярно обновлять необходимые исходные коды.

    cp /usr/share/examples/cvsup/stable-supfile /root
    cd /root
    vi stable-supfile

    Исправьте следующие строки:

    *default host=
    # на странице http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvsup.html
    # найдите cvsup зеркало, которое наиболее быстрее будет отвечать на ваши запросы,
    # при помощи команды ping и введите его здесь.
    #Это 68 строка в файле.

    *default release=cvs tag=RELENG_4_7
    #зависит от версии операционной системы, которую вы используете.
    #Это 73 строка файла.

    #src-all
    #закомментируйте это, хотя бы потому, что нам не нужны исходные коды src-game.
    #Это 84 строка в файле.

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

    11. Cron Jobs

     
    chmod 0600 /etc/crontab
    # только пользователь root должен иметь доступ к файлу настройки cron

    touch /var/cron/deny
    # добавьте в этот файл всех пользователей, которым запрещено использовать cron

    chmod 0600 /var/cron/deny

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

    vi /etc/crontab 0 2 * * * root /usr/libexec/locate.updatedb
    # обновлять базу данных утилиты locate каждое утро в 2 часа.

    0 2 * * * root/usr/local/sbin/rdate yourNTPserver
    # запускать rdate каждое утро в 2 часа.

    1 3 * * * root/usr/local/sbin/chkrootkit
    # запускать chkrootkit каждый месяц.


     

    12. Kernel Changes (изменения в ядре)

     
    Сделайте следующие изменения в конфигурационном файле вашего ядра и перекомпилируйте его. Вы можете найти эти и другие опции ядра в файле /usr/src/sys/i386/conf/LINT.

    #pseudo-device bpf
    #Berkley Packet Filter. Защита от снифинга на уровне ядра. #Не убирайте эту опцию, если собираетесь использовать dhcp.

    
    options     SC_NO_HISTORY 
    # отменяем историю команд на виртуальных терминалах
     
    options     SC_DISABLE_REBOOT 
    # отменяем перезагрузку по комбинации клавиш ctl-alt-del
     
    options     SC_DISABLE_DDBKEY 
    # отменяем debug key
     
    options     TCP_DROP_SYNFIN 
    # смотри выше в разделе rc.conf.
    
    options    RANDOM_IP_ID 
    # случайный идентификатор IP пакетов препятствует
    # idlescan-style сканирования. Мешает взломщику
    # определить разряд(rate) генерации пакетов.
     
    options    ICMP_BANDLIM
    # Если вы решите разрешить пакеты icmp к вашему серверу, этот
    # параметр, ограничит количество ответов, что помогает при
    # защите от DOS атак.
    


     

    13. Права доступа к файлам

     
    При помощи команды chmod 600, мы разрешаем доступ только пользователю root на запись и чтение файла.
    При помощи команды chmod 700, мы также даем возможность пользователю root возможность запускать файл.

    chmod 0700 /root
    chmod 0600 /etc/syslog.conf
    chmod 0600 /etc/rc.conf
    chmod 0600 /etc/newsyslog.conf
    chmod 0600 /etc/hosts.allow
    chmod 0600 /etc/login.conf
    chmod 0700 /usr/home/*

     

    14. Сетевой Протокол Времени (Network Time Protocol)

     
    Как вы уже заметили, в нашем crontab файле (файл настройки системы crontab) мы используем rdate вместо ntp для синхронизации часов сервера с мировым временем. Точное время на сервере является очень важным пунктом для правильного ведения журнальных файлов и часто помогает при разрешении конфликтов и устранении неисправностей.

    vi /etc/ntp.conf

    restrict default ignore
    # не работать в качестве ntp сервера.
     

    15. TCP Wrappers

     

    vi /etc/hosts.allow

    sshd : localhost : allow sshd : x.x.x.x, x.x.x.x : allow
    # разрешить ssh запросы только из сетей x.x.x.x

    sshd : all : deny
    # запретить запросы ssh из остальных сетей

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

    ftpd : ALL : deny
     

    16. Console Access (доступ к консоли)

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

    vi /etc/ttys

    console none unknown off insecure
    # запрашивать пароль пользователя root в однопользовательском режиме.

    ttyv0   "/usr/libexec/getty Pc"  cons25   on   insecure
    # Virtual terminals 
    ttyv1   "/usr/libexec/getty Pc"  cons25   on   insecure
    ttyv2   "/usr/libexec/getty Pc"  cons25   on   insecure
    ttyv3   "/usr/libexec/getty Pc"  cons25   on   insecure
    ttyv4   "/usr/libexec/getty Pc"  cons25   on   insecure
    ttyv5   "/usr/libexec/getty Pc"  cons25   on   insecure
    ttyv6   "/usr/libexec/getty Pc"  cons25   on   insecure
    ttyv7   "/usr/libexec/getty Pc"  cons25   on   insecure
    


     

    17. Bash Shell

     
    vi /usr/share/skel/.bash_logout

    # Файл .bash_logout, созданный в домашнем каталоге каждого
    # пользователя, с командой "clear" будет очищать экран при
    # выходе пользователя из системы. Скопируйте в домашний
    # каталог пользователя root.

    clear


     

    18. chflags

     
    Команда chflags увеличивает уровень безопасности (the level of security) на указанных файлах. Эта команда особенно полезна для исполняемых или конфигурационных файлов, код или информация которых может быть испорчены другими программами/действиями.
    Рассмотрите возможность применения команды chflags к приложениям, которые запускаются на вашем сервере, а также к важным конфигурационным файлам.

    Запуск команды производится следующим образом:

    chflags [no]appnd или [no]schg имя файла

    Наберите ls -ol (буквы o и l в маленьком регистре) для просмотре измененных свойств файла. Должны быть два флажка, которые вы заметите.

      sappnd - переводит файл в append-only режим и только для пользователя root. Другими словами, в файл можно добавить любые данные, но первоначальная информация не может быть изменена/удалена.
      schg - делает файл изменяемым только для пользователя root.
    Обе команды имеют префиксы.
    "u" перед sappnd или schg применяет те же опции, но при этом добавляет владельца файла в список пользователей, которые будут иметь доступ к этому файлу.
    "no" перед sappnd или schg отменит chflag опцию на файле.
     

     
    19. Зачистка

     
    Убедитесь, что все строки в файле /etc/inetd.conf закомментированы.
    sockstat -4 #убедитесь что ничего лишнего не запущено.
    tcpdump -xX #пока сервер только появился в сети, посмотрим кто обращается к нему.
     

     
    20. Возможные дополнения
      1. Более жесткие ограничения паролей, включая историю паролей и т.п.
      2. Уровень безопасности на уровне ядра (securelevel on kernel).
      3. Дисковые квоты.
      4. Тюрьмы (jails).
      5. portupgrade/cvs.
      6. Опрятность системы.

     
    Список источников

     
    Должен сказать, что ЛУЧШИМ источником является FreeBSD Handbook.

    FreeBSD Security How-To
    A Basic Guide to Securing FreeBSD 4.x-STABLE
    How to Build a FreeBSD-STABLE Firewall with IPFILTER
    FreeBSD Security Guide
    TCP Wrappers (TCPD) Under FreeBSD
    FreeBSD Handbook, 10.3 Securing FreeBSD
    FreeBSD Handbook, 10.10 OpenSSH
    FreeBSD Handbook, 18.10 NTP
    Taking Advantage of TCP_Wrappers (полагаю, навсегда в дауне)
    BSD Security Fundamentals
    Establishing Good Password Policies
    Rotating Log Files
    Securing BSD Daemons
    Securing FreeBSD
    AusCERT UNIX Security Checklist v2.0
    Changing the Default Password Encryption Algorithm
    Hardening BSD
    Building Linux and OpenBSD Firewalls
    Wes Sonnenreich's www site: OpenlySecure.org
    publisher: http://www.wiley.com/legacy/compbooks/catalog/35366-3.htm
    GIAC's GCUX Practical Assignment, Version 1.8 by Jason Lam on "Securing MySQL Server on FreeBSD 4.5"
    Simple Things to Improve Your System's Security
    Hardening BSD by sil
    FreeBSD Handbook, Obtaining FreeBSD, Appendix A.5, Using CVSup


    КомментироватьВерсия для печати

     
    Категории
  • В помощь сисадмину
  • Все о софте
  • Вебмастеру
  • Игры
  • Hardware
  • О сайте
  • Программирование
  • Операционные системы
  • IkonBoard
  • InvisionBoard
  • Скрипты в примерах
  • Php-Nuke
  • Цифровое изображение
  • Юмор

  • Ссылки по теме
  • Ещё о В помощь сисадмину
  • Новости от Zmey


    Популярная статья в категории В помощь сисадмину:

    Групповые политики Active Directory



  • This web site was made with PHP-Nuke