Linux

Как используется брандмауэр?

ВНИМАНИЕ: Я понимаю, что многие люди имеют твердые убеждения по этому вопросу, в немалой степени потому, что они приложили много усилий к своим решениям брандмауэра, а также потому, что им внушили веру в их необходимость.

Однако я ищу ответы от людей, которые являются экспертами в области безопасности. Я считаю, что это важный вопрос, ответ на который принесет пользу не только мне и компании, в которой я работаю. 

Вот мой подход к безопасности сервера:

  1. Следовать рекомендациям по безопасности моей операционной системы перед подключением сервера к интернету.

  2. Использовать TCP-обертки для ограничения доступа к SSH (и другим службам управления) небольшим количеством IP-адресов.

  3. Следить за состоянием этого сервера с помощью Munin. И устранить вопиющие проблемы безопасности, присущие Munin-node в его конфигурации по умолчанию.

  4. Nmap моего нового сервера (также перед подключением сервера к интернету). Если я буду брандмауэрить этот сервер, это должен быть точный набор портов, на которые должны быть ограничены входящие соединения.

  5. Установить сервер в серверной комнате и дать ему публичный IP-адрес.

  6. Обеспечить безопасность системы, используя функцию обновления безопасности моей операционной системы.

Моя философия (и основа вопроса) заключается в том, что сильная безопасность на базе хоста устраняет необходимость в брандмауэре. Общая философия безопасности гласит, что надежная безопасность на базе хоста все равно необходима, даже если у вас есть брандмауэр (см. руководство по безопасности). Причина этого заключается в том, что брандмауэр, перенаправляющий публичные службы на сервер, дает злоумышленнику такую же возможность, как и отсутствие брандмауэра вообще. Уязвимой является сама служба, а поскольку предоставление этой службы всему интернету является обязательным условием ее работы, ограничивать доступ к ней не имеет смысла.

Если на сервере имеются порты, доступ к которым не нужен всему интернету, то это программное обеспечение должно быть отключено на шаге 1 и проверено на шаге 4. Если злоумышленник успешно проникнет на сервер через уязвимое программное обеспечение и сам откроет порт, он может (и делает это) так же легко победить любой брандмауэр, установив вместо него исходящее соединение через случайный порт. Смысл безопасности не в том, чтобы защититься после успешной атаки это уже доказано как невозможное, — а в том, чтобы не допустить злоумышленников в первую очередь.

Любые уязвимости операционной системы/TCP стека должны быть одинаково уязвимы независимо от наличия или отсутствия брандмауэра на основании того факта, что порты направляются непосредственно в эту операционную систему/TCP стек. Аналогичным образом использование брандмауэра на самом сервере в отличие от брандмауэра на маршрутизаторе (или, что еще хуже, в обоих местах) кажется добавлением ненужных уровней сложности.

Честно говоря, единственный способ, которым я вижу использование брандмауэра для серверов, это если он имеет динамические правила, предотвращающие все подключения ко всем серверам от известных злоумышленников, например, RBL для спама (что по совпадению в значительной степени делает наш почтовый сервер). К сожалению, я не могу найти ни одного брандмауэра, который бы это делал. Следующим лучшим вариантом является IDS-сервер, но это предполагает, что злоумышленник не атакует сначала ваши реальные серверы и что злоумышленники потрудились прощупать всю вашу сеть перед атакой. Кроме того, известно, что они дают большое количество ложных срабатываний.

Ответ 1

