Чи безпечно перезавантажувати сервер, відкритий для Інтернету?


29

Конкретно

У мене встановлено набір правил iptables на сервері під управлінням CentOS. Я гарантований / чи можу я гарантувати / як я можу гарантувати, що при роботі мережі в мережі (або при завантаженні машини, або після перезавантаження мережевої служби) набір правил iptables вже застосовується (і якщо iptables не вдалося запустити або не вдалося застосувати набір правил мережевий інтерфейс не вийде)?

(Я знаю, що це питання noob, але я ніколи не запускав сервер у будь-якому, окрім надійних мереж, за маскарадуванням DHCP NAT та брандмауером, тому ... очікуйте, що питання нообів від noobs.)


15
Дійсно, взагалі не питання. Це, по суті, те, як хакери потрапили в мережу PlayStation ще в 2011 році, викликаючи 24 дні відключення та 15 млн. Доларів в поселеннях. Коли їхні брандмауери перезавантажилися (як це робили щомісяця), то брандмауер на кілька моментів широко відкрився - очевидно, досить довго.
Chris S

@ChrisS Для мене найдивнішим з цього питання є те, що я впевнений, що системні адміністратори, відповідальні за цю мережу, майже напевно були б досить розумні, щоб говорити, якби хтось запропонував вимкнути брандмауер, але не бив вії щомісяця , вимкнувши його ... і знову знову включившись. Не впевнений, яке поєднання цього пояснило б це.
Парфянський розстріл

Іншим варіантом є відключення порту на мережевому комутаторі до повного завантаження сервера - якщо ви на сайті та маєте доступ до комутатора. Це не ідеально, але це, безумовно, спрацювало, якщо тільки сервер не мав мережевої залежності, наприклад, NFS.
jftuga

@jftuga Ну, звичайно. Але тоді сервер не був би підключений до Інтернету, і тому рішення технічно не підпадає під сферу розгляду цього питання. Якщо я на сайті, я можу просто відключити кабель Ethernet під час перезавантаження. І все-таки основне питання залишатиметься рішенням про блокування портів; що інший комп'ютер, що атакує мережу, не зупинить місцевий брандмауер. Якщо роутер зламаний, або несправності, або хтось інший в локальній мережі порушений, гра все ще закінчена.
Парфянський розстріл

@jftuga Насправді, питання навіть гірше. Якщо припустити, що хтось уже отримав програмне забезпечення для запуску на локальній машині, але мій брандмауер виконує фільтрацію виходу, скажімо, правило, що вихідні пакети дозволені лише в тому випадку, якщо вони встановлені або пов'язані, а нові вхідні з'єднання дозволені лише до порту 80 Зазвичай це запобігає зворотній оболонці з непривілейованого рахунку. Але якщо з'єднання ініціюється під час завантаження, воно буде підтримуватися через ініціалізацію брандмауера. Я припускаю, що це також означає, що правила брандмауера повинні змінитися, але це легко зробити помилку.
Парфянський розстріл

Відповіді:


18

З вікна ви гарантуєте, що iptables запуститься до того, як інтерфейс буде виведений у порядку запуску сценаріїв запуску. Подивіться на рядок "chkconfig" у кожному сценарії запуску, і ви побачите рівні запуску, на яких він "увімкнено", коли вони активні, порядок запуску та порядок зупинки.

Ви не гарантуєте, що інтерфейс не буде виведений, якщо набір правил iptables не застосовувався належним чином (або взагалі).

Приклад: у
chkconfig: 2345 08 92
цьому рядку зазначено, що відповідна служба буде активна у рівнях 2, 3, 4 та 5, а розпочнеться в 8 та зупиниться на 92. Все, що має більше значення "пуск", розпочнеться лише після завершення цього сценарію, але помилка цього сценарію вважається завершенням і не запобігає запуску сценаріїв.

Зверніть увагу, що ця відповідь стосується CentOS 6 і новіших версій, не обов'язково для CentOS 7. Я особисто не досліджував 7 достатньо, щоб відповісти на це запитання 7.


1
+1 І ... не дивитись коня подарунка в рот, тому що ви відповідаєте, це дуже корисно, але ... Чи трапляється вам знати про будь-який стандартний спосіб надати послуги наказом на залежність, так що якщо один не вдасться на початку ланцюга наступні не починаються? Ой, а також якщо комусь вдасться розбити брандмауер (якось), що мережевий інтерфейс "зійде разом із судном"? В ідеалі, я хотів би, щоб усе вийшло з ладу, навіть за відсутності у кого-то є 0 днів для DoS брандмауера ...
Parthian Shot

5
За допомогою сценаріїв запуску SysV (тобто CentOS 6 і новіших версій), це не дуже вдало. CentOS 7 робить залежності, як ви хочете - якщо B залежить від A і A не вдається, B не починається. Для 7, щоб побачити використання залежностей systemctl list-dependencies --all(я щойно переглянув сторінку чоловіка за це 30 секунд тому).
Джон

Хоча ця новина трохи розчаровує (я зараз на 6), принаймні я тепер знаю, що зміна сценаріїв init - це надзвичайно жахливий злом.
Парфянський розстріл

5
Будьте дуже обережні щодо зміни init-скриптів - це може спричинити помилкові тривоги на будь-якому програмному забезпеченні для виявлення вторгнень, і зміни будуть замінені, якщо initscriptsпакет коли-небудь оновлюється (наприклад, випуск errata). Я дійсно не рекомендую цього робити.
Джон

Я ще не створив IDS, тому помилкові тривоги наразі не є проблемою (сервер ще не працює, і я знаю, що я вже майже не готовий до розгортання; це питання є частиною моєї підготовки. Але я збираюся поставити СНІД). Я буду максимально обережним, наскільки це можливо, і якщо є спосіб, який не передбачає вручну змінювати основні частини конфігурації init, я обов'язково це роблю.
Парфянський розстріл

1

Ви також можете використовувати опцію ifup-post у центсах:

/ etc / sysconfig / network-script / ifup-post

Викликається, коли будь-який мережевий пристрій ВИКЛЮЧАЄ пристрій SLIP. Виклики / etc / sysconfig / network-script / ifup-route для створення статичних маршрутів, які залежать від цього пристрою. Виклики / etc / sysconfig / network-script / ifup-aliases для створення псевдонімів для цього пристрою. Встановлює ім'я хоста, якщо воно ще не встановлено і ім'я хоста можна знайти для IP для цього пристрою. Надсилає SIGIO будь-яким програмам, які вимагали повідомлення про події в мережі.

Може бути розширено, щоб виправити конфігурацію сервісу імен, викликати довільні сценарії тощо за потребою.

Цей сценарій запускається і після вищезазначеного (ifup-route та ifup-псевдоніми) шукає ifup-local

if [ -x /sbin/ifup-local ]; then
   /sbin/ifup-local ${DEVICE}
fi

Таким чином, ви можете створити цей файл і переконатися, що він знову викликає iptables, наприклад, використовуючи iptables-recovery:

iptables-restore < /etc/sysconfig/iptables

1

Невеликий додаток: щоб переконатися, що потрібні правила з’являться під час наступного завантаження сервера, збережіть його

sudo sh -c "iptables-save > /etc/iptables.rules"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.