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

<p>я устанавливаю сервер debian, который подключен напрямую к интернету. очевидно, я хочу сделать его максимально безопасным. я хотел бы, чтобы вы, ребята, добавили ваши идеи, чтобы защитить их и какие программы вы используете для этого.</p><p>я хочу, чтобы часть этого вопроса охватила то, что вы используете в качестве брандмауэра? просто <a href="http://en.wikipedia.org/wiki/iptables">iptables</a> настроен вручную или вы используете какое-то программное обеспечение, чтобы помочь вам? какой лучший способ? заблокировать все и разрешить только то, что нужно? есть ли хорошие учебники для начинающих по этой теме?</p><p>вы меняете свой порт ssh? используете ли вы программное обеспечение, например <a href="http://en.wikipedia.org/wiki/fail2ban">fail2ban</a> , чтобы предотвратить атаки грубой силы?</p>

<p>обязательно:</p><ul> <li>установка системы в экспертном режиме, только те пакеты, которые мне нужны</li> <li>рукописный брандмауэр с политикой по умолчанию для iptables'input: drop, разрешающий доступ к ssh, http или любому другому серверу, на котором работает</li> <li> <a href="http://en.wikipedia.org/wiki/fail2ban">fail2ban</a> для ssh [и иногда ftp/http/другое - в зависимости от контекста]</li> <li>отключить root-логины, принудительно использовать обычный пользователь и sudo</li> <li>кастомное ядро [просто старая привычка]</li> <li>плановое обновление системы</li> </ul><p>в зависимости от уровня паранойи дополнительно:</p><ul> <li>отбросить политику на выходе, кроме пары разрешенных пунктов назначения/портов</li> <li><code>integrit</code> для проверки того, не были ли изменены некоторые компоненты файловой системы [с контрольной суммой, хранящейся вне машины], например <a href="http://sourceforge.net/projects/tripwire/">tripwire</a> </li> <li>плановое сканирование по крайней мере с nmap системы извне</li> <li>автоматическая проверка журналов на наличие неизвестных шаблонов [но это в основном для обнаружения неисправности оборудования или некоторых небольших сбоев]</li> <li>запланированный запуск <a href="http://en.wikipedia.org/wiki/chkrootkit">chkrootkit</a> </li> <li>неизменный атрибут для <code>/etc/passwd</code> так что добавлять новых пользователей немного сложнее</li> <li>/ tmp монтируется с noexec</li> <li>перехватчик портов или другой нестандартный способ открытия портов ssh [например, посещение "секретной" веб-страницы на веб-сервере разрешает входящее ssh-соединение в течение ограниченного периода времени с ip-адреса, просмотревшего страницу. если вы подключитесь, <code>-m state --satete established</code> заботится о разрешении потока пакетов, пока вы используете один сеанс ssh]</li> </ul><p>вещи, которые я не делаю сам, но имеет смысл:</p><ul> <li> <a href="http://en.wikipedia.org/wiki/grsecurity">grsecurity</a> для ядра</li> <li>удаленный системный журнал, поэтому журналы не могут быть перезаписаны при взломе системы</li> <li>оповещение о любых ssh логинах</li> <li>настроить <a href="http://rkhunter.sourceforge.net/">rkhunter</a> и настроить его для запуска время от времени</li> </ul>

