Четверг, 25.04.2024, 11:05
Приветствую Вас Гость | RSS
Мой сайт
Главная
Регистрация
Вход
Форма входа

Меню сайта

Категории раздела
Об ОС Windows [137]
В категории размещаются статьи, касающщиеся операционных систем от Microsoft.
Об ОС *Nix [198]
В данной категории собраны статьи об ОС семейства Unix/Linux/FreeBSD/...
Справочные материалы [351]
Справка по всему разделу.
Виртуализация и Облака [46]
Networks & Routing [86]
DataBases [22]

Наш опрос
Оцените мой сайт
Всего ответов: 209

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Главная » Статьи » Системное администрирование » Об ОС *Nix

Основы использования iptables

Основы использования iptables













Принцип работы

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

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

Итак, пребывающий пакет проходит по цепочке правил. Каждое правило содержит условие и цель (действие). Если пакет удовлетворяет условию то он передается на цель,
в противном случае к пакету применяется следующее правило в цепочке.
Если пакет не удовлетворил ни одному из условий в цепочке, то к нему
применяется действие по умолчанию.

Например, к нам пришел пакет от адреса 192.168.164.84 для 128.3.4.5, применим цепочку из трех правил к этому пакету:






номер правилаусловиедействиерезультат
1 пакет от адреса 127.2.4.5 пропустить (ACCEPT)переход к следующему правилу
2 пакет для адреса 234.2.*.5 пропустить (ACCEPT) переход к следующему правилу
3 пакет от адреса 192.168.* выбросить пакет (DROP) пакет выброшен

Как видно, пакет не удовлетворил первым двум условиям цепочки, зато
удовлетворил третьему правилу, которое заставило брандмауэр выбросить
этот пакет.

Цепочки собраны в три основные таблицы (при желании можно добавить свои):

  • filter - Таблица, используемая по-умолчанию,
  • nat - Эта таблица используется, когда встречается пакет, устанавливающий новое соединение.
  • mangle - Эта таблица используется для специальных изменений пакетов.

Основными цепочками являются следующие:

  • FORWARD: для проходящих (пересылаемых) пакетов
  • INPUT: для входящих/получаемых пакетов
  • OUTPUT: для исходящих/отправляемых пакетов

Действие может быть именем цепочки, определенной
пользователем, или одной из специальных целей: ACCEPT, DROP, QUEUE,
RETURN или MASQUERADE.

ACCEPT означает принять пакет. DROP означет проигнорировать
(выбросить) пакет. MASQUERADE означает скрыть (маскировать) IP. (ниже
будет рассмотрено подробно)

Схематично обработку пакета можно изобразить следующим образом:

 PACKET IN --->---PREROUTING---[ маршрутизация ]--->----FORWARD---->---POSTROUTING--->--- PACKET OUT