Преимущества брандмауэра:

  1. Вы можете фильтровать исходящий трафик.

  2. Брандмауэры 7-го уровня (IPS) могут защитить от известных уязвимостей приложений.

  3. Вы можете блокировать определенный диапазон IP-адресов и/или порт централизованно, а не пытаться убедиться, что на каждом отдельном компьютере нет службы, прослушивающей этот порт, или запретить доступ с помощью TCP Wrappers.

  4. Брандмауэры могут помочь, если вам приходится иметь дело с менее осведомленными в вопросах безопасности пользователями/администраторами, поскольку они обеспечивают вторую линию обороны. Без них нужно быть абсолютно уверенным, что хосты безопасны, что требует хорошего понимания безопасности от всех администраторов.

  5. Журналы брандмауэра обеспечивают централизованный учет и помогают в обнаружении вертикального сканирования. Журналы брандмауэра могут помочь в определении того, пытается ли какой-то пользователь/клиент периодически подключиться к одному и тому же порту на всех ваших серверах. Чтобы сделать это без брандмауэра, необходимо объединить журналы с различных серверов/хостов, чтобы получить централизованное представление.

  6. Брандмауэры также поставляются с модулями антиспама/антивируса, которые также добавляют защиту.

  7. Независимая от ОС безопасность. В зависимости от ОС хоста для обеспечения безопасности хоста требуются различные техники/методы. Например, TCP Wrappers могут быть недоступны на машинах Windows.

Помимо всего прочего, если у вас нет брандмауэра и система взломана, как вы это обнаружите? Попытка выполнить некоторые команды «ps», «netstat» и т. д. на локальной системе не заслуживает доверия, поскольку эти двоичные файлы могут быть подменены. «nmap» с удаленной системы не гарантирует защиту, поскольку злоумышленник может убедиться, что руткит принимает соединения только с выбранных IP-адресов источников в выбранное время.

Аппаратные брандмауэры помогают в таких сценариях, поскольку изменить ОС/файлы брандмауэра крайне сложно по сравнению с ОС/файлами хоста.

Недостатки брандмауэра: 

  1. Люди считают, что брандмауэр сам позаботится о безопасности, не обновляют регулярно системы и не останавливают нежелательные службы.

  2. Стоимость. Иногда необходимо платить ежегодную лицензионную плату. Особенно если брандмауэр имеет модули антивируса и антиспама.

  3. Дополнительная единая точка отказа. Если весь трафик проходит через брандмауэр и он выходит из строя, то сеть останавливается. Мы можем иметь дублирующие брандмауэры, но тогда предыдущий пункт о стоимости еще больше увеличится.

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

  5. Брандмауэры с отслеживанием состояния являются мощным узким местом во время DDoS-атаки и часто выходят из строя первыми, поскольку пытаются сохранить состояние и проверить все входящие соединения.

  6. Брандмауэры не могут видеть зашифрованный трафик. Поскольку весь трафик должен быть зашифрован из конца в конец, большинство брандмауэров не приносят особой пользы перед публичными серверами. Некоторые брандмауэры нового поколения могут иметь закрытые ключи для завершения TLS и просмотра трафика, однако это еще больше увеличивает восприимчивость брандмауэра к DDoS и нарушает сквозную модель безопасности TLS.

  7. Операционные системы и приложения исправляются от уязвимостей гораздо быстрее, чем брандмауэры. Производители брандмауэров часто сидят на известных проблемах годами без исправлений, а исправление кластера брандмауэров обычно требует простоя многих служб и исходящих соединений.

  8. Брандмауэры далеки от совершенства, и многие из них печально известны своими ошибками. Брандмауэры это просто программное обеспечение, работающее на операционной системе, возможно, с дополнительным ASIC или FPGA в дополнение к (обычно медленному) CPU. Брандмауэры имеют ошибки, но, похоже, они предоставляют мало инструментов для их устранения. Поэтому брандмауэры добавляют сложность и дополнительный источник труднодиагностируемых ошибок в стек приложений.

Ответ 2

TCP Wrappers можно назвать реализацией брандмауэра на базе хоста; вы фильтруете сетевой трафик.

Что касается вопроса о злоумышленнике, осуществляющем исходящие соединения через произвольный порт, брандмауэр также предоставляет средства контроля исходящего трафика; правильно настроенный брандмауэр управляет входом и выходом в соответствии с риском, связанным с системой.

