Відповіді:
Перш за все, пам’ятайте, що будь-яка здатність сценарію в Apache (php, cgi, ruby, ...) є потенційним еквівалентом облікового запису оболонки з привілеями користувача, що запускає скрипт.
Якщо сервер ділиться кількома користувачами, ви можете подумати про використання suexec (- або ITK MPM - запропоновано Девідом Шміттом ), тому не кожен сценарій працює як один і той же користувач apache.
Віртуалізуйте або chroot apache, щоб будь-який компроміс хоч якось містився в додатковому шарі безпеки. Майте на увазі, що коли ви chroot apache, технічне обслуговування може стати складніше, оскільки ви переходите до бібліотеки до в'язниці тощо. Якщо ви знаходитесь у FreeBSD, ви можете використовувати замість цього в'язницю, що набагато простіше в обслуговуванні, оскільки ви можете просто встановити apache з портів і запускайте portaudit зсередини, не турбуючись про будь-які бібліотечні залежності та переміщення файлів вручну, що завжди стає неприємним безладом. З тюрмами BSD ви можете просто продовжувати користуватися системою управління пакунками (портами). (У GNU / Linux ви також можете використовувати VServer для віртуалізації. - Запропонував Девід Шмітт )
(очевидно) Не слідкуйте за оновленнями та виправленнями не лише для Apache, але й PHP, ruby, perl тощо ... не довіряйте вашій операційній системі, щоб дати вам усі оновлення. Деякі дистрибутиви надзвичайно повільні зі своїми патчами. Максимально обмежте час експозиції на вразливості 0 днів. Палка milw0rm корми в вашому RSS Reader, підпишіться на insecure.org списки розсилки, і т.д. ... Не тільки це допоможе вам дізнатися про уразливість , перш ніж ваша операційна система отримує навколо , щоб випустити патч, ви також дізнаєтеся про уразливість в певному PHP Наприклад, програми cms, якими Ваша ОС може взагалі не керуватися або зафіксовано.
Використовуйте щось на зразок tripwire / aide, аудит або mtree (на BSD) для відстеження змін у вашій файловій системі. Цей дійсно важливий. Регулярно надсилайте вам будь-які зміни, переглядайте їх вручну, щодня. Якщо якісь файли змінюються, які не повинні змінюватися, досліджуйте, чому. Якщо якийсь шкідливий javascript якимось чином вставляється на ваші сторінки будь-яким методом, ви його вловлите таким чином. Це не тільки економить ваш сервер, але й ваших користувачів, оскільки ваші власні веб-сторінки можуть зловживати зараженням ваших відвідувачів. (Це дуже поширена тактика. Зловмисники часто навіть не переймаються вашим сервером, вони просто хочуть заразити якомога більше ваших відвідувачів, поки не виявляться. Ці зловмисники навіть не намагаються ховати свої сліди зазвичай. Дуже важливо ловити такий компроміс, як це можливо.)
Використання таких речовин, як сухозин для захисту php, допомагає. Але також навчіться це розуміти, налаштуйте його на налаштування очікуваних параметрів програми.
Використання патчу ядра, такого як PaX, може допомогти захистити вас від багатьох уразливостей переповнення буфера. Навіть якщо ваше програмне забезпечення є вразливим. (Це не робить вас невразливими, це просто ще один, другорядний, шар.)
Не будьте впевнені в собі, використовуючи якийсь інструмент безпеки. Розумійте інструменти, якими ви користуєтесь, та використовуйте здоровий глузд. Читайте, вчіться, йдіть в ногу з якомога більше.
Подумайте про використання обов'язкового контролю доступу (наприклад: SELinux ). Це дозволяє уточнити для кожної програми, що дозволяється робити, дуже докладно. До яких файлів дозволено отримувати доступ. Яке дзвінок у ядрі дозволяється робити тощо. Це дуже задіяний процес і вимагає багато розуміння. Деякі дистрибутиви надають попередньо виготовлені SELinux політики для своїх пакетів (наприклад: Gentoo ). Ця пропозиція є свого роду протиріччям наведеної нижче, але все-таки справедливою.
Зробити все просто. Складна стратегія безпеки може працювати проти вас.
В Apache встановіть дуже обмежуючі правила за замовчуванням (параметри "Ні", "Заборонити від усіх тощо") та замініть, якщо потрібно для конкретних VirtualHosts.
Заборонити доступ до всіх точкових файлів (що також негайно охоплює файли .htaccess)
Завжди використовуйте https скрізь, де є будь-яка автентифікація пароля.
Брандмауер повинен бути політикою заборони за замовчуванням. Створіть у вашому брандмауері деякі конкретні правила для реєстрації певного трафіку.
Налаштуйте сценарії розбору журналів для сканування ваших журналів на наявність аномалій. ( пакет прелюдії IDS може це зробити, але, чесно кажучи, я рекомендую вам створити свої власні сценарії з часом, оскільки це допоможе вам краще зрозуміти власні інструменти та правила.)
Попросіть серверну пошту, про яку ви щодня повідомляєте про останній запис користувачів, про активні з'єднання, пропускну здатність та ін.
Проведіть сканування хронів для бінарних файлів, що записуються у всьому світі та подібних матеріалів, і надішліть їх вам.
Для будь-яких речей, які ви налаштували, які надсилаються вам поштою, вам слід скласти список винятків з часом. (папки, щоб ігнорувати зміни файлової системи, 777 файлів, щоб дозволити, задати бінарні файли). Важливо, щоб ви отримували лише повідомлення про речі, які не повинні відбуватися. Якщо ви щодня отримуєте пошту з дрібницями, ви почнете їх ігнорувати, і вони стануть безглуздими.
Майте хорошу суцільну багатошарову стратегію резервного резервного копіювання. І не просто вважайте, що створення зображення чи копії всього працює. Наприклад, якщо MySQL знаходиться під час запису до таблиці під час резервного копіювання, ваші бінарні файли MySQL можуть бути пошкоджені при відновленні резервної копії. Тож вам знадобиться крон, який mysqldump має ваші бази даних поверх звичайних зображень або нічних тарболів або контролю версій або будь-якого іншого, що у вас є у налаштуваннях. Подумайте про свою резервну стратегію. Я маю на увазі, дійсно подумайте про це.
Не сподівайтесь на такі списки для безпеки :) Серйозно! Ви знайдете багато всього цього в Інтернеті, прочитайте їх усі, вивчіть кожну пропозицію та використовуйте здоровий глузд і досвід, щоб скласти свій власний розум. Зрештою, досвід та здоровий глузд - це єдине, що врятує вас. Ні списки, ні інструменти. Читай, але не просто копіюй, не розуміючи.
Я рекомендую контрольний список безпеки Linux від SAN. Я використовую це, а також інші внутрішні процедури. Контрольний список може бути трохи застарілим, але багато ключових моментів справджуються.
Завжди буде незліченна кількість дозволів на перевірку, незліченна кількість контрольних списків, ніколи не закінчується відкриття нових помилок / вразливості. Безпека Я не думаю, що це щось, що ви включаєте чи вимикаєте, це те, що ви робите постійно.
Враховуючи "неминучий збій" програмного забезпечення, SELinux допомагає позбутися деяких проблем (знову немає срібної кулі для безпеки). якщо припустити, що програма з користувацьким простором порушена, правильна політика SELinux не дозволить їй діяти за звичайними (наприклад, якщо SELinux було вимкнено або дозволено). Це, звичайно, вимагатиме від вас контролювати журнали аудиту та аналізувати встановлену політику та змінювати її там, де це необхідно, щоб додатки могли функціонувати.
Не кажучи про те, що політика за замовчуванням не допоможе, але мені особисто хочеться знати, що вона дозволяє.