Что такое iptables: Iptables — Викиучебник
Что такое iptables. Сетевые средства Linux
Что такое iptables
Для обработки сетевых пакетов ядро 2.4.x использует процедуру, подобную той, которая условно изображена на рис. 25.1. В начале обработки ядро выясняет, предназначен ли пакет для локального компьютера или должен быть перенаправлен на другой узел сети. В зависимости от ответа на этот вопрос, пакет передается одной из двух цепочек: INPUT или FORWARD. Эти цепочки могут обрабатывать информацию различными способами, но по умолчанию они не изменяют данные. Цепочка INPUT передает информацию локальным процессам. В роли локальных процессов могут выступать клиентские программы (например, Netscape, telnet и др.) или серверы (Apache, telnetd и др.). В большинстве случаев эти программы выполняются как пользовательские процессы, но они могут быть и процессами ядра. Примерами приложений, которые выполняются как процессы ядра, являются средства поддержки NFS, реализованные в ядре, и Web-сервер kHTTPd. Как информация, генерируемая локальными процессами, так и выходные данные цепочки FORWARD предаются для обработки с помощью цепочки OUTPUT.
Рис. 25.1. Для обработки информационных пакетов сетевое ядро Linux использует несколько цепочек
На заметку
Информационный пакет не обязательно должен проходить весь цикл обработки, показанный на рис. 25.1. Некоторые пакеты могут быть блокированы одной из цепочек; не исключено также, что локальный процесс, получив пакет, не станет отвечать на него. В некоторых случаях транзакция инициируется локальным процессом. Ответ на запрос, сгенерированный локальным процессом, будет получен на входе системы.
Каждая из цепочек, показанных на рис. 25.1. предоставляет возможность обрабатывать пакеты. Фильтрация пакетов осуществляется на основании анализа таких данных, как IP-адрес источника и назначения, порт источника и назначения, а также интерфейс, через который передаются пакеты. Каждая из цепочек представляет собой набор правил, на соответствие которым проверяются пакеты. Если пакет соответствует условию правила, над ним выполняются действия, предусмотренные в правилах. При создании брандмауэров используются идентификаторы, определяющие действия. К ним относятся ACCEPT (принять пакет для обработки), DROP (игнорировать пакет), QUEUE (передать пакет пользовательскому процессу) и RETURN (прекратить обработку и вернуться к вызывающей цепочке). Некоторые действия требуют активизации опций ядра. К ним относятся REJECT (отвергнуть пакет, сообщив об этом отправителю), MASQUERADE (используется при организации NAT-преобразования) и LOG (применяется для протоколирования хода фильтрации).
Цепочки объединяются в таблицы. Цепочки, показанные на рис. 25.1, составляют таблицу filter, которая используется для обработки стандартных типов трафика. Стандартными таблицами также являются nat (она используется при построении NAT-преобразователей) и mangle (с ее помощью осуществляются некоторые типы преобразования пакетов). Вы можете поместить в таблицу новые цепочки и вызвать их из существующих цепочек. Это позволяет реализовать сложные процедуры фильтрации.
Таблицы и цепочки являются средствами ядра Linux, a iptables — это программа, которая выполняется как пользовательский процесс и предоставляет возможность управлять таблицами и цепочками. Программу iptables можно использовать для добавления правил к любой из цепочек, показанных на рис. 25.1, а также к другим цепочкам. Например, вы можете включить в цепочку INPUT правила, блокирующие все пакеты, в заголовке которых указан определенный порт назначения, или добавить в цепочку OUTPUT правила, запрещающие передавать пакеты системе, взаимодействие с которой по каким-либо причинам запрещено. С помощью этих и других цепочек вы можете реализовать брандмауэр, NAT-преобразователь или другое средство защиты системы.
Изменения, вносимые утилитой iptables, носят временный характер; информация о них удаляется после перезагрузки компьютера. По этой причине для работы с iptables следует создавать сценарии. В состав некоторых дистрибутивных пакетов, например Red Hat и Mandrake, включаются инструментальные средства, упрощающие создание брандмауэров и NAT-преобразователь. Сценарий, предназначенный для создания правил посредством утилиты iptables, обычно запускается как сценарий SysV или локальный сценарий запуска.
Альтернативные средства фильтрации
Программа iptables была создана для работы с ядром 2.4.x. С ранними версиями ядра использовались другие инструменты. Например, для взаимодействия с соответствующими средствами ядра 2.2.x применялась программа ipchains, а для работы с ядром 2.0.x — программа ipfwadm. Смена инструментов отражает изменения в структуре ядра. Программа iptables дает возможность работать с такими средствами ядра 2.4.x, которые отсутствовали в ядре 2.2.x. Например, она позволяет выполнять проверку пакетов с учетом состояния (stateful packet inspection), при которой учитываются характеристики соединения. Проверка пакетов с учетом состояния предоставляет дополнительные возможности по организации защиты компьютеров.
При работе с версиями ядра, предшествующими версии 2.4.x, вам придется использовать ipchains или ipfwadm. В данной главе не уделяется внимание работе с этими программами, поэтому всю необходимую информацию вам придется искать в документации на соответствующий инструмент. Для работы со средствами фильтрации пакетов, которые будут реализованы в последующих версиях ядра, наверное, будут разработаны новые инструментальные средства. Вероятнее всего, что общие принципы их работы будут такими же, какие используются в iptables, поэтому знание этой программы пригодится при работе с версиями ядра, которые придут на смену версии 2.4.x.
Если вы хотите продолжать работу с инструментами ipfwadm и ipchains, вы можете использовать их и для взаимодействия с ядром 2.4.x, но для этого надо настроить соответствующим образом ядро системы. Программы ipfwadm и ipchains позволяют решать те же задачи, которые решаются при работе с версиями 2.0.x и 2.2.x, но вы не сможете воспользоваться новыми возможностями, предоставляемыми ядром 2.4.x.
Некоторые из правил фильтрации пакетов, реализуемые посредством iptables, дублируют соответствующие возможности TCP Wrappers, xinetd и средств контроля доступа к отдельным серверам. Все эти инструменты позволяют ограничить возможность взаимодействия с серверами на основе анализа IP-адресов. Если одно и то же ограничение может быть реализовано несколькими инструментами, я рекомендую не ограничиваться использованием одного из них. При одновременном применении нескольких средств последствия ошибки в конфигурации или в коде одной из программ будут устранены другими программами. По сравнению с прочими инструментами подобного назначения iptables реализует средства более низкого уровня, поэтому ограничения, накладываемые с помощью этой программы, охватывают большее число протоколов и серверов. Например, если xinetd защищает только серверы, запускаемые с его помощью, то iptables позволяет ограничить доступ ко всем серверам.
Настройка iptables для начинающих
iptables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) netfilter для ядер Linux версий 2. 4 и 2.6. Для использования утилиты iptables требуются привилегии суперпользователя (root).Иногда под словом iptables имеется в виду и сам межсетевой экран netfilter.
1. Что же такое межсетевой экран и зачем он нужен?
Межсетевой экран — комплекс аппаратных или программных средств, осуществляющий контроль и фильтрацию проходящих через него сетевых пакетов на различных уровнях модели OSI в соответствии с заданными правилами.
Основной задачей сетевого экрана является защита компьютерных сетей или отдельных узлов от несанкционированного доступа. Также сетевые экраны часто называют фильтрами, так как их основная задача — не пропускать (фильтровать) пакеты, не подходящие под критерии, определённые в конфигурации.
2. Принципы работы iptables
Когда пакет приходит на наш межсетевой экран, то он сначала попадает на сетевое устройство, перехватывается соответствующим драйвером и далее передается в ядро. Далее пакет проходит ряд таблиц и затем передается либо локальному приложению, либо переправляется на другую машину.
В Iptables используется три вида таблиц:
- Mangle — обычно эта цепочка используется для внесения изменений в заголовок пакета, например для изменения битов TOS и пр.
- Nat — эта цепочка используется для трансляции сетевых адресов (Destination Network Address Translation). Source Network Address Translation выполняется позднее, в другой цепочке. Любого рода фильтрация в этой цепочке может производиться только в исключительных случаях.
- Filter — здесь производится фильтрация трафика. Помните, что все входящие пакеты, адресованные нам, проходят через эту цепочку, независимо от того с какого интерфейса они поступили.
Соответственно, нас интересует третья таблица Filter. В этой таблицы имеются три встроенные цепочки:
- INPUT — для входящих пакетов.
- FORWARD — для проходящих через данную машину к другой.
- OUTPUT — для исходящих.
Пакет, проходящий через эти цепочки, исходя из правила может быть пропущен (ACCEPT) или отброшен (DROP).
Программа Iptables позволяет редактировать правила через терминал путем ввода команд.
Немного о написании правил:
Каждое правило — это строка, содержащая в себе критерии, определяющие, подпадает ли пакет под заданное правило, и действие, которое необходимо выполнить в случае выполнения критерия. В общем виде правила записываются примерно так:
iptables [-t имя-таблицы] команда [шаблон] [-j действие]
Опция -t задает таблицу. Если опция упущена, то по умолчанию предполагается использование таблицы filter. Если предполагается использование другой таблицы, то это требуется указать явно.
Далее, непосредственно за именем таблицы, должна стоять команда. Если спецификатора таблицы нет, то команда всегда должна стоять первой.
Команда определяет действие iptables, например: вставить правило, или добавить правило в конец цепочки, или удалить правило и т.п.
Список команд:
- -A имя-цепочки правило (добавить правило в конец цепочки; ключ —set-counters позволяет установить счётчики пакетов и байтов)
- -I имя-цепочки номер правило (вставить правило в цепочку перед правилом с указанным номером, нумерация с 1; ключ —set-counters позволяет установить счётчики пакетов и байтов)
- -R имя-цепочки номер правило (заменить;
ключ —set-counters позволяет установить счётчики пакетов и байтов) - -D имя-цепочки номер (удалить правило с указанным номером, нумерация с 1)
- -D имя-цепочки правило (удалить правило по текстуальному совпадению)
- -C имя-цепочки пакет (тестировать прохождение пакета;
исходящий адрес, адрес назначения, протокол, интерфейс, порты задаются соответствующими ключами) - -L [имя-цепочки] (показать список правил; дополнительные ключи:
- -v (вывести дополнительную информацию, в частности, счётчики)
- —exact (показывать счётчики без округления до KB, MB и т. д.)
- —numeric (показывать адреса и номера портов в виде чисел)
- —line-numbers (выводить номера правил)
- -F имя-цепочки (удалить все правила из цепочки)
- -Z имя-цепочки (обнулить счетчики)
- -N имя-цепочки (создать цепочку)
- -X имя-цепочки (удалить пустую цепочку, на которую нет ссылок)
- -P имя-цепочки действие (изменить действие по умолчанию: ACCEPT,
DROP, QUEUE, RETURN) - -E старое-имя-цепочки новое-имя-цепочки (переименовать цепочку)
Раздел шаблон задает критерии проверки, по которым определяется подпадает ли пакет под действие этого правила или нет.Здесь можно указать самые разные критерии — IP-адрес источника пакета или сети, сетевой интерфейс. IP-адрес места назначения, порт, протокол и т.д. Остальные параметры для фильтации можно посмотреть в справке по утилите iptables(man iptables)
И наконец действие указывает, какое действие должно быть выполнено при условии выполнения критериев в правиле. Здесь можно заставить ядро передать пакет в другую цепочку правил, «сбросить» пакет, выдать на источник сообщение об ошибке и т.п.
Список некоторых действий:
- ACCEPT — пропустить пакет; просмотр таблицы завершается
- DROP — выбросить молча; просмотр завершается не только для текущей цепочки, но и для других таблиц
- REJECT — выбросить, известив отправителя (—reject-with тип-извещения)
3. Порядок следования сетевого пакета, предназначенного локальному процессу/приложению:
Для локального приложения
Шаг | Таблица | Цепочка | Примечание |
---|---|---|---|
1 | Кабель (т. е. Интернет) | ||
2 | Входной сетевой интерфейс (например, eth0) | ||
3 | mangle | PREROUTING | Обычно используется для внесения изменений в заголовок пакета, например для установки битов TOS и пр. |
4 | nat | PREROUTING | Преобразование адресов (Destination Network Address Translation). Фильтрация пакетов здесь допускается только в исключительных случаях. |
5 | Принятие решения о маршрутизации. | ||
6 | mangle | INPUT | Пакет попадает в цепочку INPUT таблицы mangle. Здесь внесятся изменения в заголовок пакета перед тем как он будет передан локальному приложению. |
7 | filter | INPUT | Здесь производится фильтрация входящего трафика. Помните, что все входящие пакеты, адресованные нам, проходят через эту цепочку, независимо от того с какого интерфейса они поступили. |
8 | Локальный процесс/приложение (т.е., программа-сервер или программа-клиент) |
Важно помнить, что на этот раз пакеты идут через цепочку INPUT, а не через FORWARD.
Порядок движения пакетов, созданных локальными процессами.
От локальных процессов
Шаг | Таблица | Цепочка | Примечание |
---|---|---|---|
1 | Локальный процесс (т.е., программа-сервер или программа-клиент). | ||
2 | Принятие решения о маршрутизации. Здесь решается куда пойдет пакет дальше — на какой адрес, через какой сетевой интерфейс и пр. | ||
3 | mangle | OUTPUT | Здесь производится внесение изменений в заголовок пакета. Выполнение фильтрации в этой цепочке может иметь негативные последствия. |
4 | nat | OUTPUT | Эта цепочка используется для трансляции сетевых адресов (NAT) в пакетах, исходящих от локальных процессов брандмауэра. |
5 | Filter | OUTPUT | Здесь фильтруется исходящий траффик. |
6 | mangle | POSTROUTING | Цепочка POSTROUTING таблицы mangle в основном используется для правил, которые должны вносить изменения в заголовок пакета перед тем, как он покинет брандмауэр, но уже после принятия решения о маршрутизации. В эту цепочку попадают все пакеты, как транзитные, так и созданные локальными процессами брандмауэра. |
7 | nat | POSTROUTING | Здесь выполняется Source Network Address Translation. Не следует в этой цепочке производить фильтрацию пакетов во избежание нежелательных побочных эффектов. Однако и здесь можно останавливать пакеты, применяя политику по-умолчанию DROP. |
8 | Сетевой интерфейс (например, eth0) | ||
9 | Кабель (т.е., Internet) |
Порядок движения транзитных пакетов
Шаг | Таблица | Цепочка | Примечание |
---|---|---|---|
1 | Кабель (т. е. Интернет) | ||
2 | Сетевой интерфейс (например, eth0) | ||
3 | mangle | PREROUTING | Обычно эта цепочка используется для внесения изменений в заголовок пакета, например для изменения битов TOS и пр.. |
4 | nat | PREROUTING | Эта цепочка используется для трансляции сетевых адресов (Destination Network Address Translation). Source Network Address Translation выполняется позднее, в другой цепочке. Любого рода фильтрация в этой цепочке может производиться только в исключительных случаях |
5 | Принятие решения о дальнейшей маршрутизации, т. е. в этой точке решается куда пойдет пакет — локальному приложению или на другой узел сети. | ||
6 | mangle | FORWARD | Далее пакет попадает в цепочку FORWARD таблицы mangle, которая должна использоваться только в исключительных случаях, когда необходимо внести некоторые изменения в заголовок пакета между двумя точками принятия решения о маршрутизации. |
7 | Filter | FORWARD | В цепочку FORWARD попадают только те пакеты, которые идут на другой хост Вся фильтрация транзитного трафика должна выполняться здесь. Не забывайте, что через эту цепочку проходит траффик в обоих направлениях, обязательно учитывайте это обстоятельство при написании правил фильтрации. |
8 | mangle | POSTROUTING | Эта цепочка предназначена для внесения изменений в заголовок пакета уже после того как принято последнее решение о маршрутизации. |
9 | nat | POSTROUTING | Эта цепочка предназначена в первую очередь для Source Network Address Translation. Не используйте ее для фильтрации без особой на то необходимости. Здесь же выполняется и маскарадинг (Masquerading). |
10 | Выходной сетевой интерфейс (например, eth2). | ||
11 | Кабель (пусть будет LAN). |
Есть три различных варианта прохождения пакетов.
1. Из вне на локальную службу (сервер) этого компьютера (INPUT).
2. От локальной службы (сервера) этого компьютера во вне (OUTPUT).
3. Прохождение мимо, шлюзование, мимо этого сетевого интерфейса этого компьютера (FORWARD).
4. Несколько примеров настройки:
пример скрипта:
#!/bin/bash
#задаем переменные для обозначения внешнего и внутреннего сетевого интерфейса
LOCAL_IF=»eth0″
INET_IF=»eth0:g»
#=======================
# Удалить все правила из цепочки.
#=======================
iptables -F
iptables -X
#=======================
# Устанавливаем политику по умолчанию.
#=======================
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD ACCEPT
#=======================
# Создаем правила для всех интерфейсов.
#=======================
# http — открываем 80 порт
iptables -A INPUT -i ALL -p tcp -m tcp —dport 80 -j ACCEPT
iptables -A INPUT -i ALL -p icmp -j ACCEPT
#=======================
# Создаем правила для внутреннего интерфейса.
#=======================
# ssh — открываем 22
iptables -A INPUT -p tcp -i $LOCAL_IF -m tcp —dport 22 -j ACCEPT
осталось запустить скрипт
примеры отдельных цепочек:
Разрешаем все на внутренних интерфейсах (lo, eth0, eth2 — внутренние интрефейсы)
iptables -A INPUT -i eth2 -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
Разрешаем доступ к заданному порту из инета
iptables -A INPUT -p tcp -m tcp -d внешний_ip —dport 80 -j ACCEPT
Открываем протокол
iptables -A INPUT -p gre -j ACCEPT
5. Ссылки на документацию по настройке iptables
http://www. posix.ru/network/iptables/ -статья Дмитрия Кулакова «Настройка межсетевого экрана Iptables»
http://www.opennet.ru/docs/RUS/iptables/ — статья Оскара Андерсона в переводе Андрея Киселева «Руководство по iptables»
http://system-administrators.info/?p=396 — статья «netfilter и iptables в Linux: принципы работы, настройка»
http://www.iptables.ru/ — пошаговое конфигурирование iptables. Форум технической поддержки
Поделиться:
Оставьте свой комментарий!
Добавить комментарий
< Предыдущая | Следующая > |
---|
Правила iptables [АйТи бубен]
iptables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана Netfilter для ядер Linux версий 2.4 и 2.6. При получении пакета, он передается Netfilter для принятия им решения: принять, обработать, или отбросить его на основе правил заданных с помощью iptables. Таким образом, iptables это все, что нужно для управления брандмауэром.
iptables может отслеживать состояние соединения и перенаправлять, изменять или отфильтровывать пакеты, основываясь не только на данных из их заголовков (источник, получатель) или содержимом пакетов, но и на основании данных о соединении. Такая возможность фаервола называется stateful-фильтрацией, в отличие от реализованной в ipchains примитивной stateless- фильтрации.
Вывести все правила в iptables
iptables -L -vn iptables -L --line-numbers -vn
# iptables -m limit -h | Получить справочную информацию по любому из дополнительных критериев. |
# iptables -S | показать все правила |
# iptables -F | удаляет все правила в в цепочках таблицы, по умолчанию filter |
# iptables -vnL --line-numbers | просмотр статистики, Опция -L определяет вывод статистики для цепочки (chain). Если конкретная цепочка не задана, то для всех. |
# iptables -vL -Z INPUT | Обнуление всех счетчиков в заданной цепочке. Если имя цепочки не указывается, то подразумеваются все цепочки. При использовании ключа -v совместно с командой -L, на вывод будут поданы и состояния счетчиков пакетов, попавших под действие каждого правила. Допускается совместное использование команд -L и -Z. В этом случае будет выдан сначала список правил со счетчиками, а затем произойдет обнуление счетчиков. |
# iptables -t nat -L | отобразить все цепочки правил в NAT-таблице |
nfnetlink -интерфейс, позволяющий различным userspace-приложениям взаимодействовать с netfilter и conntrack.
Инструменты для управления netfilter/iptables. Есть множество инструментов помогающие вам в настройке брандмауэра без знания iptables.
В системе Netfilter, пакеты пропускаются через цепочки. Цепочка является упорядоченным списком правил, а каждое правило может содержать критерии и действие или переход. Когда пакет проходит через цепочку, система netfilter по очереди проверяет, соответствует ли пакет всем критериям очередного правила, и если так, то выполняет действие (если критериев в правиле нет, то действие выполняется для всех пакетов проходящих через правило). Вариантов возможных критериев очень много. Например, пакет соответствует критерию –source 192.168.1.1 если в заголовке пакета указано, что отправитель — 192.168.1.1. Самый простой тип перехода, –jump, просто пересылает пакет в начало другой цепочки. Также при помощи –jump можно указать действие. Например, команды
iptables -A INPUT --source 192.168.1.1 --jump ACCEPT iptables -A INPUT --jump other_chain
означают «добавить к концу цепочки INPUT следующие правила: пропустить пакеты из 192.168.1.1, а всё, что останется — отправить на анализ в цепочку other_chain».
Правила обрабатываются по порядку их объявления.
В общем виде правила записываются примерно так:
iptables [-t table] command [match] [target/jump]
Нигде не утверждается, что описание действия (target/jump) должно стоять последним в строке, однако, такая нотация более удобочитаема. Как бы то ни было, но чаще всего вам будет встречаться именно такой способ записи правил.
Если в правило не включается спецификатор [-t table], то по умолчанию предполагается использование таблицы filter, если же предполагается использование другой таблицы, то это требуется указать явно. Спецификатор таблицы так же можно указывать в любом месте строки правила, однако более или менее стандартом считается указание таблицы в начале правила.
Далее, непосредственно за именем таблицы, должна стоять команда. Если спецификатора таблицы нет, то команда всегда должна стоять первой. Команда определяет действие iptables, например: вставить правило, или добавить правило в конец цепочки, или удалить правило и т.п.
Раздел match задает критерии проверки, по которым определяется подпадает ли пакет под действие этого правила или нет. Здесь мы можем указать самые разные критерии – IP-адрес источника пакета или сети, IP-адрес места назначения,порт, протокол, сетевой интерфейс и т. д. Существует множество разнообразных критериев, но об этом – несколько позже.
И наконец target указывает, какое действие должно быть выполнено при условии выполнения критериев в правиле. Здесь можно заставить ядро передать пакет в другую цепочку правил, «сбросить» пакет и забыть про него, выдать на источник сообщение об ошибке и т.п.
Ключевыми понятиями iptables являются:
Перед использованием этих расширений, они должны быть загружены явно, с помощью ключа -m или –match.
Критерий Comment позволяет создавать подписи к правилам, например
iptables -A INPUT -m conntrack --ctstate INVALID -m comment --comment "запрет Invalid пакетов" -j DROP
Критерий limit должен подгружаться явно ключом -m limit. Прекрасно подходит для правил, производящих запись в системный журнал (logging) и т.п.
limit — позволяет ограничить количество пакетов в единицу времени. Параметры:
Критерий -limit использует модель «дырявого ведра», и –limit-burst задает «объем ведра», а –limit — «скорость вытекания». Каждому такому критерию соответствует своя очередь, длина которой задается параметром –limit-burst. Если в очереди есть пакеты, то со скоростью, заданной в –limit, они покидают очередь и считаются удовлетворяющими критерию. Если же вся очередь занята, то новые пакеты в ней не регистрируются и считаются не удовлетворяющими критерию. Например,
iptables -I INPUT -m limit --limit 3/min --limit-burst 5 -j LOG --log-level DEBUG --log-prefix "INPUT packet: "
предполагает очередь на пять пакетов, которая «продвигается» со скоростью 3 пакета в минуту. При непрерывном поступлении входящих пакетов, очередь всегда будет заполнена, и в лог будут заноситься в среднем по три пакета в минуту. Однако, если входящих пакетов долго не будет, то очередь успеет очиститься, и при поступлении пяти и менее новых пакетов, они пойдут в лог подряд. В любом случае, скорость попадания пакетов в лог остается неизменной.
Типичная ошибка новичков — использовать limit для ограничения TCP-трафика, например, так:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 10000/sec --limit-burst 10000 -j ACCEPT iptables -P INPUT DROP
Это пример попытки защитить web-сервер от DDoS-атаки, ограничив количество пакетов в единицу времени. Однако, это правило не помешает без особого труда завалить сервер запросами (считая, что на один запрос требуется два входящих пакета — SYN-пакет и пакеты данных, содержащий, например, только GET /, согласно спецификации HTTP 0.9). При этом могут возникнуть помехи для легальных пользователей, например, загружающих на сервер большой файл методом POST. Более корректным решением будет ограничивать не скорость входящего потока данных, а скорость открытия новых соединений:
iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -m limit --limit 32/sec --limit-burst 32 -j ACCEPT iptables -P INPUT DROP
Теперь мы ограничиваем количество не всех пакетов, а только новых, то есть мы разрешаем открывать не более 32 новых соединений в секунду. Впрочем, число 32 приведено здесь только для примера. Конкретное значение скорости для вашей задачи рекомендуем определять самостоятельно.
hashlimit — позволяет применять ограничения, аналогичные критерию limit, к группам хостов, подсетей или портов, используя всего одно правило. При этом для каждого хоста, подсети или порта создается отдельная очередь.
MAC -адрес (Ethernet Media Access Control) критерий используется для проверки исходного MAC- адреса пакета.
Модуль расширения должен подгружаться явно ключом -m mac.
Ключи:
iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01 -j DROP
Критерий mark предоставляет возможность «пометить» пакеты специальным образом. Mark — специальное поле, которое существует только в области памяти ядра и связано с конкретным пакетом. Может использоваться в самых разнообразных целях, например, ограничение трафика и фильтрация. На сегодняшний день существует единственная возможность установки метки на пакет в Linux – это использование действия MARK. Поле mark представляет собой беззнаковое целое число в диапазоне от 0 до 4294967296 для 32-битных систем.
iptables -t mangle -A INPUT -m mark --mark 1
Критерий производит проверку пакетов, которые были предварительно «помечены». Метки устанавливаются действием MARK, которое мы будем рассматривать ниже. Все пакеты, проходящие через netfilter имеют специальное поле mark. Запомните, что нет никакой возможности передать состояние этого поля вместе с пакетом в сеть. Поле mark является целым беззнаковым, таким образом можно создать не более 4294967296 различных меток. Допускается использовать маску с меткам. В данном случае критерий будет выглядеть подобным образом: –mark 1/1. Если указывается маска, то выполняется логическое AND метки и маски.
# маркируем пакет
iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 25 -j MARK --set-mark 888
# далее при помощи утилит пакета Маршрутизация2 пересылаем пакет в таблицу маршрутизации mytable
ip rule add fwmark 888 table mytable
Если указана маска, то перед сравнением с заданным значением маркировка каждого пакета комбинируется с этой маской посредством логической операции AND, то есть проверяется условие x & маска == значение (где x — маркировка текущего пакета). Такой подход позволит сравнивать значения отдельных бит. Например, критерию
-m mark --mark 64/64
будет отлавливать пакеты, в маркировке которых установлен 7-й бит (26 = 64, при этом первый бит соответствует 20). В частности, 64…127, 192…255, 320…383 и т. д.
Еще один пример —
-m mark --mark 2/3
будет определять пакеты, в маркировке которых установлен второй бит, но снят первый. Такие числа будут нацело делиться на два, но не делиться на четыре — 2, 6, 10, 14, …
connmark — полностью аналогичен mark, но проверяет не маркировку пакета (nfmark), а маркировку соединения (ctmark). Также имеет параметр –mark с аналогичным синтаксисом.
connlimit — позволяет ограничивать количество одновременно открытых соединений с каждого IP-адреса (или подсети).
# Разрешаем только одно одновременное соединение с одного айпи на smtp iptables -A FORWARD -p tcp --syn --dport smtp -m connlimit --connlimit-above 1 -j DROP # allow 2 telnet connections per client host iptables -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT # you can also match the other way around: iptables -p tcp --syn --dport 23 -m connlimit ! --connlimit-above 2 -j ACCEPT # limit the nr of parallel http requests to 16 per class C sized # network (24 bit netmask) iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 \ --connlimit-mask 24 -j REJECT # Ставим ограничение на 5 соединений на 80 порт. iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j REJECT
recent — это специальный критерий, позволяющий запоминать проходящие через него пакеты, а затем использовать полученную информацию для принятия решений. Recent запоминает не сами пакеты, а их количество, время поступления, адрес источника (в последних версиях iptables также может запоминать и адрес назначения), а также, при необходимости, TTL.
# limit ssh-port connections per minute $IPT -I INPUT -p tcp --dport 22 -i $IFACE_EXT -m state --state NEW -m recent --set $IPT -I INPUT -p tcp --dport 22 -i $IFACE_EXT -m state --state NEW -m recent --update --seconds 60 --hitcount 2 -j DROP $IPT -A INPUT -p tcp -m tcp -i $IFACE_EXT --dport 22 -j ACCEPT
Расширение multiport позволяет указывать в тексте правила несколько портов и диапазонов портов.
Вы не сможете использовать стандартную проверку портов и расширение -m multiport (например –sport 1024:63353 -m multiport –dport 21,23,80) одновременно. Подобные правила будут просто отвергаться iptables. Выделяет не один порт, как –dport или –sport, а несколько по списку (до 15 штук). Можно задавать диапазоны как первый_порт:последний_порт. Может быть использовано только вместе с -p udp или -p tcp.
iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110
Служит для указания списка исходящих портов. С помощью данного критерия можно указать до 15 различных портов. Названия портов в списке должны отделяться друг от друга запятыми, пробелы в списке не допустимы. Данное расширение может использоваться только совместно с критериями -p tcp или -p udp. Главным образом используется как расширенная версия обычного критерия –source-port.
iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110
Служит для указания списка входных портов. Формат задания аргументов полностью аналогичен -m multiport –source-port.
iptables -A INPUT -p tcp -m multiport --port 22,53,80,110
Данный критерий проверяет как исходящий так и входящий порт пакета. Формат аргументов аналогичен критерию –source-port и –destination-port. Обратите внимание на то что данный критерий проверяет порты обеих направлений, т.е. если вы пишете -m multiport –port 80, то под данный критерий подпадают пакеты, идущие с порта 80 на порт 80.
iprange — позволяет указать диапазон IP-адресов, не являющийся подсетью. Поддерживает следующие параметры:
iptables -I INPUT -m iprange --src-range 192.168.0.8-192.168.0.25 -j DROP
заблокирует все пакеты, исходный адрес которых лежит в диапазоне с 192.168.0.8 по 192.168.0.25 включительно.
Расширение owner предназначено для проверки «владельца» пакета. Изначально данное расширение было написано как пример демонстрации возможностей iptables. Допускается использовать этот критерий только в цепочке OUTPUT. Такое ограничение наложено потому, что на сегодняшний день нет реального механизма передачи информации о «владельце» по сети. Справедливости ради следует отметить, что для некоторых пакетов невозможно определить «владельца» в этой цепочке. К такого рода пакетам относятся различные ICMP responses. Поэтому не следует применять этот критерий к ICMP responses пакетам.
Таблица 6-12. Ключи критерия Owner
Ключ –uid-owner
Пример iptables -A OUTPUT -m owner –uid-owner 500
Описание Производится проверка «владельца» по User ID (UID). Подобного рода проверка может использоваться, к примеру, для блокировки выхода в Интернет отдельных пользователей.
Ключ –gid-owner
Пример iptables -A OUTPUT -m owner –gid-owner 0
Описание Производится проверка «владельца» пакета по Group ID (GID).
Ключ –pid-owner
Пример iptables -A OUTPUT -m owner –pid-owner 78
Описание Производится проверка «владельца» пакета по Process ID (PID). Этот критерий достаточно сложен в использовании, например, если мы хотим позволить передачу пакетов на HTTP порт только от заданного демона, то нам потребуется написать небольшой сценарий, который получает PID процесса (хотя бы через ps) и затем подставляет найденный PID в правила. Пример использования критерия можно найти в Pid-owner. txt.
Ключ –sid-owner
Пример iptables -A OUTPUT -m owner –sid-owner 100
Описание Производится проверка Session ID пакета. Значение SID наследуются дочерними процессами от «родителя», так, например, все процессы HTTPD имеют один и тот же SID (примером таких процессов могут служить HTTPD Apache и Roxen). Пример использования этого критерия можно найти в Sid-owner.txt. Этот сценарий можно запускать по времени для проверки наличия процесса HTTPD, и в случае отсутствия — перезапустить «упавший» процесс, после чего сбросить содержимое цепочки OUTPUT и ввести ее снова.
Идеологический предшественник критерия conntrack. Имеет единственный параметр –state, аналогичный параметру –ctstate критерия conntrack (но, в отличие от него, не поддерживающий состояния DNAT и SNAT).
Долгое время был основным критерием определения состояния, и до сих пор фигурирует во многих руководствах и примерах. Однако в настоящее время разработчики iptables рекомендуют использовать вместо него критерий conntrack. Возможно, что критерий state вообще будет удален из будущих версий iptables/netfilter.
Критерий state используется совместно с кодом трассировки соединений и позволяет нам получать информацию о признаке состояния соединения, что позволяет судить о состоянии соединения, причем даже для таких протоколов как ICMP и UDP. Данное расширение необходимо загружать явно, с помощью ключа -m state. На сегодняшний день можно указывать 4 состояния: INVALID, ESTABLISHED, NEW и RELATED.
Ключ –state
Пример iptables -A INPUT -m state --state RELATED,ESTABLISHED
Разрешаем прохождение statefull-пакетов. Эта цепочка обязательная в любых настройках iptables, она разрешает прохождение пакетов в уже установленных соединениях(ESTABLISHED), и на установление новых соединений от уже установленных (RELATED).
Критерий TOS предназначен для проведения проверки битов поля TOS. TOS – Type Of Service – представляет собой 8-ми битовое, поле в заголовке IP-пакета. Модуль должен загружаться явно, ключом -m tos.
От переводчика: Далее приводится описание поля TOS, взятое не из оригинала, поскольку оригинальное описание я нахожу несколько туманным.
Данное поле служит для нужд маршрутизации пакета. Установка любого бита может привести к тому, что пакет будет обработан маршрутизатором не так как пакет со сброшенными битами TOS. Каждый бит поля TOS имеет свое значение. В пакете может быть установлен только один из битов этого поля, поэтому комбинации не допустимы. Каждый бит определяет тип сетевой службы:
Минимальная задержка Используется в ситуациях, когда время передачи пакета должно быть минимальным, т.е., если есть возможность, то маршрутизатор для такого пакета будет выбирать более скоростной канал. Например, если есть выбор между оптоволоконной линией и спутниковым каналом, то предпочтение будет отдано более скоростному оптоволокну.
Максимальная пропускная способность Указывает, что пакет должен быть переправлен через канал с максимальной пропускной способностью. Например спутниковые каналы, обладая большей задержкой имеют высокую пропускную способность.
Максимальная надежность Выбирается максимально надежный маршрут во избежание необходимости повторной передачи пакета. Примером могут служить PPP и SLIP соединения, которые по своей надежности уступают, к примеру, сетям X.25, поэтому, сетевой провайдер может предусмотреть специальный маршрут с повышенной надежностью.
Минимальные затраты Применяется в случаях, когда важно минимизировать затраты (в смысле деньги) на передачу данных. Например, при передаче через океан (на другой континент) аренда спутникового канала может оказаться дешевле, чем аренда оптоволоконного кабеля. Установка данного бита вполне может привести к тому, что пакет пойдет по более «дешевому» маршруту.
Обычный сервис В данной ситуации все биты поля TOS сброшены. Маршрутизация такого пакета полностью отдается на усмотрение провайдера.
Таблица 6-14. Ключи критерия TOS
Ключ –tos
Пример iptables -A INPUT -p tcp -m tos –tos 0x16
Описание Данный критерий предназначен для проверки установленных битов TOS, которые описывались выше. Как правило поле используется для нужд маршрутизации, но вполне может быть использовано с целью «маркировки» пакетов для использования с iproute2 и дополнительной маршрутизации в linux. В качестве аргумента критерию может быть передано десятичное или шестнадцатиричное число, или мнемоническое описание бита, мнемоники и их числовое значение вы можете получить выполнив команду iptables -m tos -h. Ниже приводятся мнемоники и их значения. Minimize-Delay 16 (0x10) (Минимальная задержка), Maximize-Throughput 8 (0x08) (Максимальная пропускная способность), Maximize-Reliability 4 (0x04) (Максимальная надежность), Minimize-Cost 2 (0x02) (Минимальные затраты), Normal-Service 0 (0x00) (Обычный сервис)
TTL (Time To Live) является числовым полем в IP заголовке. При прохождении очередного маршрутизатора, это число уменьшается на 1. Если число становится равным нулю, то отправителю пакета будет передано ICMP сообщение типа 11 с кодом 0 (TTL equals 0 during transit) или с кодом 1 (TTL equals 0 during reassembly) . Для использования этого критерия необходимо явно загружать модуль ключом -m ttl.
От переводчика: Опять обнаружилось некоторое несоответствие оригинального текста с действительностью, по крайней мере для iptables 1.2.6a, о которой собственно и идет речь, существует три различных критерия проверки поля TTL, это -m ttl –ttl-eq число, -m ttl –ttl-lt число и -m ttl –ttl-gt число. Назначение этих критериев понятно уже из их синтаксиса. Тем не менее, я все таки приведу перевод оригинала:
Ключи критерия TTL
Ключ –ttl
Пример iptables -A OUTPUT -m ttl –ttl 60
Описание Производит проверку поля TTL на равенство заданному значению. Данный критерий может быть использован при наладке локальной сети, например: для случаев, когда какая либо машина локальной сети не может подключиться к серверу в Интернете, или для поиска «троянов» и пр. Вобщем, области применения этого поля ограничиваются только вашей фантазией. Еще один пример: использование этого критерия может быть направлено на поиск машин с некачественной реализацией стека TCP/IP или с ошибками в конфигурации ОС.
Критерий unclean не имеет дополнительных ключей и для его использования достаточно явно загрузить модуль. Будьте осторожны, данный модуль находится еще на стадии разработки и поэтому в некоторых ситуациях может работать некорректно. Данная проверка производится для вычленения пакетов, которые имеют расхождения с принятыми стандартами, это могут быть пакеты с поврежденным заголовком или с неверной контрольной суммой и пр., однако использование этой проверки может привести к разрыву и вполне корректного соединения.
Действия могут быть терминальными и нетерминальными.
Существует пять типов стандартных цепочек, встроенных в систему:
Также можно создавать и уничтожать собственные цепочки при помощи утилиты iptables.
Цепочки организованны в таблицы:
Цепочки с одинаковым названием но в разных таблицах — совершенно независимые объекты. Например, raw PREROUTING и mangle PREROUTING обычно содержат разный набор правил; пакеты сначала проходят через цепочку raw PREROUTING, а потом через mangle PREROUTING.
Схематично обработку пакета можно изобразить следующим образом:
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. В случае прохождения цепочек пакет передается приложению.
mangle PREROUTING
nat PREROUTING
mangle INPUT
filter INPUT
Когда приложение, на машине с брандмауэром, отвечает на запрос или отправляет собственный пакет, то он обрабатывается цепочкой OUTPUT таблицы filter. Затем к нему применяются правила цепочки OUTPUT таблицы nat, для определения, требуется-ли использовать DNAT (модификация назначения), пакет фильтруется цепочкой OUTPUT таблицы filter и выпускается в цепочку POSTROUTING которая может использовать SNAT и Что такое QoS. В случае успешного прохождения POSTROUTING пакет выходит в сеть.
— mangle OUTPUT
nat OUTPUT
filter OUTPUT
Порты TCP/IP является протоколом, в котором соединение устанавливается в 3 фазы. Если компьютер А пытается установить соединение с компьютером Б они обмениваются специальными TCP пакетами.
A: SYN пакет (првыед Б!) Б: ACK пакет, SYN пакет (Ога!, как оно?) A: ACK пакет (дык, ничего)
После чего соединение считается установленным (ESTABLISHED). iptables различает эти состояния как NEW и ESTABLISHED.
FIN (англ. final, бит) — флаг, будучи установлен, указывает на завершение соединения.
Источник: Iptables
Компонент netfilter, обеспечивающий отслеживание состояния соединений и классификацию пакетов с точки зрения принадлежности к соединениям, что позволяет netfilter осуществлять полноценную stateful-фильтрацию трафика. Как и netfilter, система conntrack является частью ядра Linux. К ее задачам относятся:
Основной критерий, используемый для контроля состояния соединения. Он предоставляет эффективный набор инструментов, позволяющий использовать информацию системы conntrack о состоянии соединения.
Маска содержит перечисление через запятую список возможных состояний соединения. Пакет считается удовлетворяющим критерию, если соединение, по которому он проходит, находится в одном из перечисленных состояний.
Возможные состояния:
iptables -I INPUT -m conntrack --ctstate INVALID -j DROP
Описание технологии, задание размера таблиц смотреть в NAT.
# для постоянного IP (10.5.21.24) $IPT -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 10.5.21.24:30000-50000 $IPT -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.5.21.24 # для динамического IP $IPT -t nat -A POSTROUTING -o eth0 -j MASQUERADE # проброс порта 3389 $IPT -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT \ --to-destination 172.16.23.24:3389
Проброс torrent UDP and TCP. На порт 51413 должен быть настроен клиент (например, Transmission).
$IPT -t nat -A PREROUTING -i $ISP_Valor -p tcp -m tcp --dport 51413 -j DNAT --to 10.26.95.251:51413 $IPT -A FORWARD -p tcp -m tcp -d 10.26.95.251 --dport 51413 -j ACCEPT $IPT -t nat -A PREROUTING -i $ISP_Valor -p udp -m udp --dport 51413 -j DNAT --to 10.26.95.251:51413 $IPT -A FORWARD -p udp -m udp -d 10.26.95.251 --dport 51413 -j ACCEPT
Маскарадинг в основе своей представляет то же самое, что и SNAT только не имеет ключа –to-source. Маскарадинг умеет работать с динамически получаемыми IP, например в случае когда провайдер выдает IP по Настройка DHCP сервера Linux, FreeBSD. Если у вас статическое IP подключение, то лучшим выходом будет использование SNAT.
Действие MASQUERADE допускается указывать только в цепочке POSTROUTING таблицы nat, так же как и действие SNAT. В цепочке PREROUTING мы будем менять информацию о получателе пакета (DNAT), а в цепочке POSTROUTING — об отправителе (SNAT).
iptables -t nat -A POSTROUTING -s 192.168.46.0/24 -o $IFACE_EXT1 -j MASQUERADE
Обязательно выставить значение в 1
# sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 0
Этого можно добиться без перезагрузки ОС командой
# sysctl -w net.ipv4.ip_forward=1 net.ipv4.ip_forward = 1
и обязательно прописать(раскоментировать) строку net.ipv4.ip_forward = 1 в /etc/sysctl.conf
$IPT -A FORWARD -p tcp -m multiport --port 80,443 -s 192.168.1.11 -j DROP
Журналы брандмауэра имеют важное значение для обнаружения признаков «взлома», ошибок в написании правил и обнаружении необычного поведения вашей сети. Вам необходимо создать правила, чтобы эти события попадали в журнал, так же рекомендуется отслеживать в логах поведение создаваемых новых правил, а также рекомендуется протоколировать любые правила которые решают судьбу пакета (такие как ACCEPT, DROP, или REJECT).
Например, перед строкой
iptables -A INPUT -p tcp -m multiport --dports 22,53,8080,139,445 -j ACCEPT
мы добавим строку
iptables -A INPUT -p tcp -m multiport --dports 22,53,8080,139,445 -j LOG --log-level INFO --log-prefix "New connection from ours: "
то для каждого нового соединения к нашему хосту из нашей подсети в системном журнале будет появляться запись примерно такого вида:
Jul 16 20:10:40 interdictor kernel: New connection from ours: IN=eth0 OUT= MAC=00:15:17:4c:89:35:00:1d:60:2e:ed:a5:08:00 SRC=10.134.0.67 DST=10.134.0.65 LEN=48 TOS=0x00 PREC=0x00 TTL=112 ID=38914 DF PROTO=TCP SPT=31521 DPT=8080 WINDOW=65535 RES=0x00 SYN URGP=0
Такая запись содержит очень много полезной информации. Начинается она с даты и времени получения пакета. Затем идет имя нашего хоста (interdictor) и источник сообщения (для сообщений фаервола это всегда ядро). Потом идет заданный нами префикс (New connection from ours:), после чего следуют данные о самом пакете: входящий интерфейс (определен для цепочек PREROUTING, INPUT и FORWARD), исходящий интерфейс (определен для цепочек FORWARD, OUTPUT и POSTROUTING), далее — сцепленные вместе MAC-адреса источника и назначения (сначала идет адрес назначения, в данном случае это наш интерфейс eth2 с маком 00:15:17:4C:89:35, затем адрес источника, в нашем случае это 00:1D:60:2E:ED:A5, и в конце следует значение EtherType, 08:00 соответствует протоколу IPv4]), потом IP-адреса источника (10.134.0.67) и получателя (10.134.0.65, это наш хост), а затем идет различная техническая информация. Например, протокол (Порты TCP), порты источника и назначения (31521 и 8080 соответственно), TOS и TTL, длина пакета (48 байт), наличие флага SYN и т. д.
Указав соответствующие параметры действия LOG, можно дополнить эту информацию номером Порты TCP-последовательности (опция –log-tcp-sequence), выводом включенных опций протоколов TCP (опция –log-tcp-options) и IP (–log-ip-options), а также идентификатором пользователя, процесс которого отправил данный пакет (–log-uid, имеет смысл только в цепочках OUTPUT и POSTROUTING).
Параметр –log-prefix позволяет задать поясняющую надпись, упрощающую поиск сообщений в системных журналах. Параметр –log-level определяет уровень важности лог-сообщения, от которого зависит, в частности, в какой именно из журналов будет записано это сообщение. За более подробными сведениями обратитесь к документации по вашему демону системного лога.
Данная запись появится в журналах /var/log/messages, /var/log/syslog, и /var/log/kern.log. Это поведение можно изменить отредактировав файл настроек /etc/syslog.conf или установив и настроить демон ulogd и использовать ULOG вместо обычных журналов LOG. Демон ulogd является сервером пользовательского уровня, который «слушает» сообщения протоколирования событий получаемых от ядра, и может сохранять их в любой файл, или в базы данных PostgreSQL или MySQL. Для более легкого анализа содержимого журналов используйте инструмменты анализа, такие как fwanalog, fwlogwatch, или Lire.
#Протоколирование цепочки по умолчанию -P $IPT -A INPUT -j LOG --log-level INFO --log-prefix "-P INPUT DROP: " $IPT -A INPUT -j DROP
При количестве пакетов больше 5, правило сработает один раз в секунду. Остальные попытки в log файл записываться не будут. Так можно уменьшить объем лог файла.
$IPT -A INPUT -i eth0 -m limit --limit-burst 5 --limit 1/s \ -j LOG --log-level debug --log-prefix "IN_ETH0" $IPT -A OUTPUT -o eth0 -m limit --limit-burst 5 --limit 1/s \ -j LOG --log-level debug --log-prefix "OUT_ETH0"
Установка для Debian — дистрибутивов.
# aptitude install ulogd
В стандартных репозиториях CentOS пакета ulogd нет. Нужно использовать сторонний Использование Yum репозиторий ftp://ftp.pbone.net
# wget ftp://ftp.pbone.net/mirror/rpm.razorsedge.org/centos-5/RE-test/ulogd-1.24-2.el5.re.x86_64.rpm # rmp -i ulogd-1.24-2.el5.re.x86_64.rpm
Перепишем вышеприведенные примеры при помощи ULOG.
$IPT -A INPUT -i eth0 -m limit --limit 3/m --limit-burst 5 -j ULOG --ulog-prefix "IN_ETH0 "
После установки ulogd создает два лога:
/var/log/ulog/ulogd.log — системный, хранит информацию о работе демона
/var/log/ulog/syslogemu. log — лог трафика прошедшего через ULOG
ULOG в связке с MySQL пишет только те столбцы, которые находит в БД, демон ulogd при запуске считывает список столбцов при запуске.
# mkdir /home/darkfire/scripts # ln -s /home/darkfire/scripts /scripts # touch /scripts/iptables-rules.sh # chmod +x /scripts/iptables-rules.sh # nano /scripts/iptables-rules.sh #!/bin/sh IPT="/sbin/iptables" IFACE_EXT="eth0" IFACE_LOC="lo" # Flushing iptable rules. $IPT -F $IPT -t nat -F $IPT -t mangle -F $IPT -X $IPT -t nat -X $IPT -t mangle -X # Default politics $IPT -P INPUT DROP $IPT -P FORWARD DROP $IPT -P OUTPUT ACCEPT # Loopback interface $IPT -A INPUT -i $IFACE_LOC -j ACCEPT # SSH $IPT -A INPUT -p tcp -m tcp -i $IFACE_EXT --dport 22 -j ACCEPT # ICMP: разрешить все $IPT -A INPUT -p icmp -i $IFACE_EXT -j ACCEPT # SNMP: разрешить запросы с IP 10.10.10.226 $IPT -A INPUT -p udp -m udp -s 10.10.10.226 --dport 161 -j ACCEPT # Это правило обязательно если INPUT DROP. # Разрешаем прохождение statefull-пакетов. Эта цепочка обязательная в любых настройках iptables, # она разрешает прохождение пакетов в уже установленных # соединениях(ESTABLISHED), и на установление новых соединений от уже установленных (RELATED). $IPT -A INPUT -i $IFACE_EXT -m state --state ESTABLISHED,RELATED -j ACCEPT # протколирование последнего правила в этом примере -P INPUT DROP $IPT -A INPUT -j LOG --log-level INFO --log-prefix "-P INPUT DROP: " # for Debian /sbin/iptables-save > /scripts/rules # for RedHat #/sbin/service iptables save #/sbin/service iptables restart
Все новые входящие соединения, не обработанные предыдущими цепочками, записываем в лог файл и запрещаем. Эти правила оптимальнее, чем использование DROP.
# log $IPT -A INPUT -i $ISP_Gat -m limit --limit 3/m --limit-burst 5 -j ULOG --ulog-prefix "IN_Gat: " $IPT -A INPUT -p tcp -j REJECT --reject-with tcp-reset $IPT -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable $IPT -A INPUT -j REJECT --reject-with icmp-proto-unreach
- iptables. sh
#!/bin/sh IPT="/sbin/iptables" IFACE_EXT="eth0" IFACE_LOC="lo" # Flushing iptable rules. $IPT -F $IPT -t nat -F $IPT -t mangle -F $IPT -X $IPT -t nat -X $IPT -t mangle -X # Default politics $IPT -P INPUT DROP $IPT -P FORWARD DROP $IPT -P OUTPUT ACCEPT # INPUT # allow local, internal and already established connections $IPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT $IPT -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT #$IPT -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT $IPT -A INPUT -i $IFACE_LOC -j ACCEPT # Ping allow $IPT -A INPUT -p icmp -j ACCEPT # SSH allow $IPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT # The rest deny $IPT -A INPUT -p tcp -j REJECT --reject-with tcp-reset $IPT -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable $IPT -A INPUT -j REJECT --reject-with icmp-proto-unreach # FORWARD $IPT -A FORWARD -s 10.161.85.101/32 -j ACCEPT $IPT -A FORWARD -d 10.161.85. 101/32 -j ACCEPT $IPT -A FORWARD -s 10.161.85.102/32 -j ACCEPT $IPT -A FORWARD -d 10.161.85.102/32 -j ACCEPT $IPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited # POSTROUTING $IPT -t nat -A POSTROUTING -s 10.161.85.101/24 -o eth0 -j MASQUERADE # for RedHat /sbin/service iptables save /sbin/service iptables restart
Одна из мощных возможностей iptables — это возможность создавать пользовательские цепочки (user defined chains), в дополнение к встроенным (INPUT, FORWARD и OUTPUT). По общему согласию, пользовательские цепочки всегда создаются в малом регистре. Для создания пользовательских цепочек служит команда -N, для переименования — -E, для удаления — -X. Просмотр цепочки: iptables -nL forward-ports.
Пример. Создадим правило, которая все обращения к портам от 22 до 80 включительно, проходящие через наш шлюз, будет перенаправлять в нашу цепочку forward-ports. В цепочке forward-ports будут указаны IP, обращение к которым по этим портам запрещено.
# User defined chain. forward-ports # Создание цепочки $IPT -N forward-ports # Создание правила по умолчанию $IPT -A forward-ports -j RETURN # Заполнение правилами пользовательской цепочки $IPT -I forward-ports 1 -d xxx.xxx.xxx.xxx -m comment --comment "unused" -j DROP $IPT -I forward-ports 1 -d xxx.xxx.xxx.xxx -m comment --comment "KVM vm" -j DROP $IPT -I forward-ports 1 -d xxx.xxx.xxx.xxx -m comment --comment "unused" -j DROP # правило переправления из цепочки FORWARD в нашу созданную цепочку forward-ports $IPT -I FORWARD -p tcp -m multiport --dports 22:80 -j forward-ports
Настройка iptables и NAT
главная
— Статьи — Linux, FreeBSD
Теги: Linux Iptables NAT
Задача: настроить шлюз в интернет для офиса на основе обычного компьютера с установленной Linux с двумя сетевыми картами.
Условимся, что внутренняя сетевая карта называется eth2, внешняя — eth0.
Если в дальнейшем будет нужна статистика и пр. , то настроить Squid будет не так и сложно.
Для простоты обозначений, наш шлюз будем называть сервер. Поехали…
1. Создаем скрипт правил iptables iptables.sh
Например, в директории /root создадим файл iptables.sh, дадим ему права на исполнение:
chmod +x /root/iptables.sh
Теперь поместим в этот файл следующий текст:
#!/bin/sh
# Define vars
IF_EXT=»eth0″
IF_INT=»eth2″
IPT=»/sbin/iptables»
# flush
$IPT —flush
$IPT -t nat —flush
$IPT -t mangle —flush
$IPT -X
# loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# default
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
# allow forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# PROTECT FIREWALL
$IPT -N bad_packets
$IPT -P bad_packets ACCEPT
$IPT -A bad_packets -i $IF_EXT -s 10.0.0.0/8 -j DROP
$IPT -A bad_packets -i $IF_EXT -s 172. 16.0.0/12 -j DROP
$IPT -A bad_packets -i $IF_EXT -s 192.168.0.0/12 -j DROP
$IPT -A bad_packets -i $IF_EXT -s 127.0.0.0/8 -j DROP
$IPT -A bad_packets -i $IF_EXT -s 0.0.0.0/8 -j DROP
$IPT -A bad_packets -i $IF_EXT -s 169.254.0.0/16 -j DROP
$IPT -A bad_packets -i $IF_EXT -s 192.0.2.0/24 -j DROP
$IPT -A bad_packets -i $IF_EXT -s 204.152.64.0/23 -j DROP
$IPT -A bad_packets -i $IF_EXT -s 224.0.0.0/3 -j DROP
$IPT -A bad_packets -i $IF_EXT -s 240.0.0.0/5 -j DROP
$IPT -A INPUT -j bad_packets
$IPT -A OUTPUT -j bad_packets
$IPT -A FORWARD -j bad_packets
# FORWARD chain
# #########################################
# allow new connections from local net to out
$IPT -A FORWARD -i $IF_INT -o $IF_EXT -m state —state NEW,ESTABLISHED,RELATED -j ACCEPT
# do not allow new connections from internet, but support established connections from local network
$IPT -A FORWARD -i $IF_EXT -o $IF_INT -m state —state ESTABLISHED,RELATED -j ACCEPT
# NAT
# #########################################
# SNAT — local users to out internet
$IPT -t nat -A POSTROUTING -o $IF_EXT -j MASQUERADE
# INPUT chain
# #########################################
$IPT -A INPUT -p tcp ! —syn -m state —state NEW -j DROP
$IPT -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i $IF_INT -p tcp —dport 22 -j ACCEPT
# OUTPUT chain
# #########################################
# new local connections
$IPT -A OUTPUT -m state —state NEW,ESTABLISHED,RELATED -j ACCEPT
2. Комментарии к скрипту iptables.sh
- Все секции снабжены минимальными комментариями, поэтому в них не запутается даже новичок.
- Наиболее «туманная» секция — # PROTECT FIREWALL, но во-первых, временно вы можете ее вообще убрать, а во-вторых, если задуматься, там всё просто. Мы защищаем наш сервер от атак, когда из внешней сети пытаются «прикинуться» внутренними адресами. Вот и все.
- Чтобы наш сервер в принципе мог выпускать во внешний мир клиентов локальной сети, обязательно надо включить forwarding (почти в самом начале скрипта):
# allow forwarding
echo 1 > /proc/sys/net/ipv4/ip_forwardДанный параметр также может быть задан через параметр:
net.ipv4.ip_forward = 1 в файле /etc/sysctl.conf.
Чтобы изменения в файле sysctl.conf вступили в силу, выполните следующую команду:
sysctl -p /etc/sysctl.conf
- В секции # INPUT chain мы разрешаем клиентам локальной сети подключаться к серверу по ssh. Обратите внимание, несмотря на то, что к самому серверу можно обратиться только по ssh, клиенты локальной сети не будут ограничены в выходе в интернет. Цепочка INPUT не для них!
- В цепочке # OUTPUT chain мы разрешаем серверу обращаться во внешний мир (скачивать обновления, например). Для упрощения считаем, что мы доверяем нашему серверу и разрешаем ему любые исходящие соединения.
- Еще раз отмечу — цепочки INPUT и OUTPUT работают только для тех пакетов, которые адресованы локальной машине, в нашем случае это сам сервер.
- Фактически, пакет из локальной сети в интернет проходит две (упрощенно) цепочки: FORWARD -> POSTROUTING. Более детальное описание этапов прохождения пакетов через iptables смотрите в статье «Порядок прохождения таблиц и цепочек IPTABLES». Поэтому все ограничения клиентов локальной сети (разрешить ли ICQ, WWW, POP3 и т.п.) настраиваются правилами FORWARD (секция #FORWARD chain). Например, для того, чтобы разрешить доступ только к сайтам, пишем:
$IPT -A FORWARD -i $IF_INT -o $IF_EXT -dport 80 -m state —state NEW,ESTABLISHED,RELATED -j ACCEPT
Правило по-умолчанию ($IPT -A FORWARD -i $IF_INT -o $IF_EXT -m state —state NEW,ESTABLISHED,RELATED -j ACCEPT) естественно, удаляем либо комментируем символом #.
- Для того, чтобы после перезагрузки правила iptables не стирались, после того, как выполните скрипт iptables.sh и убедитесь, что все работает так, как надо, выполните команду:
service iptables save
Эта команда сохранит настройки iptables. Эта команда подойдет для RHEL-основанных дистрибутивов. Для других не знаю. Если нужен универсальный метод — поместите запуск этого скрипта в автозагрузку.
- Пожалуй, все. Естественно, если вы новичок, НИКОГДА не настраивайте правила iptables находясь не за клавиатурой самого сервера. Ведь если вы случайно запретите себе доступ, то придется ноги-в-руки-и-на-работу 🙂 Если вы уже знаете, что делаете, это к вам не относится.
- Если есть вопросы, пишите!
Авторизуйтесь для добавления комментариев!
Настройка iptables в CentOS 7
На защиту сервера от внешних угроз в первую очередь встает межсетевой экран, который фильтрует входящий и исходящий траффик. Настройкой iptables — частного случая фаервола на CentOS я хочу заняться в данной статье, а также рассказать о его установке и отключении. Мое руководство не будет исчерпывающим, я рассмотрю лишь те аспекты, которые считаю наиболее важными и сам использую в своей работе.
Теоретический курс по основам сетевых технологий. Позволит системным администраторам упорядочить и восполнить пробелы в знаниях. Цена очень доступная, есть бесплатный доступ. Все подробности по . Можно пройти тест на знание сетей, бесплатно и без регистрации.
Данная статья является частью единого цикла статьей про сервер Centos.
Вступление
Iptables в настоящее время является стандартом де-факто в среде современных linux дистрибутивов. Я даже сходу не могу припомнить, что еще используют в качестве фаервола. Так что любому администратору линукс приходится сталкиваться в своей работе с настройкой этого межсетевого экрана.
К этому фаерволу существуют разные обвязки, которые используются для более «удобной» настройки. В ubuntu есть ufw, в centos — firewalld, с другими не знаком. Лично я не вижу никакого удобства в использовании этих инструментов. Я привык настраивать линуксовый фаервол по-старинке, как научился в самом начале работы. Мне кажется это наиболее простым и удобным способом, которым я с вами и поделюсь. Суть его сводится к тому, что создается скрипт с правилами фаервола. Этот скрипт можно легко редактировать под свои нужды и переносить с сервера на сервер.
Отключение firewalld
Вопрос отключения firewalld я уже касался в теме по настройке сервера. Первым делом отключим firewalld, который присутствует в centos 7 по-умолчанию сразу после установки:
# systemctl stop firewalld
Теперь удалим его из автозагрузки, чтобы он не включился снова после рестарта:
# systemctl disable firewalld
После этого на сервере настройки сетевого экрана становятся полностью открытыми. Посмотреть правила iptables можно командой:
# iptables -L -v -n
Дальше пойдет информация исключительно по конфигурированию только iptables. Темы firewalld я больше касаться не буду.
Установка iptables
На самом деле фаервол у нас на сервере уже стоит и работает, просто нет никаких правил, все открыто. Установить нам нужно будет дополнительные утилиты управления, без которых конфигурировать iptables невозможно. Например, нельзя будет перезапустить фаервол:
# systemctl restart iptables.service Failed to issue method call: Unit iptables.service failed to load: No such file or directory.
Или добавить в автозапуск не получится:
# systemctl enable iptables.service Failed to issue method call: No such file or directory
Чтобы подобных ошибок не было, установим необходимый пакет с утилитами:
# yum -y install iptables-services
Теперь можно добавить iptables в автозагрузку и запустить:
# systemctl enable iptables.service # systemctl start iptables.service
Настройка фаервола
Для управления правилами фаервола я использую скрипт. Создадим его:
# mcedit /etc/iptables.sh
Далее будем наполнять его необходимыми правилами. Я буду разбирать все значимые части скрипта, а полностью его приведу в виде текстового файла в конце статьи. Правила сделаны в виде картинок, чтобы запретить копирование и вставку. Это может привести к ошибкам в работе правил, с чем я сам столкнулся во время подготовки статьи.
Мы рассмотрим ситуацию, когда сервер является шлюзом в интернет для локальной сети.
Первым делом зададим все переменные, которые будем использовать в скрипте. Это не обязательно делать, но рекомендуется, потому что удобно переносить настройки с сервера на сервер. Достаточно будет просто переназначить переменные.
Перед применением новых правил, очищаем все цепочки:
Блокируем весь трафик, который не соответствует ни одному из правил:
Разрешаем весь трафик локалхоста и локалки:
Разрешаем делать ping:
Если вам это не нужно, то не добавляйте разрешающие правила для icmp.
Открываем доступ в инет самому серверу:
Если вы хотите открыть все входящие соединения сервера, то добавляйте дальше правило:
Делать это не рекомендуется, привожу просто для примера, если у вас появится такая необходимость.
Дальше разрешим все установленные соединения и дочерние от них. Так как они уже установлены, значит прошли через цепочки правил, фильтровать их еще раз нет смысла:
Теперь добавим защиту от наиболее распространенных сетевых атак. Сначала отбросим все пакеты, которые не имеют никакого статуса:
Блокируем нулевые пакеты:
Закрываемся от syn-flood атак:
Следом за этими правилами рекомендуется поставить правила на запрет доступа с определенных IP, если у вас имеется такая необходимость. Например, вас задолбал адрес 84.122.21.197 брутом ssh. Блокируем его:
Если вы не ставите ограничений на доступ из локальной сети, то разрешаем всем выход в интернет:
Следом запрещаем доступ из инета в локальную сеть:
Чтобы наша локальная сеть пользовалась интернетом, включаем nat:
Чтобы не потерять доступ к серверу, после применения правил, разрешаем подключения по ssh:
И в конце записываем правила, чтобы они применились после перезагрузки:
Мы составили простейший конфиг, который блокирует все входящие соединения, кроме ssh и разрешает доступ из локальной сети в интернет. Попутно защитились от некоторых сетевых атак.
Сохраняем скрипт, делаем исполняемым и запускаем:
# chmod 0740 /etc/iptables.sh # /etc/iptables.sh
Выполним просмотр правил и проверим, все ли правила на месте:
# iptables -L -v -n
Обращаю ваше внимание — применять правила нужно лишь в том случае, если у вас имеется доступ к консоли сервера. При ошибке в настройках вы можете потерять доступ. Убедитесь, что в нештатной ситуации вы сможете отключить фаервол и скорректировать настройки.
Открытие портов
Теперь немного расширим нашу конфигурацию и откроем в iptables порты для некоторых сервисов. Допустим, у нас работает веб-сервер и необходимо открыть к нему доступ из интернета. Добавляем правила для веб-трафика:
Было добавлено разрешение на входящие соединения по 80-му и 443-му портам, которые использует web сервер в своей работе.
Если у вас установлен почтовый сервер, то нужно разрешить на него входящие соединения по всем используемым портам:
Для корректной работы DNS сервера, нужно открыть UDP порт 53
И так далее. По аналогии можете открыть доступ для всех необходимых сервисов.
Проброс (forward) порта
Рассмотрим ситуацию, когда необходимо выполнить проброс портов с внешнего интерфейса на какой-то компьютер в локальной сети. Допустим, вам необходимо получить rdp доступ к компьютеру 10.1.3.50 из интернета. Делаем проброс TCP порта 3389:
Если вы не хотите светить снаружи известным портом, то можно сделать перенаправление с нестандартного порта на порт rdp конечного компьютера:
Если вы пробрасываете порт снаружи внутрь локальной сети, то обязательно закомментируйте правило, которое блокирует доступ из внешней сети во внутреннюю. В моем примере это правило:
$IPT -A FORWARD -i $WAN -o $LAN1 -j REJECT
Либо перед этим правилом создайте разрешающее правило для доступа снаружи к внутреннему сервису, например вот так:
$IPT -A FORWARD -i $WAN -d 10.1.3.50 -p tcp -m tcp --dport 3389 -j ACCEPT
Включение логов
Во время настройки полезно включить логи, чтобы мониторить заблокированные пакеты и выяснять, почему отсутствует доступ к необходимым сервисам, которые мы вроде бы уже открыли. Я отправляю все заблокированные пакеты в отдельные цепочки (block_in, block_out, block_fw), соответствующие направлению трафика и маркирую в логах каждое направление. Так удобнее делать разбор полетов. Добавляем следующие правила в самый конец скрипта, перед сохранением настроек:
Все заблокированные пакеты вы сможете отследить в файле /var/log/messages.
После того, как закончите настройку, закомментируйте эти строки, отключив логирование. Обязательно стоит это сделать, так как логи очень быстро разрастаются. Практического смысла в хранении подобной информации лично я не вижу.
Как отключить iptables
Если вы вдруг решите, что firewall вам больше не нужен, то отключить его можно следующим образом:
# systemctl stop iptables.service
Эта команда останавливает фаервол. А следующая удаляет из автозагрузки:
# systemctl disable iptables.service
Отключив сетевой экран, мы разрешили все соединения.
Заключение
Как и обещал, выкладываю готовый скрипт с основным набором правил, которые мы рассмотрели iptables. sh
Хочу еще раз обратить внимание, что при настройке iptables необходимо быть предельно внимательным. Не начинайте это дело, если не имеете доступа к консоли сервера. Даже во время написания этой статьи я потерял доступ к серверу из-за нелепой ошибке в правилах. Ошибка эта возникла из-за копирования и потери двойного тире — оно заменилось на одинарное.
А представляете, если это был бы удаленный сервер? Ко мне так обратился один знакомый, который попросил настроить firewall на веб-сервере. Предыдущий админ заставил его 2 раза приезжать к размещению машины и сбрасывать настройки неправильно сконфигурированного экрана, что в конечном счете и привело к прекращению сотрудничества. Это было давно, но случай мне запомнился. Сейчас практически все хостинги предлагают платно или бесплатно удаленный KVM доступ. Лучше озаботиться об этом заранее.
Напоминаю, что данная статья является частью единого цикла статьей про сервер Centos.
Видео
Онлайн курс Основы сетевых технологий
Теоретический курс с самыми базовыми знаниями по сетям. Курс подходит и начинающим, и людям с опытом. Практикующим системным администраторам курс поможет упорядочить знания и восполнить пробелы. А те, кто только входит в профессию, получат на курсе базовые знания и навыки, без воды и избыточной теории. После обучения вы сможете ответить на вопросы:
- На каком уровне модели OSI могут работать коммутаторы;
- Как лучше организовать работу сети организации с множеством отделов;
- Для чего и как использовать технологию VLAN;
- Для чего сервера стоит выносить в DMZ;
- Как организовать объединение филиалов и удаленный доступ сотрудников по vpn;
- и многое другое.
Уже знаете ответы на вопросы выше? Или сомневаетесь? Попробуйте пройти тест по основам сетевых технологий. Всего 53 вопроса, в один цикл теста входит 10 вопросов в случайном порядке. Поэтому тест можно проходить несколько раз без потери интереса. Бесплатно и без регистрации. Все подробности на странице .
Помогла статья? Подписывайся на telegram канал автора
Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.
Инструкция по настройке iptables файрвола для ОС Linux / Oblako.kz
Iptables – это специализированная утилита, межсетевой экран, который используется в ОС Linux. Оперировать с ним довольно легко как мастерам ОС Linux и системным администраторам, так и новичкам. Данное руководство описывает, как за несколько шагов сделать базовую конфигурацию настройки файрвола.
Чем является iptables?
Iptables представляет собой вспомогательную программу, которая работает как межсетевой экран. Настраивается конфигурация утилиты посредствам командной строки, определенный набор правил позволит разрешить или заблокировать передачу трафика. В момент установки интернет-соединения с устройством (компьютером ил ноутбуком), программа сканирует выставленный список правил и выполняет команды в соответствии с записями. Когда правило отсутствует, команда исполняется по умолчанию.
Установка iptables стандартно выполняется на всех ОС Linux. Для обновления или повторной установки программы предназначена команда:
sudo apt-get install iptables
Для пользователей, не привыкших к работе с командной строкой, выпущены графические интерфейсы (в том числе программа Firestarter). Но если настраивать утилиту через специализированные программы и удаленные ssh-соединения, необходимо соблюдение осторожности, так как неверно введенная команда несет риск блокировки интернет-подключения. Система не сможет осуществить подключение к удаленной машине, для решения данной проблемы придется физическим путем корректировать настройки компьютера.
Правила iptables
У файрвола имеются 3 главные категории правил:
- Правило Input применяется для мониторинга всех входящих пакетов. Если человек захочет сделать подключение к серверу по зашифрованной технологии SSH, то утилита произведет сравнение IP пользователя с данными из своего списка и решит, позволить сделать соединение или заблокировать.
- Правило категории Forward обрабатывает входящие сообщения и пакеты, чьей конечной точкой отправки текущий сервер не становится. Если рассматривать функционирование маршрутизатора, можно заметить, что к роутеру запрашивают подключения многие приложения и пользователи, при этом пакеты направляются маршрутизатору только для того, чтобы быть перенаправленными следующему адресату. Если вам не нужно настраивать NAT и маршрутизацию, то в повседневных командах Forward применяться не будет.
- Тип Output применяется, чтобы контролировать исходящий трафик с соединениями. Если юзер хочет запинговать любой на выбор веб-сайт, утилита iptables просканирует имеющиеся правила для определения своих действий и дальше решит, блокировать или разрешить соединение.
Необходимо запомнить:
При пинге стороннего сайта необходимо отправить к нему пакет и дождаться ответной реакции. Работая с файрволом iptables, следует учитывать – множество протоколов передачи нуждаются в двусторонних коммуникациях. Именно по этой причине важно внимательно проводить настройку утилиты – ошибки новичков при включении разрешения работы машины с сервером путем передачи SSH не такие уж редкие.
Настройка поведения
Перед тем, как садиться за настройку файрвола, необходимо продумать и включить по умолчанию цепочку правил, на которой должна строиться работа межсетевого экрана. То есть, пользователю надо определиться, что должна делать программа iptables, когда для запрашиваемого соединения не создано ни правило, ни исключение.
Для нахождения стандартных и актуальных настроек утилиты нужна команда iptables –L:
В командной строке применилась команда grep, она используется для получения более конкретного вывода. На картинке можно заметить, что по умолчанию 3 цепочки команд позволяют компьютеру принимать трафик. Такая реакция машины считается предпочтительной для обычного пользователя. Данное правило существует по умолчанию. Но если вы изменяли конфигурацию и желаете вернуть стандартные настройки, следует написать следующие команды:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
Оптимальное поведение – сначала разрешить получение и отправку всех пакетов, а после этого создавать запреты соединений конкретным IP и на выбранный порт.
Также можно сделать противоположные действия: включить запрет на пересылку всего трафика, а после создать исключения на разрешения. Для этого имеются такие команды:
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Что можно делать с соединениями
Когда стандартная настройка поведения файрвола закончена, наступает время перехода к написанию правила по обработке пакетов трафика. Это необходимо, чтобы межсетевой экран понимал, как ему поступать с определенным интернет-соединением. Существует 3 разновидности действий:
- Разрешение соединения при помощи Accept;
- Игнорирование попыток коннекта командой Drop — это используется в случаях, в которых от источника трафика скрывается факт блокировки запросов;
- Полная блокировка соединения Reject и отправка отчетного сообщения об ошибке — это вариант для случаев, если пользователь дает ресурсам информацию об их блокировке своим файрволом.
Применяя каждый из перечисленных команд, можно увидеть следующий пинг.
Разрешенное соединение выглядит так:
При игнорировании:
Полное отклонение соединения:
Как разрешить/заблокировать соединение
В инструкции все поступающие соединения мы отклоняем, однако их также допустимо игнорировать и разрешать.
Для добавления новых правил к уже существующим, используется команда iptables –A. То есть межсетевой экран запускает сканирование по началу файла списка и последовательно проходит правила, ища совпадения.
При необходимости дополнить имеющиеся настройки, применяется выражение iptables -I [цепочка] [номер]. Здесь пользователь записывает номер места, куда помещается свежее правило.
Группа соединений, приходящие с одного IP-адреса
Выданная команда блокирует все попытки подключения, исходящие от IP-адреса 100.100.100.100:
iptables -A INPUT -s 100.100.100.100 -j DROP
Если имеется определенный диапазон IP, которые рекомендуется заблокировать, следует применить данную команду. Диапазон адресов здесь записывается через слеш после IP-адреса, его можно заменить на маску подсети:
iptables -A INPUT -s 100.100.100.0/24 -j DROP
iptables -A INPUT -s 100.100.100.0/255.255.255.0 -j DROP
Соединения для конкретного порта
Для блокировки соединения типа SSH с адреса 100. 100.100.100:
iptables -A INPUT -p tcp --dport ssh -s 100.100.100.100 -j DROP
В записанной команде допускается использование любого протокола, не только SSH, и номера порта. Выражение –p tcp является разновидностью соединений, применяемых протоколами. Чтобы заблокировать протокол, работающий с UDP, необходимо скорректировать выражение: –p udp.
Чтобы для любого IP блокировать соединения SSH типа, существует краткая команда:
iptables -A INPUT -p tcp --dport ssh -j DROP
Состояние интернет-соединения
Большинство современных протоколов нуждаются в двустороннем типе коммуникаций. Для разрешения машине SSH-соединения придется добавлять правило в обе категории output и input. Если возникает необходимость в разрешении доступа исключительно входящим и соединениям шифрованного типа SSH, будет приименяться состояние соединений. Эта функция опишет двустороннюю коммуникацию, для которой разрешено подключение соединение конкретного направления (входящего).
В написанной команде разрешается соединение SSH, которое поступило с IP-адреса 10.10.10.10. При этом, данный тип соединения к хосту заблокирован, но файрвол позволяет отправлять данные по SSH к установленным раннее сессиям, а это, в свою очередь, разрешает коммуникацию двух хостов:
iptables -A INPUT -p tcp --dport ssh -s 100.100.100.100 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT
Как сохранить изменения
Если случайно перезапустить iptables, все изменения в командах и правилах исчезнут, поэтому их нужно заранее сохранять. Для этого имеется переделенная команда, меняющая вид в зависимости от вида Linux.
Для Ubuntu она выглядит следующим образом:
=sudo /sbin/iptables-save
Варианты для Red Hat / CentOS:
=/sbin/service iptables save
=/etc/init.d/iptables save
Прочие команды
Чтобы вывести и просмотреть созданные правила iptables применяется:
iptables –L
Если добавить –v, можно будет просмотреть данные о пакетах и байтах. Выражение –n предоставит цифровые сведения об именах хостов, протоколах, сетях.
Чтобы удалить все правила конфигурации утилиты, нужно написать:
iptables –F
Спасибо за Вашу оценку!
К сожалению, проголосовать не получилось. Попробуйте позже
документация от iptables.ru [Мозаика системного администрирования]
Когда пакет приходит на наш брандмауэр, то он сперва попадает на сетевое устройство, перехватывается соответствующим драйвером и далее передаётся в ядро. Далее пакет проходит ряд таблиц и затем передаётся либо локальному приложению, либо переправляется на другую машину. Порядок следования пакета приводится ниже:
Порядок движения транзитных пакетов
Шаг | Таблица | Цепочка | Примечание |
---|---|---|---|
1 | Кабель (т. е. Интернет) | ||
2 | Сетевой интерфейс (например, eth0) | ||
3 | mangle | PREROUTING | Обычно эта цепочка используется для внесения изменений в заголовок пакета, например для изменения битов TOS и пр. |
4 | nat | PREROUTING | Эта цепочка используется для трансляции сетевых адресов (Destination Network Address Translation). Source Network Address Translation выполняется позднее, в другой цепочке. Любого рода фильтрация в этой цепочке может производиться только в исключительных случаях |
5 | Принятие решения о дальнейшей маршрутизации, т.е. в этой точке решается куда пойдёт пакет – локальному приложению или на другой узел сети. | ||
6 | mangle | FORWARD | Далее пакет попадает в цепочку FORWARD таблицы mangle, которая должна использоваться только в исключительных случаях, когда необходимо внести некоторые изменения в заголовок пакета между двумя точками принятия решения о маршрутизации. |
7 | Filter | FORWARD | В цепочку FORWARD попадают только те пакеты, которые идут на другой хост Вся фильтрация транзитного трафика должна выполняться здесь. Не забывайте, что через эту цепочку проходит трафик в обоих направлениях, обязательно учитывайте это обстоятельство при написании правил фильтрации. |
8 | mangle | POSTROUTING | Эта цепочка предназначена для внесения изменений в заголовок пакета уже после того как принято последнее решение о маршрутизации. |
9 | nat | POSTROUTING | Эта цепочка предназначена в первую очередь для Source Network Address Translation. Не используйте ее для фильтрации без особой на то необходимости. Здесь же выполняется и маскарадинг (Masquerading). |
10 | Выходной сетевой интерфейс (например, eth2). | ||
11 | Кабель (пусть будет LAN). |
Как вы можете видеть, пакет проходит несколько этапов, прежде чем он будет передан далее. На каждом из них пакет может быть остановлен, будь то цепочка iptables или что либо ещё, но нас главным образом интересует iptables. Заметьте, что нет каких либо цепочек, специфичных для отдельных интерфейсов или чего либо подобного.
Цепочку FORWARD
проходят ВСЕ пакеты, которые движутся через наш брандмауэр/ роутер.
Не используйте цепочку INPUT
для фильтрации транзитных пакетов, они туда просто не попадают! Через эту цепочку движутся только те пакеты, которые предназначены данному хосту!
Прежде, чем приступить к созданию набора правил, необходимо определиться с политиками цепочек по-умолчанию.
Политика по-умолчанию устанавливается командой:
iptables [-P {chain} {policy}]
Политика по-умолчанию представляет собой действие, которое применяется к пакету, не попавшему под действие ни одного из правил в цепочке. (Небольшое уточнение, команда iptables -P
применима ТОЛЬКО К ВСТРОЕННЫМ цепочкам, т.е. INPUT
, FORWARD
, OUTPUT
и т.п., и не применима к пользовательским цепочкам).
Нужно быть осторожным с установкой политик по-умолчанию для цепочек из таблиц, не предназначенных для фильтрации, так как это может приводить к довольно странным результатам.
Команда | Пример | Описание |
---|---|---|
-A, –append | iptables -A INPUT ... | Добавляет новое правило в конец заданной цепочки. |
-D, –delete | iptables -D INPUT --dport 80 -j DROP, iptables -D INPUT 1 | Удаление правила из цепочки. Команда имеет два формата записи, первый – когда задается критерий сравнения с опцией -D (см. первый пример), второй – порядковый номер правила. Если задается критерий сравнения, то удаляется правило, которое имеет в себе этот критерий, если задается номер правила, то будет удалено правило с заданным номером. Счет правил в цепочках начинается с 1. |
-R, –replace | iptables -R INPUT 1 -s 192.168.0.1 -j DROP | Эта команда заменяет одно правило другим. В основном она используется во время отладки новых правил. |
-I, –insert | iptables -I INPUT 1 --dport 80 -j ACCEPT | Вставляет новое правило в цепочку. Число, следующее за именем цепочки указывает номер правила, перед которым нужно вставить новое правило, другими словами число задает номер для вставляемого правила. В примере выше, указывается, что данное правило должно быть 1-м в цепочке INPUT. |
-L, –list | iptables -L INPUT | Вывод списка правил в заданной цепочке, в данном примере предполагается вывод правил из цепочки INPUT. Если имя цепочки не указывается, то выводится список правил для всех цепочек. Формат вывода зависит от наличия дополнительных ключей в команде, например -n, -v, и пр. |
-F, –flush | iptables -F INPUT | Сброс (удаление) всех правил из заданной цепочки (таблицы). Если имя цепочки и таблицы не указывается, то удаляются все правила, во всех цепочках. (Хочется от себя добавить, что если не указана таблица ключом -t (–table), то очистка цепочек производится только в таблице filter, прим. перев. ) |
-Z, –zero | iptables -Z INPUT | Обнуление всех счетчиков в заданной цепочке. Если имя цепочки не указывается, то подразумеваются все цепочки. При использовании ключа -v совместно с командой -L, на вывод будут поданы и состояния счетчиков пакетов, попавших под действие каждого правила. Допускается совместное использование команд -L и -Z. В этом случае будет выдан сначала список правил со счетчиками, а затем произойдет обнуление счетчиков. |
-N, –new-chain | iptables -N allowed | Создается новая цепочка с заданным именем в заданной таблице В выше приведенном примере создается новая цепочка с именем allowed. Имя цепочки должно быть уникальным и не должно совпадать с зарезервированными именами цепочек и действий (такими как DROP, REJECT и т.п.) |
-X, –delete-chain | iptables -X allowed | Удаление заданной цепочки из заданной таблицы. Удаляемая цепочка не должна иметь правил и не должно быть ссылок из других цепочек на удаляемую цепочку. Если имя цепочки не указано, то будут удалены все цепочки заданной таблице кроме встроенных. |
-P, –policy | iptables -P INPUT DROP | Задает политику по-умолчанию для заданной цепочки. Политика по-умолчанию определяет действие, применяемое к пакетам не попавшим под действие ни одного из правил в цепочке. В качестве политики по умолчанию допускается использовать DROP и ACCEPT. |
-E, –rename-chain | iptables -E allowed disallowed | Команда -E выполняет переименование пользовательской цепочки. В примере цепочка allowed будет переименована в цепочку disallowed. Эти переименования не изменяют порядок работы, а носят только косметический характер. |
Команда должна быть указана всегда. Список доступных команд можно просмотреть с помощью команды iptables -h или, что тоже самое, iptables –help. Некоторые команды могут использоваться совместно с дополнительными ключами. Ниже приводится список дополнительных ключей и описывается результат их действия. При этом заметьте, что здесь не приводится дополнительных ключей, которые используются при построении критериев (matches) или действий (targets). Эти опции мы будем обсуждать далее.
Дополнительные ключи
Ключ | Команды, с которыми используется | Описание |
---|---|---|
-v, –verbose | –list, | Используется для повышения информативности вывода и, как правило, используется совместно с командой –list. В случае использования с командой –list, в вывод этой команды включаются так же имя интерфейса, счетчики пакетов и байт для каждого правила. Формат вывода счетчиков предполагает вывод кроме цифр числа еще и символьные множители K (x1000), M (x1,000,000) и G (x1,000,000,000). Для того, чтобы заставить команду –list выводить полное число (без употребления множителей) требуется применять ключ -x, который описан ниже. Если ключ -v, –verbose используется с командами –append, –insert, –delete или –replace, то будет выведен подробный отчет о произведенной операции. |
-x, –exact | –list | Для всех чисел в выходных данных выводятся их точные значения без округления и без использования множителей K, M, G. Этот ключ используется только с командой –list и не применим с другими командами. |
-n, –numeric | –list | Заставляет iptables выводить IP-адреса и номера портов в числовом виде предотвращая попытки преобразовать их в символические имена. Данный ключ используется только с командой –list. |
–line-numbers | –list | Ключ –line-numbers включает режим вывода номеров строк при отображении списка правил командой –list. Номер строки соответствует позиции правила в цепочке. Этот ключ используется только с командой –list. |
-c, –set-counters | –insert, | Этот ключ используется для установки начального значения счетчиков пакетов и байт в заданное значение при создании нового правила. Например, ключ –set-counters 20 4000 установит счетчик пакетов = 20, а счетчик байт = 4000. |
–modprobe | Все | Ключ –modprobe определяет команду загрузки модуля ядра. Данный ключ может использоваться в случае, когда модули ядра находится вне пути поиска (search path). Этот ключ может использоваться с любой командой. |
Общие критерии
Общие критерии допустимо употреблять в любых правилах, они не зависят от типа протокола и не требуют подгрузки модулей расширения. К этой группе я умышленно отнес критерий –protocol несмотря на то, что он используется в некоторых специфичных от протокола расширениях. Например, мы решили использовать TCP критерий, тогда нам необходимо будет использовать и критерий –protocol которому в качестве дополнительного ключа передается название протокола – TCP. Однако критерий –protocol сам по себе является критерием, который используется для указания типа протокола.
Критерий | Пример | Описание |
---|---|---|
-p, –protocol | iptables -A INPUT -p tcp | Этот критерий используется для указания типа протокола. Примерами протоколов могут быть TCP, UDP и ICMP. Список протоколов можно посмотреть в файле /etc/protocols. Прежде всего, в качестве имени протокола в данный критерий можно передавать один из трех вышеупомянутых протоколов, а также ключевое слово ALL. В качестве протокола допускается передавать число — номер протокола, так например, протоколу ICMP соответствует число 1, TCP – 6 и UDP – 17. Соответствия между номерами протоколов и их именами вы можете посмотреть в файле /etc/protocols, который уже упоминался. Критерию может передаваться и список протоколов, разделенных запятыми, например так: udp,tcp (Хотя автор и указывает на возможность передачи списка протоколов, тем не менее вам врят ли удастся это сделать! Кстати, man iptables явно оговаривает, что в данном критерии может быть указан только один протокол. Может быть это расширение имеется в patch-o-matic? прим. перев.) Если данному критерию передается числовое значение 0, то это эквивалентно использованию спецификатора ALL, который подразумевается по умолчанию, когда критерий –protocol не используется. Для логической инверсии критерия, перед именем протокола (списком протоколов) используется символ !, например –protocol ! tcp подразумевает пакеты протоколов, UDP и ICMP. |
-s, –src, –source | iptables -A INPUT -s 192.168.1.1 | IP-адрес(а) источника пакета. Адрес источника может указываться так, как показано в примере, тогда подразумевается единственный IP-адрес. А можно указать адрес в виде address/mask, например как 192. 168.0.0/255.255.255.0, или более современным способом 192.168.0.0/24, т.е. фактически определяя диапазон адресов Как и ранее, символ !, установленный перед адресом, означает логическое отрицание, т.е. –source ! 192.168.0.0/24 означает любой адрес кроме адресов 192.168.0.x. |
-d, –dst, –destination | iptables -A INPUT -d 192.168.1.1 | IP-адрес(а) получателя. Имеет синтаксис схожий с критерием –source, за исключением того, что подразумевает адрес места назначения. Точно так же может определять как единственный IP-адрес, так и диапазон адресов. Символ ! используется для логической инверсии критерия. |
-i, –in-interface | iptables -A INPUT -i eth0 | Интерфейс, с которого был получен пакет. Использование этого критерия допускается только в цепочках INPUT, FORWARD и PREROUTING, в любых других случаях будет вызывать сообщение об ошибке. При отсутствии этого критерия предполагается любой интерфейс, что равносильно использованию критерия -i +. Как и прежде, символ ! инвертирует результат совпадения. Если имя интерфейса завершается символом +, то критерий задает все интерфейсы, начинающиеся с заданной строки, например -i PPP+ обозначает любой PPP интерфейс, а запись -i ! eth+ – любой интерфейс, кроме любого eth. |
-o, –out-interface | iptables -A FORWARD -o eth0 | Задает имя выходного интерфейса. Этот критерий допускается использовать только в цепочках OUTPUT, FORWARD и POSTROUTING, в противном случае будет генерироваться сообщение об ошибке. При отсутствии этого критерия предполагается любой интерфейс, что равносильно использованию критерия -o +. Как и прежде, символ ! инвертирует результат совпадения. Если имя интерфейса завершается символом +, то критерий задает все интерфейсы, начинающиеся с заданной строки, например -o eth+ обозначает любой eth интерфейс, а запись -o ! eth+ — любой интерфейс, кроме любого eth. |
-f, –fragment | iptables -A INPUT -f | Правило распространяется на все фрагменты фрагментированного пакета, кроме первого, сделано это потому, что нет возможности определить исходящий/входящий порт для фрагмента пакета, а для ICMP-пакетов определить их тип. С помощью фрагментированных пакетов могут производиться атаки на ваш брандмауэр, так как фрагменты пакетов могут не отлавливаться другими правилами. Как и раньше, допускается использования символа ! для инверсии результата сравнения. только в данном случае символ ! должен предшествовать критерию -f, например ! -f. Инверсия критерия трактуется как «все первые фрагменты фрагментированных пакетов и/или нефрагментированные пакеты, но не вторые и последующие фрагменты фрагментированных пакетов». |
Неявные критерии
Критерии, которые подгружаются неявно и становятся доступны, например при указании критерия –protocol tcp. На сегодняшний день существует три автоматически подгружаемых расширения, это TCP критерии, UDP критерии и ICMP критерии (при построении своих правил я столкнулся с необходимостью явного указания ключа -m tcp, т.е. о неявности здесь говорить не приходится, поэтому будьте внимательнее при построении своих правил, если что-то не идет – пробуйте явно указывать необходимое расширение. прим. перев.). Загрузка этих расширений может производиться и явным образом с помощью ключа -m, -match, например -m tcp.
6.4.2.1. TCP критерии
Этот набор критериев зависит от типа протокола и работает только с TCP пакетами. Чтобы использовать их, вам потребуется в правилах указывать тип протокола –protocol tcp. Важно: критерий –protocol tcp обязательно должен стоять перед специфичным критерием. Эти расширения загружаются автоматически как для tcp протокола, так и для udp и icmp протоколов. (О неявной загрузке расширений я уже упоминал выше прим. перев.).
TCP критерии
Критерий –sport, –source-port
Пример iptables -A INPUT -p tcp –sport 22
Описание Исходный порт, с которого был отправлен пакет. В качестве параметра может указываться номер порта или название сетевой службы. Соответствие имен сервисов и номеров портов вы сможете найти в файле /etc/services. При указании номеров портов правила отрабатывают несколько быстрее. однако это менее удобно при разборе листингов скриптов. Если же вы собираетесь создавать значительные по объему наборы правил, скажем порядка нескольких сотен и более, то тут предпочтительнее использовать номера портов. Номера портов могут задаваться в виде интервала из минимального и максимального номеров, например –source-port 22:80. Если опускается минимальный порт, т.е. когда критерий записывается как –source-port :80, то в качестве начала диапазона принимается число 0. Если опускается максимальный порт, т.е. когда критерий записывается как –source-port 22:, то в качестве конца диапазона принимается число 65535. Допускается такая запись –source-port 80:22, в этом случае iptables поменяет числа 22 и 80 местами, т.е. подобного рода запись будет преобразована в –source-port 22:80. Как и раньше, символ ! используется для инверсии. Так критерий –source-port ! 22 подразумевает любой порт, кроме 22. Инверсия может применяться и к диапазону портов, например –source-port ! 22:80. За дополнительной информацией обращайтесь к описанию критерия multiport.
Критерий –dport, –destination-port
Пример iptables -A INPUT -p tcp –dport 22
Описание Порт или диапазон портов, на который адресован пакет. Аргументы задаются в том же формате, что и для –source-port.
Критерий –tcp-flags
Пример iptables -p tcp –tcp-flags SYN,FIN,ACK SYN
Описание Определяет маску и флаги tcp-пакета. Пакет считается удовлетворяющим критерию, если из перечисленных флагов в первом списке в единичное состояние установлены флаги из второго списка. Так для вышеуказанного примера под критерий подпадают пакеты у которых флаг SYN установлен, а флаги FIN и ACK сброшены. В качестве аргументов критерия могут выступать флаги SYN, ACK, FIN, RST, URG, PSH, а так же зарезервированные идентификаторы ALL и NONE. ALL – значит ВСЕ флаги и NONE — НИ ОДИН флаг. Так, критерий –tcp-flags ALL NONE означает – «все флаги в пакете должны быть сброшены». Как и ранее, символ ! означает инверсию критерия Важно: имена флагов в каждом списке должны разделяться запятыми, пробелы служат для разделения списков.
Критерий –syn
Пример iptables -p tcp –syn
Описание Критерий –syn является по сути реликтом, перекочевавшим из ipchains. Критерию соответствуют пакеты с установленным флагом SYN и сброшенными флагами ACK и FIN. Этот критерий аналогичен критерию –tcp-flags SYN,ACK,FIN SYN. Такие пакеты используются для открытия соединения TCP. Заблокировав такие пакеты, вы надежно заблокируете все входящие запросы на соединение, однако этот критерий не способен заблокировать исходящие запросы на соединение. Как и ранее, допускается инвертирование критерия символом !. Так критерий ! –syn означает – «все пакеты, не являющиеся запросом на соединение», т.е. все пакеты с установленными флагами FIN или ACK.
Критерий –tcp-option
Пример iptables -p tcp –tcp-option 16
Описание Удовлетворяющим условию данного критерия будет будет считаться пакет, TCP параметр которого равен заданному числу. TCP Option — это часть заголовка пакета. Она состоит из 3 различных полей. Первое 8-ми битовое поле содержит информацию об опциях, используемых в данном соединении. Второе 8-ми битовое поле содержит длину поля опций. Если следовать стандартам до конца, то следовало бы реализовать обработку всех возможных вариантов, однако, вместо этого мы можем проверить первое поле и в случае, если там указана неподдерживаемая нашим брандмауэром опция, то просто перешагнуть через третье поле (длина которого содержится во втором поле). Пакет, который не будет иметь полного TCP заголовка, будет сброшен автоматически при попытке изучения его TCP параметра. Как и ранее, допускается использование флага инверсии условия !. Дополнительную информацию по TCP Options вы сможете найти на Internet Engineering Task Force
6.4.2.2. UDP критерии
В данном разделе будут рассматриваться критерии, специфичные только для протокола UDP. Эти расширения подгружаются автоматически при указании типа протокола –protocol udp. Важно отметить, что пакеты UDP не ориентированы на установленное соединение, и поэтому не имеют различных флагов которые дают возможность судить о предназначении датаграмм. Получение UDP пакетов не требует какого либо подтверждения со стороны получателя. Если они потеряны, то они просто потеряны (не вызывая передачу ICMP сообщения об ошибке). Это предполагает наличие значительно меньшего числа дополнительных критериев, в отличие от TCP пакетов. Важно: Хороший брандмауэр должен работать с пакетами любого типа, UDP или ICMP, которые считаются не ориентированными на соединение, так же хорошо как и с TCP пакетами. Об этом мы поговорим позднее, в следующих главах.
UDP критерии
Критерий –sport, –source-port
Пример iptables -A INPUT -p udp –sport 53
Описание Исходный порт, с которого был отправлен пакет. В качестве параметра может указываться номер порта или название сетевой службы. Соответствие имен сервисов и номеров портов вы сможете найти в файле other/services.txt. При указании номеров портов правила отрабатывают несколько быстрее. однако это менее удобно при разборе листингов скриптов. Если же вы собираетесь создавать значительные по объему наборы правил, скажем порядка нескольких сотен и более, то тут предпочтительнее использовать номера портов. Номера портов могут задаваться в виде интервала из минимального и максимального номеров, например -source-port 22:80. Если опускается минимальный порт, т.е. когда критерий записывается как –source-port :80, то в качестве начала диапазона принимается число 0. Если опускается максимальный порт, т.е. когда критерий записывается как –source-port 22: , то в качестве конца диапазона принимается число 65535. Допускается такая запись –source-port 80:22 , в этом случае iptables поменяет числа 22 и 80 местами, т.е. подобного рода запись будет преобразована в –source-port 22:80 . Как и раньше, символ ! используется для инверсии. Так критерий –source-port ! 22 подразумевает любой порт, кроме 22. Инверсия может применяться и к диапазону портов, например –source-port ! 22:80.
Критерий –dport, –destination-port
Пример iptables -A INPUT -p udp –dport 53
Описание Порт, на который адресован пакет. Формат аргументов полностью аналогичен принятому в критерии –source-port.
ICMP критерии
Этот протокол используется, как правило, для передачи сообщений об ошибках и для управления соединением. Он не является подчиненным IP протоколу, но тесно с ним взаимодействует, поскольку помогает обрабатывать ошибочные ситуации. Заголовки ICMP пакетов очень похожи на IP заголовки, но имеют и отличия. Главное свойство этого протокола заключается в типе заголовка, который содержит информацию о том, что это за пакет. Например, когда мы пытаемся соединиться с недоступным хостом, то мы получим в ответ сообщение ICMP host unreachable
. Полный список типов ICMP сообщений, вы можете посмотреть в приложении Типы ICMP. Существует только один специфичный критерий для ICMP пакетов. Это расширение загружается автоматически, когда мы указываем критерий –protocol icmp
. Заметьте, что для проверки ICMP пакетов могут употребляться и общие критерии, поскольку известны и адрес источника и адрес назначения и пр.
Критерий –icmp-type
Пример
iptables -A INPUT -p icmp --icmp-type 8
Описание
Тип сообщения ICMP определяется номером или именем.
Числовые значения определяются в RFC 792. Чтобы получить список имен ICMP значений выполните команду
iptables --protocol icmp --help
или посмотрите приложение Типы ICMP. Как и ранее, символ ! инвертирует критерий, например
iptables/iptables_ru.txt · Последние изменения: 2020-08-25 09:27 — GreyWolf
Что такое iptables и как им пользоваться? | Мейсам Азад | SkillUp Ed
Для начала просто выключите другие утилиты брандмауэра, чтобы осталась только одна эффективная конфигурация, а именно iptables
.
Для этого используйте одно из следующих:
- Если вы работаете на машине с debian, используйте
systemctl disable --now ufw
. - Если у вас компьютер redhad, используйте
systemctl disable --now firewalld
.
После этого вы можете приступить к настройке межсетевого экрана через iptables
.
Остальная часть этой статьи — это таблица того, как выполнять задачу в iptables
. Убедитесь, что вы запускаете их как суперпользователь
.
- Чтобы просмотреть текущую конфигурацию:
iptables -L -n -v --line-numbers
-L
для списка.
-n
для числового вывода (отключение разрешения имен; приводит к повышению производительности).
-v
для подробных сведений (требуется дополнительная информация).
- Чтобы остановить каждый отдельный пакет от входа / выхода из вашей системы.По соображениям безопасности обязательно сделайте это, чтобы никакой другой пакет, который вы явно указали, не передавался.
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
-P
для политики. Существуют разные политики, подобные упомянутым выше.
- Чтобы пакеты внутри интерфейса обратной петли могли перемещаться без проблем.
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
-A
для добавления.Вы также можете вставлять, удалять или обновлять с помощью различных переключателей.
-i
для интерфейса ввода. Интерфейс, на который приходят пакеты.
-o
для выходного интерфейса. Интерфейс, через который проходят пакеты.
-j
для прыжка. Вы можете принять, отклонить, отбросить, зарегистрировать и т. Д. С пакетом.
- Чтобы разрешить пакетам DNS и DHCP входить и выходить из вашего компьютера.
iptables -A INPUT -p udp --dport 67 -j ACCEPT
iptables -A INPUT -p tcp --dport 67 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables - A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 68 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 68 -j ACCEPT
-p
для протокола .Могут использоваться различные протоколы, такие как tcp
, udp
, gre
и так далее. Обычно DNS и DHCP обмениваются данными по протоколу UDP, но для больших пакетов используется TCP, поэтому я также упомянул эти правила.
--dport
для порта назначения. Вы также можете использовать --sport
в качестве исходного порта.
- Чтобы открыть SSH-соединение, когда ваш компьютер является клиентом, вам нужно добавить два правила в обоих направлениях.
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT
-m
— это переключатель для использования расширения iptables.Вы можете узнать больше о различных расширениях, используя man iptables-extension
. Другой пример этих расширений — limit
, который ограничивает количество пакетов для правила.
SSH-соединения не происходят только в одном направлении. Вместо этого вы отправите пакет на порт назначения 22, и пакеты будут приходить на ваш компьютер с состоянием RELATED и ESTABLISHED. Отслеживание подключений распознает это для вас, и вам не нужно беспокоиться об этом.
- Чтобы разрешить SSH-соединение, когда ваш компьютер является сервером.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT
Это направление, противоположное предыдущему правилу, которое открывает пакеты для 22, и отправить пакеты успеха, имеющие состояние RELATED и ESTABLISHED, обратно клиенту.
- Если вы хотите иметь возможность проверять связь с другими компьютерами и разрешать другим компьютерам проверять связь с вашим, вы должны разрешить
пакетов icmp
.
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
- Если вы хотите иметь возможность просматривать веб-страницы, это то, что вы должны сделать.
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
Это откроет трафик HTTP и HTTPS для выхода из вашей системы.
- Вы определенно захотите регистрировать остальные пакеты, которые не принимаются, чтобы иметь представление о том, что происходит.Это также поможет вам, если вы захотите открыть порт в будущем.
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A OUTPUT -j LOGGING
iptables -A FORWARD -j LOGGING
iptables -A LOGGING -j LOG - error-level error --log-prefix "iptables-drop:"
iptables -A LOGGING -j DROP
Первая строка создает новую цепочку. И в следующих 3 строках мы перенаправим каждый пакет во вновь созданную цепочку.
Не нужно гения, чтобы понять, что последние 2 строки будут записывать пакет, а потом он его отбрасывает.
--log-prefix
— это аргумент цели LOG
, о которой вы можете узнать больше в man iptables-extension
.
--log-level
также является аргументом цели LOG
, которая указывает, насколько подробным мы хотим получить журнал. error
— это довольно хороший уровень журнала, поскольку нас интересуют только запрещенные пакеты.
Разница между DROP и REJECT заключается в том, что DROP не уведомляет отправителя об отброшенном пакете, а REJECT явно уведомляет отправителя.
Когда вы отправляете пакет на цель REJECT
, отправитель получит сброс соединения от узла
.
- Если вы хотите применить NAT к своим iptables, в зависимости от того, хотите ли вы применить его к входящим или исходящим соединениям, или статический или динамический IP-адрес вашего компьютера, вы можете использовать следующие правила.
iptables -t nat -A OUTPUT -p tcp --dport 22 --destination 192.168.40.40 -j DNAT --to-destination 123.123.123.123: 4040
После указанной выше команды каждый исходящий трафик с вашего компьютера, направляемый на IP-адрес 192.168.40.40 порт 22, будет отправлен на IP-адрес 123.123.123.123 порт 4040. Это делает возможным использование NAT в сети назначения. быть доступным извне этой сети.
NAT или преобразование сетевых адресов — это наличие частного IP-адреса внутри сети, который не может быть доступен извне, если только конфигурация не задействована внутри маршрутизатора. Вы можете прочитать больше об этом здесь.
- флаг назначения
будет фильтровать пакеты на основе IP-адреса назначения. Что, конечно, очевидно, но стоит упомянуть.
Чтобы убрать фильтр, используйте восклицательный знак.
Вы всегда можете отменить правило, поставив перед ним !
. Например ! --source 192.168.40.40
вступит в силу для любого адреса источника, кроме 192.168.40.40.
iptables -t nat -A POSTROUTING -p tcp --dport 80 -j SNAT --to-source 10.0.0.56: 8000-8010
После применения вышеупомянутого правила каждый пакет для любого IP-адреса назначения и с портом 80 изменит адрес источника на 10.0.0.56:8000–8010, который представляет собой диапазон портов, указанный тире. . Это делает возможным доступ к NAT внутри текущей сети вашего компьютера из внешнего мира (Интернета). Возможно, IP-адрес вашего маршрутизатора (точки доступа) — 10.0.0.56, и вы хотите, чтобы пакеты благополучно доставлялись обратно в их источник.
iptables -A FORWARD -i wlan0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Кредит на этот ответ.Именно здесь MASQUERADE
лучше всего подходит, когда вам нужно перенаправить каждый трафик с определенного интерфейса для маршрутизации через ваш компьютер без изменения чего-либо внутри пакета . Конечно, вам потребуется установить следующий параметр ядра, прежде чем делать это:
sysctl net.ipv4.ip_forward = 1
Чтобы ваш компьютер мог маршрутизировать пакеты. Вышеупомянутая команда является только конфигурацией времени выполнения, и если вам нужна постоянство при перезагрузках, вы должны сделать следующее.
echo net.ipv4.ip_forward = 1> /etc/sysctl.d/30-ip-forward. conf
На этом наше приключение по джунглям iptables
завершается. Это инструмент с огромным количеством функций, и я бы сказал, что даже не коснулся поверхности. Но приведенные выше команды являются наиболее часто используемыми, и вы будете время от времени использовать одну или другую.
Внимательно прочтите руководство, так как оно содержит полезные сведения:
man iptables
man iptables-extension
В этой статье я попытался прояснить все аспекты iptables
, инструмента для управления межсетевым экраном в Linux.Большинство других инструментов, таких как firewalld
и ufw
, были бы достаточно простыми, чтобы справиться с повседневными задачами, но за простоту приходится платить. У вас не будет большой гибкости в обработке правил, которые вы считаете подходящими. Data
Я также показал вам несколько примеров того, как вы можете управлять этим, наряду с четким объяснением каждой команды. Я вам советую освоить этот инструмент, так как он очень пригодится.
И в заключение:
# 1) Уважайте частную жизнь других людей.
# 2) Подумайте, прежде чем печатать.
# 3) С большой силой приходит большая ответственность.
Надеюсь, вам понравилась эта статья и вы кое-чему из нее научились.
Если вам понравился вышеуказанный контент, подпишитесь на меня, так как я планирую писать регулярно, и мне это нравится.
Возможно, вам понравится и другое мое содержимое. Так что не стесняйтесь смотреть.
Брандмауэры Linux: что вам нужно знать об iptables и firewalld
Эта статья является выдержкой из моей книги «Linux в действии» и второго проекта Мэннинга, который еще не выпущен.
Межсетевой экран
Межсетевой экран — это набор правил. Когда пакет данных перемещается в защищенное сетевое пространство или из него, его содержимое (в частности, информация о его происхождении, цели и протоколе, который он планирует использовать) проверяется на соответствие правилам брандмауэра, чтобы определить, следует ли его пропускать. Вот простой пример:
С одной стороны, iptables — это инструмент для управления правилами брандмауэра на Linux-машине.
С другой стороны, firewalld также является инструментом для управления правилами брандмауэра на машине Linux.
У вас с этим проблемы? И испортил бы вам день, если бы я сказал вам, что есть еще один инструмент, называемый nftables?
Хорошо, я признаю, что все это действительно немного забавно пахнет, поэтому позвольте мне объяснить. Все начинается с Netfilter, который контролирует доступ к сетевому стеку и из него на уровне модуля ядра Linux. На протяжении десятилетий основным инструментом командной строки для управления перехватчиками Netfilter был набор правил iptables.
Поскольку синтаксис, необходимый для вызова этих правил, может показаться немного запутанным, различные удобные для пользователя реализации, такие как ufw и firewalld, были представлены как интерпретаторы Netfilter более высокого уровня.Однако Ufw и firewalld в первую очередь предназначены для решения проблем, с которыми сталкиваются автономные компьютеры. Построение полноразмерных сетевых решений часто требует дополнительных мощностей iptables или, с 2014 года, его замены nftables (через инструмент командной строки nft).
iptables никуда не делся и до сих пор широко используется. Фактически, вы должны ожидать столкнуться с сетями, защищенными iptables, в своей работе в качестве администратора в течение многих лет. Но nftables, добавив к классическому набору инструментов Netfilter, внесла некоторые важные новые функции.
Далее я покажу на примере, как firewalld и iptables решают простые проблемы с подключением.
Настройте доступ по протоколу HTTP с помощью firewalld
Как вы могли догадаться по названию, firewalld является частью семейства systemd. Firewalld можно установить на машинах Debian / Ubuntu, но по умолчанию он установлен в Red Hat и CentOS. Если на вашем компьютере запущен веб-сервер, например Apache, вы можете убедиться, что брандмауэр работает, перейдя в корневой каталог вашего сервера.Если сайт недоступен, значит firewalld делает свое дело.
Вы будете использовать инструмент firewall-cmd
для управления настройками firewalld из командной строки. Добавление аргумента –state
возвращает текущий статус брандмауэра:
# firewall-cmd --state
работает
По умолчанию firewalld будет активен и будет отклонять весь входящий трафик с парой исключений, например SSH. Это означает, что ваш веб-сайт не будет привлекать слишком много посетителей, что, безусловно, сэкономит вам много средств на передачу данных.Поскольку, вероятно, вы не имели в виду свой веб-сервер, вам нужно открыть порты HTTP и HTTPS, которые условно обозначены как 80 и 443 соответственно. Firewalld предлагает два способа сделать это. Один из них — через аргумент –add-port
, который напрямую ссылается на номер порта вместе с сетевым протоколом, который он будет использовать (в данном случае TCP). Аргумент –permanent
указывает firewalld загружать это правило при каждой загрузке сервера:
# firewall-cmd --permanent --add-port = 80 / tcp
# firewall-cmd --permanent --add-port = 443 / tcp
Аргумент –reload
применит эти правила к текущему сеансу:
# firewall-cmd --reload
Хотите узнать текущие настройки вашего брандмауэра? Запускаем –list-services
:
# firewall-cmd --list-services
dhcpv6-client http https ssh
Предполагая, что вы добавили доступ к браузеру, как описано ранее, теперь все порты HTTP, HTTPS и SSH должны быть открыты, а также dhcpv6-client
, который позволяет Linux запрашивать IP-адрес IPv6 с локального DHCP-сервера.
Настройте заблокированный клиентский киоск с помощью iptables
Я уверен, что вы видели киоски — это планшеты, сенсорные экраны и компьютеры, похожие на банкоматы, в коробке, которую аэропорты, библиотеки и предприятия оставляют лежать без дела, приглашая клиентов и прохожих просматривать контент. Суть большинства киосков заключается в том, что вы обычно не хотите, чтобы пользователи чувствовали себя как дома и относились к ним как к своим собственным устройствам. Как правило, они не предназначены для просмотра, просмотра видео на YouTube или проведения атак типа «отказ в обслуживании» против Пентагона.Поэтому, чтобы убедиться, что ими не злоупотребляют, вам нужно заблокировать их.
Один из способов — применить какой-то режим киоска, будь то умное использование диспетчера дисплея Linux или на уровне браузера. Но чтобы убедиться, что все дыры закрыты, вы, вероятно, также захотите добавить некоторые жесткие сетевые элементы управления через брандмауэр. В следующем разделе я опишу, как это сделать с помощью iptables.
При использовании iptables следует помнить две важные вещи: порядок, в котором вы указываете свои правила, имеет решающее значение, и сами по себе правила iptables не выдерживают перезагрузки.Я обращаюсь к этим здесь по очереди.
Киоск проект
Чтобы проиллюстрировать все это, представим, что мы работаем в магазине, который является частью более крупной сети под названием BigMart. Они существуют уже несколько десятилетий; на самом деле наши воображаемые бабушка и дедушка, вероятно, выросли, делая покупки там. Но в наши дни ребята из корпоративной штаб-квартиры BigMart, вероятно, просто считают часы, прежде чем Amazon окончательно их загонит.
Тем не менее, ИТ-отдел BigMart делает все возможное, и они только что прислали вам несколько киоск-устройств с поддержкой Wi-Fi, которые вы должны установить в стратегически важных местах по всему магазину.Идея состоит в том, что они будут отображать веб-браузер, зарегистрированный на страницах продуктов BigMart. com, что позволит им просматривать характеристики товаров, расположение проходов и уровни запасов. Киоскам также потребуется доступ к bigmart-data.com, где хранятся многие изображения и видео.
Кроме того, вы захотите разрешить обновления и, при необходимости, загрузку пакетов. Наконец, вы захотите разрешить входящий доступ по SSH только с вашей локальной рабочей станции и заблокировать всех остальных. На рисунке ниже показано, как все это будет работать:
Скрипт
Вот как все это впишется в сценарий Bash:
#! / Bin / bash
iptables -A ВЫХОД -p tcp -d bigmart.com -j ACCEPT
iptables -A OUTPUT -p tcp -d bigmart-data.com -j ACCEPT
iptables -A OUTPUT -p tcp -d ubuntu.com -j ACCEPT
iptables -A OUTPUT -p tcp -d ca. archive.ubuntu.com -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j DROP
iptables -A OUTPUT -p tcp --dport 443 -j DROP
iptables -A INPUT -p tcp -s 10.0. 3.1 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 0. 0.0.0/0 --dport 22 -j DROP
Основная анатомия наших правил начинается с -A
, сообщая iptables, что мы хотим добавить следующее правило. OUTPUT
означает, что это правило должно стать частью цепочки OUTPUT. -p
указывает, что это правило будет применяться только к пакетам, использующим протокол TCP, где, как сообщает нам -d
, адресатом является bigmart.com. Флаг -j
указывает на ACCEPT
как действие, которое нужно предпринять, когда пакет соответствует правилу. В этом первом правиле это действие — разрешить или принять запрос. Но ниже вы можете увидеть запросы, которые будут отброшены или отклонены.
Помните, что порядок имеет значение.И это потому, что iptables будет выполнять запрос после каждого из своих правил, но только до тех пор, пока не будет найдено соответствие. Таким образом, исходящий запрос браузера, скажем, для youtube.com будет передавать первые четыре правила, но когда он попадает в правило –dport 80
или –dport 443
— в зависимости от того, запрос HTTP или HTTPS — он сброшу. iptables больше не будет проверять, потому что это совпадение.
С другой стороны, системный запрос к ubuntu.com на обновление программного обеспечения будет выполнен, когда он достигнет соответствующего правила.Очевидно, что мы здесь разрешаем исходящие запросы HTTP или HTTPS только для наших пунктов назначения BigMart или Ubuntu и никакие другие.
Последние два правила будут иметь дело с входящими запросами SSH. Они уже не были отклонены двумя предыдущими правилами отбрасывания, поскольку они не используют порты 80 или 443, а 22. В этом случае запросы на вход с моей рабочей станции будут приняты, но запросы для других мест будут отброшены. Это важно: убедитесь, что IP-адрес, который вы используете для своего правила для порта 22, совпадает с адресом компьютера, который вы используете для входа в систему — если вы этого не сделаете, вы будете немедленно заблокированы.Конечно, в этом нет ничего страшного, потому что при текущей настройке вы можете просто перезагрузить сервер, и все правила iptables будут отброшены. Если вы используете контейнер LXC в качестве сервера и входите в систему с хоста LXC, то используйте IP-адрес, который ваш хост использует для подключения к контейнеру, а не его общедоступный адрес.
Вам нужно будет не забыть обновить это правило, если IP-адрес моей машины когда-либо изменится; в противном случае вы будете заблокированы.
Играть дома (надеюсь, на какой-нибудь одноразовой виртуальной машине)? Отлично.Создайте свой собственный сценарий. Теперь я могу сохранить сценарий, использовать chmod
, чтобы сделать его исполняемым, и запустить его как sudo
. Не беспокойтесь о том, что bigmart-data.com не обнаружил ошибку
— конечно, она не найдена; его не существует.
chmod + X имя_сценария.sh
sudo ./scriptname.sh
Вы можете протестировать брандмауэр из командной строки, используя cURL
. Запрос ubuntu.com работает, но manning.com не работает.
curl убунту. com
curl manning.com
Настройка iptables для загрузки при загрузке системы
Теперь, как мне заставить эти правила автоматически загружаться при каждой загрузке киоска? Первый шаг — сохранить текущие правила в файл .rules с помощью инструмента iptables-save
. В корневом каталоге будет создан файл со списком правил. Канал, за которым следует команда tee, необходим для применения моих прав доступа sudo
ко второй части строки: фактическому сохранению файла в корневой каталог с ограничениями.
Затем я могу сказать системе запускать соответствующий инструмент под названием iptables-restore
при каждой загрузке. Обычное задание cron, подобное тому, которое мы видели в предыдущем модуле, не поможет, потому что оно выполняется в установленное время, но мы не знаем, когда наш компьютер может решить аварийно завершить работу и перезагрузиться.
Есть много способов решить эту проблему. Вот один:
На моем компьютере с Linux я установлю программу под названием anacron, которая предоставит нам файл под названием anacrontab в каталоге / etc /. Я отредактирую файл и добавлю эту команду iptables-restore
, сообщив ей загружать текущие значения этого файла .rules в iptables каждый день (при необходимости) через одну минуту после загрузки. Я дам заданию идентификатор ( iptables-restore
), а затем добавлю саму команду. Поскольку вы подыгрываете мне дома, вам следует все это проверить, перезагрузив систему.
sudo iptables-save | sudo tee /root/my.active.firewall.rules
sudo apt install anacron
sudo nano / etc / anacrontab
1 1 iptables-restore iptables-restore root / my.active.firewall.rules
Я надеюсь, что эти практические примеры показали, как использовать iptables и firewalld для управления проблемами подключения в межсетевых экранах на базе Linux.
Iptables Tutorial — Руководство для начинающих по Linux Firewall
VPS
access_time
16 июня 2020 г.
hourglass_empty
6min Прочтите
person_outline
Prithviraj S.
Вы ищете полный? Оставайся на месте.В этой статье мы покажем вам, как установить и использовать iptables в системе Ubuntu. Узнав об этом инструменте брандмауэра Linux, вы сможете защитить свой Linux VPS с помощью интерфейса командной строки.
Обновите свой Linux VPS-хостинг с Hostinger сегодня! Скидки до 77%!
Получите скидку здесь
Что такое Iptables и как он работает?
Проще говоря, iptables — это брандмауэр для Linux. Он будет отслеживать трафик с вашего сервера и на ваш сервер, используя таблиц .Эти таблицы содержат наборов правил , называемых цепочками , которые будут фильтровать входящие и исходящие пакеты данных.
Когда пакет соответствует правилу , ему дается цель , которая может быть другой цепочкой или одним из этих специальных значений:
- ACCEPT — позволит пакету пройти.
- DROP — не пропускает пакет.
- RETURN — останавливает прохождение пакета через цепочку и сообщает ему вернуться к предыдущей цепочке.
В этом руководстве по iptables мы собираемся работать с одной из таблиц по умолчанию, которая называется filter . Он состоит из трех цепочек:
- INPUT — контролирует входящие пакеты на сервер.
- FORWARD — фильтрует входящие пакеты, которые будут перенаправлены в другое место.
- OUTPUT — фильтровать пакеты, исходящие с вашего сервера.
Прежде чем мы начнем это руководство, убедитесь, что у вас есть SSH root или sudo доступ к вашей машине, которая работает на Ubuntu 16.04 или выше. Вы можете установить соединение через PuTTY (Windows) или терминальную оболочку (Linux, macOS). Если у вас есть Hostinger VPS, вы можете получить данные для входа по SSH на вкладке «Серверы» в hPanel.
правила iptables применяются только к ipv4 . Если вы хотите настроить брандмауэр для протокола ipv6 , вам потребуется вместо этого использовать ip6tables .
Как установить и использовать Iptables Linux Firewall
Мы разделим это руководство по iptables на три этапа.Во-первых, вы узнаете, как установить инструмент в Ubuntu. Во-вторых, мы собираемся показать вам, как определять правила. Наконец, мы поможем вам внести постоянные изменения в iptables.
Шаг 1. Установка Iptables
Iptables предустановлен в большинстве дистрибутивов Linux. Однако, если у вас его нет в системе Ubuntu / Debian по умолчанию, выполните следующие действия:
- Подключитесь к серверу через SSH. Если вы не знаете, вы можете прочитать наше руководство по SSH.
- Выполните одну за другой следующую команду:
sudo apt-get update sudo apt-get install iptables
- Проверьте статус вашей текущей конфигурации iptables, запустив:
sudo iptables -L -v
Здесь параметр -L используется для перечисления всех правил, а -v предназначен для отображения информации в более подробном формате. Ниже приведен пример вывода:
Цепочка INPUT (политика ПРИНЯТЬ 0 пакетов, 0 байтов) pkts bytes target prot opt in source назначение Цепочка FORWARD (политика ACCEPT 0 пакетов, 0 байтов) pkts bytes target prot opt in source назначение ЦЕПНЫЙ ВЫХОД (политика ПРИНЯТЬ 0 пакетов, 0 байтов) pkts bytes target prot opt in source destination
Теперь у вас установлен брандмауэр Linux. На этом этапе вы можете заметить, что для всех цепочек установлено значение ACCEPT и нет правил.Это небезопасно, поскольку любой пакет может пройти без фильтрации.
Не волнуйтесь. Мы расскажем вам, как определять правила, на следующем этапе нашего руководства по iptables.
Шаг 2 — Определение правил цепочки
Определение правила означает добавление его в цепочку. Для этого вам нужно вставить опцию -A ( Append ) сразу после команды iptables, например:
sudo iptables -A
Он предупредит iptables о том, что вы добавляете новые правила в цепочку. Затем вы можете комбинировать команду с другими параметрами, такими как:
- -i ( интерфейс ) — сетевой интерфейс, трафик которого вы хотите фильтровать, например eth0, lo, ppp0 и т. Д.
- -p ( протокол ) — сетевой протокол, в котором происходит ваш процесс фильтрации. Это может быть tcp , udp , udplite , icmp , sctp , icmpv6 и т. Д. Или вы можете ввести все , чтобы выбрать каждый протокол.
- -s ( источник ) — адрес, с которого идет трафик. Вы можете добавить имя хоста или IP-адрес.
- –dport ( порт назначения ) — номер порта назначения протокола, например 22 ( SSH ), 443 ( https ) и т. Д.
- -j ( target ) — имя цели ( ACCEPT , DROP , RETURN ). Вам нужно вставлять это каждый раз, когда вы создаете новое правило.
Если вы хотите использовать их все, вы должны написать команду в следующем порядке:
sudo iptables -A-i -p -s
Как только вы поймете основной синтаксис, вы можете приступить к настройке брандмауэра, чтобы обеспечить большую безопасность вашего сервера. В этом руководстве по iptables мы будем использовать в качестве примера цепочку INPUT .
Включение трафика на локальном хосте
Чтобы разрешить трафик на локальном хосте, введите следующую команду:
sudo iptables -A INPUT -i lo -j ACCEPT
В этом руководстве iptables мы используем интерфейс lo или loopback .Он используется для всех коммуникаций на локальном хосте. Приведенная выше команда гарантирует, что соединения между базой данных и веб-приложением на одном компьютере работают правильно.
Включение подключений через порт HTTP, SSH и SSL
Далее нам нужны http (порт 80 ), https (порт 443 ) и ssh (порт 22 ) подключения к работать как обычно. Для этого нам нужно указать протокол ( -p ) и соответствующий порт ( –dport ).Вы можете выполнять эти команды одну за другой:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT sudo iptables -A ВХОД -p tcp --dport 80 -j ПРИНЯТЬ sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Пора проверить, добавлены ли правила в iptables:
sudo iptables -L -v
Он должен вернуться с результатами ниже, что означает все Будут приняты соединения по протоколу TCP от указанных портов:
Фильтрация пакетов на основе источника
Iptables позволяет фильтровать пакеты на основе IP-адреса или диапазона IP-адресов.Его нужно указать после опции -s . Например, чтобы принимать пакеты от 192.168.1.3 , команда будет выглядеть так:
sudo iptables -A INPUT -s 192.168.1.3 -j ACCEPT
Вы также можете отклонять пакеты с определенного IP-адреса, заменив ACCEPT цель с DROP .
sudo iptables -A INPUT -s 192.168.1.3 -j DROP
Если вы хотите отбрасывать пакеты с диапазона IP-адресов, вы должны использовать параметр -m и модуль iprange .Затем укажите диапазон IP-адресов с –src-range . Помните, что дефис должен разделять диапазон IP-адресов без пробела, например:
sudo iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP
Удаление всего прочего трафика
Очень важно использовать цель DROP для всего остального трафика после определения правил –dport . Это предотвратит несанкционированный доступ к серверу через другие открытые порты. Для этого просто введите:
sudo iptables -A INPUT -j DROP
Теперь соединение за пределами указанного порта будет прервано.
Удаление правил
Если вы хотите удалить все правила и начать с чистого листа, вы можете использовать параметр -F ( flush ):
sudo iptables -F
Эта команда удаляет все текущие правила. Однако, чтобы удалить определенное правило, вы должны использовать параметр -D. Во-первых, вам нужно увидеть все доступные правила, введя следующую команду:
sudo iptables -L --line-numbers
Вы получите список правил с номерами:
Chain INPUT (policy ACCEPT) num target prot opt источник назначения 1 ПРИНЯТЬ все - 192.168.0.4 где угодно 2 ПРИНЯТЬ tcp - где угодно tcp dpt: https 3 ПРИНЯТЬ tcp - в любом месте tcp dpt: http 4 ПРИНЯТЬ tcp - в любом месте tcp dpt: ssh
Чтобы удалить правило, вставьте соответствующую цепочку и номер из списка. Допустим, в этом руководстве по iptables мы хотим избавиться от правила номер три цепочки INPUT . Команда должна быть такой:
sudo iptables -D INPUT 3
Шаг 3 — Сохранение изменений
Созданные нами правила iptables сохраняются в памяти.Это означает, что мы должны переопределить их при перезагрузке. Чтобы сделать эти изменения постоянными после перезапуска сервера, вы можете использовать эту команду:
sudo / sbin / iptables-save
Она сохранит текущие правила в файле конфигурации системы, который будет использоваться для перенастройки таблиц каждый раз, когда сервер перезагружается.
Обратите внимание, что вы всегда должны запускать эту команду каждый раз, когда вносите изменения в правила. Например, если вы хотите отключить iptables, вам нужно выполнить эти две строки:
sudo iptables -F sudo / sbin / iptables-save
Вы увидите следующие результаты:
Заключение
Iptables — это мощный брандмауэр, который вы можете использовать для защиты вашего Linux-сервера или VPS.Что замечательно, так это то, что вы можете определять различные правила в зависимости от ваших предпочтений.
В этом руководстве по iptables вы узнали, как установить и использовать инструмент. Теперь мы надеемся, что вы сможете управлять своими наборами правил для фильтрации входящих и исходящих пакетов.
Пора проверить на себе и удачи!
Основное руководство по IPTables (брандмауэр Linux) Советы / команды
Из этого руководства вы узнаете, как брандмауэр работает в системе Linux Operating и что такое IPTables в Linux? Сетевой экран решает судьбу входящих и исходящих пакетов в системе.IPTables — это брандмауэр на основе правил, который предустановлен в большинстве операционных систем Linux. По умолчанию он работает без каких-либо правил. IPTables был включен в Kernel 2.4 , ранее он назывался ipchains или ipfwadm . IPTables — это интерфейсный инструмент для взаимодействия с ядром и принятия решения о фильтрации пакетов. Это руководство может помочь вам получить общее представление и основные команды IPTables, где мы собираемся описать практические правила iptables, на которые вы можете ссылаться и настраивать в соответствии с вашими потребностями.
Различные службы используются для разных протоколов, например:
- iptables относится к IPv4 .
- ip6tables относится к IPv6 .
- arptables относится к ARP .
- ebtables относится к Ethernet фреймов ..
Основные файлы IPTables:
- /etc/init.d/iptables — сценарий инициализации для запуска | остановки | перезапуска и сохранения наборов правил.
- / etc / sysconfig / iptables — где сохраняются наборы правил.
- / sbin / iptables — двоичный.
В настоящее время существует три таблицы.
В настоящее время всего четыре сети:
- INPUT : цепочка по умолчанию, исходящая из системы.
- ВЫХОД : Цепочка по умолчанию, генерируемая системой.
- FORWARD : пакеты цепочки по умолчанию отправляются через другой интерфейс.
- RH-Firewall-1-INPUT : определяемая пользователем настраиваемая цепочка.
Примечание: Вышеуказанные основные файлы могут немного отличаться в Ubuntu Linux .
Как запустить, остановить и перезапустить Iptabe Firewall.
# /etc/init.d/iptables start # /etc/init.d/iptables stop # /etc/init.d/iptables restart
Чтобы запустить IPTables при загрузке системы, используйте следующую команду.
#chkconfig --level 345 iptables на
Сохранение наборов правил IPTables с помощью приведенной ниже команды. Всякий раз, когда система перезагружала и перезапускала службу IPTables, существующие правила сбрасывались или сбрасывались. Команда ниже сохраняет наборы правил TPTables в файле / etc / sysconfig / iptables по умолчанию, и правила применяются или восстанавливаются в случае сброса IPTables.
#service iptables save
Проверка статуса IPTables / Firewall. Опции « -L » (список правил), « -v » (подробный) и « -n » (отображение в числовом формате).
[[электронная почта защищена] ~] # iptables -L -n -v Цепочка INPUT (политика ACCEPT 0 пакетов, 0 байтов) pkts bytes target prot opt in source назначение 6396 ПРИНЯТЬ все - * * 0.0.0.0/0 0.0.0.0/0 состояние СВЯЗАННО, УСТАНОВЛЕНО 0 0 ПРИНЯТЬ icmp - * * 0.0,0.0 / 0 0,0.0.0/0 0 0 ПРИНЯТЬ все - lo * 0.0.0.0/0 0.0.0.0/0 0 0 ПРИНЯТЬ tcp - * * 0.0.0.0/0 0.0.0.0/0 состояние NEW tcp dpt: 22 0 0 REJECT all - * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host -hibited Цепочка FORWARD (политика ACCEPT 0 пакетов, 0 байтов) pkts bytes target prot opt in source назначение 0 0 ОТКАЗАТЬ все - * * 0.0.0.0 / 0 0.0.0.0/0 отклонить-с icmp-host -hibited ЦЕПНЫЙ ВЫХОД (политика ПРИНЯТЬ 5 пакетов, 588 байт) pkts bytes target prot opt in source назначение
Отображение правил IPTables с числами. С помощью аргумента « — номера строк » вы можете добавлять или удалять правила.
[[электронная почта защищена] ~] # iptables -n -L -v --line-numbers Цепочка INPUT (политика ACCEPT 0 пакетов, 0 байтов) num pkts bytes target prot opt in source назначение 1 51 4080 ПРИНЯТЬ все - * * 0.0.0.0 / 0 0.0.0.0/0 состояние СВЯЗАННО, УСТАНОВЛЕНО 2 0 0 ПРИНЯТЬ icmp - * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ПРИНЯТЬ все - lo * 0.0.0.0/0 0.0.0.0/0 4 0 0 ПРИНЯТЬ tcp - * * 0.0.0.0/0 0.0.0.0/0 состояние NEW tcp dpt: 22 5 0 0 REJECT all - * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host -hibited Цепочка FORWARD (политика ACCEPT 0 пакетов, 0 байтов) num pkts bytes target prot opt in source назначение 1 0 0 ОТКАЗАТЬ все - * * 0.0.0.0 / 0 0.0.0.0/0 отклонить-с icmp-host -hibited Цепочка ВЫХОДА (политика ПРИНЯТЬ 45 пакетов, 5384 байта) num pkts bytes target prot opt in out source назначение
Очистка или удаление правил IPTables. Команда ниже удалит все правила из таблиц. Перед выполнением вышеуказанной команды сделайте резервную копию набора правил.
[[адрес электронной почты защищен] ~] # iptables -F
Удаляя или добавляя правила, давайте сначала посмотрим на правила в цепочках. Ниже команды должны отображать наборы правил в цепочках INPUT и OUTPUT с номерами правил, которые помогут нам добавлять или удалять правила
.
[[электронная почта защищена] ~] # iptables -L INPUT -n --line-numbers Цепочка INPUT (политика ACCEPT) num target prot opt источник назначения 1 ПРИНЯТЬ все - 0.0.0.0/0 0.0.0.0/0 состояние СВЯЗАННО, УСТАНОВЛЕНО 2 ПРИНЯТЬ icmp - 0.0.0.0/0 0.0.0.0/0 3 ПРИНЯТЬ все - 0.0,0.0 / 0 0,0.0.0/0 4 ПРИНЯТЬ tcp - 0.0.0.0/0 0.0.0.0/0 состояние NEW tcp dpt: 22 5 REJECT all - 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host -hibited
[[электронная почта защищена] ~] # iptables -L ВЫХОД -n --line-numbers Цепочка ВЫВОДА (политика ПРИНЯТЬ) num target prot opt source destination
Допустим, вы хотите удалить правило № 5 из цепочки INPUT . Используйте следующую команду.
[[адрес электронной почты защищен] ~] # iptables -D INPUT 5
Для вставки или добавления правила в цепочку INPUT между набором правил 4 и 5 .
[[электронная почта защищена] ~] # iptables -I INPUT 5 -s ipaddress -j DROP
Мы только что попытались охватить основные способы использования и функции IPTables для начинающих. Вы можете создавать сложные правила, если полностью понимаете TCP / IP и хорошо разбираетесь в своей настройке.
Если вы цените то, что мы делаем здесь, на TecMint, вам следует принять во внимание:
TecMint — это самый быстрорастущий и пользующийся наибольшим доверием сайт сообщества, где можно найти любые статьи, руководства и книги по Linux в Интернете.Миллионы людей посещают TecMint! для поиска или просмотра тысяч опубликованных статей доступны БЕСПЛАТНО для всех.
Если вам нравится то, что вы читаете, пожалуйста, купите нам кофе (или 2) в знак признательности.
Мы благодарны за вашу бесконечную поддержку.
25 полезных правил брандмауэра IPtable, которые должен знать каждый администратор Linux
Управление сетевым трафиком — одна из самых сложных задач, с которыми приходится сталкиваться системным администраторам. Он должен настроить брандмауэр таким образом, чтобы он отвечал требованиям системы и пользователей как для входящих, так и для исходящих соединений, не оставляя систему уязвимой для атак.
25 правил брандмауэра IPtables для Linux
Вот где пригодится iptables
. Iptables — это брандмауэр командной строки Linux, который позволяет системным администраторам управлять входящим и исходящим трафиком с помощью набора настраиваемых табличных правил.
Iptables использует набор таблиц, цепочки которых содержат набор встроенных или определенных пользователем правил.Благодаря им системный администратор может правильно фильтровать сетевой трафик своей системы.
В руководстве по iptables в настоящее время существует 3 типа таблиц:
-
ФИЛЬТР
— это таблица по умолчанию, которая содержит встроенные цепочки для:- INPUT — пакеты, предназначенные для локальных розеток
- FORWARD — пакеты маршрутизируются через систему
- OUTPUT — пакеты генерируются локально
-
NAT
— таблица, к которой обращаются, когда пакет пытается создать новое соединение. Он имеет следующие встроенные функции:- PREROUTING — используется для изменения пакета сразу после его получения
- ВЫХОД — используется для изменения локально сгенерированных пакетов
- POSTROUTING — используется для изменения пакетов, когда они собираются выйти
-
MANGLE
— эта таблица используется для изменения пакетов. До версии ядра 2.4 в этой таблице было только две цепочки, а теперь их 5:- PREROUTING — для изменения входящих соединений
- ВЫХОД — для изменения локально сгенерированных пакетов
- INPUT — для входящих пакетов
- POSTROUTING — для изменения пакетов при их выходе
- FORWARD — для пакетов, проходящих через ящик
В этой статье вы увидите несколько полезных команд, которые помогут вам управлять брандмауэром Linux Box через iptables. В этой статье я начну с более простых команд и перейду к более сложным до конца.
1. Запуск / остановка / перезапуск брандмауэра Iptables
Во-первых, вы должны знать, как управлять сервисом iptables в разных дистрибутивах Linux. Это довольно просто:
В дистрибутивах Linux на основе SystemD
------------ В Cent / RHEL 7 и Fedora 22+ ------------ # systemctl start iptables # systemctl stop iptables # systemctl перезапуск iptables
В дистрибутивах Linux на основе SysVinit
------------ В Cent / RHEL 6/5 и Fedora ------------ # / etc / init.d / iptables start # /etc/init.d/iptables stop # /etc/init.d/iptables перезапуск
2. Проверьте все правила брандмауэра IPtables.
Если вы хотите проверить существующие правила, используйте следующую команду:
# iptables -L -n -v
Это должно вернуть результат, аналогичный приведенному ниже:
Цепочка INPUT (политика ПРИНЯТЬ 1129K пакетов, 415M байтов) pkts bytes target prot opt in source назначение 0 0 ПРИНЯТЬ tcp - lxcbr0 * 0. 0.0.0/0 0.0.0.0 / 0 tcp dpt: 53 0 0 ПРИНЯТЬ udp - lxcbr0 * 0.0.0.0/0 0.0.0.0/0 UDP dpt: 53 0 0 ПРИНЯТЬ tcp - lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt: 67 0 0 ПРИНЯТЬ udp - lxcbr0 * 0.0.0.0/0 0.0.0.0/0 UDP dpt: 67
Цепочка FORWARD (политика ПРИНЯТЬ 0 пакетов, 0 байтов) pkts bytes target prot opt in source назначение 0 0 ПРИНЯТЬ все - * lxcbr0 0.0.0.0/0 0.0.0.0/0 0 0 ПРИНЯТЬ все - lxcbr0 * 0.0.0.0/0 0.0.0.0/0
ЦЕПНЫЙ ВЫХОД (политика ПРИНИМАЕТ пакеты 354 КБ, 185 МБ) pkts bytes target prot opt in source назначение
Если вы предпочитаете проверять правила для определенной таблицы, вы можете использовать опцию -t
, за которой следует таблица, которую вы хотите проверить.Например, чтобы проверить правила в таблице NAT
, вы можете использовать:
# iptables -t нат -L -v -n
3. Заблокировать определенный IP-адрес в брандмауэре IPtables
Если вы обнаружите необычную или оскорбительную активность с IP-адреса, вы можете заблокировать этот IP-адрес с помощью следующего правила:
# iptables -A INPUT -s xxx. xxx.xxx.xxx -j DROP
Где нужно заменить "xxx.xxx.xxx.xxx"
на фактический IP-адрес. Будьте очень осторожны при запуске этой команды, так как вы можете случайно заблокировать свой IP-адрес.Параметр -A
добавляет правило в конец выбранной цепочки.
Если вы хотите заблокировать трафик TCP только с этого IP-адреса, вы можете использовать опцию -p
, которая указывает протокол. Тогда команда будет выглядеть так:
# iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP
4. Разблокировать IP-адрес в брандмауэре IPtables
Если вы решили, что больше не хотите блокировать запросы с определенного IP-адреса, вы можете удалить правило блокировки с помощью следующей команды:
# iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP
Параметр -D
удаляет одно или несколько правил из выбранной цепочки. Если вы предпочитаете использовать более длинный вариант, вы можете использовать --delete
.
5. Заблокировать определенный порт в брандмауэре IPtables
Иногда может потребоваться заблокировать входящие или исходящие соединения на определенном порту. Это хорошая мера безопасности, и вам стоит подумать об этом при настройке брандмауэра.
Чтобы заблокировать исходящие соединения на определенном порту, используйте:
# iptables -A ВЫХОД -p tcp --dport xxx -j DROP
Для разрешения входящих подключений используйте:
# iptables -A INPUT -p tcp --dport xxx -j ПРИНЯТЬ
В обоих примерах замените "xxx"
на фактический порт, который вы хотите разрешить.Если вы хотите заблокировать трафик UDP вместо TCP , просто замените «tcp»
на «udp»
в приведенном выше правиле iptables.
6. Разрешить использование нескольких портов на IP-таблицах с использованием многопортовой сети
Вы можете разрешить несколько портов одновременно, используя многопортовый , ниже вы можете найти такое правило как для входящих, так и для исходящих соединений:
# iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ПРИНЯТЬ # iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ПРИНЯТЬ
7.
Разрешить определенный диапазон сети для определенного порта в IPtables
Вы можете захотеть ограничить определенные подключения на определенном порту к данной сети. Допустим, вы хотите разрешить исходящие соединения через порт 22
к сети 192.168.100.0/24
.
Вы можете сделать это с помощью этой команды:
# iptables -A ВЫХОД -p tcp -d 192.168.100.0/24 --dport 22 -j ПРИНЯТЬ
8. Заблокируйте Facebook на брандмауэре IPtables
Некоторые работодатели любят блокировать доступ к Facebook для своих сотрудников.Ниже приведен пример того, как заблокировать трафик на Facebook.
Примечание : Если вы системный администратор и вам нужно применять эти правила, имейте в виду, что ваши коллеги могут перестать с вами разговаривать 🙂
Сначала найдите IP-адреса, используемые Facebook:
# host facebook.com facebook.com имеет адрес 66.220.156.68
# whois 66. 220.156.68 | grep CIDR CIDR: 66.220.144.0/20
Затем вы можете заблокировать эту сеть Facebook с помощью:
# iptables -A ВЫХОД -p tcp -d 66.220.144.0 / 20 -j ПАДЕНИЕ
Имейте в виду, что диапазон IP-адресов, используемых Facebook, может отличаться в вашей стране.
9. Настройка переадресации портов в IPtables
Иногда может потребоваться перенаправить трафик одной службы на другой порт. Вы можете добиться этого с помощью следующей команды:
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525
Приведенная выше команда перенаправляет весь входящий трафик на сетевой интерфейс eth0
с порта 25
на порт 2525
.Вы можете поменять порты на те, которые вам нужны.
10. Блокировка сетевого флуда на порте Apache с помощью IPtables
Иногда IP-адреса могут запрашивать слишком много подключений к веб-портам на вашем веб-сайте. Это может вызвать ряд проблем, и для предотвращения таких проблем вы можете использовать следующее правило:
# iptables -A INPUT -p tcp --dport 80 -m limit --limit 100 / minute --limit-burst 200 -j ACCEPT
Приведенная выше команда ограничивает входящие соединения от 100
за минуту до 200
. Вы можете редактировать предел и пакетный предел в соответствии с вашими конкретными требованиями.
11. Блокировать входящие запросы Ping для IPtables
Некоторым системным администраторам нравится блокировать входящие запросы ping из соображений безопасности. Хотя угроза не такая уж и большая, хорошо знать, как заблокировать такой запрос:
# iptables -A INPUT -p icmp -i eth0 -j DROP
12. Разрешить петлевой доступ
Петлевой доступ (доступ с 127.0.0.1
) важен, и вы всегда должны оставлять его активным:
# iptables -A INPUT -i lo -j ПРИНЯТЬ # iptables -A ВЫВОД -o lo -j ПРИНЯТЬ
13.Ведение журнала отброшенных сетевых пакетов на IPtables
Если вы хотите регистрировать отброшенные пакеты на сетевом интерфейсе eth0
, вы можете использовать следующую команду:
# iptables -A INPUT -i eth0 -j LOG --log-prefix «IPtables потерял пакеты:»
Вы можете изменить значение после "--log-prefix"
на любое значение по вашему выбору. Сообщения регистрируются в / var / log / messages
, и вы можете искать их с помощью:
# grep "IPtables потерял пакеты:" / var / log / messages
14.Блокировать доступ к определенному MAC-адресу в IPtables
Вы можете заблокировать доступ к вашей системе с определенного MAC-адреса, используя:
# iptables -A INPUT -m mac --mac-source 00: 00: 00: 00: 00: 00 -j DROP
Конечно, вам нужно будет заменить "00: 00: 00: 00: 00: 00"
на фактический MAC-адрес, который вы хотите заблокировать.
15. Ограничьте количество одновременных подключений на один IP-адрес
Если вы не хотите, чтобы с одного IP-адреса на данном порту было установлено слишком много одновременных подключений, вы можете использовать команду ниже:
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
Приведенная выше команда разрешает не более 3
соединений на одного клиента. Конечно, вы можете изменить номер порта для соответствия другому сервису. Также следует изменить --connlimit-above
в соответствии с вашими требованиями.
16. Поиск в правиле IPtables
После того, как вы определили свои правила iptables, вы захотите время от времени выполнять поиск и, возможно, будете нуждаться в их изменении. Простой способ поиска по вашим правилам — использовать:
# iptables -L $ table -v -n | grep $ строка
В приведенном выше примере вам нужно будет заменить $ table
на фактическую таблицу, в которой вы хотите искать, и $ string
на фактическую строку, которую вы ищете.
Вот пример:
# iptables -L INPUT -v -n | grep 192.168.0.100
17. Определите новую цепочку IPTables
С помощью iptables вы можете определить свою собственную цепочку и хранить в ней собственные правила. Чтобы определить цепочку, используйте:
# iptables -N настраиваемый фильтр
Теперь вы можете проверить, есть ли ваш новый фильтр:
# iptables -L
Пример вывода
Цепочка INPUT (политика ACCEPT) target prot opt источник назначения
Цепочка ВПЕРЕД (политика ПРИНЯТЬ) target prot opt источник назначения
Цепочка ВЫХОДА (политика ПРИНЯТЬ) target prot opt источник назначения
Цепь custom-filter (0 ссылок) target prot opt источник назначения
18.
Очистить цепочки или правила межсетевого экрана IPtables
Если вы хотите очистить цепочки брандмауэра, вы можете использовать:
# iptables -F
Вы можете промыть цепи из определенной таблицы с помощью:
# iptables -t нат -F
Вы можете заменить "nat"
фактической таблицей, цепочки которых вы хотите очистить.
19. Сохранение правил IPtables в файл
Если вы хотите сохранить правила брандмауэра, вы можете использовать команду iptables-save
.Вы можете использовать следующее для сохранения и хранения ваших правил в файле:
# iptables-save> ~ / iptables.rules
Вам решать, где вы будете хранить файл и как вы назовете его.
20. Восстановление правил IPtables из файла
Если вы хотите восстановить список правил iptables, вы можете использовать iptables-restore
. Команда выглядит так:
# iptables-restore <~ / iptables.rules
Конечно, путь к вашему файлу правил может быть другим.
21. Настройка правил IPtables для соответствия PCI
Некоторым системным администраторам может потребоваться настроить свои серверы на совместимость с PCI. Различные поставщики, отвечающие за соответствие требованиям PCI, выдвигают множество требований, но есть несколько общих.
Во многих случаях вам потребуется более одного IP-адреса. Вам нужно будет применить приведенные ниже правила для IP-адреса сайта. Будьте особенно осторожны при использовании приведенных ниже правил и используйте их только в том случае, если вы уверены, что делаете:
# iptables -I INPUT -d САЙТ -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP
Если вы используете cPanel или аналогичную панель управления, вам также может потребоваться заблокировать ее порты.Вот пример:
# iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports 2082,2083,2095,2096,2525,2086,2087 -j DROP
Примечание : Чтобы убедиться, что вы соответствуете требованиям вашего поставщика PCI, внимательно проверьте его отчет и примените необходимые правила. В некоторых случаях вам может потребоваться также заблокировать UDP-трафик на определенных портах.
22. Разрешить установленные и связанные подключения
Поскольку сетевой трафик разделяется на входящий и исходящий, вы захотите разрешить установленный и связанный входящий трафик.Для входящих соединений это сделать с помощью:
# iptables -A INPUT -m conntrack --ctstate ESTABLISHED, RELATED -j ACCEPT
Для исходящего использования:
# iptables -A ВЫХОД -m conntrack --ctstate ESTABLISHED -j ACCEPT
23. Отбрасывать недопустимые пакеты в IPtables
Некоторые сетевые пакеты могут быть помечены как недопустимые. Некоторые люди могут предпочесть регистрировать эти пакеты, но другие предпочитают отбрасывать их. Чтобы отбросить недействительные пакеты, вы можете использовать:
# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
24.Блокировать подключение к сетевому интерфейсу
Некоторые системы могут иметь более одного сетевого интерфейса. Вы можете ограничить доступ к этому сетевому интерфейсу или заблокировать соединения с определенного IP-адреса.
Например:
# iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP
Замените «xxx.xxx.xxx.xxx» на фактический IP-адрес (или сеть), которую вы хотите заблокировать.
25. Отключить исходящую почту через IPTables
Если ваша система не должна отправлять электронные письма, вы можете заблокировать исходящие порты на портах SMTP.Например, вы можете использовать это:
# iptables -A ВЫХОД -p tcp --dports 25,465,587 -j ОТКАЗАТЬ
Заключение
Iptables - это мощный межсетевой экран, от которого можно легко получить выгоду. Каждому системному администратору жизненно важно изучить хотя бы основы iptables. Если вы хотите найти более подробную информацию о iptables и его опциях, настоятельно рекомендуем прочитать его руководство:
# человек iptables
Если вы считаете, что мы должны добавить больше команд в этот список, поделитесь ими с нами, отправив их в разделе комментариев ниже.
Как работает межсетевой экран Iptables
Введение
Установка хорошего брандмауэра - важный шаг в обеспечении безопасности любой современной операционной системы. Большинство дистрибутивов Linux поставляются с несколькими различными инструментами межсетевого экрана, которые мы можем использовать для настройки наших межсетевых экранов. В этом руководстве мы рассмотрим межсетевой экран iptables
.
Iptables - это стандартный брандмауэр, включенный по умолчанию в большинство дистрибутивов Linux (его заменит современный вариант под названием nftables
).Фактически это интерфейс для обработчиков netfilter уровня ядра, которые могут управлять сетевым стеком Linux. Он работает, сопоставляя каждый пакет, который проходит через сетевой интерфейс, с набором правил, чтобы решить, что делать.
В этом руководстве мы обсудим, как работает iptables. В следующей статье этой серии мы покажем вам, как настроить базовый набор правил для защиты вашего сервера Ubuntu 14. 04.
Как работает Iptables
Прежде чем мы начнем обсуждать фактические команды, необходимые для управления iptables и построения политики межсетевого экрана, давайте рассмотрим некоторую терминологию и обсудим, как работает iptables.
Межсетевой экран iptables сравнивает сетевой трафик с набором из правил . Правила определяют характеристики, которые должен иметь пакет для соответствия правилу, и действия, которые следует предпринять для соответствия пакетам.
Есть много вариантов, чтобы установить, какие пакеты соответствуют определенному правилу. Вы можете сопоставить тип протокола пакета, адрес или порт источника или получателя, используемый интерфейс, его отношение к предыдущим пакетам и т. Д.
Когда заданный шаблон совпадает, выполняемое действие называется целью .Целью может быть окончательное политическое решение для пакета, например принятие или отбрасывание. Также можно переместить пакет в другую цепочку для обработки или просто зарегистрировать встречу. Есть много вариантов.
Эти правила организованы в группы, называемые цепочками . Цепочка - это набор правил, по которым последовательно проверяется пакет. Когда пакет соответствует одному из правил, он выполняет соответствующее действие и не проверяется на соответствие остальным правилам в цепочке.
Пользователь может создавать цепочки по мере необходимости.По умолчанию определены три цепочки. Их:
- INPUT : Эта цепочка обрабатывает все пакеты, адресованные вашему серверу.
- ВЫХОД : Эта цепочка содержит правила для трафика, созданного вашим сервером.
- FORWARD : Эта цепочка используется для обработки трафика, предназначенного для других серверов, которые не созданы на вашем сервере. Эта цепочка - в основном способ настроить ваш сервер для маршрутизации запросов на другие машины.
Каждая цепочка может содержать ноль или более правил и имеет политику по умолчанию . Политика определяет, что происходит, когда пакет пропускается через все правила в цепочке и не соответствует ни одному правилу. Вы можете либо отбросить пакет, либо принять его, если правила не совпадают.
Через модуль, который можно загрузить с помощью правил, iptables также может отслеживать соединения. Это означает, что вы можете создавать правила, которые определяют, что происходит с пакетом, на основе его отношения к предыдущим пакетам. Мы называем эту возможность «отслеживанием состояния», «отслеживанием соединения» или настройкой «конечного автомата».
В этом руководстве мы в основном собираемся охватить конфигурацию цепочки INPUT, поскольку она содержит набор правил, которые помогут нам отклонить нежелательный трафик, направленный на наш сервер.
IPv4 в сравнении с IPv6
Брандмауэр netfilter, включенный в ядро Linux, полностью разделяет трафик IPv4 и IPv6. Аналогичным образом, инструменты, используемые для управления таблицами, содержащими наборы правил брандмауэра, также различны. Если на вашем сервере включен IPv6, вам нужно будет настроить обе таблицы для адресации трафика, которому подвергается ваш сервер.
Обычная команда iptables
используется для управления таблицей, содержащей правила, управляющие трафиком IPv4. Для трафика IPv6 используется сопутствующая команда под названием ip6tables
. Это важный момент для усвоения, поскольку он означает, что любые правила, которые вы устанавливаете с помощью iptables
, не будут влиять на пакеты, использующие версию 6 протокола.
Синтаксис этих двойных команд одинаков, поэтому создание набора правил для каждой из этих таблиц не является слишком сложным.Просто не забывайте изменять обе таблицы всякий раз, когда вносите изменения. Команда iptables
создаст правила, применимые к трафику IPv4, а команда ip6tables
создаст правила, применимые к трафику IPv6.
Убедитесь, что вы используете соответствующие IPv6-адреса вашего сервера для создания правил ip6tables
.
О чем нужно помнить
Теперь, когда мы знаем, как iptables направляет пакеты, которые проходят через его интерфейс (направляет пакет в соответствующую цепочку, проверяет его на соответствие каждому правилу, пока одно из правил не совпадет, задает политику цепочки по умолчанию, если совпадение не найдено), мы можем начать увидеть некоторые подводные камни, о которых следует помнить при создании правил.
Во-первых, нам нужно убедиться, что у нас есть правила для сохранения активных соединений, если мы реализуем политику отбрасывания по умолчанию. Это особенно важно, если вы подключены к серверу через SSH. Если вы случайно реализуете правило или политику, которые разрывают ваше текущее соединение, вы всегда можете войти в свой DigitalOcean VPS с помощью веб-консоли, которая обеспечивает внеполосный доступ.
Также следует помнить, что порядок правил в каждой цепочке имеет значение .Пакет не должен сталкиваться с более общим правилом, которому он соответствует, если он предназначен для соответствия более конкретному правилу.
Из-за этого правила в верхней части цепочки должны иметь более высокий уровень специфичности, чем правила в нижней части. Вы должны сначала сопоставить конкретные случаи, а затем предоставить более общие правила для соответствия более широким шаблонам. Если пакет не проходит через всю цепочку (не соответствует никаким правилам), он попадает в общее правило на , политику по умолчанию.
По этой причине политика цепочки по умолчанию очень строго диктует типы правил, которые будут включены в цепочку.Цепочка с политикой по умолчанию ACCEPT будет содержать правила, которые явно отбрасывают пакеты. Цепочка со значением по умолчанию DROP будет содержать исключения для пакетов, которые должны быть специально приняты.
Заключение
На этом этапе самый простой способ узнать, как работает iptables, - это использовать его для реализации собственного межсетевого экрана.
В следующем руководстве мы покажем, как создать базовый брандмауэр iptables в Ubuntu 14. 04. Это заблокирует ваш сервер, за исключением нескольких служб, которые вы хотите разрешить.
Команда
iptables в Linux с примерами
команда iptables в Linux с примерами
iptables - это интерфейс командной строки, используемый для настройки и обслуживания таблиц брандмауэра Netfilter для IPv4, включенного в ядро Linux. Брандмауэр сопоставляет пакеты с правилами, определенными в этих таблицах, а затем выполняет указанное действие при возможном совпадении.
- Таблицы - это название набора цепочек.
- Цепочка - это набор правил.
- Правило - это условие, используемое для сопоставления пакета.
- Цель - это действие, выполняемое при совпадении возможного правила. Примеры цели: ACCEPT, DROP, QUEUE.
- Политика - это действие по умолчанию, предпринимаемое в случае несовпадения со встроенными цепочками, оно может быть ACCEPT или DROP.
Синтаксис:
iptables --table ТАБЛИЦА -A / -C / -D... CHAIN rule --jump Target
ТАБЛИЦА
Возможны пять таблиц:
- filter: Таблица, используемая по умолчанию для фильтрации пакетов. Он включает такие цепочки, как INPUT, OUTPUT и FORWARD.
- nat: Относится к преобразованию сетевых адресов. Сюда входят цепочки PREROUTING и POSTROUTING.
- mangle: Для специализированного изменения пакетов. Встроенные цепочки включают PREROUTING и OUTPUT.
- raw: Настраивает исключения из отслеживания соединений. Встроенные цепочки - это PREROUTING и OUTPUT.
- безопасность: Используется для обязательного контроля доступа
ЦЕПИ
Есть несколько встроенных цепочек, которые включены в таблицы. Их:
- INPUT: набор правил для пакетов, предназначенных для сокетов localhost.
- FORWARD: для пакетов, маршрутизируемых через устройство.
- ВЫХОД: для локально сгенерированных пакетов, предназначенных для передачи извне.
- PREROUTING: для изменения пакетов по мере их поступления.
- POSTROUTING: для изменения пакетов по мере их выхода.
Примечание: Пользовательские цепочки также могут быть созданы.
ОПЦИИ
- -A, –append: Добавить в цепочку, указанную в параметрах.
Синтаксис:
iptables [-t таблица] --append [цепочка] [параметры]
Пример: Эта команда отбрасывает весь трафик, поступающий на любой порт.
iptables -t filter --append INPUT -j DROP
Выход:
- -D, –delete: Удалить правило из указанной цепочки.
Синтаксис:
iptables [-t таблица] --delete [цепочка] [номер_правила]
Пример: Эта команда удаляет правило 2 из цепочки INPUT.
iptables -t filter --delete INPUT 2
Выход:
- -C, –check: Проверяет, присутствует ли правило в цепочке или нет.Он возвращает 0, если правило существует, и 1, если нет.
Синтаксис:
iptables [-t table] --check [цепочка] [параметры]
Пример: Эта команда проверяет, присутствует ли указанное правило в цепочке INPUT.
iptables -t filter --check INPUT -s 192.168.1.123 -j DROP
Выход:
ПАРАМЕТРЫ
Параметры, предоставленные с командой iptables используются для сопоставления пакета и выполнения указанного действия.Общие параметры:
- -p, –proto: - это протокол, которому следует пакет. Возможные значения: tcp, udp, icmp, ssh и т. Д.
Синтаксис:
iptables [-t таблица] -A [цепочка] -p {имя_протокола} [цель]
Пример: Эта команда добавляет правило в цепочку INPUT для отбрасывания всех пакетов udp.
iptables -t filter -A INPUT -p udp -j DROP
Выход:
- -s, –source: используется для сопоставления с адресом источника пакета.
Синтаксис:
iptables [-t таблица] -A [цепочка] -s {исходный_адрес} [цель]
Пример: Эта команда добавляет правило в цепочку INPUT, чтобы принимать все пакеты, исходящие из 192.168.1.230.
iptables -t filter -A INPUT -s 192.168.1.230 -j ACCEPT
Выход:
- -d, –destination: используется для сопоставления с адресом назначения пакета.
Синтаксис:
iptables [-t таблица] -A [цепочка] -d {целевой_адрес} [цель]
Пример: Эта команда добавляет правило в цепочку OUTPUT для отбрасывания всех пакетов, предназначенных для 192.168.1.123.
iptables -t filter -A OUTPUT -d 192.168.1.123 -j DROP
Выход:
- -i, –in-interface: сопоставляет пакеты с указанным внутренним интерфейсом и выполняет действие.
Синтаксис:
iptables [-t таблица] -A [цепочка] -i {интерфейс} [цель]
Пример: Эта команда добавляет правило в цепочку INPUT для отбрасывания всех пакетов, предназначенных для беспроводного интерфейса.
iptables -t filter -A INPUT -i wlan0 -j DROP
Выход:
- -o, –out-interface: сопоставляет пакеты с указанным исходящим интерфейсом.
- -j, –jump: этот параметр определяет действие, выполняемое при совпадении.
Синтаксис:
iptables [-t таблица] -A [цепочка] [параметры] -j {цель}
Пример: Эта команда добавляет правило в цепочку FORWARD для отбрасывания всех пакетов.
iptables -t filter -A FORWARD -j DROP
Выход:
Примечание:
- При тестировании команд вы можете удалить все правила фильтрации и созданные пользователем цепочки.
sudo iptables --flush
- Для сохранения конфигурации iptables используйте:
судо iptables-сохранить
- Восстановить конфигурацию iptables можно с помощью:
Судо iptables-восстановление
- Существуют и другие интерфейсы, такие как ip6tables, которые используются для управления таблицами фильтрации для IPv6.
.