Вторник, 3 Ноября 2009 года, 15:27
Просмотров: 4339 шт.

Hi-Tech → Firewall (linux)




*****



Что такое netfilter и iptables?


Netfilter — межсетевой экран (брандмауэр если угодно), встроен в ядро Linux версий 2.4 и 2.6.
Он выполняет следующие функции:
- Фильтрация трафика
- NAT

Грубо говоря, netfilter это встроенный фаервол в ядре linux'а.
iptables - утилита для управления этим самым netfilter'ом.


Что происходит с пакетом, попавшим в сетевую подсистему linux?


Итак, есть некая программа которая генерирует трафик, т.е. обращается к каким либо ресурсам в сети (лкольной или Internet). Второй вариант - этот трафик к нам поступает извне - подключение удаленных пользователей к нашему почтовому серверу, хакерская атака на SSH и т.д. Либо, третий вариант: проходящий через нашу linux-машину трафик в Internet от компьютеров в локальной сети и обратно. В данном случае - наша linux машина выполняет функцию маршрутизатора. Во всех трех случаях, пакет проходит через netfilter. На данном этапе, мы можем выполнять множество операций с пакетом - отклонить или пропустить его, произвести подмену IP-адреса, для NAT'а, и многое другое.

iptables (IP-таблицы) управляет таблицами и цепочками, которые содержат определнные нами правила, под обработку которых попадет каждый пакет данных. Например, есть таблица NAT, в которой содержатся правила NAT'а. Есть таблица FILTER, в которой содержатся правила фильтрации трафика.

Весь путь пакета выглядит так:
1. Пакет данных поступает в ядро (от другого компьютера в сети, запущенной у нас программы, e.t.c.)
2. Происходят действия, называемые пре-маршрутизацией. Используется таблица NAT.
3. Происходит фильтрация - ряд правил, по которым пакет будет либо отброшен, либо пропущен дальше. Используется таблица FILTER.
4. Происходят действия, называемые пост-маршрутизацией. Используется таблица NAT.
5. Пакет передается в пункт назначения.

Пункты 2 и 4, нам интересны если наша машина является маршрутизатором и мы используем NAT. Пункт 3 - интересен для фильтрации трафика. Теперь попробуем разложить все по полочкам.


Основы iptables


Как было сказанно - iptables управляет набором таблиц (table). В каждой таблице есть набор цепочек (chain). Каждая цепочка - упорядоченный набор правил обработки пакета. В каждой linux-системе существует четыре таблицы:
FILTER
NAT
MANGLE
RAW

Таблица FILTER служит для фильтрации трафика, и состоит из трех стандартных цепочек:
INPUT - служит для фильтрации входящего трафика на нашу машину. К примеру в эту цепочку попадает трафик из Internet, на наш, к примеру почтовый, сервер.
OUTPUT - служит для фильтрации исходящего трафика от нашей машины. В эту цепочку попадет трафик от нашего сервера в Internet. Представляет интерес, если нужно ограничить пользователей компьютера от посещения определенных ресурсов, и т.д.
FORWARD - служит для фильтрации проходящего трафика через нашу машину. Представляет интерес, если наша машина является маршрутизатором.

Все эти цепочки заполняются правилами. При попадании пакета в цепочку, пакет проходит сверху вниз, пока не найдет правила, которому он отвечает. Правило - набор условий и действие, которое следует выполнить, в случае соответствия пакета всем условиям.

К примеру, эти условия подошли бы для цепочки INPUT таблицы FILTER:

*Запретить доступ с компьютера 192.168.0.1 на мой компьютер, на порты 25, 80 и 110.
*Полностью запретить доступ с компьютера 10.0.0.1 на мой компьютер
*Разрешить доступ


Эти простые правила будут рассматриваться сверху вниз - сначала проверяется, не старается ли злобный 192.168.0.1 проникнуть в наши web и mail системы? Нет? А не тот ли это злобый h4x0r 10.0.0.1 который вчера мне пароль к SSH пытался подобрать? Нет, не он? Ну тогда проходи.

А эти правила, для цепочки FORWARD таблицы FILTER:

*Запретить проход любого трафика из сети 192.168.2.0/24 на сервер ICQ
*Разрешить проход любого трафика из интернета на компьютеры из сети 192.168.2.0/24
*Разрешить проход любого трафика с компьютеров 192.168.2.0/24 в интернет
*Запретить проход любого трафика