<p>просто заметка о брандмауэре вашей машины ...</p><ul> <li>используйте белый, а не черный список - т.е. блокируйте все и разрешайте только то, что вам нужно, запрещайте все остальное.</li> <li>не используйте gui/ncurses или иное программное обеспечение, которое пытается создать для вас брандмауэр. если вы это сделаете, вы позволите программному обеспечению делать предположения за вас - вам не нужно рисковать и не следует. настройте его самостоятельно, если вы не уверены, отключите его - вы скоро узнаете, требуется ли это. если это уже запущенная и работающая система, и вы не можете нарушить трафик (случайно заблокировав его), запустите tcpdump (дамп в файл) и возьмите примеры - изучите их позже, а затем выясните, что действительно, а что нет.</li> <li>лично я не вижу смысла запускать службу на нестандартном порте, в наши дни инструменты не настолько глупы, чтобы предполагать, что, если что-то работает, например, на порту 22, то это должно быть ssh, а не иначе - для пример <code>amap</code> и <code>nmap</code> 's <code>-a</code> вариант. сказав это, вы можете (и, вероятно, должны, если беспокоитесь) изменить свои службы, чтобы скрыть себя от посторонних глаз, например, следующее позволит злоумышленнику узнать точную версию <code>openssh</code>, которую вы используете, они затем можно искать эксплойты для этой точной версии. если вы прячете такие вещи, вам будет труднее для них.</li> </ul><pre> [root @ ud-olis-1 uhtbin] # telnet localhost 22 попытка 127.0.0.1 ... подключено к localhost.localdomain (127.0.0.1). экранирующий символ - "^]". ssh-2.0-openssh\_3.9p1 </pre><ul> <li>держите все ваши публичные сервисы в актуальном состоянии и обновляйте их самыми последними обновлениями безопасности.</li> <li>не храните никакие данные на самом сервере шлюза, по крайней мере, вы выиграете время, когда им удастся взломать эту машину, и вы потеряете одну или две службы, и некоторое время, но не данные.</li> </ul><p>суть в том, что вам никогда не удастся сделать что-либо на 100% безопасным - это просто не возможно - поэтому цель состоит в том, чтобы сделать его максимально безопасным - если это слишком много усилий, чтобы сломать вашу систему, это достаточно хорошо, и большинство ламеров сценаристы перейдут на следующую систему.</p><ul> <li><code>iptables</code> - это путь для любой системы linux, но настройте его самостоятельно.</li> </ul><p>никогда не используйте никакое "программное обеспечение для обеспечения безопасности", которое не основано на открытых стандартах - они обречены быть плохо написанными и будут взломаны (не вопрос "если", а "когда"). открытые исходные коды и открытые протоколы открыты для публичного изучения и становятся зрелым и надежным продуктом; программное обеспечение с закрытым исходным кодом полагается, главным образом, на уверенность авторов в том, насколько великим/безопасным продуктом <em>они</em> думают, что это так, т. е. небольшое количество глаз против земли, полной глаз.</p><p>надеюсь, это поможет :)</p>

<ul> <li>отключить root-логин</li> <li>отключить вход по паролю (разрешить вход только по открытому ключу)</li> <li>правка порт ssh</li> <li> <p>использовать denyhosts (или аналогичный)</p> </li> <li> <p>написать свой собственный скрипт iptbles (чтобы вы точно контролировали, что разрешать, и могли отбросить все остальное)</p> </li> <li> <p>принудительное использование защищенных соединений ssl/tls и наличие действительных, не просроченных и подписанных сертификатов</p> </li> <li>включить строгую проверку сертификатов для всех внешних служб (например, при аутентификации пользователей с помощью сервера ldap на другом компьютере)</li> </ul>

<p>начните здесь:</p><p> <a href="http://www.debian.org/doc/manuals/securing-debian-howto/">http://www.debian.org/doc/manuals/securing-debian-howto/</a> </p>

<p>в качестве общей отправной точки я следую эталону/руководству из <a href="http://cisecurity.org/">центра интернет-безопасности</a> , которые представляют собой исчерпывающую подборку лучших рекомендаций по безопасности. не похоже, что их тест debian был обновлен через некоторое время, но общий обзор шагов:</p><ul> <li>применяйте последние патчи/пакеты ос</li> <li>включить учет системы/ядра/процесса.</li> <li>включить mac (например, selinux или apparmor).</li> <li>включить брандмауэр на основе хоста (iptables).</li> <li>проверьте apt sources.list (ключи верны, источники являются доверенными).</li> <li>минимизируйте сетевые службы, отключите все, что не требуется, и брандмауэр, который есть.</li> <li>используйте tcpwrappers для дальнейшего ограничения доступа к системе.</li> <li>используйте только зашифрованные сетевые протоколы, отключайте незашифрованные сервисы (telnet, ftp и т.д.).</li> <li>настройте удаленный доступ только по ssh.</li> <li>отключить пароли для входа пользователя и требовать аутентификацию на основе ключей.</li> <li>отключить совместное использование файловой системы (nfs, smb).</li> <li>включите ведение журнала удаленной/централизованной системы (и регулярно просматривайте журналы!).</li> <li>установите пароль уровня bios/прошивки.</li> <li>установите пароль для загрузчика.</li> <li>настройте резервные копии системы, имейте план аварийного восстановления и тест, чтобы резервные копии были действительными, и чтобы персонал знал процедуры аварийного восстановления!</li> </ul><p>существует множество ресурсов по всем этим различным настройкам, включая конкретные команды и файлы конфигурации для внедрения в систему в тестах cisecurity.</p>

