Как вы защищаете сервер от взлома?

Ответьте параноику.
Итак, что было сделано:
сервер:
- запретил вход из под рута по SSH
- поменял порт SSH
- повесил fail2ban на mysqld, ssh с количеством попыток 3
- для каждого сайта создал своего пользователя mysql
- запретил заходить выше /var/www по SSH, без sudo su

сайты:
- так как использую Yii2, все данные из базы берутся с помощью PDO/AR, с биндингами
- запретил выполнение скриптов в папках, куда загружаются файлы
- включил csrf
- включил https
- шифрую данные клиентов, такие как email и пароль. Пароли не храню вообще, храню хеши. MD5 + соль надежно ли?
- бекапы еженедельно.

Можно ли теперь спать спокойно или что-то я упустил? Как вы защищаете сервера от доступа извне?
  • Вопрос задан
  • 7078 просмотров
Решения вопроса 1
OnYourLips
@OnYourLips
повесил fail2ban на mysqld с количеством попыток 3
Бесполезно. По умолчанию он только в 127.0.0.1 открыт. А если вы поменяли это поведение, то меняйте обратно.

для каждого сайта
1 сервер - 1 сайт. Так гораздо удобнее и безопаснее.

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

шифрую данные клиентов, такие как email и пароль.
Бессмысленно. Если есть доступ к серверу, то и расшифровать смогут.

Можно ли теперь спать спокойно или что-то я упустил?
Файрвол? Он особо не нужен, но на всякий случай ставят, всего парой команд.
Чтобы убедиться, что только порты из белого списка открыты.
К тому же основная ошибка сейчас - это логическая ошибка уровня приложения, когда не всегда проверяются права на определенные действия.
Ответ написан
Пригласить эксперта
Ответы на вопрос 11
Используйте контенеры. Создавайте отдельный контейнер со всем софтом для каждого сайта отдельно. В корневой системе оставьте только базовый софт и фаервол. Прокиньте внутрь только 80/443 порты. Ну и ссх по ключу в корневой. Даже если вам таки взломают один из сайтов - проникнуть в соседний контейнер будет проблематично. Что бы не настраивать каждый контейнер ручками - используйте chef/ansible или что угодно на ваш вкус. И каждый новый сайт - новый контейнер со своими mysqld/php/nginx и всем остальным. Даже если случайно установите что-то не защищенное из софта - получить к нему доступ их вне проблематично.
Создайте отдельный контейнер с nginx на который фаервол перенаправит 80/443 порты. А он уже проксирует запросы в нужные контейнеры. В нем же храните и SSL сертификаты и ключи. Что б их не угнали при взломе.
И конечно ossec или аналоги + оповещения от него. Расскажут вам о вторжении в тужу минуту. Ставить в каждый контейнер.
Ответ написан
un1t
@un1t
Нужно еще запретить весь входящий трафик на порты кроме 22, 80, 443.
Ответ написан
opium
@opium
Просто люблю качественно работать
сервер:
- запретил вход из под рута по SSH
ни разу на тысячах серверов у меня не сломали рута за 10 лет

- поменял порт SSH
просто засканить можно ваш новый порт, тоже смысла нет

- повесил fail2ban на mysqld, ssh с количеством попыток 3
ни разу у меня не подобрали пароль на мускул или ссх на тысячах серверов за 10 лет , используйте длинные генеренные пароли и спите спокойно, от реальной угрозы если вы профукали пароль это не спасет

- для каждого сайта создал своего пользователя mysql
о боже , а что как то по другому бывает? даже говнопанели создают так

- запретил заходить выше /var/www по SSH, без sudo su
вообще зачем кому то разрешать туда заходить

используйте авторизацию по ключам а не по паролям для ссх
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Я вот минимально написал тут про защиту сайта, кому интересно - Welcome!
Ответ написан
@kstyle
MD5 + соль надежно ли?

password_hash давно пора
Ответ написан
selivanov_pavel
@selivanov_pavel
Linux admin
- еженедельный бекап - ИМХО слишком редко, хотя бы ежедневный
- после обновлений не забывать перезапустить сервисы, которым нужно подхватить новые либы. Можно посмотреть, что требует перезапуска, с помощью needrestart -r l
- веб-приложения можно закрыть WAF. Есть modsecurity, есть naxsi(только для nginx). Но это требует значительного времени на настройку и поддержку
- можно поставить HIDS, например ossec. После грамотной настройки ловит подозрительную активность, надо не забывать регулярно просматривать отчёты
- можно поставить NIDS: snort, suricata
- можно почитать PCI DSS и реализовать понравившиеся моменты
Ответ написан
zooks
@zooks
Frontend и Django
повесил fail2ban на mysqld

Нужно закрыть внешний доступ к MySQL:
sudo mysql_secure_installation

для каждого сайта создал своего пользователя mysql

Нужен не только отдельный MySQL пользователь, но и пользователь на уровне ОС - это даже важнее.
Ответ написан
@Vaavaan
Вход по SSH только по ключу. Не по паролю.
Изоляция приложений в отдельных контейнерах. Всех приложений. Как правило 1 приложение 1 контейнер. Ну в крайнем случае - chroot на каждый сайт.
Открыть на файрволе только необходимые порты (как правило 22, 80, 443 и все).

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

бэкапы ежедневно.
Ответ написан
@res2001
Developer, ex-admin
Соберем все в кучу:
1.ssh - запрет рута, вход по ключу.
2.фаервол - запретить все, кроме нужного.
3.контейнеры для каждого приложения.
4.запретить mysql смотреть на ружу.
5.сменить хэш md5 на более современный алгоритм.
Ответ написан
@alexdora
Топ-менеджер корпорации
Посмотрел я этот пост и вспомнил, как перед нг настроивал своего монстра. Перечитал много ненужной информации на тему безопасности. Чего только не советую делать и не делать.
В итоге плюнул: длинный пароль на
SSH + fail2ban
Виртуализация на XEN, под каждый сервис своя виртуалка. 2 виртуалки с http/mysql. Между двумя mysql репликация.
Бэкапятся ежедневно все виртуалки

Ну и так как я далек от сисадминства и ленивый шопипец:

При заходе по ssh из вне >> sms на телефон
И пару скриптов с говорящими названиями и запускаемые через бота telegram:
Сосискасарделька - поменять местами http виртуалки
mayday - завершение виртуалок, бэк-ап, перекинуть на диск и зашифровать случайным ключем диск целиком. У меня на тесте это делается за 15 секунд.
Жопа - закрыть все порты.

PS: Mysql смотрит наружу, это нужно. Пароли везде длинные. Но сам пользуюсь phpmyadmin, который весит на домене прописанном в hosts на своей машине. Нет домена - нет доступа. Очень удобно.
Еще изменил настройки fail2ban. Чтоб бан был не 15 минут, а сразу сутки. По SSH мало кто ломает, 2-3 бана в день. А вот на SIP порты список бана в день переваливает за 300 правил.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы