На самом компьютере с Firewall должно быть разрешено перенаправление, которое позволит пакетам проходить из одной сетевой карты в другую. Чтобы включить эту возможность, нужно записать в файл /proc/sys/net/ipv4/ip_forward число 1 (по умолчанию там может быть 0) или выполнить команду:
echo I > /proc/sys/net/ipv4/ip_forward
Для обеспечения переадресации между сетевыми интерфейсами ядро операционной системы должно быть скомпилировано с соответствующей поддержкой, потому что перенаправление происходит именно на этом уровне. Помимо этого, нужно изменить параметр net.ipv4.ip_forward в файле /etc/sysctl.conf на 1.
Сетевой экран может не только проверять пакеты на соответствие определенным фильтрам, но и прятать IP-адреса компьютеров сети. Это происходит следующим образом:
1. Клиент направляет пакет в сеть, и до сетевого экрана он будет идти со своим IP-адресом.
2. Сетевой экран меняет IP-адрес отправителя на свой и направляет пакет дальше от своего имени.
Таким образом, в Интернете все пакеты будут видны, как будто их отправлял Firewall, а не компьютеры внутри сети. Это позволяет скрыть от злоумышленника внутреннюю организацию сети и экономить IP-адреса. Внутри сети пользователь сам может раздавать адреса из зарезервированного диапазона, и только сетевой экран будет иметь реальный IP-адрес. При такой адресации из Интернета нельзя будет напрямую подключиться к компьютерам сети. Это значит, что злоумышленнику придется взламывать сначала машину с сетевым экраном и только потом компьютеры сети. Тем самым значительно усложнили задачу взломщика. Неопытные злоумышленники никогда не связываются с сетевыми экранами, потому что для такого проникновения нужны не только широкие знания принципов безопасности, но и большой опыт.
Пример, который разрешает переадресацию на внешний интерфейс из локальной сети:
ipchains -A forward -i eth1 -s 192.168.1.0/24 -j MASQ
Это общее правило, поэтому добавляем его в конец цепочки forward с помощью ключа -а, чтобы оно не перекрыло фильтры, которые относятся к конкретным пользователям, но в то же время взаимосвязаны с этой записью.
Далее идет ссылка на интерфейс eth1 (сетевая карта, которая смотрит в Интернет). Диапазон адресов соответствует всей сети 192.168.1.x. В качестве разрешения используется значение MASQ, что соответствует маскированию адреса, т. е. адрес клиента будет заменен на адрес компьютера, на котором работает Firewall.
Данное разрешение позволяет только передавать пакеты с адресов 192.168.1.x на сетевой интерфейс eth1. Но это еще не значит, что трафик поступит и сможет выйти в Интернет. Чтобы пакеты пользователей были приняты сетевым экраном, должно быть разрешение ACCEPT примерно следующего вида:
ipchains -A input -i eth0 -s 192.168.1.0/24 -j ACCEPT
В этом фильтре открыт доступ на сетевой интерфейс eth0 любым пакетам с адресов 192.168.1.x. Разрешение дано на порты, поэтому адрес отправителя пакета может быть любым из сети 192.168.1.x.
Осталось только разрешить таким же образом пакетам выходить из eth1, и можно считать, что все компьютеры сети уже получили доступ в Интернет. Только на всех клиентских машинах необходимо указать в качестве шлюза по умолчанию IP-адрес компьютера с сетевым интерфейсом, и все пакеты найдут своего адресата.
Если структура сети напоминает рис 3, то переадресация должна быть включена на обоих сетевых экранах. А вот маскировку адреса лучше всего сделать на двух Firewall. В этом случае второй сетевой экран будет скрывать локальную сеть даже от публичного сервера.
Зачастую в качестве второго сетевого устройства выступает не карта, а модем. В этом случае правило для перенаправления будет выглядеть следующим образом:
ipchains -A forward -i ppp0 -s 192.168.1.0/24 -j MASQ
Здесь перенаправление идет на интерфейс одного из модемов, имена которых имеют вид рррх.
Чаще всего необходимо, чтобы клиенты имели доступ к ресурсам Интернета, а обратное подсоединение было невозможно. Когда по протоколу TCP запрашивается подключение к удаленному компьютеру, то посылается пакет с установленным битом syn. В простых пакетах такого бита не должно быть. Таким образом, достаточно запретить ТСР-пакеты с этим флагом, и удаленный компьютер не сможет подключиться ни к одному ресурсу компьютера или сети. Это можно реализовать следующим образом:
ipchains -I input 1 -i ppp0 -p tcp – syn -j DENY
В данной строке вставляется новое правило в цепочку проверки входящих пакетов. Контролируются пакеты TCP, у которых установлен флаг syn (об этом говорит ключ – syn). Если такой пакет получен, то он удаляется. Для использования маскировки IP-адреса ядро операционной системы должно быть скомпилировано с соответствующей поддержкой, потому что подмена адреса происходит на уровне ядра.
Если попробовать сейчас перезагрузить систему и просмотреть цепочки сетевого экрана, то все изменения исчезнут. Проблема в том, что операционная система автоматически их не запоминает, и пользователю самому нужно позаботиться о сохранении правил. Для этого существует утилита ipchain-save. Ее нужно выполнять следующим образом:
ipchain-save > файл
Сохранение цепочек можно сделать автоматическим, но лучше сделать все вручную, так будет надежнее.
Восстановить цепочки тоже можно из файла. Для этого необходимо выполнить команду:
ipchain-restore < файл
Это очень удобно. Допустим, что пользователь хочет протестировать новые правила, но боится испортить уже отлаженные цепочки. Для этого нужно сохранить в каком-нибудь файле текущее состояние и можно изменять что угодно и как угодно. В любой момент можно вернуться к исходной точке, выполнив одну команду восстановления.
Iptables – это логическое развитие ipchains. Взяли все лучшее модифицировали, развили в сторону гибкости, надежности и производительности. В современных дистрибутивах iptables является неотъемлемой частью системы и ядро скомпилировано с учетом требований iptables.
Программа iptables является новой разработкой по управлению фильтрами и обеспечению безопасности. С помощью iptables пользователь также может редактировать цепочки правил input, output и forward.
Сходство между ipchains и iptables прослеживается уже при взгляде на параметры:
-A цепочка правило – добавить правило в конец цепочки. В качестве параметра указывается имя цепочки INPUT, OUTPUT или FORVARD;
-D цепочка номер – удалить правило с указанным номером из заданной цепочки;
-R цепочка номер правило – заменить правило с указанным номером в цепочке;
-I цепочка номер правило – вставить правило в указанную первым аргументом цепочку под номером, заданным во втором параметре. Если номер равен 1, то правило станет первым в цепочке;
-L цепочка – просмотреть содержимое указанной цепочки;
-F цепочка – удалить все правила из цепочки;
-p протокол – определяет протокол, на который воздействует правило;
-i интерфейс – определяет сетевой интерфейс, с которого данные были получены. Здесь можно использовать INPUT, FORVARD или PREROUTING;
-о интерфейс – задает интерфейс, на который направляется пакет. Здесь можно указывать OUTPUT, FORVARD или PREROUTING;
-j действие – операция, которая должна быть выполнена над пакетом. В качестве аргументов можно указать следующие значения:
• LOG – поместить в журнал запись о получении пакета;
• REGECT – отправителю будет направлено сообщение об ошибке;
• DROP – удалить пакет;
• BLOCK – блокировать пакеты;
-s адрес – IP-адрес отправителя пакета. Как и в случае с iptables, после адреса можно задать маску в виде /mask и знак отрицания "!", что будет соответствовать любым адресам, кроме указанных;
-d адрес – адрес назначения пакета.
Большинство параметров абсолютно идентичны программе ipchains. Но есть важные и очень мощные отличия. Например, с помощью ключей -о и -i очень просто указывать, с какого на какой интерфейс направляется пакет.
В данном обзоре ключей затронуты только основы, но если посмотреть файл документации, то можно увидеть еще много вариантов работы с ключом -j, т. е. существуют большие возможности по управлению пакетом, если он соответствует правилам.
Настройка цепочек iptables не сильно отличается от ipchains. Начать формирование цепочки нужно с очистки всего содержимого. Двигаться необходимо от полного запрета и разрешать только то, что не нанесет вреда серверу. Сервисы, которые могут оказаться опасными, должны быть доступны только тем, кому это необходимо, или тем, кому можно доверять.
Для сохранения изменений в iptables также надо выполнить специализированную команду:
service iptables save
Для разрешения переадресации с помощью iptables нужно выполнить следующую команду:
iptables -A FORWARD -о ррр0 -j MASQUERADE
В данной строке позволяется переадресация на интерфейс ррр0. С помощью параметра -j таким образом пользователь требует прятать IP-адрес отправителя, т. е. включает маскарадинг.
Если он использует трансляцию сетевых адресов (NAT, Network Address Translation), то команда может выглядеть следующим образом:
iptables -t nat -A FORWARD -о ррр0 -j MASQUERADE
Ключ -t nat указывает на необходимость загрузить модуль iptablenat. Если он не загружен, то это легко сделать вручную с помощью следующей команды:
modprobe iptable_nat
iptabie_nat — это модуль ядра, который позволяет сетевому экрану работать с NAT.
6. Установка, настройка Firewall
Пользователю для начала нужно выбрать дистрибутив на котором он будет работать. Debian GNU/Linux 5.0 неплохо подходит для этого. Этот дистрибутив достаточно распространенный. У Debian GNU/Linux одно из самых больших сообществ, так же периодически выходят все более новые версии пакетов, которые легко загрузить через интернет.
Для организации Firewall в GNU/Linux используется программа iptables, которая, как правило, сразу инсталлируется при установке большинства дистрибутивов. В Debian GNU/Linux проверить это можно, запустив с правами администратора aptitude. При необходимости – нужно установить iptables.