Что касается вопроса о том, что любая уязвимость TCP не устраняется брандмауэром, вы не знакомы с тем, как работают брандмауэры. У Cisco есть большое количество правил, доступных для загрузки, которые идентифицируют пакеты, построенные таким образом, чтобы вызвать проблемы у определенных операционных систем. Если вы возьмете Snort и запустите его с нужным набором правил, вы также получите предупреждения о подобных вещах. И, конечно, Linux iptables может отфильтровывать вредоносные пакеты.

По сути, брандмауэр — это проактивная защита. Чем дальше вы уходите от проактивной защиты, тем больше вероятность того, что вы окажетесь в ситуации, когда вы реагируете на проблему, а не предотвращаете ее. Концентрация защиты на границе, как в случае с выделенным брандмауэром, упрощает управление, поскольку у вас есть центральная точка ограничения, а не дублирование правил повсюду.

Но ни одна вещь не является окончательным решением. Хорошее решение безопасности обычно является многоуровневым, где у вас есть брандмауэр на границе, TCP-обертки на устройстве и, возможно, некоторые правила на внутренних маршрутизаторах. Обычно вы должны защитить сеть от интернета и защитить узлы друг от друга.

Ответ 3

Немногие вещи являются «необходимостью» в строгом значении этого слова. Безопасность это, скорее, установка всех возможных блокировок. Чем больше работы требуется для взлома вашего сервера, тем меньше шансов на успешную атаку. Вы хотите, чтобы взлом ваших машин был более трудоемким, чем где-либо еще. Добавление брандмауэра увеличивает трудозатраты.

Я думаю, что ключевое использование это избыточность в безопасности. Еще один плюс брандмауэров в том, что вы можете просто отбрасывать попытки подключения к любому порту, а не отвечать на отклоненные запросы, — это сделает nmapping немного более неудобным для атакующего.

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

Ответ 4

Должен ли я экранировать свой сервер? Хороший вопрос. Кажется, что нет смысла устанавливать брандмауэр поверх сетевого стека, который и так отклоняет попытки подключения ко всем портам, кроме тех, которые открыты на законных основаниях. Если в ОС есть уязвимость, которая позволяет злонамеренно созданным пакетам нарушить работу узла, сможет ли брандмауэр, работающий на том же узле, предотвратить использование? Ну, может быть...

И это, вероятно, самая сильная причина для запуска брандмауэра на каждом узле: брандмауэр может предотвратить использование уязвимости сетевого стека. Достаточно ли это веская причина? Я не знаю, но, наверное, можно сказать: «За установку брандмауэра еще никого не увольняли».

Еще одна причина для установки брандмауэра на сервере это разделение этих двух в остальном сильно коррелирующих проблем:

  1. Откуда и на какие порты я принимаю соединения?

  2. Какие службы запущены и прослушивают соединения?

Без брандмауэра набор запущенных служб (вместе с конфигурациями для tcpwrappers и т. п.) полностью определяет набор портов, которые будут открыты на сервере, и от кого будут приниматься соединения. Брандмауэр на основе хоста дает администратору дополнительную гибкость в установке и тестировании новых служб контролируемым образом, прежде чем сделать их более широко доступными. Если такая гибкость не требуется, то нет смысла устанавливать брандмауэр на сервер.

В заключение: есть один пункт, не упомянутый в вашем контрольном списке безопасности, который я всегда добавляю, и это система обнаружения вторжений на хосте (HIDS), такая как AIDE или samhain. С хорошей HIDS злоумышленнику будет очень сложно внести нежелательные изменения в систему и остаться незамеченным. Я считаю, что на всех серверах должна быть установлена та или иная система HIDS.

Схожие статьи

Linux

Какой сетевой протокол обмена файлами имеет лучшую производительность и надежность?

Linux

Как получить информацию о только что запущенном процессе

Linux

Правильная настройка отправки почты через Cron

Linux

Атомарные изменения при доступе к каталогу, используя rsync