Безопасность web-серверов

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

Разделить права пользователей на сайт

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

Есть и более надёжная реализация описанного подхода: один сайт — одна виртуальная машина. Тогда полностью изолируется окружение и ПО веб-сервера, можно не трогать стандартных пользователей для веба (обычно www-data) и это заведомо более безопасный подход. Поэтому, если есть возможность поместить сайт в отдельную виртуалку — так лучше и сделать. Возможностей сделать это сейчас предостаточно.

Закрыть на запись от веб-сервера исполняемые файлы

Типичный способ взлома популярных CMS — заливка кода в качестве контента и затем его исполнение. Запрет на запись скриптов во многом устраняет первую часть такой атаки. Поэтому в конфигураци веб-сервера закрываем возможность записи во все директории, куда это не предусмотрено делать и оставить открытыми штатные директории upload/files/images и подобные для заливки контента.

Необходимо заранее понимать оборотную сторону этого способа: многие CMS для удобства пользователей предусматривают перезапись своего кода. Поэтому запрет перезаписи может существенно осложнить работу с CMS. Здесь сильно поможет использование разных системых учёток (owner:group) для самого веб-сервера и для веб-мастеров. Такой подход также отлично работает в случае использования систем контроля версий (git/svn).

Закрыть возможность запуска скриптов из upload-директорий

Запрет запуска из директорий с контентом частично устраняет вторую часть описанной в предыдущем пункте атаки. Естественно, залитый как контент скрипт ещё можно запустить из shell (и другими кроме веба способами), но дёргать его из интернета его станет уже нельзя. Что сильно усложняет жизнь разным заливаемых в upload вредоносам.

Закрыть доступ к скрытым файлам

Эта элементарная защита относится не только к WordPress, но и к почти всем остальным сайтам в вебе. К сожалению, ею часто пренебрегают и тем самым открывают то, что открывать не следует, например, репозитарии git и svn.

location ~ /\. {
	deny all;
}

Ограничить доступ в админку

Любую открытую административную панель или другой управляющий ресурс будут ломать. В наиболее типичном случае — подбирать пароли. Если посмотреть логи любого веб-сервера, то достаточно объемную их часть — как раз попытка распознать CMS, найти типичные уязвимости и подбор паролей.

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

Кстати, насчёт компрометации. Любые формы, где есть ценные данные и пароли в том числе — только по HTTPS.

Своевременные обновления софта

Обновляйте все ПО, которое находится на сервере, начиная от операционной системы, заканчивая и заканчивая CMS и плагинами к ней. И делайте это своевременно. Это помогает от многих дырок, как в коде CMS (в первую очередь), так в ПО веб-сервера (например, openssl, и атаки heartbeat). На критичные части целесообразно поставить автообновление.

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

Вместо заключения

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