Добавить в избранное | Сделать стартовой страницей

Большая Linux библиотека для пользователей OS Linux и ПО для нее
Есть что сказать? Нужен совет? Посети наш форум.




Пингвин на воротах (брандмауэр).

Автор : Владимир РОЗДОБУДЬКО
Операционная система Linux с каждым годом собирает под своим флагом все большее и большее число пользователей. И дело вовсе не в разнообразии дистрибутивов, которых насчитывается уже больше сотни, а в процессе работы с системой, в ее гибкости, быстродействии, стабильности. Если у вас дома завалялась старая "четверка" или "тройка", не спешите запирать ее в шкаф на память вашим потомкам, и уж тем более не смейте выкидывать ее на свалку - поверьте, она еще сможет сослужить хорошую службу при построении небольшой домашней сети. Я думаю, что под управлением операционной системы Linux мы сможем дать этому, казалось бы, ненужному железу вторую жизнь. Итак, мы поговорим сегодня о настройке файрвола (брандмауэра) в операционной системе Linux.

Термин "брандмауэр" может приобретать различные значения в зависимости от принципа, положенного в основу средств защиты, сетевой архитектуры и схемы маршрутизации. Брандмауэры обычно подразделяются на три типа: брандмауэр с фильтрацией пакетов, прикладной шлюз и универсальный proxy-сервер.

Брандмауэр с фильтрацией пакетов, как правило, действует на сетевом и транспортном уровнях стека протокола TCP/IP и реализуется в составе операционной системы. Исходной информацией о фильтрации является содержимое заголовков IP-пакетов, на основе которых брандмауэр принимает решение, по какому маршруту следует направить пакет

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

Proxy-сервер (или брандмауэр-посредник) обычно реализуется в виде независимого приложения, управляющего доступом к различным типам сетевых служб. Для клиентов proxy-сервер выполняет роль сервера, а для серверов является клиент-программой. Вместо того чтобы непосредственно обращаться к удаленным серверам, специальным образом сконфигурированные клиент-программы обращаются к proxy. Приняв обращение клиента, proxy-сервер устанавливает связь с удаленным узлом, но уже не от имени клиента, а от своего, при этом он заменяет в пакете адрес клиента своим адресом. Подобный сервер может контролировать целостность данных, осуществлять проверку на наличие вирусов и обеспечивать выполнение правил системной политики, определяющих обмен высокоуровневыми данными.

Данная статья в основном посвящена брандмауэрам с фильтрацией пакетов, но в процессе построения брандмауэра мы попробуем частично реализовать proxy-сервер, который известен также как IP-маскировка.

Допустим, у вас имеется небольшая локальная сеть и единственный выход в Интернет (через dial-up по протоколу PPP) и шлюзовой компьютер с двумя интерфейсами. Один смотрит на локальную сеть (с IP-адресом 192.168.1.1), а второй имеет реальный IP (например, 1.2.3.4). В такой конфигурации фильтр пакетов поможет нам для ограничения доступа, в частности, внутрь вашей сети из остального Интернета, а также сделает возможным доступ в Интернет для всех членов вашей локальной сети. Все это сделать не составит большого труда, если использовать программу администрирования брандмауэра ipchains.

Итак, при построении сетей с фильтрацией пакетов необходимо надлежащим образом настроить ядро; если у вас имеется файл /proc/net/ip_fwchains, значит, ядро уже готово к работе с ipchains, если же такового не имеется, то откомпилируйте ядро, включив в него следующие опции:

Возможно, вам понадобятся и другие опции:

(позволяет направлять копии пакетов программам мониторинга для протоколирования, извещения администратора о попытках атак и т.п.);

(всегда дефрагментировать транзитные пакеты. Эта опция требуется для маскарадинга);

(позволяет включить прозрачное проксирование);

(позволяет включить маскарадинг);

