Статьи

Защитите свой сервер Linux

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

В мире разработки наиболее популярным и часто используемым дистрибутивом Linux (известным фанатам Linux как «дистрибутив») является RedHat . Другие варианты с открытым исходным кодом включают Mandrake , Debian или SuSE . В этом уроке мы будем ссылаться на дистрибутив RedHat 9.

Не выключайте свой мозг у двери!

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

Это еще не все! Хакеры и злоумышленники постоянно обновляют себя, и хороший системный администратор будет разносторонним и искусным, изобретая себя по мере необходимости. Я рекомендую эти источники, чтобы помочь вам оставаться в курсе вопросов системного администрирования и безопасности, связанных с вашим сервером Linux:

  • Linuxdocs.org — http://www.linuxdocs.org/
  • CERT — http://www.cert.org/
  • Установка

    Прежде чем вы действительно сможете начать работу, вы должны установить дистрибутив Linux. Поскольку мы настраиваем сервер, мы будем работать без X-Windows (графический пользовательский интерфейс, который поставляется с Redhat). Вы можете установить X, если хотите, но мы не будем использовать его в этом руководстве.

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

    В зависимости от вашего сервера или дистрибутива, расположение файлов, которые я здесь предоставляю, может не совпадать с расположением в вашей системе. Вы можете использовать следующую команду, чтобы найти файл: find / -name filename . Вы также можете использовать такие инструменты, как pico или vi, для редактирования файла, выполнив следующую команду:

     # pico file 

    или

     # vi file 
    Lockdown

    Это первое, что вы хотите сделать, чтобы обезопасить свой новый Linux-блок. Существует ряд действий, которые можно предпринять, чтобы предотвратить опасную деятельность.

     Changing the root Password 

    Самый очевидный и самый простой способ блокировки — изменить (или даже изначально настроить) свой пароль root с самого начала.

    Рекомендуется менять это раз в 30 дней, а также разумно придумать пароль, который нелегко взломать. Существуют приложения, которые могут запускать список паролей для словаря и пытаться взломать пароли таким образом. Существуют также приложения, которые запускают список паролей против словаря и против написания хакером. Поэтому использование термина «d0gf00d» в качестве пароля крайне небезопасно.

    Вы можете изменить свой пароль с помощью команды passwd, войдя в систему как пользователь root.

    Отключить suid

    Время от времени очень ценно, а также очень опасно иметь возможность запускать приложение от имени другого пользователя. Наиболее распространенное применение этого с suid. С помощью suid пользователь с ограниченными правами может запускать приложение, как если бы он был привилегированным пользователем. Например, веб-сервер Apache, который по своему дизайну работает как собственный пользователь, может выполнять команды от имени пользователя root. Таким образом, обычный пользователь мог бы получить доступ и редактировать файл /etc/passwd , среди прочего.

    Вы можете узнать, какие файлы используют suid, выполнив следующую команду. Все, что имеет «s» в столбце разрешений (слева), может работать с suid.

     # ls -alF `find / -perm -4000` > /root/suid.txt 

    На вашем сервере вы можете получить что-то вроде этого в /root/suid.txt:

     -rwsr-xr-x    1 root     root        60104 Apr  1  2002 /bin/mount*  -rwsr-xr-x    1 root     root        35192 Apr 18  2002 /bin/ping*  -rwsr-xr-x    1 root     root        19116 Apr  8  2002 /bin/su*  -rwsr-xr-x    1 root     root        30664 Apr  1  2002 /bin/umount*  -r-sr-xr-x    1 root     root       120264 Apr  9  2002 /sbin/pwdb_chkpwd*  -r-sr-xr-x    1 root     root        16992 Apr  9  2002 /sbin/unix_chkpwd*  -rwsr-xr-x    1 root     root        37528 Jan 17  2002 /usr/bin/at*  -rwsr-xr-x    1 root     root        34296 Mar 27  2002 /usr/bin/chage*  -rws--x--x    1 root     root        12072 Apr  1  2002 /usr/bin/chfn*  -rws--x--x    1 root     root        11496 Apr  1  2002 /usr/bin/chsh*  -rwsr-xr-x    1 root     root        21080 Apr 15  2002 /usr/bin/crontab*  -rwsr-xr-x    1 root     root        36100 Mar 27  2002 /usr/bin/gpasswd*  -rwsr-xr-x    1 root     root        19927 Apr 17  2002 /usr/bin/lppasswd*  -rws--x--x    1 root     root         4764 Apr  1  2002 /usr/bin/newgrp*  -rs--x--x    1 root     root        15104 Mar 13  2002 /usr/bin/passwd*  -rwsr-xr-x    1 root     root        14588 Jul 24  2001 /usr/bin/rcp*  -rwsr-xr-x    1 root     root        10940 Jul 24  2001 /usr/bin/rlogin*  -rwsr-xr-x    1 root     root         7932 Jul 24  2001 /usr/bin/rsh*  -rwsr-xr-x    1 root     root       219932 Apr  4  2002 /usr/bin/ssh*  ---s--x--x    1 root     root        84680 Apr 18  2002 /usr/bin/sudo*  -rwsr-xr-x    1 root     root        32673 Apr 18  2002 /usr/sbin/ping6*  -r-sr-xr-x    1 root     root       451280 Apr  8  2002 /usr/sbin/sendmail.sendmail*  -rwsr-xr-x    1 root     root        20140 Mar 14  2002 /usr/sbin/traceroute*  -rwsr-xr-x    1 root     root        13994 Apr 18  2002 /usr/sbin/traceroute6*  -rws--x--x    1 root     root        22388 Apr 15  2002 /usr/sbin/userhelper*  -rwsr-xr-x    1 root     root        17461 Apr 19  2002 /usr/sbin/usernetctl* 

    Многие системные администраторы рекомендуют отключать такие службы, как ping и traceroute, которые не требуются. В этом конкретном выводе я собираюсь отключить /usr/bin/chage , /usr/bin/chfn , /usr/bins/chsh , /bin/mount ,
    /bin/umount , /usr/bin/gpasswd , /usr/sbin/usernetctl , /usr/sbin/traceroute , /usr/sbin/traceroute6 ,
    /usr/bin/newgrp и /usr/sbin/ping6 , /bin/ping .

    Чтобы отключить suid для файла, используйте следующую команду. Это делает файл исполняемым только владельцем, а также делает его неизменным (невозможно изменить, удалить или даже связать с ним):

     # chmod 111 /path/to/file  # chattr +I /path/to/file 

    Помните, эмпирическое правило: если что-то не нужно, отключите это!

    /etc/securetty — Далее вам нужно отредактировать файл / etc / securetty. Этот скрипт позволяет вам определить, какие сервисы имеют доступ к вашему устройству TTY. Устройство TTY — это причудливое обозначение для любого базового устройства ввода / вывода, и в этом случае это ваша консоль Linux.

    Файл содержит список служб, с помощью которых root может получить доступ к вашей консоли. Наиболее важными пунктами здесь будет отключение (т. Е. Комментирование с использованием # перед строкой) telnet. Причина этого заключается в том, что telnet транслирует незашифрованные пакеты. С точки зрения непрофессионала, он выкрикивает ваш жизненно важный пароль пользователя через рупор, чтобы мир мог его услышать. Очевидно, вам не нужно транслировать свой пароль root таким образом. Наша коробка имеет следующий файл / etc / securetty, прежде чем мы доберемся до него.

     # pico /etc/securetty  vc/1  #vc/2  #vc/3  #vc/4  #vc/5  #vc/6  #vc/7  #vc/8  #vc/9  #vc/10  #vc/11  tty1  #tty2  #tty3  #tty4  #tty5  #tty6  #tty7  #tty8  #tty9  #tty10  #tty11 

    Мы собираемся закомментировать (поставить # перед соответствующей строкой) все устройства, кроме vc/1 и tty1 , эффективно предотвращая root-доступ, за исключением этих единственных консолей. Единственный способ получить доступ к root — использовать su - .

    /etc/ftpusers — Так же, как telnet отключен для метода передачи, FTP также не должен использоваться для корневых транзакций. Как примечание, для обычного пользователя FTP также неплохо бы найти SFTP-клиента. Это позволит выполнять безопасные транзакции FTP, если хостинг-провайдер предоставляет Secure Shell Access (SSH) своим пользователям. Но вернемся к теме под рукой.

    Когда вы редактируете / etc / ftpusers, убедитесь, что root отсутствует среди перечисленных пользователей. Если это так, закомментируйте это, поставив # в начале строки.

    /etc/xinetd.conf — в старых версиях Linux вместо этого используется /etc/inetd.conf, и у него немного другой синтаксис и использование. Файл xinetd.conf имеет решающее значение для вашей сети. Он запускает службы, которые относятся к вашим сетевым подключениям. Из него вы можете (и должны!) Отключать сервисы, которые не запущены или не нужны.

    В нашей системе мы спустимся дальше, в каталог /etc/xinet.d/, где указан файл для каждой службы межсетевого взаимодействия по умолчанию. В нашей системе этот каталог включает в себя chargen , chargen-udp , daytime , daytime-udp , echo , echo-udp , finger , finger-udp , ntalk , ntalk , rlogin , rsh , rsync , servers , services , talk , telnet , time и time-udp .

    Содержимое этих файлов выглядит примерно так:

     # default: off  # description: A daytime server. This is the tcp  # version.   service daytime  {        type            = INTERNAL        id              = daytime-stream        socket_type     = stream        protocol        = tcp        user            = root        wait            = no        disable         = yes  } 

    Если вам не нужно или вы не знакомы ни с одной из перечисленных служб, перейдите в файл и установите для атрибута disable значение «Да», пока не сможете ознакомиться с использованием этой службы. Убедитесь, что всякий раз, когда вы вносите какие-либо изменения в эти файлы, вы перезапускаете daemon inet daemon используя:

     # /etc/rc.d/init.s/inet restart 
    IPCHAINS
      ipchains - это ответ Linux на брандмауэр.  Есть много интересных трюков, которые можно выполнить с помощью ipchains , и вы можете найти эти трюки в Google.  Но сам модуль довольно прост в использовании, когда вы освоите его.  Я надеюсь, что вы можете остаться со мной в этом вопросе, поскольку это может показаться слишком техническим.  ПОЖАЛУЙСТА, БУДЬТЕ ОСТОРОЖНЫ, КАК ВЫ МОЖЕТЕ ПРОСТО ЗАБЛОКИРОВАТЬ СЕБЯ ИЗ СВОЕЙ СОБСТВЕННОЙ КОРОБКИ.
    
    

    Важно признать, что ipchains самом деле относится к трем отдельным цепям. Типичная команда ipchain состоит из нескольких частей.

    Во-первых, он несет одну из 3 команд.

  • -F промывает цепь
  • -P устанавливает обработку цепочки
  • -A добавляет новое правило в цепочку
  • Чтобы настроить цепочку, вы можете использовать:

     # ipchains --F input  # ipchains --A input REJECT 

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

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

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

    Обратите внимание, что в Linux вы можете определить сетевой IP-адрес исходного компьютера через ifconfig или в Windows, используя команду ipconfig в командной строке. Остальная сеть также находится в частном блоке 192.168.xx.

    Вы можете написать правило, которое выглядит так:

     # ipchains --A input --I eth0  -s 192.168.1.0/255.255.255.0 --d 192.168.25.4 --j ACCEPT 

    Что, черт возьми, это значит? Давайте проанализируем.

  • ipchains --A input — Как упоминалось выше, это добавляет правило к цепочке ввода.
  • -I eth0 — сообщает брандмауэру, что пакетный трафик, на котором мы хотим запустить это правило, подключен к сетевому устройству Ethernet 0 (Eth0).
  • -s 192.168.1.0/255.255.255.0 — IP-адрес источника или отправителя: 192.168.1.0. Число после косой черты обозначает маску, которая в нашем случае равна 255.255.255.0.
  • ACCEPT обозначает, что весь трафик из этого источника должен быть разрешен. Вы также можете использовать REJECT для предотвращения трафика.
  • Лучший выбор для межсетевого экрана ipchains лежит в его документации, которую можно найти здесь .

    Другие хитрости

    Некоторые другие приемы, которые вы можете выполнить для дополнительной защиты вашего сервера, связаны с файлами hosts * вашего сервера.

    В /etc/hosts.deny и /etc/hosts.allow вы можете иметь дело с элементами, называемыми упаковщиками tcp, которые просто «оборачивают» службу в определенное правило. Ваш файл hosts.allow может выглядеть примерно так:

     // Allow localhost  ALL : 127.0.0.1  // Allow SSH Access to anyone except from 192.168.1.101  sshd : ALL EXCEPT 192.168.1.101 : ALLOW 

    Ваш файл /etc/hosts.deny может выглядеть примерно так:

     // No one can connect via anything except loopback localhost  ALL : ALL EXCEPT 127.0.0.1:DENY 
    Обнаружения вторжений

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

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

    Резюме

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

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