Unix-way → Настройка межсетевого экрана Iptables

Кулаков Дмитрий

Думаю, что каждый пользователь Linux задавал себе вопрос «Где в Linux межсетевой экран». Когда-то этот вопрос встал и передо мной. При обнаружении iptables, я долго не мог понять, что с ним делать. Но со временем я стал немного разбираться, научился писать правила. В этом мне помогла хорошая статья Оскара Андерсона в переводе Андрея Киселева (http://www.opennet.ru/docs/RUS/iptables/). Сразу скажу, что эта статья довольно-таки сложна, сразу по ней ничему не научишься. Тем более не у всех есть время читать, разбираются, вдаватся во все тонкости. Поэтому я и написал эту статью. Здесь я попытаюсь рассказать, как настраивать iptables и писать к нему правила фильтрации.

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

В Iptables используется три вида таблиц:

  1. Mangle — обычно эта цепочка используется для внесения изменений в заголовок пакета, например для изменения битов TOS и пр.
  2. Nat — эта цепочка используется для трансляции сетевых адресов (Destination Network Address Translation). Source Network Address Translation выполняется позднее, в другой цепочке. Любого рода фильтрация в этой цепочке может производиться только в исключительных случаях.
  3. Filter — здесь производится фильтрация трафика. Помните, что все входящие пакеты, адресованные нам, проходят через эту цепочку, независимо от того с какого интерфейса они поступили.

Соответственно, нас интересует третья таблица Filter. В этой таблицы имеются три встроенные цепочки:

  1. INPUT — для входящих пакетов.
  2. FORWARD — для проходящих через данную машину к другой.
  3. OUTPUT — для исходящих.

Пакет, проходящий через эти цепочки, исходя из правила может быть пропущен (ACCEPT) или отброшен (DROP).

Iptables можно настраивать разными способами:

  1. с помощью webmin — web-интерфейс для настройки системы;
  2. программой Guarddog (http://www.simonzone.com/software/guarddog/), представляющей собой KDE-интерфейс для редактирования настроек стенки путем установки/снятия галочек;
  3. с помощью программы, которая так и называется — Iptables.

Последней мы и будем пользоваться.

Программа Iptables позволяет редактировать правила через терминал путем ввода команд.

Немного о написании правил:

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

iptables [-t table] command [match] [target/jump]
Нигде не утверждается, что описание действия (target/jump) должно стоять последним в строке, однако, такая нотация более удобочитаемая. Как бы то ни было, но чаще всего вам будет встречаться именно такой способ записи правил.

Если в правило не включается спецификатор -t table, то по умолчанию предполагается использование таблицы filter, если же предполагается использование другой таблицы, то это требуется указать явно. Спецификатор таблицы так же можно указывать в любом месте строки правила, однако более или менее стандартом считается указание таблицы в начале правила.

Далее, непосредственно за именем таблицы, должна стоять команда. Если спецификатора таблицы нет, то команда всегда должна стоять первой. Команда определяет действие iptables, например: вставить правило, или добавить правило в конец цепочки, или удалить правило и т.п.

Раздел match задает критерии проверки, по которым определяется подпадает ли пакет под действие этого правила или нет. Здесь мы можем указать самые разные критерии — IP-адрес источника пакета или сети, IP-адрес места назначения, порт, протокол, сетевой интерфейс и т.д. Существует множество разнообразных критериев.

И наконец target указывает, какое действие должно быть выполнено при условии выполнения критериев в правиле. Здесь можно заставить ядро передать пакет в другую цепочку правил, «сбросить» пакет и забыть про него, выдать на источник сообщение об ошибке и т.п.

И вот мы напрямую подошли к написанию правил. Возможно в некоторых дистрибутивах уже есть готовые правила, но они не всегда корректно написаны. А в некоторых их вовсе нет.

Если в вашем дистрибутиве уже есть правила фильтрации, то они должны находится в каталоге /etc/init.d/ и называться rc.firewall или rc.fw. В принципе вы их можете удалить, так как ниже я публикую свой rc.firewall и попытаюсь подробно описать каждое правило.

Скачать rc.firewall

Ну вот и все. Выше рассмотрена настройка Iptables для домашней машины. Сохраните этот скрипт, сделайте его выполняемым и поместите в /etc/init.d/; если там уже есть файл rc.firewall, удалите его, выполнив команду из этого каталога:

$ update-rc.d -f rc.firewall remove
Дальше сделайте, чтобы новый скрипт инициализации запускался во время загрузки:

$ update-rc.d new.rc.iptables start 40 S. stop 89 0 6.
Теперь правила Iptables вступают в силу во время загрузки. Если вы хотите остановить Iptables:

$ /etc/init.d/rc.iptables stop
Для сохранения правил в /etc/rules-save

$ /etc/init.d/rc.iptables save
Для нового запуска Iptables:

$ /etc/init.d/rc.iptables start
Скорее всего эта статья будет периодически обновятся. Да и пора самим учится писать правила. А если вы серьезно решите изучить Iptables обращайтесь к этой статье: www.opennet.ru/docs/RUS/iptables/.
  • avatar
  • itshnic
  • 3561
  • +7
  • 29 октября 2010, 14:42

Комментариум (3)

RSS свернуть / развернуть
+
+2
avatar

dnsi

  • 30 октября 2010, 03:34

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
(http://www.opennet.ru/docs/RUS/iptables/).Сразу скажу, что эта статья довольно-таки сложна, сразу по ней ничему не научишься. Тем более не у всех есть время читать, разбираются, вдаватся во все тонкости. Поэтому я и написал эту статью.

Данная тема весьма интересна, однако вынужден сказать, что она не для простого юзера, а закаленным в боях админам сложные тексты не страшны ;) /*им это даже нравится, мазохисты чесслово*/
Простым же смертным подойдет и коротенький мануал с картинками о firestarter или gufw :)
+
+2
avatar

Gleb

  • 30 октября 2010, 07:50

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
нет тут простых смертных, только «закалённые в боях»))
+
+2
avatar

makenskiy

  • 30 октября 2010, 09:29

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Согласен, 2 раза пытался так и не осилил, но тема интересна и разобраться надо обязательно :)

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.