ВНИМАНИЕ: Я понимаю, что многие люди имеют твердые убеждения по этому вопросу, в немалой степени потому, что они приложили много усилий к своим решениям брандмауэра, а также потому, что им внушили веру в их необходимость.
Однако я ищу ответы от людей, которые являются экспертами в области безопасности. Я считаю, что это важный вопрос, ответ на который принесет пользу не только мне и компании, в которой я работаю.
Вот мой подход к безопасности сервера:
Следовать рекомендациям по безопасности моей операционной системы перед подключением сервера к интернету.
Использовать TCP-обертки для ограничения доступа к SSH (и другим службам управления) небольшим количеством IP-адресов.
Следить за состоянием этого сервера с помощью Munin. И устранить вопиющие проблемы безопасности, присущие Munin-node в его конфигурации по умолчанию.
Nmap моего нового сервера (также перед подключением сервера к интернету). Если я буду брандмауэрить этот сервер, это должен быть точный набор портов, на которые должны быть ограничены входящие соединения.
Установить сервер в серверной комнате и дать ему публичный IP-адрес.
Обеспечить безопасность системы, используя функцию обновления безопасности моей операционной системы.
Моя философия (и основа вопроса) заключается в том, что сильная безопасность на базе хоста устраняет необходимость в брандмауэре. Общая философия безопасности гласит, что надежная безопасность на базе хоста все равно необходима, даже если у вас есть брандмауэр (см. руководство по безопасности). Причина этого заключается в том, что брандмауэр, перенаправляющий публичные службы на сервер, дает злоумышленнику такую же возможность, как и отсутствие брандмауэра вообще. Уязвимой является сама служба, а поскольку предоставление этой службы всему интернету является обязательным условием ее работы, ограничивать доступ к ней не имеет смысла.
Если на сервере имеются порты, доступ к которым не нужен всему интернету, то это программное обеспечение должно быть отключено на шаге 1 и проверено на шаге 4. Если злоумышленник успешно проникнет на сервер через уязвимое программное обеспечение и сам откроет порт, он может (и делает это) так же легко победить любой брандмауэр, установив вместо него исходящее соединение через случайный порт. Смысл безопасности не в том, чтобы защититься после успешной атаки — это уже доказано как невозможное, — а в том, чтобы не допустить злоумышленников в первую очередь.
Любые уязвимости операционной системы/TCP стека должны быть одинаково уязвимы независимо от наличия или отсутствия брандмауэра — на основании того факта, что порты направляются непосредственно в эту операционную систему/TCP стек. Аналогичным образом использование брандмауэра на самом сервере в отличие от брандмауэра на маршрутизаторе (или, что еще хуже, в обоих местах) кажется добавлением ненужных уровней сложности.
Честно говоря, единственный способ, которым я вижу использование брандмауэра для серверов, — это если он имеет динамические правила, предотвращающие все подключения ко всем серверам от известных злоумышленников, например, RBL для спама (что по совпадению в значительной степени делает наш почтовый сервер). К сожалению, я не могу найти ни одного брандмауэра, который бы это делал. Следующим лучшим вариантом является IDS-сервер, но это предполагает, что злоумышленник не атакует сначала ваши реальные серверы и что злоумышленники потрудились прощупать всю вашу сеть перед атакой. Кроме того, известно, что они дают большое количество ложных срабатываний.
Ответ 1
Преимущества брандмауэра:
Вы можете фильтровать исходящий трафик.
Брандмауэры 7-го уровня (IPS) могут защитить от известных уязвимостей приложений.
Вы можете блокировать определенный диапазон IP-адресов и/или порт централизованно, а не пытаться убедиться, что на каждом отдельном компьютере нет службы, прослушивающей этот порт, или запретить доступ с помощью TCP Wrappers.
Брандмауэры могут помочь, если вам приходится иметь дело с менее осведомленными в вопросах безопасности пользователями/администраторами, поскольку они обеспечивают вторую линию обороны. Без них нужно быть абсолютно уверенным, что хосты безопасны, что требует хорошего понимания безопасности от всех администраторов.
Журналы брандмауэра обеспечивают централизованный учет и помогают в обнаружении вертикального сканирования. Журналы брандмауэра могут помочь в определении того, пытается ли какой-то пользователь/клиент периодически подключиться к одному и тому же порту на всех ваших серверах. Чтобы сделать это без брандмауэра, необходимо объединить журналы с различных серверов/хостов, чтобы получить централизованное представление.
Брандмауэры также поставляются с модулями антиспама/антивируса, которые также добавляют защиту.
Независимая от ОС безопасность. В зависимости от ОС хоста для обеспечения безопасности хоста требуются различные техники/методы. Например, TCP Wrappers могут быть недоступны на машинах Windows.
Помимо всего прочего, если у вас нет брандмауэра и система взломана, как вы это обнаружите? Попытка выполнить некоторые команды «ps», «netstat» и т. д. на локальной системе не заслуживает доверия, поскольку эти двоичные файлы могут быть подменены. «nmap» с удаленной системы не гарантирует защиту, поскольку злоумышленник может убедиться, что руткит принимает соединения только с выбранных IP-адресов источников в выбранное время.
Аппаратные брандмауэры помогают в таких сценариях, поскольку изменить ОС/файлы брандмауэра крайне сложно по сравнению с ОС/файлами хоста.
Недостатки брандмауэра:
Люди считают, что брандмауэр сам позаботится о безопасности, не обновляют регулярно системы и не останавливают нежелательные службы.
Стоимость. Иногда необходимо платить ежегодную лицензионную плату. Особенно если брандмауэр имеет модули антивируса и антиспама.
Дополнительная единая точка отказа. Если весь трафик проходит через брандмауэр и он выходит из строя, то сеть останавливается. Мы можем иметь дублирующие брандмауэры, но тогда предыдущий пункт о стоимости еще больше увеличится.
Государственное отслеживание не дает никакой пользы в системах с публичным доступом, которые принимают все входящие соединения.
Брандмауэры с отслеживанием состояния являются мощным узким местом во время DDoS-атаки и часто выходят из строя первыми, поскольку пытаются сохранить состояние и проверить все входящие соединения.
Брандмауэры не могут видеть зашифрованный трафик. Поскольку весь трафик должен быть зашифрован из конца в конец, большинство брандмауэров не приносят особой пользы перед публичными серверами. Некоторые брандмауэры нового поколения могут иметь закрытые ключи для завершения TLS и просмотра трафика, однако это еще больше увеличивает восприимчивость брандмауэра к DDoS и нарушает сквозную модель безопасности TLS.
Операционные системы и приложения исправляются от уязвимостей гораздо быстрее, чем брандмауэры. Производители брандмауэров часто сидят на известных проблемах годами без исправлений, а исправление кластера брандмауэров обычно требует простоя многих служб и исходящих соединений.
Брандмауэры далеки от совершенства, и многие из них печально известны своими ошибками. Брандмауэры — это просто программное обеспечение, работающее на операционной системе, возможно, с дополнительным ASIC или FPGA в дополнение к (обычно медленному) CPU. Брандмауэры имеют ошибки, но, похоже, они предоставляют мало инструментов для их устранения. Поэтому брандмауэры добавляют сложность и дополнительный источник труднодиагностируемых ошибок в стек приложений.
Ответ 2
TCP Wrappers можно назвать реализацией брандмауэра на базе хоста; вы фильтруете сетевой трафик.
Что касается вопроса о злоумышленнике, осуществляющем исходящие соединения через произвольный порт, — брандмауэр также предоставляет средства контроля исходящего трафика; правильно настроенный брандмауэр управляет входом и выходом в соответствии с риском, связанным с системой.
Что касается вопроса о том, что любая уязвимость TCP не устраняется брандмауэром, — вы не знакомы с тем, как работают брандмауэры. У Cisco есть большое количество правил, доступных для загрузки, которые идентифицируют пакеты, построенные таким образом, чтобы вызвать проблемы у определенных операционных систем. Если вы возьмете Snort и запустите его с нужным набором правил, вы также получите предупреждения о подобных вещах. И, конечно, Linux iptables может отфильтровывать вредоносные пакеты.
По сути, брандмауэр — это проактивная защита. Чем дальше вы уходите от проактивной защиты, тем больше вероятность того, что вы окажетесь в ситуации, когда вы реагируете на проблему, а не предотвращаете ее. Концентрация защиты на границе, как в случае с выделенным брандмауэром, упрощает управление, поскольку у вас есть центральная точка ограничения, а не дублирование правил повсюду.
Но ни одна вещь не является окончательным решением. Хорошее решение безопасности обычно является многоуровневым, где у вас есть брандмауэр на границе, TCP-обертки на устройстве и, возможно, некоторые правила на внутренних маршрутизаторах. Обычно вы должны защитить сеть от интернета и защитить узлы друг от друга.
Ответ 3
Немногие вещи являются «необходимостью» в строгом значении этого слова. Безопасность — это, скорее, установка всех возможных блокировок. Чем больше работы требуется для взлома вашего сервера, тем меньше шансов на успешную атаку. Вы хотите, чтобы взлом ваших машин был более трудоемким, чем где-либо еще. Добавление брандмауэра увеличивает трудозатраты.
Я думаю, что ключевое использование — это избыточность в безопасности. Еще один плюс брандмауэров в том, что вы можете просто отбрасывать попытки подключения к любому порту, а не отвечать на отклоненные запросы, — это сделает nmapping немного более неудобным для атакующего.
Наиболее важным для меня в практическом аспекте вашего вопроса является то, что вы можете заблокировать SSH, ICMP и другие внутренние службы в локальных подсетях, а также ограничить скорость входящих соединений, чтобы облегчить DOS-атаки.
Ответ 4
Должен ли я экранировать свой сервер? Хороший вопрос. Кажется, что нет смысла устанавливать брандмауэр поверх сетевого стека, который и так отклоняет попытки подключения ко всем портам, кроме тех, которые открыты на законных основаниях. Если в ОС есть уязвимость, которая позволяет злонамеренно созданным пакетам нарушить работу узла, сможет ли брандмауэр, работающий на том же узле, предотвратить использование? Ну, может быть...
И это, вероятно, самая сильная причина для запуска брандмауэра на каждом узле: брандмауэр может предотвратить использование уязвимости сетевого стека. Достаточно ли это веская причина? Я не знаю, но, наверное, можно сказать: «За установку брандмауэра еще никого не увольняли».
Еще одна причина для установки брандмауэра на сервере — это разделение этих двух в остальном сильно коррелирующих проблем:
Откуда и на какие порты я принимаю соединения?
Какие службы запущены и прослушивают соединения?
Без брандмауэра набор запущенных служб (вместе с конфигурациями для tcpwrappers и т. п.) полностью определяет набор портов, которые будут открыты на сервере, и от кого будут приниматься соединения. Брандмауэр на основе хоста дает администратору дополнительную гибкость в установке и тестировании новых служб контролируемым образом, прежде чем сделать их более широко доступными. Если такая гибкость не требуется, то нет смысла устанавливать брандмауэр на сервер.
В заключение: есть один пункт, не упомянутый в вашем контрольном списке безопасности, который я всегда добавляю, и это система обнаружения вторжений на хосте (HIDS), такая как AIDE или samhain. С хорошей HIDS злоумышленнику будет очень сложно внести нежелательные изменения в систему и остаться незамеченным. Я считаю, что на всех серверах должна быть установлена та или иная система HIDS.
Linux