- mangle | - mangle - mangle
- nat (dst) | - filter - nat (src)
| |
| |
INPUT OUTPUT
- mangle - mangle
- filter - nat (dst)
| - filter
| |
`---->----[ приложение ]---->----'

Входящий пакет начинает обрабатываться брандмауэром с цепочки PREROUTING в таблице mangle. Затем он обрабатывается правилами цепочки PREROUTING таблицы nat.
На этом этапе проверяется, не требуется ли модификация назначения
пакета (DNAT). Важно сменить назначение сейчас, потому что маршрут
пакета определяется сразу после того, как он покинет цепочку
PREROUTING. После этого он будет отправлен на цепочку INPUT (если целью
пакета является этот компьютер) или FORWARD (если его целью является
другой компьютер в сети).

Если целью пакета является другой компьютер, то пакет фильтруется правилами цепочки FORWARD таблиц mangle и filter,
а затем к нему применяются правила цепочки POSTROUTING. На данном этапе
можно использовать SNAT/MASQUARADE (подмена источника/маскировка).
После этих действий пакет (если выжил) будет отправлен в сеть

Если назначением пакета является сам компьютер с брандмауэром, то, после маршрутизации, он обрабатывается правилами цепочек INPUT таблиц mangle и filter. В случае прохождения цепочек пакет передается приложению.

Когда приложение, на машине с брандмауэром, отвечает на запрос или отправляет собственный пакет, то он обрабатывается цепочкой OUTPUT таблицы filter. Затем к нему применяются правила цепочки OUTPUT таблицы nat, для определения, требуется-ли использовать DNAT (модификация назначения), пакет фильтруется цепочкой OUTPUT таблицы filter
и выпускается в цепочку POSTROUTING которая может использовать SNAT и
QoS. В случае успешного прохождения POSTROUTING пакет выходит в сеть.

Для добавления правила в цепочку используется ключ -A

iptables -A INPUT правило

добавит правило в цепочку INPUT таблицы filter (по умолчанию). Для указания таблицы, в цепочку которой следует добавить правило, используйте ключ -t:

iptables -t nat -A INPUT правило

добавит правило в цепочку INPUT таблицы nat.

Цель по умолчанию задается с помощью ключа -P:

iptables -P INPUT DROP

Условия для отбора пакетов

Теперь мы знаем как пакеты проходят сквозь различные таблицы и
цепочки iptables. Пришло время разъяснить принципы, по которым строятся
условия накладываемые на пакеты:

Немного о протоколе TCP/IP

TCP/IP является протоколом, в котором соединение устанавливается в 3
фазы. Если компьютер А пытается установить соединение с компьютером Б
они обмениваются специальными TCP пакетами.

A: SYN пакет (првыед Б!)
Б: ACK пакет, SYN пакет (Ога!, как оно?)
A: ACK пакет (дык, ничего)

После чего соединение считается установленным (ESTABLISHED).

iptables различает эти состояния как NEW и ESTABLISHED.

Опции отбора пакетов



















































опция описание пример
—protocol (сокращено -p)
Определяет протокол. Опции tcp, udp, icmp, или любой другой протокол определенный в /etc/protocols
iptables -A INPUT —protocol tcp
—source
IP адрес источника пакетаs. Может быть определен несколькими путями.

  • Одиночный хост: host.domain.tld, или IP адрес: 10.10.10.3
  • Пул-адресов (подсеть): 10.10.10.3/24 или 10.10.10.3/255.255.255.0

iptables -A INPUT —source 10.10.10.3
—destination
IP адрес назначения пакета. Может быть определен несколькими путями - смотри —source
iptables -A INPUT —destination 192.168.1.0/24
—source-port
Порт источник, возможно только для протоколов —protocol tcp, или —protocol udp
iptables -A INPUT —protocol tcp —source-port 25
—destination-port
Порт назначения, возможно только для протоколов —protocol tcp, или —protocol udp
iptables -A INPUT —protocol udp —destination-port 67
—state
Состояние соединения. Доступно, если модуль ‘state’ загружен с помощью ‘-m state’. Доступные опции:

NEW
Все пакеты устанавливающие новое соединение
ESTABLISHED
Все пакеты принадлежащие установленному соединению
RELATED
Пакеты, не принадлежащие установленному соединению, но связанные с ним.
Например - FTP в активном режиме использует разные соединения для передачи данных. Эти соединения связанны.
INVALID
Пакеты,
которые не могут быть по тем или иным причинам идентифицированны.
Например ICMP ошибки не принадлежащие существующим соединениям

iptables -A INPUT -m state —state NEW,ESTABLISHED
—in-interface
(сокращенно -i)
Определяет интерфейс, на который прибыл пакет. Полезно для NAT и машин с несколькими сетевыми интерфейсами
iptables -t nat -A PREROUTING —in-interface eth0
—out-interface
(сокращенно -o)
Определяет интерфейс, с которого уйдет пакет. Полезно для NAT и машин с несколькими сетевыми интерфейсами
iptables -t nat -A POSTROUTING —in-interface eth1
—tcp-flags
Определяет TCP флаги пакета. Содержит 2 параметра: Список флагов
которые следует проверить и список флагов которые должны быть
установлены

—syn
Сокращение для ‘—tcp-flags SYN,RST,ACK SYN’. Поскольку проверяет TCP флаги, используется с —protocol tcp.
В примере показан фильтр для пакетов с флагом NEW, но без флага SYN. Обычно такие пакеты должны быть выброшены (DROP).
iptables -A INPUT —protocol tcp ! —syn -m state —state NEW

Определение цели

Чтобы определить действие, которое брандмауэр выполнит, если пакет в одной из цепочек удовлетворяет условию, iptables использует цели, устанавливаемые с помощью ключа —jump (или просто -j).

Целью может быть любая другая цепочка, куда будет передан пакет, или одно из следующих действий:

  • ACCEPT
    Пропускает удовлетворяющий условию пакет (пакет покидает данную цепочку и передается дальше).

  • DROP
    Выбрасывает удовлетворяющий условию пакет (молча, как будто он и не приходил).

  • REJECT
    Отклоняет пакет, сообщая об этом передавшему. Имеет дополнительный
    параметр ‘—reject-with’ определяющий сообщение которое будет передано
    отправившему пакет, это может быть: icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable (по умолчанию), icmp-proto-unreachable, icmp-net-prohibitedor и icmp-host-prohibited. Сообщение (по умолчанию "порт недоступен”) возвращется отправившему пакет компьютеру..

  • LOG
    Заносит в журнал информацию о пакете. Полезно в комбинации с DROP и REJECT для отладки.

  • RETURN
    Возвращает пакет в ту цепочку, из которой он прибыл.

  • SNAT
    Применяет source NAT ко всем удовлетворяющим условию пакетам. Может
    использоваться только в цепочках POSTROUTING и OUTPUT таблицы nat.

  • DNAT
    Применяет destination NAT ко всем удовлетворяющим условию пакетам. Может использоваться только в цепочке POSTROUTING таблицы nat.

  • MASQUERADE
    Может применяться только в цепочке POSTROUTING таблицы nat.
    Используется при наличии соединения с динамическим IP. Похож на SNAT,
    однако имеет свойство забывать про все активные соединения при потере
    интерфейса. Это полезно при наличии соединения, на котором время от
    времени меняется IP-адрес, но при наличии постоянного IP это только
    доставит неудобства. В том числе поэтому рекомендуется для статических
    IP использовать SNAT.

Примеры

Настроим простейший шлюз для раздачи интернета для дома или малого офиса (SOHO). Допустим, что внутрь сети смотрит интерфейс eth1 с ip адресом 192.168.1.1, а в интернет интерфейс eth0:

 eth1 eth0
Внутрнняя сеть --------------------[ маршрутизатор ]---------------------- Internet
192.168.1.0/24 192.168.1.1 внешний ip-адрес 0.0.0.0/0

Разрешим пропуск трафика через шлюз (в противном случае трафик не проходит цепочку FORWARDING):

sysctl -w net.ipv4.ip_forward="1"

Добавим правило, для маскировки ip в цепочку POSTROUTING таблицы nat

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Теперь клиенты внутренней сети могут получить возможность доступа в интернет установив в качестве шлюза адрес 192.168.1.1 .

Теперь попробуем нечто более интересное: запретим возможность
установки новых соединений с маршрутизатором из интернета, а также
форвардинг из сетей отличных от 192.168.1.0/24 .

Установим политики по умолчанию для цепочек в DROP, запретив все соединения кроме тех, которые будут разрешены:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

Разрешим входящие соединения на маршрутизатор с внутренней сети (для управления)

iptables -A INPUT -i eth1 --source 192.168.1.0/24 --match state --state NEW,ESTABLISHED -j ACCEPT

Разрешим маршрутизатору отвечать компьютерам во внутренней сети:

iptables -A OUTPUT -o eth1 --destination 192.168.1.0/24 --match state --state NEW,ESTABLISHED -j ACCEPT

Разрешим перенаправление пакетов из внутренней сети во внешнюю для установки соединений и установленных соединений:

iptables -A FORWARD -i eth1 --source 192.168.1.0/24 --destination 0.0.0.0/0 --match state --state NEW,ESTABLISHED -j ACCEPT

Разрешим перенаправление пакетов из интернета во внутреннюю сеть только для установленных соединений:

iptables -A FORWARD -i eth0 --destination 192.168.1.0/24 --match state --state ESTABLISHED -j ACCEPT

Итого:

  • Маршрутизатор разрешает клиентам внутренней сети устанавливать соединение с узлами в интернет.

  • Маршрутизатор имеет возможность удаленного управления из внутренней сети и только из внутренней сети.

  • Маршрутизатор блокирует все попытки установить новое соединение из сети интернет.

  • Маршрутизатор не принимает пакеты из сети интернет сам, только перенаправляет пакеты во внутреннюю сеть и только принадлежащие установленным соединениям.






Комментарии




iptables






Отличная статья 5 баллов





IPTAbles






Спасибо,
хоть кто то нашёлся кто нормально рассказал про iptables - а то одни
умные комментарии типа "читай маны" и "пальцы веером - вы все ламмеры".
Ещё раз повторюсь СПАСИБО!!


Желающим поподробнее изучить iptables - советую обратится сюда





Помогите пожалуйста






Есть
2 интерфейса: eth0 направлен в сетку ip: 10.3.8.4, маска: 255.0.0.0 и
ppp0, направленный в инет. Надо раздавать инет на сеть 10.3.8.0/24.
Прописываю:

sysctl -w net.ipv4.ip_forward="1"

iptables -t nat -A POSTROUTING -o ppp0 -s 10.3.8.0/24 -j MASQUERADE

На других компах устанавливаю шлюз 10.3.8.4, но инета нет....

Объясните пожалуйста, что я не так делаю.





Спасибо большое - очень






Спасибо большое - очень хорошо описано !!!


2 amorphius:

помоему надо -o сменить на -i


iptables -t nat -A POSTROUTING -i ppp0 -s 10.3.8.0/24 -j MASQUERADE





Отличная статья все работает






Спасибо отличная статья все заработало..


Вопрос помогите пожалуста с правилом чтобы: Маршрутизатор ПРИНИМАЛ пакеты из сети интернет сам

Возможно необходимо добать такую цепочку:

iptables -t nat -A PREROUTING —in-interface eth0





Вот интересно все. Да, а где






Вот
интересно все. Да, а где настройка ДНС? Напишите о dnsmasq or bind9.
Потому что если по умолчанию тупо вбить, то работать все равно не
будет! И даже в комментах уже отписали. Да, и еще веселее бороться с
вашей каптчей!






Источник: http://easylinux.ru/node/190
Категория: Об ОС *Nix | Добавил: admin (26.05.2010)
Просмотров: 1669 | Комментарии: 3 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Поиск

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz


  • Copyright MyCorp © 2024