<p>я бы предложил не подключать машину напрямую к интернету. разместите межсетевой экран между машиной и интернетом. это позволяет вам выполнять мониторинг безопасности и сети без дополнительной нагрузки на сервер. лично я считаю, что сегментация сети и функций часто упрощает устранение неполадок в сети, хотя иногда дополнительная сложность усложняет анализ.</p><p>самая безопасная, но самая раздражающая в управлении политика брандмауэра - запрещать все и явно разрешать только трафик, который вы должны разрешить. это раздражает, потому что часто нужно обновлять политику брандмауэра по мере изменения сети.</p><p>я также хотел бы предложить использовать какой-либо интерфейс межсетевого экрана на сервере - ключевую роль играет глубокая защита. использование нестандартных портов для администрирования связанных сервисов не повредит. fail2ban в порядке. задайте более конкретные вопросы о приложениях безопасности на serverfault, чтобы найти больше идей.</p><p>безопасность - это как шутка о двух путешественниках и медведе - хотя нельзя достичь идеальной безопасности, полезно быть более сложной целью, чем другие парни.</p>

<p>некоторые люди указывают на <a href="http://www.debian.org/doc/manuals/securing-debian-howto">руководство по безопасности debian</a> . этого должно быть вполне достаточно для всего, кроме военных потребностей.</p><p>многие думают, что быть смехотворно параноиком - это круто, профессионально или что-то в этом роде. это <strong> не </strong>, это просто <strong> раздражает </strong> для других администраторов и откровенно <strong> репрессивный </strong> для ваших пользователей. большинство вещей, которые вы увидите рекомендуемыми, это просто фальшивая занятая работа, чтобы чувствовать себя полезной для параноидального администратора, но на самом деле не полезной, так как реальное нарушение безопасности, вероятно, вызвано недостаточно обновленной системой и/или из внутреннего источника.</p><p>тем не менее, я считаю одним из своих принципов не доверять ничему в локальной сети больше, чем чему-либо из интернета. поэтому я настраиваю все, чтобы требовать аутентификацию даже в локальной сети. я шифрую и аутентифицирую весь трафик между каждым компьютером с помощью ipsec.</p><p>я нахожусь в процессе перехода на полное шифрование диска для всех моих серверов.</p><p>я устанавливаю только те сервисы, которыми пользуюсь. у меня нет брандмауэра; я настраиваю сервисы, которые мне требуются, для аутентификации или ограничиваю их (с помощью собственной конфигурации программы или tcp-упаковщиков) для определенных ip-адресов. единственное, что мне когда-либо нужно было блокировать с помощью iptables, это <code>memcached</code>, так как он не имел файла конфигурации и не использовал tcp-оболочки.</p><p>я использую хорошие <strong> случайно сгенерированные </strong> пароли для своих учетных записей и доверяю своему ssh-серверу (и всем другим службам), чтобы не пускать тех, кто не знает пароль. <code>fail2ban</code> только для тех, у кого ограниченное пространство для файлов журнала, imo. (у вас должно быть достаточно хороших паролей, чтобы доверять им.)</p>

<p>пройдите этот хороший практический совет на www.debian.org/doc/manuals/securing-debian-howto/</p><p>я лично изменяю порт ssh и использую fail2ban + denyhosts. и я блокирую все, что не нужно. чем больше вы блокируете, тем меньше вам нужно беспокоиться.</p>