iptables добавить правило по номеру
Настройка iptables
Iptables — это межсетевой экран для операционных систем Linux, который позволяет управлять прохождением трафика. При попытке установке соединения с сервером (или при отправке запроса с сервера) Iptables проверяет цепочку правил для конкретного соединения и выполняет заданную настройку.
Iptables предустановлен во всех современных дистрибутивах Linux.
Типы цепочек
Существует три типа цепочек iptables — input, forward и output.
Цепочка — это упорядоченная последовательность правил. Правило содержит в себе критерий (например, IP-адрес источника пакета) и действие, которое нужно применить к пакету с этим критерием (например, «заблокировать»). Если критерий отсутствует, правило применяется ко всем пакетам.
При определении, что нужно сделать с пакетом, iptables просматривает соответствующую цепочку с начала списка, перебирая правила, пока не найдет совпадение. Если совпадение не найдено (соединение не попадает ни под одно созданное правило), применяется правило по умолчанию.
Действия с соединениями
Есть три типа действий, выполняемых с соединениями:
Accept — разрешить соединение.
Drop — игнорировать (блокировать) соединение без сообщения источнику об отказе. Это рекомендуемый вариант для обработки трафика на портах, подключенных к интернету, так как в этом случае злоумышленники получают минимум информации при сканировании портов.
Reject — отказать в соединении, сообщив источнику запроса об отказе. По умолчанию отправляется ответный пакет «icmp-port-unreachable», но также возможна дополнительная настройка сообщения (например, «icmp-host-unreachable», «icmp-net-prohibited», «icmp-host-prohibited» и др.).
Настройка правил
В рамках данной статьи общий формат для настройки правил будет следующим:
В нем пропущено указание таблицы (она должна следовать сразу после iptables), так как мы рассматриваем настройки для основной таблицы фильтрации filter, которая подразумевается в командах iptables по умолчанию. Указывать ее дополнительно необязательно.
Действие в данном случае — это действие, которое необходимо выполнить с правилом (например, добавить его или удалить).
Примеры доступных действий в iptables:
Настройка netfilter с помощью iptables
Утилита командной строки iptables используется для настройки брандмауэра netfilter, встроенного в систему на базе ядра Linux.
Данная инструкция подходит как для чайников, которые хотят разбираться в аспектах защиты сети, так и опытных специалистов в качестве шпаргалки.
Принцип настройки
Общий синтаксис использования iptables:
Команды указывают, какое именно действие мы совершаем над netfilter, например, создаем или удаляем правило.
В каждой таблице есть цепочки, для каждой из которых создаются сами правила. Например, для вышеупомянутой таблицы filter есть три предопределенные цепочки — INPUT (входящие пакеты), OUTPUT (исходящие) и FORWARD (транзитные).
[номер]
Некоторые команды требуют указания номера правила, например, на удаление или редактирование.
Условие описывает критерии отработки того или иного правила.
Ну и, собственно, что делаем с пакетом, если он подходит под критерии условия.
* справедливости ради, стоит отметить, что ключ с действием не обязан идти в конце. Просто данный формат чаще всего встречается в инструкциях и упрощает чтение правил.
Ключи iptables и примеры их использования
Команды
Нижеперечисленные ключи определяют действия, которые выполняет утилита iptables.
Условия
Данные ключи определяют условия правила.
Действия
Действия, которые будут выполняться над пакетом, подходящим под критерии условия. Для каждой таблицы есть свой набор допустимых действий. Указываются с использованием ключа -j.
Таблица | Действие | Описание |
---|---|---|
filter | ACCEPT | Разрешает пакет. |
DROP | Запрещает пакет. | |
REJECT | Запрещает с отправкой сообщения источнику. | |
nat | MASQUERADE | Для исходящих пакетов заменяет IP-адрес источника на адрес интерфейса, с которого уходит пакет. |
SNAT | Аналогично MASQUERADE, но с указанием конкретного сетевого интерфейса, чей адрес будет использоваться для подмены. | |
DNAT | Подмена адреса для входящих пакетов. | |
REDIRECT | Перенаправляет запрос на другой порт той же самой системы. | |
mangle | TOS | Видоизменение поля TOS (приоритезация трафика). |
DSCP | Изменение DSCP (тоже приоритезация трафика). | |
TTL | Изменение TTL (время жизни пакета). | |
HL | Аналогично TTL, но для IPv6. | |
MARK | Маркировка пакета. Используется для последующей фильтрации или шейпинга. | |
CONNMARK | Маркировка соединения. | |
TCPMSS | Изменение значения MTU. |
Примеры часто используемых команд iptables
Общие команды
Просмотр правил с их номерами:
Для каждой таблицы смотреть правила нужно отдельно:
21 пример использования iptables для администраторов.
Файрвол в системе linux контролируется программой iptables (для ipv4) и ip6tables (для ipv6). В данной шпаргалке рассмотрены самые распространённые способы использования iptables для тех, кто хочет защитить свою систему от взломщиков или просто разобраться в настройке.
1. Показать статус.
Примерный вывод команды для неактивного файрвола:
Для активного файрвола:
Где:
-L : Показать список правил.
-v : Отображать дополнительную информацию. Эта опция показывает имя интерфейса, опции, TOS маски. Также отображает суффиксы ‘K’, ‘M’ or ‘G’.
-n : Отображать IP адрес и порт числами (не используя DNS сервера для определения имен. Это ускорит отображение).
2. Отобразить список правил с номерами строк.
Вы можете использовать номера строк для того, чтобы добавлять новые правила.
3. Отобразить INPUT или OUTPUT цепочки правил.
4. Остановить, запустить, перезапустить файрвол.
Силами самой системы:
# service ufw stop
# service ufw start
Где:
-F : Удалить (flush) все правила.
-X : Удалить цепочку.
-t table_name : Выбрать таблицу (nat или mangle) и удалить все правила.
-P : Выбрать действия по умолчанию (такие, как DROP, REJECT, или ACCEPT).
5. Удалить правила файрвола.
Где:
-D : Удалить одно или несколько правил из цепочки.
6. Добавить правило в файрвол.
Вывод станет таким:
7. Сохраняем правила файрвола.
Через iptables-save:
# iptables-save > /etc/iptables.rules
8. Восстанавливаем правила.
Через iptables-restore
# iptables-restore
9. Устанавливаем политики по умолчанию.
После вышеперечисленных команд ни один пакет не покинет данный хост.
# ping google.com
10. Блокировать только входящие соединения.
11. Сбрасывать адреса изолированных сетей в публичной сети.
12. Блокировка определенного IP адреса.
13. Заблокировать входящие запросы порта.
14. Заблокировать запросы на исходящий IP адрес.
Вывод: facebook.com has address 69.171.228.40
Найдем CIDR для 69.171.228.40:
# whois 69.171.228.40 | grep CIDR
Вывод:
CIDR: 69.171.224.0/19
15. Записать событие и сбросить.
Чтобы записать в журнал движение пакетов перед сбросом, добавим правило:
16. Записать событие и сбросить (с ограничением на количество записей).
16. Сбрасывать или разрешить трафик с определенных MAC адресов.
17. Разрешить или запретить ICMP Ping запросы.
18. Открыть диапазон портов.
19. Открыть диапазон адресов.
20. Закрыть или открыть стандартные порты.
Заменить ACCEPT на DROP, чтобы заблокировать порт.
21. Ограничить количество параллельных соединений к серверу для одного адреса.
Где:
—connlimit-above 3 : Указывает, что правило действует только если количество соединений превышает 3.
—connlimit-mask 24 : Указывает маску сети.
Помощь по iptables.
Для поиска помощи по iptables, воспользуемся man:
$ man iptables
Проверка правила iptables.
Проверяем с помощью telnet
$ telnet ya.ru 80
Автор статьи Platon Puhlechev aka iFalkorr разрешает печатать данный текст.
Iptables отличный инструмент в руках администратора. Если нужно легко и просто защититься в десктопной Ubuntu, то стоит знать, что есть удобная консольная надстройка над iptables под названием UFW, а к ней есть графическая программа GUFW. Сделать свою Ubuntu ещё более защищённой поможет видеоматериал.
Общее представление об iptables. Добавление, удаление, цепочки.
Что это?
iptables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) netfilter для ядер Linux версий 2.4, 2.6, 3.x, 4.x. Для использования утилиты iptables требуются привилегии суперпользователя (root).
Цепочки, схема
Input — обрабатывает входящие пакеты и подключения. Например, если какой-либо внешний пользователь пытается подключиться к вашему компьютеру по ssh или любой веб-сайт отправит вам свой контент по запросу браузера. Все эти пакеты попадут в эту цепочку;
forward — эта цепочка применяется для проходящих соединений. Сюда попадают пакеты, которые отправлены на ваш компьютер, но не предназначены ему, они просто пересылаются по сети к своей цели.
output — эта цепочка используется для исходящих пакетов и соединений. Сюда, например, попадают пакеты, когда вы запускаете браузер и пытаетесь открыть любой сайт.
prerouting — в эту цепочку пакет попадает перед обработкой iptables, система еще не знает куда он будет отправлен, в input, output или forward;
postrouting — сюда попадают все проходящие пакеты, которые уже прошли цепочку forward
Добавление/удаление правил
Действия над пакетами:
ACCEPT — разрешить прохождение пакета дальше по цепочке правил;
DROP — удалить пакет;
REJECT — отклонить пакет, отправителю будет отправлено сообщение, что пакет был отклонен;
LOG — сделать запись о пакете в лог файл;
QUEUE — отправить пакет пользовательскому приложению.
Опции:
-A — добавить правило в цепочку;
-С — проверить все правила;
-D — удалить правило;
-I — вставить правило с нужным номером;
-L — вывести все правила в текущей цепочке;
-S — вывести все правила;
-F — очистить все правила;
-N — создать цепочку;
-X — удалить цепочку;
-P — установить действие по умолчанию
Дополнительные опции:
-p — указать протокол, один из tcp, udp, icmp и др.;
-s — указать ip адрес устройства-отправителя пакета;
-d — указать ip адрес получателя;
-i — входной сетевой интерфейс;
-o — исходящий сетевой интерфейс;
-j — выбрать действие, если правило подошло.
Примеры:
Вывод всех правил на экран:
Вывод всех правил на экран c нумерацией строк:
Вывод правил для цепочки INPUT
Блокировка всех входящих пакетов от 10.0.0.1:
Блокировка всех исходящих пакетов от 10.0.0.1:
Блокировка всех входящих соединений от 10.0.0.1 по ssh:
Очистить все правила
Очистить все правила в цепочке INPUT:
Удаления правила для всех входящих пакетов от 10.0.0.1:
Добавить правило на 3 место в цепочке INPUT (остальные сдвинутся ниже):
Удалить 3 правило в цепочке INPUT:
Сохранение после перезагрузки
и в настройках интефейса прописать
SNAT, DNAT, MASQUERADE
DNAT — от англ. Destination Network Address Translation — Изменение Сетевого Адреса Получателя. DNAT — это изменение адреса назначения в заголовке пакета. Зачастую используется в паре с SNAT. Основное применение — использование единственного реального IP-адреса несколькими компьютерами для выхода в Интернет и предоставления дополнительных сетевых услуг внешним клиентам.
SNAT — от англ. Source Network Address Translation — Изменение Сетевого Адреса Отправителя. SNAT — это изменение исходного адреса в заголовке пакета. Основное применение — использование единственного реального IP-адреса несколькими компьютерами для выхода в Интернет. В натоящее время диапазон реальных IP-адресов, по стандарту IPv4, недостаточно широк, и его не хватает на всех (переход на IPv6 разрешит эту проблему).
Маскировка (MASQUERADE) применяется в тех же целях, что и SNAT, но в отличие от последней, MASQUERADE дает более сильную нагрузку на систему. Происходит это потому, что каждый раз, когда требуется выполнение этого действия — производится запрос IP адреса для указанного в действии сетевого интерфейса, в то время как для SNAT IP адрес указывается непосредственно. Однако, благодаря такому отличию, MASQUERADE может работать в случаях с динамическим IP адресом, т.е. когда вы подключаетесь к Интернет, скажем через PPP, SLIP или DHCP.
Предположим у нас есть сервер с двумя интерфейсами. Один смотрит в Интернет, другой в локальную сеть и не забывает про правила для input и output. Раздадим интернет:
Для начала разрешаем шлюзу передавать транзитный трафик:
Разрешаем проходить трафику из и в локальную сеть,например, 10.1.30.0/24:
Для статического внешнего адреса интерфейса:
Для динамического внешнего адреса интерфейса:
DNAT подменяет адрес назначения для входящих пакетов, позволяя «пробрасывать» адреса или отдельные порты внутрь локальной сети. Например:
Для начала разрешаем шлюзу передавать транзитный трафик:
Разрешаем проходить траффику из и в локальную сеть,например, 10.1.30.0/24:
Из внешнего источника по порту 29001 можно получить доступ по ssh к компьютеру во внутренней сети 10.1.30.40:
Iptables – полезные команды
Нижеприведенные команды iptables требуют соответствующую поддержку ядра системы. Если у вас стандартное системное ядро, то эти модули уже присутствуют в системе и будут подгружаться при необходимости.
Длинные правила я обрезал символом “\”. На самом деле эти правила надо писать в одну строку.
Использование IP диапазона
В любых правилах можно задавать диапазоны ip. Это требуется, когда масками сети не перекрыть все возможные ip диапазоны.
Задание мультипортов
Очень полезно, чтобы не писать несколько правил на каждый порт, используем только одно правило
Задаем вероятность соединения
Очень хитрое правило 🙂 Можно задавать вероятности срабатывания правил.
Я читал байку, что таким образом были выбиты деньги на новый сервер, когда системный администратор грамотно расставил вероятности в правилах и доказал начальству, что старый сервер не справляется с нагрузкой. Т.к понять неискушенному человеку почему то есть соединение на порт, то нет, да еще непонятна закономерность очень непросто.
Защищаем 22 порт SSH от брутфорса (перебора паролей)
Задача следующих правил ограничить соединения на порт ssh пятью попытками в течении 10 минут с 1 ip адреса.
Создаем новую цепочку правил SSHDROP
Все новые соединения на порт 22 пропускаем через цепочку SSHDROP
Если требуется будем писать лог соединений ssh
Если начальные условия нарушены то запретим соединение
Добавляем правило не перегружая весь конфиг iptables
Чтобы добавить правило в определенное место требуется вывести правила с нумерацией строк. На примере цепочки INPUT это делается командой:
Номера строк идут по порядку и ничего страшного, что надо вставить вместо какой-то строки новое правило. Правила подвинуться 🙂
Для вставки строки выполняем команду:
Если после тестирования правила все нормально не забываем добавить это же правило и в конфиг iptables.
Удаляем правила из цепочек
Правила удалять достаточно просто. Иногда требуется удалить только одно правило, не перегружая весь конфиг iptables.
Например у нас в системе есть правило.
Еще пример с более сложный правилом для NAT
Еще одна возможность удалять правила, через его номер.
Смотрим номера к примеру цепочки INPUT
Первым столбцом идут номера правил.
Удаляем первое правило в цепочке INPUT
Аналогичным образом можно смотреть, а потом удалять правила в любой цепочке.
Статья еще не закончена и будет постоянно пополняться по мере накопления мной знаний по новым интересным возможностям (хитростям) Iptables