Iptables Tutorial 1.1.19
ModernLib.Net / Интернет / Andreasson Oskar / Iptables Tutorial 1.1.19 - Чтение
(стр. 7)
Автор:
|
Andreasson Oskar |
Жанр:
|
Интернет |
-
Читать книгу полностью
(355 Кб)
- Скачать в формате fb2
(446 Кб)
- Скачать в формате doc
(104 Кб)
- Скачать в формате txt
(96 Кб)
- Скачать в формате html
(445 Кб)
- Страницы:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
|
|
ПРИМЕЧАНИЕ: Заметьте, что загружать модули ip_nat_irc и ip_nat_ftp вам потребуется только в том случае, если вы хотите, чтобы преобразование сетевых адресов (Network Adress Translation) производилось корректно с протоколами FTP и IRC. Так же вам потребуется подгрузить модули ip_conntrack_irc и ip_conntrack_ftp до загрузки модулей NAT.
7.2.3. Настройка /proc
Здесь мы запускаем пересылку пакетов (IP forwarding), записав единицу в файл /proc/sys/net/ipv4/ip_forward таким способом:
echo "1" > /proc/sys/net/ipv4/ip_forward
ПРЕДУПРЕЖДЕНИЕ: Наверное стоит задуматься над тем где и когда включать пересылку (IP forwarding). В этом и в других сценариях в данном руководстве, мы включаем пересылку до того как создадим какие либо правила iptables. От начала работы пересылки (IP forwarding) до момента, когда будут созданы необходимые правила, при нашем варианте, может пройти от нескольких миллисекунд до минут, все зависит от объема работы, выполняемой сценарием и быстродействия конкретного компьютера. Понятно, что это дает некоторый промежуток времени, когда злоумышленник может проникнуть через брандмауэр. Поэтому, в реальной ситуации запускать пересылку (IP forwarding) следует после создания всего набора правил. Здесь же я поместил включение пересылки в начале исключительно в целях удобочитаемости. Если вам необходима поддержка динамического IP, (при использовании
SLIP,
PPPили
DHCP) вы можете раскомментарить строку:
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
Если вам требуется включить любые другие опции, вы должны обращаться к соответствующей документации по этим опциям. Хороший и лаконичный документ по файловой системе /proc поставляется вместе с ядром. Ссылки на на другие документы вы найдете в приложении
Ссылки на другие ресурсы.
ПРИМЕЧАНИЕ: Сценарий rc.firewall.txt и все остальные сценарии в данном руководстве, содержат небольшую по размерам секцию не требуемых (non-required) настроек /proc. Как бы привлекательно не выглядели эти опции – не включайте их, пока не убедитесь, что достаточно четко представляете себе функции, которые они выполняют.
7.2.4. Размещение правил по разным цепочкам
Здесь мы поговорим о пользовательских цепочках, в частности – о пользовательских цепочках, определяемых в сценарии rc.firewall.txt. Мой вариант разделения правил по дополнительным цепочкам может оказаться неприемлемым в том или ином конкретном случае. Я надеюсь, что смогу показать вам возможные «подводные камни». Данный раздел тесно перекликается с главой
Порядок прохождения таблиц и цепочеки совершенно нелишним будет еще раз, хотя бы бегло, просмотреть ее. Распределив набор правил по пользовательским цепочкам, я добился экономии процессорного времени, без потери уровня безопасности системы и читабельности сценариев. Вместо того, чтобы пропускать
TCPпакеты через весь набор правил (и для
ICMP, и для
UDP), я просто отбираю
TCPпакеты и пропускаю их через пользовательскую цепочку, предназначенную именно для
TCPпакетов, что приводит к уменьшению нагрузки на систему. На следующей картинке схематично приводится порядок прохождения пакетов через netfilter. В действительности, эта картинка выглядит несколько ограниченно по сравнению со схемой, приведенной в главе
Порядок прохождения таблиц и цепочек.
Основное назначение рисунка – освежить нашу память. В целом, данный пример сценария основан на предположении, что мы имеем одну локальную сеть, один брандмауэр (firewall) и единственное подключение к Интернет, с постоянным IP адресом (в противоположность
PPP,
SLIP,
DHCPи прочим). Так же предполагается, что доступ к сервисам Интернет идет через брандмауэр, что мы полностью доверяем нашей локальной сети и поэтому не собираемся блокировать траффик, исходящий из локальной сети, однако Интернет не может считаться доверительной сетью и поэтому необходимо ограничить возможность доступа в нашу локальную сеть извне. Мы собираемся исходить из принципа «Все что не разрешено – то запрещено». Для выполнения последнего ограничения, мы устанавливаем политику по-умолчанию –
DROP. Тем самым мы отсекаем соединения, которые явно не разрешены. А теперь давайте рассмотрим что нам нужно сделать и как.
Для начала – позволим соединения из локальной сети с Интернет. Для этого нам потребуется выполнить преобразование сетевых адресов (
NAT). Делается это в цепочке
PREROUTING
(Я полагаю, что здесь автор просто допустил опечатку, поскольку в тексте сценария заполняется цепочка POSTROUTING, да и мы уже знаем, что SNAT производится в цепочке POSTROUTING таблицы nat
прим. перев.), которая заполняется последней в нашем сценарии. Подразумевается, также, выполнение некоторой фильтрации в цепочке
FORWARD. Если мы полностью доверяем нашей локальной сети, пропуская весь траффик в Интернет, то это еще не означает доверия к Интернет и, следовательно необходимо вводить ограничения на доступ к нашим компьютерам извне. В нашем случае мы допускаем прохождение пакетов в нашу сеть только в случае уже установленного соединения, либо в случае открытия нового соединения, но в рамках уже существующего (ESTABLISHED и RELATED).
Что касается машины-брандмауэра – необходимо до минимума свести сервисы, работающие с Интернет. Следовательно мы допускаем только
HTTP,
FTP,
SSHи
IDENTDдоступ к брандмауэру. Все эти протоколы мы будем считать допустимыми в цепочке
INPUT, соответственно нам необходимо разрешить «ответный» траффик в цепочке
OUTPUT. Поскольку мы предполагаем доверительные взаимоотношения с локальной сетью, то мы добавляем правила для диапазона адресов локальной сети, а заодно и для локального сетевого интерфейса и локального IP адреса (127.0.0.1). Как уже упоминалось выше, существует ряд диапазонов адресов, выделенных специально для локальных сетей, эти адреса считаются в Интернет ошибочными и как правило не обслуживаются. Поэтому и мы запретим любой траффик из Интернет с исходящим адресом, принадлежащим диапазонам локальных сетей. И в заключение прочитайте главу
. Так как у нас работает
FTPсервер, то правила, обслуживающие соединения с этим сервером, желательно было бы поместить в начало цепочки
INPUT, добиваясь тем самым уменьшения нагрузки на систему. В целом же, надо понимать, что чем меньше правил проходит пакет, тем больше экономия процессорного времени, тем ниже нагрузка на систему. С этой целью я разбил набор правил на дополнительные цепочки. В нашем примере я разбил пакеты на группы по их принадлежности к тому или иному протоколу. Для каждого типа протокола создана своя цепочка правил, например,
tcp_packets, которая содержит правила для проверки всех допустимых
TCPпортов и протоколов. Для проведения дополнительной проверки пакетов, прошедших через одну цепочку, может быть создана другая. В нашем случае таковой является цепочка
allowed. В этой цепочке производится дополнительная проверка отдельных характеристик
TCPпакетов перед тем как принять окончательное решение о пропуске.
ICMPпакеты следуют через цепочку
icmp_packets. Здесь мы просто пропускаем все
ICMPпакеты с указанным кодом сообщения. И наконец
UDPпакеты. Они проходят через цепочку
udp_packets, которая обрабатывает входящие
UDPпакеты. Если они принадлежат допустимым сервисам, то они пропускаются без проведения дополнительной проверки. Поскольку мы рассматриваем сравнительно небольшую сеть, то наш брандмауэр используется еще и в качестве рабочей станции, поэтому мы делаем возможным соединение с Интернет и с самого брандмауэра.
И в завершение о цепочке
OUTPUT. Мы не выполняем каких либо специфичных блокировок для пользователей, однако мы не хотим, чтобы кто либо, используя наш брандмауэр выдавал в сеть «поддельные» пакеты, поэтому мы устанавливаем правила, позволяющие прохождение пакетов только с нашим адресом в локальной сети, с нашим локальным адресом (127.0.0.1) и с нашим адресом в Интернет. С этих адресов пакеты пропускаются цепочкой
OUTPUT, все остальные (скорее всего сфальсифицированные) отсекаются политикой по-умолчанию
DROP.
7.2.5. Установка политик по-умолчанию
Прежде, чем приступить к созданию набора правил, необходимо определиться с политиками цепочек по-умолчанию. Политика по-умолчанию устанавливается командой, подобной приводимой ниже
iptables[-P {chain} {policy}] Политика по-умолчанию представляет собой действие, которое применяется к пакету, не попавшему под действие ни одного из правил в цепочке.
(Небольшое уточнение, команда
iptables -Pприменима ТОЛЬКО К ВСТРОЕННЫМ цепочкам, т.е. INPUT, FORWARD, OUTPUT и т.п., и не применима к пользовательским цепочкам.
прим. перев.).
ОСТОРОЖНО: Будьте предельно осторожны с установкой политик по-умолчанию для цепочек из таблиц, не предназначенных для фильтрации, так как это может приводить к довольно странным результатам.
7.2.6. Создание пользовательских цепочек в таблице filter
Итак, у вас перед глазами наверняка уже стоит картинка движения пакетов через различные цепочки, и как эти цепочки взаимодействуют между собой! Вы уже должны ясно представлять себе цели и назначение данного сценария. Давайте начнем создавать цепочки и наборы правил для них. Прежде всего необходимо создать дополнительные цепочки с помощью команды
-N. Сразу после создания цепочки еще не имеют ни одного правила. В нашем примере создаются цепочки
icmp_packets,
tcp_packets,
udp_packetsи цепочка
allowed, которая вызывается из цепочки
tcp_packets. Входящие пакеты с интерфейса
$INET_IFACE(т.е. из Интернет), по протоколу
ICMPперенаправляются в цепочку
icmp_packets, пакеты протокола TCP перенаправляются в цепочку
tcp_packetsи входящие пакеты
UDPс интерфейса eth0 идут в цепочку
udp_packets. Более подробное описание вы найдете в разделе
Цепочка INPUT. Синтаксис команды для создания своей цепочки очень прост:
iptables[-N
chain]
7.2.6.1. Цепочка bad_tcp_packets
Эта цепочка предназначена для отфильтровывания пакетов с «неправильными» заголовками и решения ряда других проблем. Здесь отфильтровываются все пакеты, которые распознаются как
NEW, но не являются
SYNпакетами, а так же обрабатываются
SYN/
ACK-пакеты, имеющие статус
NEW. Эта цепочка может быть использована для защиты от вторжения и сканирования портов. Сюда, так же, добавлено правило для отсеивания пакетов со статусом
INVALID. Если вы пожелаете почитать более подробно об этой проблеме, то смотрите раздел
Пакеты со статусом NEW и со сброшенным битом SYNв приложении
Общие проблемы и вопросы. Разумеется, не всегда справедливо будет просто сбрасывать пакеты с признаком
NEWи сброшенным битом
SYN, но в 99% случаев это оправданный шаг. Поэтому мой сценарий заносит информацию о таких пакетах в чичтемный журнал, а затем «сбрасывает» их. Причина, по которой для SYN/ACK-пакетов со статусом NEW применяется действие
REJECT, достаточно проста. Она описывается в разделе
SYN/ACK – пакеты и пакеты со статусом NEWприложения
Общие проблемы и вопросы. Общепринятой считается необходимость отправления пакета RST в подобных случаях (RST в ответ на незапрошенный SYN/ACK). Тем самым мы предотвращаем возможность атаки «Предсказание номера TCP-последовательности» (Sequence Number Prediction) на другие узлы сети.
7.2.6.2. Цепочка allowed
TCP пакет, следуя с интерфейса
$INET_IFACE, попадает в цепочку
tcp_packets, если пакет следует на разрешенный порт, то после этого проводится дополнительная проверка в цепочке
allowed. Первое правило проверяет, является ли пакет
SYNпакетом, т.е. запросом на соединение. Такой пакет мы считаем допустимым и пропускаем. Следующее правило пропускает все пакеты с признаком
ESTABLISHEDили
RELATED. Когда соединение устанавливается
SYNпакетом, и на этот запрос был отправлен положительный ответ, то оно получает статус
ESTABLISHED. Последним правилом в этой цепочке сбрасываются все остальные TCP пакеты. Под это правило попадают пакеты из несуществующего соединения, пакеты со сброшенным битом
SYN, которые пытаются запустить соединение. Не
SYNпакеты практически не используются для запуска соединения, за исключением случаев сканирования портов. Насколько я знаю, на сегодняшний день нет реализации TCP/IP, которая поддерживала бы открытие соединения иначе, чем передача
SYNпакета, поэтому на 99% можно быть уверенным, что сброшены пакеты, посланные сканером портов.
7.2.6.3. Цепочка для TCP
Итак, мы подошли к TCP соединениям. Здесь мы указываем, какие порты могут быть доступны из Internet. Несмотря на то, что даже если пакет прошел проверку здесь, мы все равно все пакеты передаем в цепочку
allowedдля дополнительной проверки. Я открыл TCP порт с номером 21, который является портом управления FTP соединениями. и далее, я разрешаю все
RELATEDсоединения, разрешая, тем самым, PASSIVE FTP, при условии, что был загружен модуль
ip_conntrack_ftp. Если вам потребуется запретить FTP соединения, то вам потребуется выгрузить модуль
ip_conntrack_ftpи удалить строку
$IPTABLES -A tcp_packets -p TCP -s 0/0 –dport 21 -j allowedиз сценария rc.firewall.txt. Порт 22 – это SSH, который намного более безопасен чем telnet на 23 порту. Если Вам вздумается предоставить доступ к командной оболочке (shell) кому бы то ни было из Интернет, то лучше конечно пользоваться SSH. Однако , хочу заметить, что вообще-то считается дурным тоном предоставлять доступ к брандмауэру любому кроме вас самих. Ваш сетевой экран должен иметь только те сервисы, которые действительно необходимы и не более того. Порт 80 – это порт HTTP, другим словами – web сервер, уберите это правило, если у вас нет web сервера. И наконец порт 113, ответственный за службу IDENTD и использующийся некоторыми протоколами типа IRC, и пр. Замечу, что вам следует использовать пакет
oidentdесли вы делаете трансляцию сетевых адресов для некоторых узлов (хостов) в локальной сети.
oidentdподдерживает передачу
IDENTDзапросов в локальной сети. Если у вас имеется необходимость открыть дополнительные порты, то просто скопируйте одно из правил в цепочке
tcp_packetsи подправьте номера портов в соответствии с вашими требованиями.
7.2.6.4. Цепочка для UDP
Пакеты
UDPиз цепочки
INPUTследуют в цепочку
udp_packetsКак и в случае с
TCPпакетами, здесь они проверяются на допустимость по номеру порта назначения. Обратите внимание – мы не проверяем исходящий порт пакета, поскольку об этом заботится механизм определения состояния. Открываются только те порты, которые обслуживаются серверами или демонами на нашем брандмауэре. Пакеты, которые поступают на брандмауэр по уже установленным соединениям (установленным из локальной сети) пропускаются брандмауэром автоматически, поскольку имеют состояние
ESTABLISHEDили
RELATED. Как видно из текста сценария, порт 53, на котором «сидит» DNS, для UDP пакетов закрыт, то есть правило, открывающее 53-й порт в сценарии присутствует, но закомментировано. Если вы пожелаете запустить DNS на брандмауэре, то это правило следует раскомментировать. Я лично разрешаю порт 123, на котором работает NTP (network time protocol). Этой службой обычно пользуются для приема точного времени с серверов времени в Интернет. Однако, вероятнее всего, что вы не используете этот протокол, поэтому соответствующее правило в сценарии так же закомментировано. Порт 2074 используется некоторыми мультимедийными приложениями, подобно
speak freely, которые используются для передачи голоса в режиме реального времени. И наконец – ICQ, на порту 4000. Это широко известный протокол, используемый ICQ-приложениями Я полагаю не следует объяснять вам что это такое. Кроме того в сценарии приведены еще два правила, которые по-умолчанию закомментированы. Ими можно воспользоваться, если брандмауэр чрезмерно нагружен. Первое – блокирует широковещательные пакеты, поступающие на порты со 135 по 139. Эти порты используются протоколами
SMBи
NetBIOSот Microsoft. Таким образом данное правило предотвращает переполнение таблицы трассировщика в сетях Microsoft Network. Второе правило блокирует
DHCPзапросы извне. Это правило определенно имеет смысл если внешняя сеть содержит некоммутируемые сегменты, где IP адреса выделяются клиентам динамически.
ПРИМЕЧАНИЕ: Последние два правила не являются обязательными (в тексте сценария они закомментированы). Все пакеты, которые не были отвергнуты или приняты явно, логируются в журнал последним правилом в цепочке
INPUT, поэтому, если вас беспокоит проблема «раздувания» системного журнала – можете раскомментировать эти правила.
7.2.6.5. Цепочка для ICMP
Здесь принимается решение о пропуске
ICMPпакетов. Если пакет приходит с eth0 в цепочку
INPUT, то далее он перенаправляется в цепочку
icmp_packets. В этой цепочке проверяется тип
ICMPсообщения. Пропускаются только
ICMP Echo Request,
TTL equals 0 during transitи
TTL equals 0 during reassembly. Все остальные типы
ICMPсообщений должны проходить брандмауэр беспрепятственно, поскольку будут иметь состояние
RELATED.
ПРИМЕЧАНИЕ: Если
ICMPпакет приходит в ответ на наш запрос, то он приобретает статус
RELATED(связанный с имеющимся соединением). Более подробно состояние пакетов рассматривается в главе
Механизм определения состояний При принятии решения я исхожу из следующих соображений:
ICMP Echo Requestпакеты посылаются, главным образом, для проверки доступности хоста. Если удалить это правило, то наш брандмауэр не будет «откликаться» в ответ на
ICMP Echo Request, что сделает использование утилиты ping и подобных ей, по отношению к брандмауэру, бесполезными.
Time Exceeded(т.е.,
TTL equals 0 during transitи
TTL equals 0 during reassembly). Во время движения пакета по сети, на каждом маршрутизаторе поле
TTL, в заголовке пакета, уменьшается на 1. Как только поле
TTLстанет равным нулю, то маршрутизатором будет послано сообщение
Time Exceeded. Например, когда вы выполняете трассировку (
traceroute) какого либо узла, то поле
TTLустанавливается равным 1, на первом же маршрутизаторе оно становится равным нулю и к нам приходит сообщение
Time Exceeded, далее, устанавливаем TTL = 2 и второй маршрутизатор передает нам
Time Exceeded, и так далее, пока не получим ответ с самого узла. Список типов
ICMPсообщений смотрите в приложении
Типы ICMPДополнительную информацию по
ICMPвы можете получить в следующих документах:
The Internet Control Message Protocol
RFC 792 – Internet Control Message Protocol– от J. Postel.
ПРИМЕЧАНИЕ: Будьте внимательны при блокировании
ICMPпакетов, возможно я не прав, блокируя какие-то из них, может оказаться так, что для вас это неприемлемо.
7.2.7. Цепочка INPUT
Цепочка
INPUT, как я уже писал, для выполнения основной работы использует другие цепочки, за счет чего снижая нагрузку на сетевой фильтр. Эффект применения такого варианта организации правил лучше заметен на медленных машинах, которые в другом случае начинают «терять» пакеты при высокой нагрузке. Достигается это разбиением набора правил по некоторому признаку и выделение их в отдельные цепочки. Тем самым уменьшается количество правил, которое проходит каждый пакет. Первым же правилом мы пытаемся отбросить «плохие» пакеты. За дополнительной информацией обращайтесь к приложению
Цепочка bad_tcp_packets. В некоторых особенных ситуациях такие пакеты могут считаться допустимыми, но в 99% случаев лучше их «остановить». Поэтому такие пакеты заносятся в системный журнал (логируются) и «сбрасываются». Далее следует целая группа правил, которая пропускает весь трафик, идущий из доверительной сети, которая включает в себя сетевой адаптер, связанный с локальной сетью и локальный сетевой интерфейс (lo) и имеющий исходные адреса нашей локальной сети (включая реальный IP адрес). Эта группа правил стоит первой по той простой причине, что локальная сеть генерирует значительно бОльший трафик чем трафик из Internet. Поэтому, при построении своих наборов правил, всегда старайтесь учитывать объем трафика, указывая первыми те правила, которые будут обслуживать больший трафик. Первым в группе, анализирующей трафик идущий с $INET_IFACE, стоит правило, пропускающее все пакеты со статусом
ESTABLISHEDили
RELATED(эти пакеты являются частью уже УСТАНОВЛЕННОГО или СВЯЗАННОГО соединения). Это правило эквивалентно правилу, стоящему в цепочке allowed. И в некоторой степени является избыточным, поскольку затем цепочка allowed вызывается опосредованно через цепочку tcp_packets, однако оно несколько разгружает сетевой фильтр, поскольку значительная доля трафика пропускается этим праилом и не проходит всю последовательность до цепочки allowed. После этого производится анализ трафика, идущего из Internet. Все пакеты, приходящие в цепочку
INPUTс интерфейса
$INET_IFACEраспределяются по вложенным цепочкам, в зависимости от типа протокола. TCP пакеты передаются в цепочку
tcp_packets, UDP пакеты отправляются в цепочку
udp_packetsи ICMP перенаправляются в цепочку
icmp_packets. Как правило, большую часть трафика «съедают» TCP пакеты, потом UDP и меньший объем приходится на долю ICMP, однако в вашем конкретном случае это предположение может оказаться неверным. Очень важно учитывать объем трафика, проходящего через набор правил. Учет объема трафика – абсолютная необходимость. В случае неоптимального распределения правил даже машину класса Pentium III и выше, с сетевой картой 100 Мбит и большим объемом передаваемых данных по сети, довольно легко можно «поставить на колени» сравнительно небольшим объемом правил. Далее следует весьма специфическое правило (по-умолчанию закомментировано). Дело в том, что клиенты Microsoft Network имеют «дурную привычку» выдавать огромное количество Multicast (групповых) пакетов в диапазоне адресов 224.0.0.0/8. Поэтому можно использовать данное правило для предотвращения «засорения» логов в случае, если с внешней стороны имеется какая либо сеть Microsoft Network. Подобную же проблему решают два последних правила (по-умолчанию закомментированы) в цепочке
udp_packets, описанные в
Цепочка для UDP. Последним правилом, перед тем как ко всем не принятым явно пакетам в цепочке
INPUTбудет применена политика по-умолчанию, траффик журналируется, на случай необходимости поиска причин возникающих проблем. При этом мы устанавливаем правилу, ограничение на количество логируемых пакетов – не более 3-х в минуту, чтобы предотвратить чрезмерное раздувание журнала и кроме того подобные записи в журнал сопровождаются собственным комментарием (префиксом), чтобы знать откуда появились эти записи. Все что не было явно пропущено в цепочке INPUT будет подвергнуто действию
DROP, поскольку именно это действие назначено в качестве политики по-умолчанию. Политики по-умолчанию были описаны чуть выше в разделе
Установка политик по-умолчанию.
7.2.8. Цепочка FORWARD
Цепочка
FORWARDсодержит очень небольшое количество правил. Первое правило напрвляет все TCP пакеты на проверку в цепочку
bad_tcp_packets, которая используется так же и в цепочке
INPUT. Цепочка
bad_tcp_packetsсконструирована таким образом, что может вызываться из других цепочек, невзирая на то, куда направляется пакет. После проверки TCP пакетов, как обычно, мы разрешем движение пакетов из локальной сети без ограничений. Далее, пропускается весь трафик из локальной сети без ограничений. Естественно, нужно пропустить ответные пакеты в локальную сеть, поэтому следующим правилом мы пропускаем все, что имеет признак ESTABLISHED или RELATED, т.е. мы пропускаем пакеты по соединению установленному ИЗ локальной сети. И в заключение заносим в системный журнал информацию о сброшенных пакетах, предваряя их префиксом
"IPT FORWARD packet died: ", чтобы потом, в случае поиска ошибок, не перепутать их с пакетами, сброшенными в цепочке
INPUT.
7.2.9. Цепочка OUTPUT
Как я уже упоминал ранее, в моем случае компьютер используется как брандмауэр и одновременно как рабочая станция. Поэтому я позволяю покидать мой хост всему, что имеет исходный адрес
$LOCALHOST_IP,
$LAN_IPили
$STATIC_IP. Сделано это для защиты от трафика, который может сфальсицировас моего компьютера, несмотря на то, что я совершенно уверен во всех, кто имеет к нему доступ. И в довершение ко всему, я журналирую «сброшенные» пакеты, на случай поиска ошибок или в целях выявления сфальсифицированных пакетов. Ко всем пакетам, не прошедшим ни одно из правил, применяется политика по-умолчанию –
DROP.
7.2.10. Цепочка PREROUTING таблицы nat
В данном сценарии эта цепочка не имеет ни одного правила и единственно, почему я привожу ее описание здесь, это еще раз напомнить, что в данной цепочке выполняется преобразование сетевых адресов (DNAT) перед тем как пакеты попадут в цепочку
INPUTили
FORWARD.
ОСТОРОЖНО: Еще раз хочу напомнить, что эта цепочка не предназначена ни для какого вида фильтрации, а только для преобразования адресов, поскольку в эту цепочку попадает только первый пакет из потока.
7.2.11. Запуск SNAT и цепочка POSTROUTING
И заключительный раздел – настройка
SNAT. По крайней мере для меня. Прежде всего мы добавляем правило в таблицу nat, в цепочку
POSTROUTING, которое производит преобразование исходных адресов всех пакетов, исходящих с интерфейса, подключенного к Internet. В сценарии определен ряд переменных, с помощью которых можно использовать для автоматической настройки сценария. Кроме того, использование переменных повышает удобочитаемость скриптов. Ключом
-tзадается имя таблицы, в данном случае nat. Команда
-Aдобавляет (Add) новое правило в цепочку POSTROUTING, критерий
-o $INET_IFACEзадает исходящий интерфейс, и в конце правила задаем действие над пакетом –
SNAT. Таким образом, все пакеты, подошедшие под заданный критерий будут «замаскированы», т.е. будут выглядеть так, как будто они отправлены с нашего узла. Не забудьте указать ключ
–to-sourceс соответствующим IP адресом для исходящих пакетов В этом сценарие я использую
SNATвместо
MASQUERADEпо ряду причин. Первая – предполагается, что этот сценарий должен работать на сетевом узле, который имеет постоянный IP адрес. Следующая состоит в том, что
SNATработает быстрее и более эффективно. Конечно, если вы не имеете постоянного IP адреса, то вы должны использовать действие
MASQUERADE, которое предоставляет более простой способ трансляции адресов, поскольку оно автоматически определяет IP адрес, присвоенный заданному интерфейсу. Однако, по сравнению с
SNATэто действие требует несколько больших вычислительных ресурсов, хотя и не значительно. Пример работы с
MASQUERADE, вы найдете в сценарии
rc.DHCP.firewall.txt.
Глава 8. Примеры сценариев
Цель этой главы состоит в том, чтобы дать краткое описание каждого сценария, в этом руководстве. Эти сценарии не совершенны, и они не могут полностью соответствовать вашим нуждам. Это означает, что вы должны сами «подогнать» эти сценарии под себя. Последующая часть руководства призвана облегчить вам эту подгонку.
8.1. Структура файла rc.firewall.txt
Все сценарии, описанные в этом руководстве, имеют определенную структуру. Сделано это для того, чтобы сценарии были максимально похожи друг на друга, облегчая тем самым поиск различий между ними. Эта структура довольно хорошо описывается в этой главе. Здесь я надеюсь дать вам понимание, почему все сценарии были написаны именно так и почему я выбрал именно эту структуру.
ПРИМЕЧАНИЕ: Обратите внимание на то, что эта структура может оказаться далеко неоптимальной для ваших сценариев. Эта структура выбрана лишь для лучшего объяснения хода моих мыслей.
8.1.1. Структура
Это – структура, которой следуют все сценарии в этом руководстве. Если вы обнаружите, что это не так, то скорее всего это моя ошибка, если конечно я не объяснил, почему я нарушил эту структуру.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
|
|