понедельник, 29 августа 2011 г.

iptables - краткое руководство

Утилита Iptables используется в различных дистрибутивах Линукс как сетевой фильтр и брандмауэр. iptables содержит 3 таблицы, каждая их таблиц содержит цепочки правил. Пользователи могут самостоятельно редактировать уже существующие цепочки, создавать новые, удалять.



Таблицы
iptables iptables содержит 3 таблицы:

  • filter table
  • nat table
  • mangling table


Таблица filter
Эта таблица предназначена для фильтрования пакетов проходящие через брандмауэр. Задача этой таблицы только фильтровать, фильтрует только входящие пакеты на машину, выходящие пакеты из машины и проходящие пакеты между сетями - сетевыми платами(если их несколько). Содержит 3 цепочки правил.
Цепочки правил:

  • INPUT - используется для фильтрации входящих пакетов
  • OUTPUT - используется для фильтрации выходящих пакетов
  • FORWARD - используется для фильтрации проходящих пакетов(между сетями)


Таблица nat.
Используется для изменения IP адреса источника.
Цепочки правил:

  • PREROUTING - для изменения IP адреса перед перенаправлением
  • POSTROUTING - для изменения IP адреса перед перенаправлением
  • OUTPUT - используется для фильтрации исходящих пакетов. 


 Таблица mangle - используется для модификации пакетов.

Синтаксис iptables таблиц:
 iptable имя-таблицы имя-цепочки слой3-объект слой4-объект цель-прыжка
 Заметка:  по умолчанию если имя таблицы не указано ("-t nat" к примеру для таблицы nat) используется таблица filter; - слой4-объект - не обязательно;
Примеры использования:
iptables -A INPUT -s 192.168.0.1 -j DROP       # сбросит все пакеты приходящие с адреса  IP 192.168.0.1

Руководство цепочками. Отобразить список таблиц и цепочек правил:
iptables -L                                   # отобразит список - все цепочки правил со всех таблиц
iptables -L INPUT                        # will show all rules from INPUT chain from filter table
iptables -L -t nat                          # отобразит все правила в таблице nat
iptables -t nat -L PREROUTING   # отобразит все правила в цепочки правил PREROUTING в таблице nat.
Добавление правил в цепочку:
iptables -A INPUT -s 192.168.0.1 -j ACCEPT     # разрешает входящий трафик с 192.168.0.1
iptables -A INPUT -p tcp --dport 22 -j DROP      # запрещает входящий трафик с 22 порта. (наш ssh )
iptables -A - добавляет правила в конец списка правил определённой цепочки. Если вы хотите вставить правило в определённую позицию вашей цепочки используйте параметр -I место.
iptables -I INPUT 10 -p tcp --dport 22 -j DROP   # добавляет правило на 10 позицию цепочки INPUT.
Правила в цепочках оцениваются от первой к последней.
Заметка 1: Если вы хотите блокировать входящий трафик работайте с цепочкой правил INPUT, если исходящий - работайте с цепочкой OUTPUT.
Заметка 2: Каждая цепочка имеет политику по умолчанию, по умолчанию для всех цепочек используется политика ACCEPT.
Заметка 3: Когда вы добавляете правило с параметром -j (jump), необходимо указать один из вариантов значений: ACCEPT, DROP, REJECT, DENY, LOG.
Очистка таблиц:
iptables -F                              # удалит все правила с таблицы filter
iptables -F -t nat                       # удалит все правила с таблицы nat
Удаление правила с цепочки:
Есть два варианта удаления правил из цепочек: удаление по позиции в цепочке, удаление по синтаксису, которым правило было добавлено.
iptables -D INPUT 10                         # удалит правило 10 с цепочки INPUT
iptables -D PREROUTING 10 -t nat     # удалит правило 10 с цепочки PREROUTING в таблице nat
iptables -D INPUT -s 192.168.0.1 -j ACCEPT      # удалит правило которое было добавлено следующим синтаксисом (iptables -A INPUT -s 192.168.0.1 -j ACCEPT)
Заметка: В нашем предыдущем примере будет удалено первое правило подходящие по синтаксису. Если в цепочке несколько одинаковых правил, команду удаления необходимо провести несколько раз пока не удалите все необходимые правила.
Сохранение / Восстановление правил:
iptables-save > rules.txt
iptables-restore < rules.txt
(Если iptables не определён в вашем окружении, можно использовать абсолютный путь : /sbin/iptables-save, и /sbin/iptables-restore). Запуск iptables-save выведет все правила на стандартный вывод(обычно это экран, потому необходимо использовать перенаправление).
4. Политика цепочки.
Цепочки могут иметь политики ACCEPT, или DROP. По умолчанию для всех цепочек установлена политика ACCEPT. Для изменения политики используйте следующие команды.
iptables -P INPUT DROP
Заметка 1: Если вы работаете на машине удалённо через SSH, будьте осторожны с политиками, что бы не заблокировать всё(самого себя). Хорошая практика когда администратор организует автоматическое открытие доступа к машине каждые 15 минут используя сервис CRON.
Заметка 2: Когда вы разрабатываете правила доступа к вашей машине имейте в виду, что трафик проходит в две стороны . Если вы откроете весь входящий трафик INPUT, но закроете всё в OUTPUT исходящий трафик - сеть не будет работать. Для того, что бы защитить сеть, хорошей практикой считается заблокировать все входящие INPUT , для соединений которые не были созданы вашей машиной и разрешить все исходящие (OTPUT). Если ваша машина выступает в роли сервера на которой работаю такие сетевые сервисы как: интернет сервер, почтовый сервер - необходимо разрешить подключаться из вне, добавить правилf в цепочку INPUT, только те порты, которые используют сервисы (к примеру 80 - http, 25 - smtp, 110 - pop3 и 143 -imap). Как вывод, когда вы настраиваете брандмауэр необходимо закрыть все входящие, а исходящие оставить по умолчанию, для того что б продолжить настройку. Не забудьте про SSH.
Заметка 3: Если не только ваша машина подключена к интернету, но и перенаправляет клиентов с локальной сети, тогда необходимо фильтровать соединения с локальной сети. Рекомендуется на цепочку FORWARD установить политику DROP и потом разрешить определенным адресам с локальной сети получать доступ к Интернету.
Оригинал статьи(Английский)

2 комментария:

  1. IPFW UFW супер правило!
    Разрешаем вход с разрешенного диапазона динамических портов на удалённых машинах без привязки к IP - это пригодится когда нужно ограничить доступ к портам системы но не блокировать их.
    dj-x.org.ua/index.php?topic=507.msg534#msg534

    Напишите пожалуйста такое же правило для iptables и ip6tables.

    ОтветитьУдалить
  2. PREROUTING - для изменения IP адреса перед перенаправлением
    POSTROUTING - для изменения IP адреса перед перенаправлением
    очепятка

    ОтветитьУдалить