Опять - сверху вниз. Не старается ли ленивый сотрудник поболтать в ICQ? Старается? Ну тогда не дадим ему этого. Ну, остальное то своим сотрудникам мы разрешим? Разрешим... пусть все остальное юзают. А вот другим сетям, особенно злобной бухгалтерии и складовщикам фигушки а не интернет. Никому больше ничего не дадим!

Фильтрация трафика


Что нам остается? Перевести наши умозаключения из человеческой формы, в язык iptables.
Каждое правило добаляется запуском одной комманды, имеющей следующий вид:

iptables -t таблица -A цепочка правило -j действие

Разберем. Здесь "iptables" - бинарник. "-t" - от table, указание таблицы, с которой мы хотим работать. "-A" сокращение от append - добавить в такую то цепочку, такое то правило. "-j" - от jump, выполнить такое-то действие. Если вам нужна таблица FILTER, ее можно не указывать, так как она подразумевается по умолчанию.

К примеру, добавим такие правила:

iptables -A INPUT -s 192.168.0.1 -p tcp --dport 25 -j DROP
iptables -A INPUT -s 192.168.0.1 -p tcp --dport 80 -j DROP
iptables -A INPUT -s 192.168.0.1 -p tcp --dport 110 -j DROP
iptables -A INPUT -s 10.0.0.1 -i eth1 -j DROP
iptables -A INPUT -j ACCEPT


Разберем детально. Первыми тремя правилами, мы блокируем (-j DROP, отбросить) доступ к нам с (-s, от source, источник) 192.168.0.1 на tcp (-p tcp, от protocol, протокол) порты (--dport, от destination port, порт назначения) 25,80,110. Четвертым правилом, мы не указываем протокол, порты, но указываем сетевой интерфейс, по которому пришел пакет (-i eth1, от interface, интерфейс). Неважно что это, но если оно с eth1 и адреса 10.0.0.1 - оно должно быть отброшено. Пятым правилом, мы не задаем условий, мы просто разрешаем (-j ACCEPT, позволить) весь остальной трафик.

Посмотреть на результаты наших усилий можно следующей коммандой:
iptables -L -n --line-numbers


Разберем и эту комманду. "-L" - вывести список правил. "-n" - не производить DNS-резолвинг. "--line-numbers" - вывести рядом с каждым правилом его порядковый номер.

Вы спросите - а что если пакет дойдет до самого низа цепочки, и так не ответит ни одному из правил? Все очень просто - у каждой цепочки есть действие по умолчанию. ACCEPT, DROP, либо аналогичное. В выводе списка правил, вы можете его заметить (policy, рядом с названием цепочки).

Управлять правилами в таблице тоже очень просто.

Добавить некое правило в конец цепочки INPUT:
iptables -A INPUT -s 10.0.0.2 -j ACCEPT


Вставить некое правило в позицию 3 цепочки INPUT:
iptables -I INPUT 3 -s 10.0.0.2 -j ACCEPT


Удалить правило номер 2 из цепочки INPUT:
iptables -D INPUT 2


Очистить целиком всю цепочку INPUT:
iptables -F INPUT


Внимательный читатель этой статьи и man-а, уже догодался как управлять маршрутизацией трафика. Все тоже самое, только уже не в цепочке INPUT, а в цепочке FORWARD. К примеру, создадим ряд правил:
iptables -A FORWARD -s 192.168.2.0/24 -d login.icq.com -o eth0 -j DROP
iptables -A FORWARD -s 192.168.2.0/24 -o eth0 -j ACCEPT
iptables -A FORWARD -d 192.168.2.0/24 -o eth1 -j ACCEPT
iptables -A FORWARD -j DROP


Все просто. Допустим, что в сетевой карте eth1 мы имеем подключенную локальную сеть, а в карте eth0 - интернет от провайдера. Первым правилом мы запрещаем проход с нашей сети (-s 192.168.2.0/24) трафика на сервер icq (-d login.icq.com) в сетевую карту eth0 (-o eth0, от output). Вторым и третим правилом, мы разрешаем проход трафика с нашей (-s 192.168.2.0/24) сети в интернет (-o eth0), и с интернета в нашу сеть (-d 192.168.2.0/24 -o eth1). В конце, мы запрещаем маршрутизацию любого другого трафика.

Но, не забываем, что для функционирования маршрутизации, система должна быть настроена должным образом, а именно должена быть включена функция IP-форвардинга:
echo 1 > /proc/sys/net/ipv4/ip_forward


Трансляция сетевых адресов (NAT)


С фильтрацией и маршрутизацией разобрались. Приступим к NAT'у. Как и было сказано, таблица FILTER, содержащая цепочки INPUT,FORWARD,OUTPUT - для фильтрации трафика. Для NAT'а - мы прибегнем к одноименной таблице NAT, которая содержит цпочки PREROUTING, POSTROUTING и OUTPUT. Все, что нам нужно для NAT'а, мы будем делать в них.