(позволяет маскарадить ICMP-пакеты (т.е. у вас будут работать, например, ping и traceroute с машин с fake-адресами).

После этого перекомпилируйте ядро и запустите его (если вы не знаете, как это делать, прочтите файл Kernel-howto).

Чтобы фильтр пакетов начал работать, надо вписать единицу в файл /proc/sys/net/ipv4/ip_forward:

Для автоматизации этой задачи советую закинуть эту строку в какой-нибудь скрипт, автоматически загружаемый при загрузке системы. Эти скрипты находятся в папочке /etc/rc.d/init.d/.

Как правило, брандмауэр устанавливается для того чтобы контролировать данные, которыми компьютеры обмениваются с Интернетом. Данные, поступающие извне, фильтруются; в результате чего отсеиваются недопустимые обращения к узлам внутренней сети. Аналогично происходит проверка информации, передаваемой из внутренней сети в Интернет.

Ядро запускается с тремя встроенными цепочками: input (входящие пакеты), output (исходящие пакеты) и forward (пересылочные). К этим цепочкам можно дописывать новые правила (rules). Каждое правило в себе содержит условие и действие, которое необходимо провести с пакетом при выполнении или невыполнении условия. Термин цепочка используется потому, что при проверке пакета правила применяются последовательно одно за другим, пока список правил не будет исчерпан. Таким образом, пара ввод/вывод - это входная (input) и выходная (output) цепочки; одна из них представляет собой набор правил для входящих, а другая - для исходящих данных. Принцип работы брандмауэра показан на Рис. 1. Надеюсь, после просмотра рисунка вы лучше поймете принципы работы брандмауэра под управлением операционной системы Linux.

Рассмотрим теперь синтаксис при создании цепочек правил, а также параметры и флаги ipchains:

Итак, после ознакомления с основными опциями и флагами ipchains попробуем создать несколько правил.

Для начала попробуем поэкспериментировать с icmp-протоколом. Допустим, вы желаете спрятать ваш шлюзовой компьютер в сети, то есть запретить отвечать ему на ping-запросы. Причем, ping на другие машины вашей сети должен идти без проблем. Для этого нам придется создать четыре правила (константы: $внешний интерфейс - интерфейс, который смотрит на локальную сеть, $ваш_ip - ip-адрес вашего шлюзового компьютера).

передача пакетов ping на любой узел:

запрет приема пакетов ping с удаленных узлов:

Теперь вы видите всех в сети, а вот вас никто не видит.

В ipchains предусмотрена очень полезная опция ! - инверсия. Многие условия (в частности, -s и -d) допускают инвертирование путем указания ! перед параметром. Попробуем использовать инверсию для построения правила доступа к ssh на вашем сервере. Пусть вы хотите, чтобы ваш друг, находящийся во внешней сети, мог удаленно пользоваться вашим компьютером.

Это, конечно, не спасет вас от ip-spoofing’a, то есть замены IP-адреса, но все же серьезно помешает злоумышленника и во многом отобьет у них желание заниматься исследованием вашего сервера. А если попытки регистрации вашего друга вы будете записывать, то вскоре вы сможете обнаружить злоумышленника и принять должные меры.

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

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

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

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

Делается это для того, чтобы во время настройки никакие пакеты не смогли проскочить в вашу сеть. После добавления и проверки работоспособности правил восстановим деятельность брандмауэра:

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

Вы можете выполнять маскировку данных, соответствующих протоколам TCP и ICMP:

Если вы хотите проверить, как будет работать фильтр на некотором пакете, используйте команду -C (check). Параметры этого фиктивного пакета задаются точно так же, как и в правилах: -p для протокола, -s для адреса отправителя, -d для адреса получателя, -i для интерфейса. Если используется протокол TCP или UDP, то в адресах отправителя и получателя должен быть указан порт, а для ICMP - код и тип ICMP (исключение составляет случай, когда проверяется фрагмент пакета (-f), но не первый). Для протокола TCP и в отсутствии флага -f (т.е. проверяемый пакет не является фрагментом) можно указать флаг -y для имитации SYN-пакета. Пример: проверяем по входной цепочке TCP SYN-пакет от 192.168.1.1, порт 60000, на 192.168.1.2, порт www, пришедший через интерфейс eth0 (типичный запрос на установку www-соединения):

В ответ на эту команду ipchains сообщит о судьбе пакета, например, Packet accepted.

После настройки и проверки работоспособности можно записать текущие правила одной или всех цепочек в файл. Это делается так:

В качестве параметра можно указать имя одной цепочки. Если имя не указано, то записываются правила всех цепочек. Кроме того, можно указать флаг -v, который позволит просмотреть правила по мере их записи.

Для восстановления правил из фала применяется скрипт ipchains-restore:

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


Обсудить данную тему на нашем форуме "Все о Linux"