На лезвии ножа Andrey Matveev Хакер, номер #075, стр. 075-052-1 (andrushock@real.xakep.ru) Надежный фундамент для интернет-проекта В последнее время стало появляться все больше и больше новых е-шопов, интернет-витрин и аукционов. Соответственно, с геометрической прогрессией возросло и число взломов, дефейсов, а также хищений баз данных и конфиденциальной информации. Лень, некомпетентность, наличие устаревшей и противоречивой информации - вот основные причины, почему программисты и системные администраторы пренебрегают безопасностью своих интернет-проектов. Полагаю, ты не относишься к числу таких беззаботных IT-специалистов и тебе уже неоднократно предлагали заняться электронной коммерцией. Если так, это руководство для тебя. Делаем правильный выбор Что касается операционной системы, то в нашем случае это будет OpenBSD. Такой выбор обусловлен следующими факторами: 1. короткая история взломов, 2. безопасность системы, что называется, из коробки, 3. поддержка всех известных аппаратных криптоакселлераторов (эти чудо-девайсы берут шифрование трафика на себя), 4. более-менее корректная работа с нитями (POSIX threads, многопоточность нужна для MySQL), 5. отличный файрвол pf, 6. web-сервер Apache/mod_ssl, по умолчанию работающий в chroot'ной среде, 7. наличие последних версий OpenSSL и OpenSSH. Также мы будем использовать PHP + MySQL. С преимуществами этой связки, которая за последние годы стала стандартом де-факто для интернет-проектов различного масштаба, незнаком только ленивый. Что касается системы обнаружения вторжений, то для предотвращения атак типа Cross-Site Scripting и SQL Injection мы остановимся, нет, на этот раз не на Snort, а на специальном модуле для индейца - mod_security. Изюминка конструкции будет заключаться в том, что мы научим PHP, MySQL и почтовый транспортный агент работать с Apache, который запускается в измененном корневом каталоге /var/www с правами непривилегированного пользователя www. Все это делается для достижения одной цели - максимально снизить возможный ущерб при взломе нашей системы. Подготавливаем почву Прежде всего, необходимо грамотно подойти к разбиению дискового пространства. Лично я предпочитаю для каждой службы выделять собственный раздел: # vi /etc/fstab /dev/wd0f /var ffs rw,nodev,nosuid,softdep 1 2 /dev/wd0g /var/ftp ffs rw,nodev,nosuid,softdep 1 2 /dev/wd0h /var/log ffs rw,nodev,nosuid,softdep,noexec 1 2 /dev/wd0i /var/mail ffs rw,nodev,nosuid,noexec,noatime,softdep 1 2 /dev/wd0j /var/mysql ffs rw,nodev,nosuid,softdep 1 2 /dev/wd0k /var/www ffs rw,nodev,nosuid,softdep 1 2 Гибкость такой конфигурации просматривается даже невооруженным взглядом. При переполнении одного из разделов авария никоим образом не скажется на работе других служб. Также, если в момент неожиданного отключения питания операции записи не выполнялись, возможность повреждения файловой системы существенно снизится, поэтому при правильном разбиении пострадает только небольшая область, а не вся система. Еще мы получаем бонус: на небольших разделах fsck(8) будет гораздо быстрее выполнять проверку файловых систем без установленного бита clean. Нельзя упускать из вида еще один немаловажный момент - повышение безопасности за счет специальных флагов монтирования: nodev запрещает использовать файлы устройств, nosuid запрещает повышать привилегии для suid/sgid'ных файлов, noexec запрещает выполнять бинарники. |