Суть не меняется, есть правила в цепочках, состоящие из уловия и действия.

Цепочка POSTROUTING (пост-маршрутизация), служит для хранения правил, проход по которым будет выполнятся после процесса маршрутизации (выбора маршрута, прохода по цепочке FORWARD). Цепочка PREROUTING (пре-маршрутизация)- наоборот, до процесса маршрутизации. Для обычного NAT'а пользователей нам интересна цепочка POSTROUTING.

Рассмотрим правило:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE


Во первых, мы указали, что хотим работать с таблицей NAT, так как по умолчанию используется таблица FILTER. Затем, в цепочку POSTROUTING мы добавили правило, что с пакетами из сети 192.168.0.0/24 мы хотим сделать некий MASQUERADE (макскарад). Маскарад пакетов в linux'е - самый простой и быстрый способ соорудить NAT. Когда компьютеры из сети 192.168.0.0/24 будут обращатся к ресурсам интернета, в пакетах будет меняться адрес источника, на адрес самого маршрутизатора, и наоборот.

Реальный пример от начала до конца


Есть некая организация, которая имеет linux-сервер, с установленным на нем web и почтовым сервером. Интерфейс eth0 - смотрит в интернет, eth1 - в локальную сеть. Доступ на POP3 должен быть только из локальной сети клиента - 192.168.1.0/24. При этом, у всех компьютеров кроме вахтового (192.168.1.59) должен быть доступ в интернет.

Все, что нам нужно выполнить для получения этой цели, можно объеденить в один скрипт:
#!/bin/sh

# Включаем маршрутизацию
echo 1 > /proc/sys/net/ipv4/ip_forward

# Очищаем все правила iptables
iptables -F -t nat
iptables -F -t filter

# Заполням таблицы фильтра правилами
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -j DROP
iptables -A INPUT -j ACCEPT

iptables -A FORWARD -o eth0 -s 192.168.1.59 -j DROP
iptables -A FORWARD -o eth0 -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -j DROP

# Включаем NAT для локальной сети
iptables -t nat POSTROUTING -s 192.168.1.0/24 -j MASQUERADE


На последок


Как сохранить настройки iptables, чтобы они не потерялись после перезагрузки.
iptables-save > /etc/firewall.conf


Восстановление:
iptables-restore < /etc/firewall.conf





-----
Спасибо господину Imple за вразумления, разъяснения и примеры.

Эта запись отмечена тегами: linuxnatiptablesfirewall

nomeNNescio
Блог им. nomeNNescio
Рейтинг записи
  +3  

←Туда  Сюда→
Авторизуйтесь или зарегистрируйтесь, чтобы иметь возможность комментировать записи!


Категории

Товары и Услуги  Авто  Отдых  Здоровье  Hi-Tech  Стройка  Fashion  Разное  Домашний очаг  Бизнес  Общество  Кухня  Образование  Флора и фауна  Музыка и кино  Спорт  Туризм  Хобби  География  Позитив  Наука и Техника  Карьера  Теория жизни  История  Знаменитости  Творчество  Отношения  Фольклор  Религия  Право  Астрономия  Мистика 


Облако тегов



TOP Блоггеры

profitinvestingprofitinvesting
Записей: 3731

webweb
Записей: 741

sorokasoroka
Записей: 611

begtopmerbegtopmer
Записей: 538

ShaDeRzzShaDeRzz
Записей: 242

little_fairylittle_fairy
Записей: 164

nomeNNescionomeNNescio
Записей: 153

savchenkosavchenko
Записей: 98

BeautyPROFBeautyPROF
Записей: 94

Jetos2Jetos2
Записей: 78

DiezelSun2DiezelSun2
Записей: 73

KisaMurMurKisaMurMur
Записей: 54

Весь список

Последние комменты

  • comp-service написал(а):
    Комп-Сервис, Ремонт компьютеров и ноутбуков в Киеве https://comp-service.kiev.ua
  • Koval написал(а):
    [url=https://avafka.ru/]анкор[/url]
  • Koval написал(а):
    Привет! Я тоже недавно искал информацию о лицензионных казино в Украине и нашел отличный сайт, котор...
  • Serrt написал(а):
    Тут все есть: https://ya.ru/ Добавлено позже: Тут все есть: [url=https://ya.ru/]https://ya.ru/[/url]
  • Serrt написал(а):
    Спасибо!

Столярные изделия в Мариуполе