Назад | Перейти на главную страницу

Какие шаги вы предпринимаете для защиты сервера Debian?

Я устанавливаю сервер Debian, подключенный напрямую к Интернету. Очевидно, я хочу сделать его максимально безопасным. Я хотел бы, чтобы вы, ребята / девушки, добавили свои идеи по его защите и какие программы вы для этого используете.

Я хочу, чтобы часть этого вопроса касалась того, что вы используете в качестве брандмауэра? Просто iptables настраивается вручную или вы используете какое-то программное обеспечение, чтобы помочь вам? Как лучше? Заблокировать все и разрешить только то, что необходимо? Может быть, есть хорошие учебники для новичков по этой теме?

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

Обязательно:

  • установка системы с экспертным режимом, только нужные мне пакеты
  • рукописный брандмауэр с политикой по умолчанию на входе iptables: drop, разрешающий доступ к SSH, HTTP или какому-либо другому запущенному серверу
  • Fail2Ban для SSH [и иногда FTP / HTTP / другое - в зависимости от контекста]
  • отключить вход в систему с правами root, принудительно использовать обычного пользователя и sudo
  • кастомное ядро ​​[просто старая привычка]
  • плановое обновление системы

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

  • отбрасывать политику при выводе, кроме пары разрешенных пунктов назначения / портов
  • integrit для проверки того, что некоторые части файловой системы не изменены [с контрольной суммой, хранящейся вне машины], например Tripwire
  • плановое сканирование хотя бы с помощью nmap системы извне
  • автоматическая проверка журнала на наличие неизвестных шаблонов [но в основном для обнаружения неисправности оборудования или некоторых незначительных сбоев]
  • запланированный запуск chkrootkit
  • неизменный атрибут для /etc/passwd поэтому добавлять новых пользователей немного сложнее
  • / tmp смонтирован с помощью noexec
  • молоток портов или другой нестандартный способ открытия портов SSH [например, посещение «секретной» веб-страницы на веб-сервере разрешает входящее SSH-соединение в течение ограниченного периода времени с IP-адреса, который просматривал страницу. Если вы подключитесь, -m state --satete ESTABLISHED заботится о разрешении потока пакетов, пока вы используете один сеанс SSH]

То, что я не делаю сам, но имеет смысл:

  • grsecurity для ядра
  • удаленный системный журнал, поэтому журналы не могут быть перезаписаны при взломе системы
  • предупреждение о любых логинах SSH
  • настроить Rkhunter и настроить его для работы время от времени

Просто примечание о брандмауэре вашей машины ...

  • Используйте белый список, а не черный, то есть блокируйте все и разрешайте только то, что вам нужно, запрещайте все остальное.
  • Не используйте графические интерфейсы пользователя / ncurses или другое программное обеспечение, которое пытается сделать задачу написания вашего брандмауэра за вас. Если вы это сделаете, вы позволите программе делать предположения за вас - вам не нужно рисковать и не следует. Настройте его сами, если вы не уверены, отключите - скоро вы узнаете, требуется ли это. Если это уже работающая система, и вы не можете нарушить трафик (случайно заблокировав его), запустите tcpdump (дамп в файл) и возьмите образцы - изучите их позже, а затем выясните, что действительно, а что нет.
  • Лично я не вижу смысла запускать службу на нестандартном порту, инструменты в наши дни не так глупы, чтобы предполагать, что если что-то работает, например, на порту 22, то это должен быть ssh, а не иначе - для пример amap, и nmapс -A вариант. Сказав это, вы можете (и, вероятно, должны, если беспокоитесь) изменить свои службы, чтобы скрыть себя от посторонних глаз, например, следующее позволит злоумышленнику узнать точную версию OpenSSH который вы запускаете, они могут искать эксплойты для этой конкретной версии. Если вы скрываете такие вещи, вы усложняете им задачу.
    [root@ud-olis-1 uhtbin]# telnet localhost 22
    Trying 127.0.0.1...
    Connected to localhost.localdomain (127.0.0.1).
    Escape character is '^]'.
    SSH-2.0-OpenSSH_3.9p1
  • Поддерживайте все свои общедоступные службы в актуальном состоянии и устанавливайте последние исправления безопасности.
  • Не храните какие-либо ДАННЫЕ на самом сервере шлюза, по крайней мере, вы выиграете время, когда им удастся взломать этот компьютер, и вы потеряете пару услуг и некоторое время, но не данные.

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

  • iptables подходит для любой системы Linux, но настройте ее самостоятельно.

Никогда не используйте какое-либо «программное обеспечение безопасности», которое не основано на открытых стандартах - оно обречено на то, что будет плохо написано и будет взломано (не вопрос «если», а «когда»). Открытый исходный код и открытые протоколы открыты для всеобщего обозрения и постепенно превращаются в зрелый и надежный продукт; ПО с закрытым исходным кодом в основном полагается на уверенность авторов в том, насколько хорош / безопасен продукт Oни думаю, что это так - то есть небольшое количество глаз против целой земли глаз.

Надеюсь, это поможет :)

  • отключить вход root
  • отключить вход по паролю (разрешить вход только по публичному ключу)
  • изменить порт SSH
  • использовать denyhosts (или аналогичный)

  • напишите свой собственный скрипт iptbles (чтобы вы точно контролировали, что разрешить, и можете отказаться от всего остального)

  • принудительно использовать защищенную связь SSL / TLS и убедиться, что у вас есть действительные подписанные сертификаты с непросроченным сроком действия.

  • включить строгую проверку сертификата для всех внешних служб (например, при аутентификации пользователей с помощью сервера LDAP на другом компьютере)

В качестве общей отправной точки я следую тестам / руководствам из Центр Интернет-безопасности, которые представляют собой исчерпывающий сборник лучших практик безопасности. Не похоже, что их тест Debian обновлялся через какое-то время, но общий обзор шагов таков:

  • Применить последние исправления / пакеты ОС
  • Включите учет системы / ядра / процесса.
  • Включите MAC (например, SELinux или AppArmor).
  • Включите межсетевой экран на основе хоста (iptables).
  • Проверьте APT sources.list (ключи правильные, источники надежные).
  • Сверните сетевые службы, отключите все, что не требуется, и брандмауэр, что есть.
  • Используйте TCPWrappers для дальнейшего ограничения доступа к системе.
  • Используйте только зашифрованные сетевые протоколы, отключите незашифрованные службы (telnet, ftp и т. Д.).
  • Настройте удаленный доступ только по SSH.
  • Отключите пароли для входа пользователей и потребуйте аутентификацию на основе ключей.
  • Отключить совместное использование файловой системы (NFS, SMB).
  • Включите удаленное / централизованное ведение журнала системы (и регулярно просматривайте журналы!).
  • Установите пароль уровня BIOS / прошивки.
  • Установите пароль загрузчика.
  • Настройте резервное копирование системы, составьте план аварийного восстановления и ПРОВЕРЬТЕ, что резервные копии действительны, и что персонал знает процедуры аварийного восстановления!

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

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

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

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

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

Некоторые люди указали на Руководство по обеспечению безопасности Debian. Этого должно хватить на все, кроме военных.

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

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

Я в процессе перехода на полное шифрование диска для всех моих серверов.

Устанавливаю только те сервисы, которыми пользуюсь. У меня нет файрвола; Я настраиваю службы, которые мне нужны, чтобы требовать аутентификации или ограничивать их (собственной конфигурацией программы или TCP-оболочками) определенными IP-адресами. Единственное, что мне нужно было заблокировать с помощью iptables, это memcached, поскольку у него не было файла конфигурации и не использовались TCP-оболочки.

Пользуюсь хорошо, случайно сгенерированный пароли для моих учетных записей и доверять моему серверу SSH (и всем другим службам), чтобы те, кто не знает пароль, не разглашаются. fail2ban предназначен только для тех, у кого ограниченное пространство для файлов журналов, IMO. (У вас должно быть достаточно надежных паролей, чтобы им можно было доверять.)

Прочтите это прекрасное руководство по адресу www.debian.org/doc/manuals/securing-debian-howto/

Я лично меняю порт ssh и использую fail2ban + denyhosts. И блокирую все, что не нужно. Чем больше вы блокируете, тем меньше вам нужно беспокоиться.