надстройкой над чем является iptables
Руководство по Iptables: как это работает (понятное объяснение с примерами)
На следующей диаграмме приведены таблицы с соответствующими цепочками, поддерживаемыми в iptables :
Порядок прохождения цепочки пакетов в сетевом стеке ядра следующий:
Затем установите пакет iptables-services (в CentOS):
(В Ubuntu вы должны установить iptables с помощью sudo apt-get install iptables ).
Настройка iptables
В системе с конфигурацией брандмауэра по умолчанию вывод будет следующим:
Мы можем быть более конкретными, например, перечислив все правила INPUT для таблицы nat с помощью следующей команды:
Если только -t ( —table не указан) параметр опции Iptables принимает фильтр таблицу по умолчанию.
Когда вы разрабатываете правила брандмауэра с чистого листа, обычно рекомендуются следующие шаги:
Предыдущие команды не выводят никаких результатов, если нет ошибки или вы не вызываете команду iptables с параметром -v ( —verbose ); Например:
Результат выглядит следующим образом:
Далее мы настроим политику брандмауэра по умолчанию.
По умолчанию iptables позволяет всем пакетам проходить через сетевую цепочку (брандмауэр). Конфигурация безопасного брандмауэра должна использовать DROP в качестве цели по умолчанию для соответствующих цепочек:
Параметр опции -P ( —policy ) устанавливает политику для конкретной цепочки (такой как INPUT ) для данной цели (например, DROP ). Цель DROP заставляет систему корректно игнорировать все пакеты.
На этом этапе, если мы сохраним конфигурацию брандмауэра, система не будет принимать ни входящие, ни исходящие пакеты. Итак, мы должны быть осторожны, чтобы случайно не потерять доступ к системе, если мы использовали SSH или не имеем прямого доступа к консоли.
Далее мы настроим правила брандмауэра.
Давайте создадим несколько примеров правил брандмауэра, таких как прием соединений SSH, DNS и HTTPS.
Следующие команды разрешают доступ по SSH из локальной сети ( 192.168.0.0/24 ):
Поясним параметры, которые использовались в предыдущем блоке кода:
Точно так же следующие команды включают HTTPS-трафик:
Чтобы включить DNS-трафик, нам нужно использовать следующие команды:
Результат выглядит следующим образом:
Мы также можем выгрузить текущую конфигурацию в файл (например, iptables.config ) для дальнейшего использования с помощью следующей команды:
Настройка iptables для чайников
Каждый компьютер, подключенный к сети, находится в потенциальной опасности. В сети очень много угроз начиная от программ, которые будут пытаться любым способом проникнуть в систему и заканчивая хакерами, которые хотят получить доступ к нужному им компьютеру. А программное обеспечение, установленное на компьютере, может содержать еще не известные и неисправленные уязвимости, которые и могут стать дырой в безопасности.
Если для домашних компьютеров это не очень актуально, так как они подключены к сети через роутеры и NAT, которые скрывают их от внешней сети, то для серверов это актуально как никогда. В операционной системе Linux в ядро встроен очень гибкий и надежный фаервол iptables.
Именно с помощью этой программы выполняется защита системы от внешних вторжений, перенаправление портов, а также еще очень много действий с трафиком. Но ее минус в том, что она немного сложна в настройке. В этой статье будет рассмотрена настройка iptables для чайников. Я надеюсь, что после нее вы сможете уверенно пользоваться базовыми возможностями iptables.
Что такое Iptables?
Подсистема iptables и Netfilter уже достаточно давно встроена в ядро Linux. Все сетевые пакеты, которые проходят через компьютер, отправляются компьютером или предназначены компьютеру, ядро направляет через фильтр iptables. Там эти пакеты поддаются проверкам и затем для каждой проверки, если она пройдена выполняется указанное в ней действие. Например, пакет передается дальше ядру для отправки целевой программе, или отбрасывается.
Виды пакетов
Соответственно в фильтре iptables все пакеты делятся на три аналогичные цепочки:
Но если вы думаете что можно просто полностью закрыть цепочку Input для увеличения безопасности, то вы очень сильно ошибаетесь. При работе сети используются обе цепочки input и output. Например, вы пытаетесь выполнить ping, данные отправляются через output, но ответ приходит через input. То же самое происходит при просмотре сайтов и других действиях. А вот цепочка forward может вообще не использоваться если ваш компьютер не является маршрутизатором. Так что настройка iptables должна выполняться очень аккуратно.
Правила и действия
Перед тем как перейти к созданию списка правил iptables нужно рассмотреть как они работают и какие бывают. Для каждого типа пакетов можно установить набор правил, которые по очереди будут проверяться на соответствие с пакетом и если пакет соответствует, то применять к нему указанное в правиле действие. Правила образуют цепочку, поэтому input, output и forward называют цепочками, цепочками правил. Действий может быть несколько:
Правила могут проверять любые соответствия, например, по ip, по порту получателя или отправителя, заголовкам пакета и многому другому. Если пакет не подходит ни одному из правил, то к нему применяется действие по умолчанию, обычно ACCEPT.
Когда мы разобрались с правилами, можно вернутся обратно к цепочкам. Кроме перечисленных выше, есть еще две дополнительные цепочки правил:
Но это еще не все. У нас еще есть таблицы iptables, с которыми тоже желательно разобраться.
Таблицы ipatables
Над цепочками правил в iptables есть еще один уровень абстракции, и это таблицы. В системе есть несколько таблиц, и все они имеют стандартный набор цепочек input, forward и output. Таблицы предназначены для выполнения разных действий над пакетами, например для модификации или фильтрации. Сейчас это для вас не так важно и будет достаточно знать что фильтрация пакетов iptables осуществляется в таблице filter. Но мы рассмотрим их все:
С теорией почти все, теперь давайте рассмотрим утилиту командной строки iptables, с помощью которой и выполняется управление системой iptables.
Утилита Iptables
Подсистема iptables и netfilter встроены в ядро, но вот набор утилит для управления всем этим не всегда поставляется вместе с системой. Для установки утилиты в Ubuntu наберите:
sudo apt install iptables
А в дистрибутивах, основанных на Fedora, установка iptables выполняется немного по-другому:
sudo yum install iptables
Когда установка iptables будет завершена, можно переходить к настройке, но давайте сначала рассмотрим синтаксис утилиты. Обычно команда имеет такой общий вид:
Осталось рассмотреть основные действия, которые позволяет выполнить iptables:
Дополнительные опции для правил:
Теперь вы можем перейти рассмотрению примеров того как выполняется настройка iptables.
Примеры настройки Iptables
Мы рассмотрим несколько основных примеров, чтобы вы смогли закрепить все прочитанное выше.
Список правил
Также вы можете указать нужную цепочку, чтобы вывести правила только для нее:
Очистка правил
Вы не можете просто так отключить iptables остановив сервис обновления правил iptables через systemd или даже удалив набор утилит для настройки. Подсистема работает на уровне ядра и не зависит от того, что там у вас установлено. Поэтому если сделаете что-то не так, то нужно будет очистить правила. Для этого выполните:
Или только для определенной цепочки:
Правила по умолчанию
В этом примере мы разрешаем цепочки INPUT и OUTPUT, но запрещаем FORWARD.
Блокировка пакетов
Для блокировки пакетов мы можем использовать действие DROP, фильтровать пакеты, которые нужно заблокировать мы можем по множеству критериев, например, протоколу, ip адресу, маске сети, порту и многому другому.
Вот так будет выглядеть команда, которая позволяет добавить правило iptables для блокировки всех входящих пакетов от 10.10.10.10:
А теперь исходящие пакеты на этот же адрес:
Блокировка диапазона ip выполняется подобным образом. Для этого нужно использовать маску сети 10.10.10.0/24. Это будут все адреса начиная от 10.10.10.0 до 10.10.10.255:
Или расширенный вариант маски:
Также вы можете заблокировать все входящие соединения ssh:
Как видите, добавить правило iptables очень просто.
Удаление правил
Удаление правил iptables выполняется точно так же, как и создание новых, только вместо опции A нужно использовать опцию D. Сначала смотрим список правил:
Например, вот так можно удалить правило iptables, которое было создано вторым:
Сохранить правила Iptables
Все настройки iptables, которые вы указали с помощью этих команд сохранятся только до перезагрузки. После перезагрузки компьютера все изменения будут стерты. Поэтому чтобы сохранить правила iptables, нужно выполнить специальную команду. Только в разных дистрибутивах она отличается. В Ubuntu выполните:
А в Red Hat или CentOS:
sudo /sbin/service iptables save
Выводы
Вот и все. Наша статья о том, как выполняется настройка iptables для чайников подошла к концу. Эта система действительно сложна, на первый взгляд, но если разобраться, то с помощью нее возможно делать очень интересные вещи. В этой статье была рассмотрены основы использования iptables, в следующих статьях мы более подробно остановимся на практическом применении.
На завершение видео о том, как увеличить безопасность вашего сервера:
Огненный щит: Изучаем популярные надстройки для iptables
Содержание статьи
Простая фильтрация пакетов по портам и IP-адресам уже давно никому не интересна, да и эффективной ее не назовешь. Продвинутые межсетевые экраны умеют обрабатывать протоколы верхнего уровня, принимая решение на основе содержимого, а списки IP генерируются динамически. Все это умеет и iptables, нужно лишь его немного докрутить.
Блокируем злоумышленников с помощью fail2ban
Не секрет, что стоит только засветиться в Сети новому сервису, как сразу к нему потянутся нити брутфорсеров, пытающихся подобрать учетные данные. Остановить злоумышленников можно разными способами, один из них — утилита Fail2ban (fail2ban.org). Идея проста: демон, сканируя логи, проверяет наличие записей о неудачных попытках ввода пароля или попытке входа в запрещенную область сети. Если таковые будут найдены, то подозрительный IP блокируется средствами iptables/ipwf или TCP Wrapper (/etc/hosts.allow|deny). Со временем бан может сниматься автоматически, без вмешательства юниксоида, что очень удобно, ведь под раздачу может попасть и легитимный хост. О блокировке пользователь/админ получает сообщение по e-mail. Изначально Fail2ban разрабатывался для защиты SSH, сегодня это уже фреймворк, который можно легко настроить под любые приложения и события, в том числе и прописать свои методы блокировки IP. Удобно также, что один процесс может защищать сразу несколько сервисов.
На странице закачки Fail2ban предлагаются собственные сборки пакетов для большинства дистрибутивов Linux, но для установки лучше выбрать вариант из репозитория. Мэйнтейнеры учитывают особенности конкретного дистра плюс добавляют от себя файлы запуска и правила блокировки.
В Ubuntu/Debian установка очень проста:
$ sudo apt-get install fail2ban
Предусмотрено использование переменных, причем имеются уже встроенные. Так, HOST соответствует регулярному выражению, используемому для поиска IP или имени узла:
Вот, например, правило для поиска попыток DDOS-атаки на SSH:
Строка failregex описывает, что искать. В ignoreregex — значения, которые должны игнорироваться. В одном файле может быть несколько таких строк. Кто хоть немного разбирается в регулярных выражениях, легко создаст свое правило, используя имеющиеся примеры. Для разбора лог-файла демон вызывает утилиту fail2ban-regex, которую обычно применяют и для проверки нового фильтра.
Например, в поставке нет правила для Asterisk или другого подобного сервера, но сегодня атаки на VoIP не редки, и в логах можно увидеть записи вроде:
NOTICE[3309] chan_sip.c: Registration from
‘sip:XXX@1.2.3.4’ failed for ‘9.8.7.6’ — No matching
peer found
Правило будет следующее:
И так для каждого случая. Проверяем:
Если все нормально, записываем фильтры в новый файл asterisk.conf, взяв за пример любой из каталога filter.d.
С тем, что искать, разобрались. Осталось указать, где искать, и что делать с находкой. Описания всех действий собраны в подкаталоге action.d. Здесь несколько файлов под каждое приложение/задачу, как правило, там уже все настроено, и менять ничего не требуется. Но чтобы новые фильтры увидел Fail2ban, необходимо объявить их в /etc/bail2ban/ jail.conf. Внутри этого конфига находим несколько секций с описанием разных сервисов.
$ sudo nano /etc/bail2ban/jail.conf
[DEFAULT]
// IP-адреса, которые не будут блокироваться, здесь можно указать подсеть или DNS-имя
ignoreip = 127.0.0.1
// Время блокировки узла, при отрицательном значении блокировка постоянная
bantime = 600
// Промежуток времени и количество неудачных попыток, необходимых для блокировки
maxretry = 3
fi ndtime = 600
[asterisk-iptables]
enabled = true
В fi lter и action прописываем имя файла без расширения из соответствующих подкаталогов плюс дополнительные параметры
fi lter = asterisk
action = iptables-allports[name=ASTERISK,
protocol=all]
sendmail-whois[name=ASTERISK, dest=root,
sender=fail2ban@example.org]
Логи Asterisk
Переопределяем дефолтные значения
maxretry = 5
bantime = 6000
Проверяем, запущены ли сервисы:
$ sudo service iptables start
$ sudo service fail2ban start
Работу Fail2ban можно отследить, просмотрев журнал /var/log/fail2ban.log или правила iptables.
Коллекция аддонов Xtables-addons
Проект patch-o-matic (-ng), предлагавший различные расширения для iptables, уже некоторое время не развивается, его место занял Xtables-addons (xtables-addons.sf.net). Главная его особенность — для установки модулей не требуется пересборка ядра и/или iptables. В итоге добавление новых функций происходит очень просто, нет проблем и при обновлении ядра. Если ядро собиралось вручную, проверь наличие CONFIG_NETFILTER_XTABLES в параметрах:
В одних дистрибутивах основные модули уже включены в базовый состав, в других — размещены в репозиториях пакетов. В Ubuntu команда:
$ sudo apt-cache search xtables-addons
. выдаст два пакета: один с инструментами и библиотеками, другой — с исходниками.
$ sudo apt-get build-dep xtables-addons-common
Как правило, в репе находится не самая актуальная версия, поэтому качаем с сайта архив с исходными текстами, распаковываем и даем стандартную последовательность команд: «./configure; make; make install».
Проверяем загрузку модуля:
Теперь можно создавать правила. В состав пакета входит более 20 модулей и утилит различного назначения. Документации на сайте как таковой нет, но практически все, что нужно для старта, описано в «man xtables-addons». Разберем самые популярные из них.Отфильтровать шныряющих сканеров и ботов вручную по IP-адресам невозможно, но можно существенно уменьшить поток, отрезав страны, имеющие «скверную репутацию». Модуль GeoIP позволяет применять правила к пакетам на основании страны источника/ назначения. Но чтобы фильтр работал, необходимо скачать и установить базы. Для этой цели используются два скрипта, лежащие в каталоге /usr/ libexec/xtables-addons (или /usr/lib/xtables-addons). Для обработки CSV потребуется соответствующий модуль Perl:
Используя GeoIP, можно маркировать трафик, чтобы его обрабатывать по-другому или считать отдельно:
Все привыкли, что атакуемый хост отражает нападение, просто блокируя IP-адрес, и никак активно не противодействует злоумышленнику. В комплекте аддонов доступно несколько модулей, позволяющих ответить или ввести в заблуждение. Самый известный из них носит название TARPIT. Работает он просто: при подключении соединение открывает, но вот закрыть «забывает» (посылает в ответ пакет с размером TCP окна равным нулю). Удаленная система правильно обработать такой посыл не может и отправляет в ответ сообщение о закрытии соединения, которое игнорируется. В итоге соединение «висит» около двадцати минут, потребляя ресурсы удаленной системы. Например, SSH-сервер часто подвешивают на порт, отличный от 22. Это спасает от некоторых сканеров, для остальных ставим ловушку:
Теперь все, кто попробует подключиться к 22 порту, попадут в расставленные сети.
Модуль DELUDE позволяет ввести в заблуждение сканер, показывая, что запрашиваемый порт открыт и принимает подключения. Если ты еще не решил, какой лучше, TARPIT или DELUDE, используй CHAOS, который в ответ на запрос применяет в основном DROP (по умолчанию к большинству пакетов), но иногда — TARPIT, DELUDE или REJECT. Поведение модуля можно изменить, установив параметры при загрузке при помощи ‘—delude’/’—tarpit’ или в процессе выполнения в файле /sys/modules/ xt_CHAOS/parameters.
Проект IPP2P прекратил свое существование, но в аддонах доступен соответствующий модуль, позволяющий распознавать P2P-трафик, который затем можно блокировать или ограничить. В качестве доппараметров можно указать один из P2P-протоколов, либо все сразу:
Анализируем трафик с OpenDPI
Межсетевые экраны, работающие на втором и третьем уровнях, давно уже перестали удовлетворять современным требованиям обеспечения безопасности. Например, блокировка портов, используемых ICQ, ничего не даст. Пользователь может обойти запрет, подключившись через прокси, работающий на разрешенных портах вроде 80. Только поднявшись выше, проанализировав данные прикладного уровня, можно действительно ограничить нежелательный трафик. Стандартными средствами iptables этого добиться нельзя, поэтому юниксоиды взяли на вооружение L7-filter и IPP2P. Но говорить о них не будем, так как им на смену пришло более интересное решение — OpenDPI (opendpi.org, code.google.com/p/opendpi).
Распространяемый под лицензией LGPLv3, OpenDPI построен на коде коммерческого продукта PACE, который разрабатывается компанией Ipoque. То есть основа солидная, так как PACE позиционируется как средство классификации трафика и управления пропускной способностью сетей уровня интернет-провайдера. Все возможности по определению протоколов перешли от PACE к OpenDPI: P2P, Skype, VoIP, IM, потоковое видео и аудио, сетевые игры и прочее.
Ставим необходимые для сборки пакеты:
$ sudo apt-get install make gcc libpcap-dev
Скачиваем с сайта проекта opendpi-1.2.0.tar.gz и opendpi-netfilterwrapper1.1.tar.gz, а затем устанавливаем в соответствии с инструкциями внутри, не забыв наложить два патча:
Устанавливаем переменную среды:
Если все равно получаем ошибку, тогда пробуем ванильное ядро версии 2.6.33. Ставим модуль:
$ sudo make modules_install
$ sudo cp ipt/libxt_opendpi.so /lib/xtables
Загружаем и можем использовать:
$ sudo modprobe xt_opendpi
Все доступные параметры можно получить, введя:
Выбираем нужный протокол (они также описаны в файле ipq_protocols_osdpi.h) и блокируем его:
Это самый простой вариант, можно маркировать нужный трафик, чтобы затем использовать в шейпере.
Заключение
Используя сторонние наработки, можно легко расширить стандартные возможности iptables, существенно снизив риски для хоста или целой сети. Конечно, некоторое время придется затратить на создание и отладку необходимых правил, но это впоследствии окупится сполна.
Настройка iptables
Iptables — это межсетевой экран для операционных систем Linux, который позволяет управлять прохождением трафика. При попытке установке соединения с сервером (или при отправке запроса с сервера) Iptables проверяет цепочку правил для конкретного соединения и выполняет заданную настройку.
Iptables предустановлен во всех современных дистрибутивах Linux.
Типы цепочек
Существует три типа цепочек iptables — input, forward и output.
Цепочка — это упорядоченная последовательность правил. Правило содержит в себе критерий (например, IP-адрес источника пакета) и действие, которое нужно применить к пакету с этим критерием (например, «заблокировать»). Если критерий отсутствует, правило применяется ко всем пакетам.
При определении, что нужно сделать с пакетом, iptables просматривает соответствующую цепочку с начала списка, перебирая правила, пока не найдет совпадение. Если совпадение не найдено (соединение не попадает ни под одно созданное правило), применяется правило по умолчанию.
Действия с соединениями
Есть три типа действий, выполняемых с соединениями:
Accept — разрешить соединение.
Drop — игнорировать (блокировать) соединение без сообщения источнику об отказе. Это рекомендуемый вариант для обработки трафика на портах, подключенных к интернету, так как в этом случае злоумышленники получают минимум информации при сканировании портов.
Reject — отказать в соединении, сообщив источнику запроса об отказе. По умолчанию отправляется ответный пакет «icmp-port-unreachable», но также возможна дополнительная настройка сообщения (например, «icmp-host-unreachable», «icmp-net-prohibited», «icmp-host-prohibited» и др.).
Настройка правил
В рамках данной статьи общий формат для настройки правил будет следующим:
В нем пропущено указание таблицы (она должна следовать сразу после iptables), так как мы рассматриваем настройки для основной таблицы фильтрации filter, которая подразумевается в командах iptables по умолчанию. Указывать ее дополнительно необязательно.
Действие в данном случае — это действие, которое необходимо выполнить с правилом (например, добавить его или удалить).
Примеры доступных действий в iptables:
Блог о системном администрировании. Статьи о Linux, Windows, СХД NetApp и виртуализации.
Доброго времени, читатели и гости моего блога. C этой статьи начну серию статей о подсистеме Netfilter/iptables в Linux. В данной статье приведу основные понятия работы netfilter в Linux. Для понимания данной темы, обязательно советую ознакомиться со статьями Основные понятия сетей, Настройка сети в Linux, диагностика и мониторинг и Настройка и управление сетевой подсистемой Linux (iproute2).
Введение и история
Архитектура Netfilter/iptables
Предварительные требования ( с )
Как уже говорилось выше, для работы Netfilter необходимо ядро версии 2.6 (ну или хотя бы 2.3.15). Кроме того, при сборке и настройке ядра необходимо наличие настроек CONFIG_NETFILTER, CONFIG_IP_NF_IPTABLES, CONFIG_IP_NF_FILTER (таблица filter), CONFIG_IP_NF_NAT (таблица nat), CONFIG_BRIDGE_NETFILTER, а также многочисленные дополнительные модули: CONFIG_IP_NF_CONNTRACK (отслеживание соединений), CONFIG_IP_NF_FTP (вспомогательный модуль для отслеживания FTP соединений), CONFIG_IP_NF_MATCH_* (дополнительные типы шаблонов соответствия пакетов: LIMIT, MAC, MARK, MULTIPORT, TOS, TCPMSS, STATE, UNCLEAN, OWNER), CONFIG_IP_NF_TARGET_* (дополнительные действия в правилах: REJECT, MASQUERADE, REDIRECT, LOG, TCPMSS), CONFIG_IP_NF_COMPAT_IPCHAINS для совместимости с ipchains, CONFIG_BRIDGE_NF_EBTABLES и CONFIG_BRIDGE_EBT_* для работы в режиме моста, прочие CONFIG_IP_NF_* и CONFIG_IP6_NF_*. Полезно также указать CONFIG_PACKET.
Схема работы
Для начального понимания архитектуры Netfilter/iptables отлично подойдет иллюстрация из википедии, которую я несколько модифицировал для большей прозрачности и понимания материала:
Ахтунг, ниже в трех абзацах изложена основная мысль статьи и принцип работы сетевого фильтра, поэтому желательно вчитаться как можно внимательнее!
Каждая цепочка, которую проходит пакет состоит из набора таблиц (table) (обозначены овалами). Таблицы в разных цепочках имеют одинаковое наименование, но тем не менее никак между собой не связаны. Например таблица nat в цепочке PREROUTING никак не связана с таблицей nat в цепочке POSTROUTING. Каждая таблица состоит из упорядоченного набора (списка) правил. Каждое правило содержит условие, которому должен соответствовать проходящий пакет и действия к пакету, подходящему данному условию.
Очень часто о таблицах и цепочках говорят в плоскости «таблицы содержат в себе наборы цепочек», но я считаю, что это неудобно и непонятно.
Цепочки netfilter:
Цепочки организованны в 4 таблицы:
Как я уже отметил, непосредственно для фильтрации пакетов используются таблицЫ filter. Поэтому в рамках данной темы важно понимать, что для пакетов, предназначенных данному узлу необходимо модифицировать таблицу filter цепочки INPUT, для проходящих пакетов — цепочки FORWARD, для пакетов, созданных данным узлом — OUTPUT.
Примеры прохождения цепочек
Последовательность обработки входящего пакета, предназначенного для локального процесса:
Последовательность обработки пакета, уходящего с нашего хоста:
Последовательность обработки проходящего пакета (начинается от п.2 первой процедуры):
Как видно, таблица nat и mangle может модифицировать получателя или отправителя сетевого пакета. Именно поэтому сетевой пакет несколько раз сверяется с таблицей маршрутизации.
Механизм определения состояний (conntrack)
Выше в тексте несколько раз указывалось понятие «определение состояний», оно заслуживает отдельной темы для обсуждения, но тем не менее я кратко затрону данный вопрос в текущем посте. В общем, механизм определения состояний (он же state machine, он же connection tracking, он же conntrack) является частью пакетного фильтра и позволяет определить определить к какому соединению/сеансу принадлежит пакет. Conntrack анализирует состояние всех пакетов, кроме тех, которые помечены как NOTRACK в таблице raw. На основе этого состояния определяется принадлежит пакет новому соединению (состояние NEW), уже установленному соединению (состояние ESTABLISHED), дополнительному к уже существующему (RELATED), либо к «другому» (неопределяемому) соединению (состояние INVALID). Состояние пакета определяется на основе анализа заголовков передаваемого TCP-пакета. Модуль conntrack позволяет реализовать межсетевой экран сеансового уровня (пятого уровня модели OSI). Для управления данным механизмом используется утилита conntrack, а так же параметр утилиты iptables: -m conntrack или -m state (устарел). Состояния текущих соединений conntrack хранит в ядре. Их можно просмотреть в файле /proc/net/nf_conntrack (или /proc/net/ip_conntrack).
Чтобы мысли не превратились в кашу, думаю данной краткой информации для понимания дальнейшего материала будет достаточно.
Управление правилами сетевой фильтрации Netfilter (использование команды iptables)
В общем случае формат команды следующий:
Ниже приведены команды и параметры утилиты iptables:
Критерии (параметры) отбора сетевых пакетов команды iptables
Критерии отбора сетевых пакетов негласно делятся на несколько групп: Общие критерии, Неявные критерии, Явные критерии. Общие критерии допустимо употреблять в любых правилах, они не зависят от типа протокола и не требуют подгрузки модулей расширения. Неявные критерии (я бы из назвал необщие), те критерии, которые подгружаются неявно и становятся доступны, например при указании общего критерия —protocol tcp|udp|icmp. Перед использованием Явных критериев, необходимо подключить дополнительное расширение (это своеобразные плагины для netfilter). Дополнительные расширения подгружаются с помощью параметра -m или —match. Так, например, если мы собираемся использовать критерии state, то мы должны явно указать это в строке правила: -m state левее используемого критерия. Отличие между явными и неявными необщими критериями заключается в том, что явные нужно подгружать явно, а неявные подгружаются автоматически.
Ниже в виде таблицы приведены часто используемые параметры отбора пакетов:
Состояние соединения. Доступные опции:
Действия над пакетами
Данный заголовок правильнее будет перефразировать в «Действия над пакетами, которые совпали с критериями отбора«. Итак, для совершения какого-либо действия над пакетами, необходимо задать ключ -j (—jump) и указать, какое конкретно действие совершить.
Действия над пакетами могут принимать следующие значения:
Кроме указанных действий, существуют и другие, с которыми можно ознакомиться в документации (возможно, в скором времени я дополню статью в ходе освоения темы). У некоторых действий есть дополнительные параметры.
В таблице ниже приведены примеры и описания дополнительных параметров:
На этом закончим теорию о сетевом фильтре netfilter/iptables. В следующей статье я приведу практические примеры для усвоения данной теории.
Резюме
В данной статье мы рассмотрели очень кратко основные понятия сетевого фильтра в Linux. Итак, подсистема netfilter/iptables является частью ядра Linux и используется для организации различных схем фильтрации и манипуляции с сетевыми пакетами. При этом, каждый пакет проходит от сетевого интерфейса, в который он прибыл и далее по определенному маршруту цепочек, в зависимости от того, предназначен он локальной системе или «нелокальной». Каждая цепочка состоит из набора таблиц, содержащих последовательный набор правил. Каждое правило состоит из определенного критерия/критериев отбора сетевого пакета и какого-то действия с пакетом, соответствующего данным критериям. В соответствии с заданными правилами над пакетом может быть совершено какое-либо действие (Например, передача следующей/другой цепочке, сброс пакета, модификация содержимого или заголовков и др.). Каждая цепочка и каждая таблица имеет свое назначение, функциональность и место в пути следования пакета. Например для фильтрации пакетов используется таблица filter, которая содержится в трех стандартных цепочках и может содержаться в цепочках, заданных пользователем. Завершается путь пакета либо в выходящем сетевом интерфейсе, либо доставкой локальному процессу/приложению.
Литература
Довольно много интересной информации на русском содержится тут: