238 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Фаерволл Кали Линукс: настройка iptables

Записки программиста

Настройка фаервола с помощью iptables за пять минут

Я несколько раз сталкивался с тем, что даже неглупые в общем-то люди делают совершенно непростительные ошибки. Например, открывают всему интернету порт, на котором крутится база данных. Часто так бывает у начинающих DevOps, которые всю жизнь писали код, а теперь в их обязанности входит еще и настройка серверов. В сети есть хорошие туториалы по базовой настройке фаервола в Linux и других *nix, но часто это простыни на множество экранов. Так что, надеюсь, этот более лаконичный туториал кому-нибудь пригодится.

Важно! Очень легко по ошибке так зафаерволить машину, что вы на нее больше не зайдете. Особенно это касается облачных хостингов. Например, если в AWS вы закроете все порты с 1024 по 65536, у машины после ребута почему-то оказываются закрыты вообще все порты. Если вы хоститесь в облаках, настраивайте лучше фаервол через предоставляемый хостингом веб-интерфейс.

Небольшое замечание по терминологии. Фаервол, встроенный в ядро Linux, называется Netfilter, а iptables — утилита для управления этим фаерволом. Многие ошибочно полагают, что фаервол называется iptables. Это не так. Говоря что-нибудь наподобие «я фильтрую пакеты с помощью iptables», вы показываете окружающим свою безграмотность.

Вообще, какие примерно задачи можно решать с помощью Netfilter:

  • Разрешать/запрещать входящий трафик на определенные порты по определенным протоколам (IPv4/IPv6, TCP/UDP) с указанных адресов (IP, MAC) или подсетей;
  • Все то же самое в отношении исходящего трафика;
  • Можно, например, полностью игнорировать все ICMP пакеты;
  • Настройка NAT, см статью про роутер на базе Raspberry Pi;
  • Слышал, что настоящие гуру умеют настраивать защиту от DDoS и брутфорса, ограничивать доступ в сеть конкретным приложениям, пользователям или группам, и делать другие чумовые вещи;

Отмечу, что утилита iptables мне лично первое время казалась исключительно неудобной по сравнению с ipfw во FreeBSD. К счастью, поработав с ней какое-то время, все это множество флагов вроде -A, -D, -j и прочих становятся привычны, так что, наберитесь терпения. Рассмотрим основные команды.

Показать все правила:

Вы можете заметить, что в Netfilter есть какие-то «цепочки» (chains) — как минимум INPUT, OUTPUT и FORWARD. У меня лично на машине есть еще и цепочка DOCKER. На первое время можно думать о первых двух, как обо всем входящем и исходящем трафике соответственно, а об остальных временно забыть. Велика вероятность, что они вообще никогда вам не понадобятся.

Удалить все правила:

Изменить политику (поведение по умолчанию) цепочки:

Запретить доступ с хоста/подсети:

Также можно использовать доменные имена:

Запрет исходящих соединений:

В правилах можно использовать отрицания:

Удаление правила по его номеру в цепочке:

Удаление правила на основе того, что оно делает:

Опция -p указывает на протокол. Можно использовать all, icmp, tcp, udp или номер протокола из /etc/protocols. Флаг – -sport указывает порт, с которого был прислан пакет, а – -dport указывает порт назначения:

Настройка iptables, разбираемся вместе.(Часть 1)

Определение iptables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) netfilter для ядер Linux версий 2.4, 2.6, 3.x, 4.x . Для использования утилиты iptables требуются привилегии суперпользователя (root).

Мы будем разбираться с iptables и без небольшого теоритического вступления не обойтись.

Что бы правильно составлять правила брандмауэра нужно понимать как вообще идут пакеты и что с ними происходит.

Порядок движения транзитных пакетов

Для локального приложения(входящие пакеты)

От локальных процессов(исходящие пакеты)

Как мы поняли есть основные три таблицы :

  • mangle — Данная таблица предназначена для операций по классификации и маркировке пакетов и соединений, а также модификации заголовков пакетов (поля TTL и TOS).
  • filter — основная таблица для фильтрации пакетов, используется по умолчанию. Собственно в этой таблице и происходит фильтрация пакетов.
  • nat — обеспечивает работу nat, если вы хотите использовать компьютер в качестве маршрутизатора. Здесь задаются правила для маршрутизации.

Для таблицы nat применимы действия:

Действие DNAT (Destination Network Address Translation) производит преобразование адресов назначения в заголовках пакетов. Другими словами, этим действием производится перенаправление пакетов на другие адреса, отличные от указанных в заголовках пакетов.

SNAT (Source Network Address Translation) используется для изменения исходных адресов пакетов. С помощью этого действия разделить единственный внешний IP адрес между компьютерами локальной сети для выхода в Интернет. В этом случае брандмауэр, с помощью SNAT, автоматически производит прямое и обратное преобразование адресов, тем самым давая возможность выполнять подключение к серверам в Интернете с компьютеров в локальной сети.

Маскировка (MASQUERADE) применяется в тех же целях, что и SNAT, но в отличие от последней, MASQUERADE дает более сильную нагрузку на систему. Происходит это потому, что каждый раз, когда требуется выполнение этого действия — производится запрос IP адреса для указанного в действии сетевого интерфейса, в то время как для SNAT IP адрес указывается непосредственно. Однако, благодаря такому отличию, MASQUERADE может работать в случаях с динамическим IP адресом, т.е. когда вы подключаетесь к Интернет, скажем через PPP, SLIP или DHCP.

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Выполнить MASQUERADE для всех пакетов идущих из сети 10.8.0.0 на интерфейс eth0 . Для понятности , допустим у нас две сетевые карточки и две сети. Нам надо что бы сеть 10.8.0.0/24(первая сетевая карточка) могла выйти скажем в интернет через eth0(вторая сетевая карточка)

  • raw — Предназначена для выполнения действий с пакетами до их обработки системой.

Собственно таблица по умолчанию filter .

Далее мы должны задать какой именно тип пакет будем фильтровать.

  • INPUT — обрабатывает трафик, поступающий непосредственно самому хосту.
  • FORWARD — позволяет фильтровать транзитный трафик.
  • OUTPUT — позволяет фильтровать трафик, исходящий от самого хоста.

Действие с пакетом.

  • ACCEPT — пропуск пакета. Пакет покидает текущую базовую цепочку и следует дальше.
  • REJECT — заблокировать пакет и сообщить его источнику об отказе.
  • DROP — заблокировать пакет, не сообщая источнику об отказе. Более предпочтительна при фильтрации трафика на интерфейсах, подключенных к интернету, так как понижает информативность сканирования портов хоста злоумышленниками.
  • LOG — сделать запись о пакете в лог файл.

Получается у нас цепочка [ таблица — filter ] — [ трафик — INPUT ] — [ действие — DROP ] логика действий только кажется сложной. Думаю мы с вами на примерах разберемся и станет все просто.

Команд iptables:

  • -A добавить правило в конец цепочки.
  • -D удалить правило.
  • -I вставить правило с нужным номером.
  • -L вывести все правила в текущей цепочке.
  • -S вывести все правила.
  • -F очистить все правила.
  • -N создать цепочку.
  • -X удалить цепочку.
  • -P установить действие по умолчанию.

Начнем разбираться на конкретных примерах.

iptables -A INPUT -p tcp —dport 80 -j ACCEPT

-A добавить новое правило , INPUT для входящих пакетов, -p протокол, один из tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp,
mh, — — dport порт назначения 80(опция только для протокола), -j выбрать действие, если правило подошло, ACCEPT разрешить. То есть разрешить входящий трафик по протоколу tcp на порт 80.

Перечисленные ключи также поддерживают конструкцию с использованием знака ! . Он инвертирует условие, например:

iptables -A INPUT -s ! 192.168.0.50 -j DROP

-s адрес источника — имя хоста(www.help.com), IP-адрес или подсеть в нотации CIDR(192.168.0.1/16) , ! инверсия , DROP запретить. Запретить весь входящий трафик , кроме источника 192.168.0.50 ( если бы не было ! , то запретить только с 192.168.0.50 )

iptables -A INPUT -s 192.168.0.50 -j DROP

Запретить входящий трафик с ip — 192.168.0.50 .

Список критериев правил:

  • -p Протокол, протокол также можно указать с помощью номера или названия согласно перечислению, приведенному в /etc/protocols. Значение «любой протокол» можно указать с помощью слова all или числа 0 . Так же для протокола есть дополнительные параметры : —sport(—source-port) Позволяет указать исходящий порт (или их диапазон). —dport(—destination-port) Позволяет указать порт назначения (или их диапазон).
  • -s Определяет адрес отправителя . В качестве адреса может выступать IP-адрес (возможно с маской), доменное имя (в последних двух случаях перед добавлением правила в цепочку имя резольвится в IP-адрес).
  • -i Определяет входящий сетевой интерфейс. Если указанное имя интерфейса заканчивается знаком «+» (например, eth+), то критерию соответствуют все интерфейсы, чьи названия начинаются на указанное имя(etho,eth1).
  • -d Определяет адрес получателя . Синтаксис аналогичен -s .
  • -o Определяет исходящий сетевой интерфейс. Синтаксис аналогичен -i.

Так же критерия можно комбинировать.

iptables -A INPUT -i eth0 -s 192 .168.0.0 -j DROP

Запретить входящие пакеты с интерфейса eth0 и ip 1 92 .168.0.0. А на интерфейс eth1 пакеты пройдут.

А что делать если вы за ранние не знаете какой порт открывать , например хотите что бы FTP сервер работал в пассивном режиме. Модуль conntrack о состоянии соединения поможет, а конкретней критерий — ctstate. Модуль подключается тэгом -m.

iptables -A INPUT -m conntrack —ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -m conntrack —ctstate NEW -p tcp —dport 21 -j ACCEPT # Разрешаем открывать соединения на 21 TCP-порт.

  • NEW — соединение не открыто, то есть пакет является первым в соединении.
  • ESTABLISHED — пакет относится к уже установленному соединению. Обычно такие пакеты принимаются без дополнительной фильтрации, как и в случае с RELATED.
  • RELATED — пакет открывает новое соединение, логически связанное с уже установленными, например, открытие канала данных в пассивном режиме FTP. Соединение получает статус RELATED если оно связано с другим соединением, имеющим признак ESTABLISHED.
  • INVALID — Признак INVALID говорит о том, что пакет не может быть идентифицирован и поэтому не может иметь определенного статуса.

iptables -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT

S tate и деологический предшественник conntrack, имеет единственный параметр --state, аналогичный параметру --ctstate модуля conntrack (но, в отличие от него, не поддерживающий состояния DNAT и SNAT).

Кратко рассмотрим таблицу таксировщика, которую можно найти в файле /proc/net/ip_conntrack . Здесь содержится список всех активных соединений.

Первое как понятно это протокол, потом десятичное число(что значит не знаю),потом идет время жизни соединения. Далее состояние ESTABLISHED то есть соединение уже установлено, бывает еще UNREPLIED что значит что ответного трафика еще не было. Далее расположены адреса отправителя и получателя, порт отправителя и получателя. Далее все наоборот соответственно, ASSURED этот флаг сообщает о том, что соединение установлено уверенно и эта запись не будет стерта по достижении максимально возможного количества трассируемых соединений.

Некоторые особенности протоколов .

TCP соединение всегда устанавливается передачей трех пакетов, которые инициализируют и устанавливают соединение, через которое в дальнейшем будут передаваться данные. Сессия начинается с передачи SYN пакета, в ответ на который передается SYN/ACK пакет и подтверждает установление соединения пакет ACK .

Как только трассировщик увидел первый ( SYN ) пакет, то присваивает ему статус NEW. Как только через трассировщика проходит второй пакет ( SYN/ACK ), то соединению присваивается статус ESTABLISHED.

С протоколом UDP немного все по другому этот протокол не предусматривает установления и закрытия соединения, но самый большой недостаток — отсутствие информации об очередности поступления пакетов. Но с точки зрения трасировщика все так же как с TCP. Первому пришедшему пакету присваивает ему статус NEW. Как только вы отправляете ответный пакет присваивается статус ESTABLISHED. Единственное отличия что статут ASSURED присваиваться только когда обменялись уже несколькими пакетами.

Логирование применений правил.

iptables дает возможность вести логи отдельных пакетов и событий. Для этого применяется действие LOG.

Читать еще:  Как в Windows 10 отключить автозагрузку драйверов

iptables -A INPUT -p tcp —syn -j LOG —log-level info —log-prefix «INPUT packets «

—log-level Используется для задания уровня журналирования (log level). Полный список уровней вы найдете в руководстве (man) по syslog.conf. Обычно, можно задать следующие уровни: debug, info, notice, warning, warn, err, error, crit, alert, emerg и panic. Логи пишутся в файл syslog.

—log-prefix Ключ задает текст (префикс), которым будут предварять все сообщения iptables. Сообщения со специфичным префиксом затем легко можно найти, к примеру, с помощью grep . Префикс может содержать до 29 символов, включая и пробелы.

Популярные команды управления iptables.

iptables -L -n —line-numbers Посмотреть список правил.

-n номер портов и ip в цифровом варианте.

—line-numbers номер строки.

iptables -F Полностью сбросить правила.

iptables -P INPUT ACCEPT Правила по умолчанию для таблицы INPUT .
iptables -P OUTPUT ACCEPT Правила по умолчанию для таблицы OUTPUT.
iptables -P FORWARD DROP Правила по умолчанию для таблицы FORWARD.

iptables -D INPUT 1 Удаление правила по его номеру в цепочке.

iptables -D INPUT -s 123.45.67.89 -j DROP Удаление правила на основе того, что оно делает.

iptables -I INPUT … Вставка (insert) правила в начало цепочки.

iptables -I INPUT 3 … Или можно указать конкретную позицию.

REDIRECT

Действие REDIRECT предназначено для перенаправления пакетов с одного набора портов на другой внутри одной системы, не выходя за пределы хоста.
Работает REDIRECT только в цепочках PREROUTING и OUTPUT таблицы nat . Таким образом, область применения сводится только к перенаправлению . Чаще всего это используется для прозрачного прокси, когда клиент из локальной сети коннектится на 80 порт, а шлюз редиректит пакеты на локальный порт прокси:

iptables -t nat -A PREROUTING -p tcp —dport 80 -j REDIRECT —to-port 3128

Новые правила автоматически не сохраняются и после перезагрузки сервера не будут действовать. Поэтому после изменения iptables нам нужно сохранить изменения.

iptables-save > /etc/iptables Сохранить текущий настройки в файл iptables.

iptables — restore > /etc/iptables Загрузить правила из файла.

Способ сохранять и загружать правила на ваше усмотрение. Мы с вами познакомились только с основами теории iptables, возможности настройки конечно гораздо больше. Более подробно о которых расскажем в другой статье.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Фаерволл Кали Линукс: настройка iptables

В статье рассмотрены основные правила настройки и принципы построения того, что принимается за фаерволл Кали Линукс.

Перед тем, как приступить к настройкам безопасности в Дебиан, необходимо уяснить, что таблицы iptables строго говоря не являются сервисом или службой. Речь идёт о специфической команде, которая позволяет манипулировать фаерволлом сетевого фильтра ядра системы. Она позволяет лишь выдавать, сохранять и, соотвественно, удалять соответствующие команды.

Знакомство с таблицами iptables

Возможности этой команды в Дебиан и других системах различны. Так, в Redhat и Fedora вроде как существует конкретный скрипт в /etc/init.d, который призван изменять конфигурацию iptables (напрямую его останавливать и запускать). Так что, работая в Кали Линукс, пользователи ошибочно пытаются применять подобную технику, но неизменно сталкиваются с отказом системы на такие действия. Нет, скрипт, конечно, можно написать и впоследствии им пользоваться. Но по умолчанию пользователи Дебиан этого скрипта не найдут.

Проверим наличие таблиц командой:

Бывает, что терминал молчит. Тогда доустановим таблицы командой

Чтобы приступить к настройкам таблиц, предлагаю вам создать пустой файл firewall.rules , который затем можно будет конфигурировать вручную из терминала или в любом текстовом редакторе. Сделаем это командой:

Сразу запоминаем ещё одну команду:

которая позволит вернуть предыдущие настройки (ей можно с успехом воспользоваться и для того же создания нового файла конфигурации; вновь введённая, она равнозначна предыдущей).

Для реализации следующих команд нам понадобятся root права. Вводим их последовательно, внося изменения в созданный только что файл:

Теперь сохраняем данные в файле firewall.rules уже знакомой вам командой:

Можете открыть и полюбопытствовать на проделанные изменения:

Или прямо из терминала:

ВНИМАНИЕ!

Теперь фаерволл Кали сконфигурирован теперь так, что ВСЯКИЙ может попасть КУДА УГОДНО. Подобная конфигурация – лёгкий способ настроить Кали для начала тестирования на проникновения при сетевой настройке виртуальных операционных систем. Открытые настройки позволяют пинговать Кали из гостевой ОС (в качестве которых у вас на хозяйской Кали могут присутствовать гостевые системы семейства Windows). Вариант, когда виртуальная машина настраивается таким образом, чтобы и гостевая и хост-система взаимопинговались, рассмотрен в статье Сетевые настройки VirtualBox в Кали Линукс.

Фаерволл Кали Линукс: основные правила

Интересующие нас в файле firewall.rules содержат следующие пустые цепочки. Откройте их список командой:

Эти цепочки показывают установки (запрет или разрешения) на типы сетевого трафика. Так, input отвечает за соединения, прибывающий на облачный сервер, output отвечает за исходящий трафик, а forward – за данные, пропускаемые системой. Каждая из цепочек,, как видно, имеет свой параметр с именем policy, которым определяется как сетевой трафик следует обработать. По умолчанию никаких фильтров на траф не предусмотрено (стоит значение accept).

Фаерволл Кали Линукс: добавляем правила

Фаерволл Кали Линукс обычно рекомендуется конфигурировать одним из двух традиционных вариантов. Либо установить правило по умолчанию принимать, и затем блокировать нежелательный трафик с помощью специальных правил, либо использовать правила для определения разрешённого трафика, обрабатывать его должным образом, а остальной поток данных просто блокировать. За основу принят именно второй вариант.

Чтобы приступить к работе с таблицами, сначала нужно добавить правила для того, чтобы фаерволл пропускал входящий трафик для нужных служб. Iptables в состоянии отслеживать трафик соединения. Вот команда на Разрешить установленные соединения:

Сейчас и потом проверяйте проделанные изменения командой:

Теперь разрешим трафик для конкретного порта для работы по защищённому каналу:

Флаг ssh в команде переводит защищённый трафик на предназначенный по умолчанию для этого порт за номером 22. Кстати, запомните эту команду. Она вам пригодится, если вы задумаете открыть для трафика другие порты. Давайте воспользуемся это командой прямо сейчас: разрешим соединение с HTTP сервером. Получается (вместо HTTP можно сразу указать номер порта), что команда примет такой вид:

И так далее по мере надобности. После добавления разрешающих правил, на остальные наложим запрет командой:

Подобные правила для политик настраиваются похожим образом для каждой из цепочек по принципу “имя_цепочкиDROP/ACCEPT“.

Фаерволл Кали Линукс: сохраняем настройки

После перезагрузки сервера, настройки исчезнут. Чтобы сохранить работу, не забывайте сохраняться командой в начале статьи:

перепишет существующие правила

добавит новое правило к существующим. Вот так выглядит простой набор команд в числе работы с фаерволом Кали.

Настройка iptables для чайников

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

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

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

Что такое Iptables?

Подсистема iptables и Netfilter уже достаточно давно встроена в ядро Linux. Все сетевые пакеты, которые проходят через компьютер, отправляются компьютером или предназначены компьютеру, ядро направляет через фильтр iptables. Там эти пакеты поддаются проверкам и затем для каждой проверки, если она пройдена выполняется указанное в ней действие. Например, пакет передается дальше ядру для отправки целевой программе, или отбрасывается.

Виды пакетов

Все пакеты делятся на три типа: входящие, исходящие и проходящие. Входящие – это те, которые были отправлены на этот компьютер, исходящие – отправленные из этого компьютера в сеть. А проходящие – это пакеты, которые просто должны быть пересланы дальше, например, если ваш компьютер выступает в качестве маршрутизатора.

Соответственно в фильтре iptables все пакеты делятся на три аналогичные цепочки:

  • Input – обрабатывает входящие пакеты и подключения. Например, если какой-либо внешний пользователь пытается подключиться к вашему компьютеру по ssh или любой веб-сайт отправит вам свой контент по запросу браузера. Все эти пакеты попадут в эту цепочку;
  • forward – эта цепочка применяется для проходящих соединений. Сюда попадают пакеты, которые отправлены на ваш компьютер, но не предназначены ему, они просто пересылаются по сети к своей цели. Как я уже говорил, такое наблюдается на маршрутизаторах или, например, если ваш компьютер раздает wifi;
  • output – эта цепочка используется для исходящих пакетов и соединений. Сюда попадают пакеты, которые были созданы при попытке выполнить ping losst.ru или когда вы запускаете браузер и пытаетесь открыть любой сайт.

Но если вы думаете что можно просто полностью закрыть цепочку Input для увеличения безопасности, то вы очень сильно ошибаетесь. При работе сети используются обе цепочки input и output. Например, вы пытаетесь выполнить ping, данные отправляются через output, но ответ приходит через input. То же самое происходит при просмотре сайтов и других действиях. А вот цепочка forward может вообще не использоваться если ваш компьютер не является маршрутизатором. Так что настройка iptables должна выполняться очень аккуратно.

Правила и действия

Перед тем как перейти к созданию списка правил iptables нужно рассмотреть как они работают и какие бывают. Для каждого типа пакетов можно установить набор правил, которые по очереди будут проверяться на соответствие с пакетом и если пакет соответствует, то применять к нему указанное в правиле действие. Правила образуют цепочку, поэтому input, output и forward называют цепочками, цепочками правил. Действий может быть несколько:

  • ACCEPT – разрешить прохождение пакета дальше по цепочке правил;
  • DROP – удалить пакет;
  • REJECT – отклонить пакет, отправителю будет отправлено сообщение, что пакет был отклонен;
  • LOG – сделать запись о пакете в лог файл;
  • QUEUE – отправить пакет пользовательскому приложению.

Правила могут проверять любые соответствия, например, по ip, по порту получателя или отправителя, заголовкам пакета и многому другому. Если пакет не подходит ни одному из правил, то к нему применяется действие по умолчанию, обычно ACCEPT.

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

  • prerouting – в эту цепочку пакет попадает перед обработкой iptables, система еще не знает куда он будет отправлен, в input, output или forward;
  • postrouting – сюда попадают все проходящие пакеты, которые уже прошли цепочку forward.

Но это еще не все. У нас еще есть таблицы iptables, с которыми тоже желательно разобраться.

Таблицы ipatables

Над цепочками правил в iptables есть еще один уровень абстракции, и это таблицы. В системе есть несколько таблиц, и все они имеют стандартный набор цепочек input, forward и output. Таблицы предназначены для выполнения разных действий над пакетами, например для модификации или фильтрации. Сейчас это для вас не так важно и будет достаточно знать что фильтрация пакетов iptables осуществляется в таблице filter. Но мы рассмотрим их все:

  • raw – предназначена для работы с сырыми пакетами, пока они еще не прошли обработку;
  • mangle – предназначена для модификации пакетов;
  • nat – обеспечивает работу nat, если вы хотите использовать компьютер в качестве маршрутизатора;
  • filter – основная таблица для фильтрации пакетов, используется по умолчанию.
Читать еще:  Мтс smart sprint 4g прошивка 5.1

С теорией почти все, теперь давайте рассмотрим утилиту командной строки iptables, с помощью которой и выполняется управление системой iptables.

Утилита Iptables

Подсистема iptables и netfilter встроены в ядро, но вот набор утилит для управления всем этим не всегда поставляется вместе с системой. Для установки утилиты в Ubuntu наберите:

sudo apt install iptables

А в дистрибутивах, основанных на Fedora, установка iptables выполняется немного по-другому:

sudo yum install iptables

Когда установка iptables будет завершена, можно переходить к настройке, но давайте сначала рассмотрим синтаксис утилиты. Обычно команда имеет такой общий вид:

$ iptables -t таблица действие цепочка дополнительные_параметры

Теперь давайте рассмотрим параметры iptables, таблица указывает таблицу, с которой нужно работать, этот параметр можно упустить, действие – нужное действие, например, создать или удалить правило, а дополнительные параметры описывают действие и правило, которое нужно выполнить.

Осталось рассмотреть основные действия, которые позволяет выполнить iptables:

  • -A – добавить правило в цепочку;
  • – проверить все правила;
  • -D – удалить правило;
  • -I – вставить правило с нужным номером;
  • -L – вывести все правила в текущей цепочке;
  • -S – вывести все правила;
  • -F – очистить все правила;
  • -N – создать цепочку;
  • -X – удалить цепочку;
  • -P – установить действие по умолчанию.

Дополнительные опции для правил:

  • -p – указать протокол, один из tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp,
    mh;
  • -s – указать ip адрес устройства-отправителя пакета;
  • -d – указать ip адрес получателя;
  • -i – входной сетевой интерфейс;
  • -o – исходящий сетевой интерфейс;
  • -j – выбрать действие, если правило подошло.

Теперь вы можем перейти рассмотрению примеров того как выполняется настройка iptables.

Примеры настройки Iptables

Мы рассмотрим несколько основных примеров, чтобы вы смогли закрепить все прочитанное выше.

Список правил

Сначала давайте рассмотрим как выполняется просмотр правил iptables, для этого достаточно опции -L:

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

iptables -L INPUT

Очистка правил

Вы не можете просто так отключить iptables остановив сервис обновления правил iptables через systemd или даже удалив набор утилит для настройки. Подсистема работает на уровне ядра и не зависит от того, что там у вас установлено. Поэтому если сделаете что-то не так, то нужно будет очистить правила. Для этого выполните:

sudo iptables -F

Или только для определенной цепочки:

sudo iptables -F Input

Напоминаю, что все эти действия выполняются для таблицы по умолчанию – filter.

Правила по умолчанию

Как я уже говорил, если для пакета не подходит ни одно правило, то для него применяется действие по умолчанию. Его можно задать с помощью опции -p:

sudo iptables -p INPUT ACCEPT
$ sudo iptables -p OUTPUT ACCEPT
$ sudo iptables -p FORWARD DROP

В этом примере мы разрешаем цепочки INPUT и OUTPUT, но запрещаем FORWARD.

sudo iptables -L

Блокировка пакетов

Для блокировки пакетов мы можем использовать действие DROP, фильтровать пакеты, которые нужно заблокировать мы можем по множеству критериев, например, протоколу, ip адресу, маске сети, порту и многому другому.

Вот так будет выглядеть команда, которая позволяет добавить правило iptables для блокировки всех входящих пакетов от 10.10.10.10:

sudo iptables -A INPUT -s 10.10.10.10 -j DROP

А теперь исходящие пакеты на этот же адрес:

sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP

Блокировка диапазона ip выполняется подобным образом. Для этого нужно использовать маску сети 10.10.10.0/24. Это будут все адреса начиная от 10.10.10.0 до 10.10.10.255:

sudo iptables -A INPUT -s 10.10.10.0/24 -j DROP

Или расширенный вариант маски:

sudo iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

Также вы можете заблокировать все входящие соединения ssh:

sudo iptables -A INPUT -p tcp –dport ssh -s 10.10.10.10 -j DROP

Как видите, добавить правило iptables очень просто.

Удаление правил

Удаление правил iptables выполняется точно так же, как и создание новых, только вместо опции A нужно использовать опцию D. Сначала смотрим список правил:

sudo iptables -L

Например, вот так можно удалить правило iptables, которое было создано вторым:

sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP

Также вы можете полностью очистить iptables выполнив команду с опцией -F:

sudo iptables -F

Сохранить правила Iptables

Все настройки iptables, которые вы указали с помощью этих команд сохранятся только до перезагрузки. После перезагрузки компьютера все изменения будут стерты. Поэтому чтобы сохранить правила iptables, нужно выполнить специальную команду. Только в разных дистрибутивах она отличается. В Ubuntu выполните:

А в Red Hat или CentOS:

sudo /sbin/service iptables save

Выводы

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

На завершение видео о том, как увеличить безопасность вашего сервера:

Настройка правил iptables в Linux

Введение

Iptables — это брандмауэр для Linux, используемый для мониторинга входящего и исходящего трафика и его фильтрации в соответствии с заданными пользователем правилами для исключения несанкционированного доступа к системе. При помощи Iptables можно разрешить на вашем сервере движение только определенного трафика. В данном руководстве мы рассмотрим использование Iptables для обеспечения безопасности веб-приложения.

Важно: В последних дистрибутивах RHEL/CentOS по умолчанию используется служба firewallD, уже установленная в системе. Если вы хотите использовать Iptables, сначала нужно ее отключить.

Для рассматриваемого примера используются VPS на Ubuntu 16.04 и локальная машина с SSH-клиентом

Основы Iptables

Все данные передаются по сети в виде пакетов. Ядро Linux предоставляет интерфейс для фильтрации пакетов входящего и исходящего трафика при помощи специальных таблиц. Iptables — это приложение командной строки и межсетевой экран для Linux, которым можно пользоваться для создания, поддержания работоспособности и проверки этих таблиц.

Можно создать несколько таблиц. В каждой таблице может содержаться несколько цепочек. Цепочка — это набор правил. Каждое правило определяет, что делать с пакетом, если он соответствует условиям. При соответствии пакета над ним выполняется целевое действие (TARGET). Это может быть проверка следующей цепочкой или один из следующих вариантов:

  • ACCEPT: разрешить передачу пакета.
  • DROP: запретить передачу пакета.
  • RETURN: пропустить текущую цепочку и перейти к следующему правилу в цепочке, которая ее вызвала.

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

  • INPUT – используется для контроля входящих пакетов. Можно разрешать или блокировать подключения по порту, протоколу или IP-адресу источника.
  • FORWARD – используется для фильтрации пакетов, приходящих на сервер, но перенаправляемых куда-либо еще.
  • OUTPUT – используется для фильтрации исходящих пакетов.

Пример настройки iptables

Давайте рассмотрим настройку iptables, на примере настройки доступа к web серверу.

Шаг 1 – Установка брандмауэра Iptables в Linux

1. Установка Iptables

Iptables предустановлен практически во всех дистрибутивах Linux, но если у вас его нет, в системах Ubuntu/Debian воспользуйтесь командами:

или в Centos/RedHat

2. Проверка текущего состояния Iptables

Эта команда позволит вам проверить состояние текущей конфигурации Iptables. Опция -L используется для выведения всех правил, а опция -v — для более подробной информации:

В рассматриваемом примере во всех трёх цепочках установлена политика по умолчанию ACCEPT. Ни в одной цепочке нет никаких правил. Давайте изменим цепочку INPUT для фильтрации входящего трафика.

Шаг 2 – Определение правил

Определение правила означает внесение его в список (цепочку). Вот пример команды Iptables с обычными опциями. Некоторые из них не являются обязательными.

Опция -A означает “append”, добавление правила в конец цепочки. Очень важным моментом является то, что правила в цепочке применяются последовательно, и если пакет удовлетворяет условиям одного из них, последующие применяться не будут. Это всегда нужно помнить при создании наборов правил. Таблица означает таблицу, в которой редактируются цепочки. По умолчанию это filter. Цепочка — имя цепочки, к которой мы добавляем правило. Интерфейс — сетевой интерфейс, для которого выполняется фильтрация трафика. Протокол указывает сетевой протокол, пакеты которого вы хотите фильтровать, источник — IP-адрес отправителя пакета, номер порта — порт на вашем сервере, для которого применяется правило. Эти и некоторые другие опции будут рассмотрены ниже при демонстрации соответствующих действий. Для более подробной информации о команде Iptables и ее опциях обратитесь к соответствующей man-странице.

1. Разрешение трафика на локальном узле

Первым делом нам нужно обязательно разрешить трафик через интерфейс loopback. Чтобы связь между приложениями и базами данных на сервере продолжалась в обычном режиме.


Опция -A используется для добавления в цепочку INPUT правила, разрешающего все соединения для интерфейса lo. Это обозначение для интерфейса loopback, он используется для всей связи на локальном узле, например, связи между базой данных и веб-приложением на одной машине.

2. Разрешение подключений к портам HTTP, SSH и SSL

Нам требуется, чтобы в обычном режиме работали порты HTTP (порт 80), https (порт 443), ssh (порт 22). Для этого нужно выполнить следующие команды. В них мы при помощи опции -p указали протокол, а при помощи опции —dport (destination port, порт на принимающей стороне, в данном случае это ваш сервер) соответствующий каждому протоколу порт:

Теперь все TCP-подключения с этими номерами портов будут разрешены. На самом деле для подключения по порту ssh лучше разрешить не со всех ip адресов, а только с определенных. Для защиты вашего сервера, как это сделать написано ниже

3. Фильтрация пакетов по источнику

Если вам нужно принимать или отклонять пакеты по IP-адресу или диапазону IP-адресов источника, можно указать их при помощи опции -s. Например, чтобы принимать пакеты с адреса 192.168.1.3:

вместо хоста также можно указать и полностью сеть, например для разрешения подключения по ssh только с локальной сети 192.168.1.0/24 пропишите правило

Отклонение команд с IP-адреса задаётся аналогичной командой с опцией DROP:

Если нужно отклонять или принимать пакеты с диапазона IP-адресов, вам потребуется воспользоваться модулем Iprange с опцией -m и при помощи параметра —src указать диапазон:

4. Запрет всего остального трафика

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

Эта команда отклоняет весь трафик, кроме указанных выше портов. Теперь можно проверить свои правила командой:

Как мы видим для интерфейса loopback у нас разрешен любой трафик, по портам 80 и 443 можно подключиться с любого ip. А по порту 22 можно подключиться только с сети 192.168.1.0/24. Не забудьте сохранить настройки, иначе после перезагрузке вы потеряете все изменения. Как сохранить написано ниже.

Читать еще:  Не работает меню «Пуск» в Windows 10 - как исправить критическую ошибку

Удаление правил iptables

Если нужно удалить все правила и прописать все заново с чистого листа, можно воспользоваться командой очистки (flush):

Она удаляет все существующие правила. Если вам нужно удалить конкретное правило, воспользуйтесь опцией -D. Сначала при помощи опции —line-numbers выведите пронумерованный список всех правил:


Для удаления правила нужно указать цепочку и номер в списке. В нашем случае это цепочка INPUT и номер 3.

Настройка NAT (MASQUERADE)

Большинство организаций получает от своих интернет-провайдеров ограниченное количество публично доступных IP-адресов, поэтому администратору требуется разделять доступ к Интернету, не выдавая каждому узлу сети публичный IP-адрес. Для доступа к внутренним и внешним сетевым службам узлы локальной сети используют внутренний (частный) IP-адрес. Граничные маршрутизаторы (межсетевые экраны) могут получать входящие соединения из Интернета и передавать их нужным узлам локальной сети и наоборот, направлять исходящие соединения узлов удаленным интернет-службам. Такое перенаправление сетевого трафика может быть опасным, особенно учитывая доступность современных средств взлома, осуществляющих подмену внутренних IP-адресов и таким образом маскирующих машину злоумышленника под узел вашей локальной сети. Чтобы этого не случилось, в Iptables существуют политики маршрутизации и перенаправления, которые можно применять для исключения злонамеренного использования сетевых ресурсов. Политика FORWARD позволяет администратору контролировать маршрутизацию пакетов в локальной сети. Например, чтобы разрешить перенаправление всей локальной сети, можно установить следующие правила (в примере предполагается, что внутренний IP-адрес брандмауэра/шлюза назначен на интерфейсе eth1):

Эти правила предоставляют системам за шлюзом доступ к внутренней сети. Шлюз направляет пакеты от узла локальной сети к узлу назначения и наоборот (опции -o и -i), передавая их через устройство eth1.

Важно: по умолчанию в большинстве дистрибутивов Linux перенаправление отключено. Чтобы его включить, нужно внести изменения в файл конфигурации /etc/sysctl.conf. Найдите там такую строчку net.ipv4.ip_forward = 0 и измените 0 на 1:

Разрешение перенаправления пакетов внутренним интерфейсом брандмауэра позволяет узлам локальной сети связываться друг с другом, но у них не будет доступа в Интернет. Чтобы обеспечить узлам локальной сети с частными IP-адресами возможность связи с внешними публичными сетями, нужно настроить на брандмауэре трансляцию сетевых адресов (NAT). Создадим правило:

В этом правиле используется таблица NAT, поэтому она указывается в явном виде (-t nat) и указана встроенная цепочка этой таблицы POSTROUTING для внешнего сетевого интерфейса eth0 (-o eth0). POSTROUTING позволяет изменять пакеты, когда они выходят из внешнего интерфейса шлюза. Целевое действие -j MASQUERADE заменяет (маскирует) частный IP-адрес узла внешним IP-адресом шлюза. Это называется IP-маскарадингом.

Проброс портов

Если в вашей внутренней сети есть сервер, который должен быть доступен извне, можно воспользоваться целевым действием -j DNAT цепочки PREROUTING в таблице NAT и указать IP-адрес и порт места назначения, на которые будут перенаправляться входящие пакеты, запрашивающие соединение с вашей внутренней службой. Например, если нужно перенаправлять входящие HTTP-запросы по порту 80 на выделенный HTTP-сервер Apache по адресу 172.31.0.23, выполните команду:

Данное правило определяет использование встроенной цепочки PREROUTING в таблице NAT для перенаправления входящих HTTP-запросов на порт 80 указанного IP-адреса 172.31.0.23. Такой способ трансляции сетевых адресов называется перенаправлением или пробросом портов.

Сохранение изменений в iptables

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

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

Восстановление настроек

Если вы еще не сохраняли настройки, и хотите вернуться к первоначальным настройкам. Используйте iptables-restore.

Заключение

В данном руководстве мы рассмотрели основные моменты работы с Iptables: разрешение трафика только на определенных портах, фильтрацию пакетов по источнику, основы настройки трансляции сетевых адресов (NAT) и сохранение правил после перезагрузки. Однако, важно заметить, что iptables работает только с трафиком ipv4. Если ваш VPS поддерживает ipv6, нужно установить отдельные правила при помощи ip6tables.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Как настроить Firewall Iptables для ОС Линукс

Для новичков и продвинутых пользователей операционный системы Линукс был разработан специальный межсетевой экран (так называемый «файрвол») для защиты от угроз извне, который носит имя Iptables. Ниже в инструкции мы объясним, как его установить и настроить на любых машинах под ОС Linux.

Что представляет собой Iptables

Данная утилита – это надежный межсетевой экран, минимизирующий риск вирусных и хакерских атак. Процесс настройки файрвола происходит через командную строку при помощи установленных команд, которые позволяют юзеру самостоятельно контролировать поступление и отправление трафика. При попытке установки соединений с ПК, утилита обращается к своим правилам и проверяет, пропустить или ограничить соединение. В случае, когда никакого конкретного правила не выставлено, действия проходят по умолчанию.

Файрвол предусмотрен стандартно во всех операционных системах Линукс. Для установки, если его внезапно не оказалось в сборке, или обновления следует применить такую команду:

sudo apt-get install iptables

Альтернативой данной утилите может послужить Firestarter – он имеет графический интерфейс и разработан специально для пользователей, которые испытывают трудности с работой через командную строку.

В случае настроек Iptables по удаленному SSH-соединению, пользователю следует проявлять аккуратность: одно ошибочное правило способно прервать подключение и запретить юзеру доступ к удаленной машине.

Какие бывают правила

Для легкой работы с файрволом разработана тройка основных правил (команд):

1.Input.

Правило применяется, когда необходимо контролировать входящий трафик. Например, когда юзер подключается к удаленному серверу по протоколу Secure Shell, файрвол начнет сравнивать его айпи с другими айпи из своего списка. В зависимости от результата, то есть от наличия в списке запретов, доступ пользователю будет открыт или закрыт.

2.Forward.

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

3.Output.

Правило применяется к исходящим соединениям. Например, юзер хочет проверить пинг к одному из заданных сайтов – утилита вновь сверится со своими правилами из списка и определит, как поступить при пинге веб-сайта: разрешить или запретить.

Делая ping к внешнему хосту, машина не только отправляет пакет, но и дожидается обратного ответа. Поэтому, настраивая Iptables, не нужно забывать о наличии двухсторонних коммуникаций и запрещать подключение к серверам через протокол SSH.

Как определиться с назначением файрвола

Перед тем, как заниматься настройкой утилиты, потребуется разобраться с ее предназначением, а именно – действующими цепочками правил, то есть то, что она будет делать по умолчанию. Как отреагировать, когда запрашиваемые соединения не подходят ни к одному правилу?

Для начала потребуется понять, какие из настроек межсетевого экрана уже установлены. Для этого применяется команда –L:

Для четкого и понятного вывода информации можно воспользоваться дополнительной командой «grep». В итоге мы получаем тройку цепочек, у каждой из которых стоит разрешение приема трафика. Подобные правила предпочитают устанавливать при стандартной настройке.

Если в процессе эксплуатации Iptables конфигурация была кем-то изменена, значения могут стоять другие. Проверить это можно за пару секунд, достаточно ввести команды:

iptables –policy INPUT ACCEPT iptables –policy OUTPUT ACCEPT iptables –policy FORWARD ACCEPT

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

Можно поступить диаметрально противоположным методом: установить запрет на все соединения, после чего давать разрешения только некоторым из них. Это можно реализовать таким способом:

iptables –policy INPUT DROP iptables –policy OUTPUT DROP iptables –policy FORWARD DROP

Что делать с соединением

Настроив поведение утилиты, которое будет происходить автоматически, следует приступать к правилам, обрабатывающим входящий/исходящий трафик. Основные способы взаимодействия с трафиком:

•Accept – разрешение определенного соединения;

•Drop – игнорирование запросов (межсетевой экран продолжает свое функционирование, будто никакого запроса не происходило, а запрашивающие ресурсы не узнают об игнорировании);

•Reject – блокировка входящего трафика и отправка ответных сообщений с обозначением ошибки (в таком случае запрашивающие ресурсы будут уведомлены о блокировке их трафика).

Пример того, как будет выглядеть ping для

Разрешенного соединения (Accept):

Проигнорированного трафика (Drop):

Отклоненного подключения (Reject):

Разрешение и блокировка указанных соединений Iptables

Как только политика отношения к трафику настроена, пора приступать к определению правил для конкретных соединений. Мы рассмотрим вариант с отклонением указанного подключения. Способы для разрешения и игнорирования будут устанавливаться похожим методом.

Воспользуемся командой –А. Она позволит добавить новое правило к уже имеющейся цепочке. Межсетевой экран начинает проверку с самого верха, проходя по каждому из правил до тех пор, пока не обнаружит совпадения или не закончит список.

В случае, когда необходимо разместить правила в определенное место (перед каким-то определенным), следует воспользоваться командой:

iptables -I [цепочка] [номер позиции по списку для нового правила]

Что делать с соединениями от одного айпи

Для блокировки трафика, поступающего из одного и того же источника (например, айпи 120.120.120.120) подойдет команда:

iptables -A INPUT -s 120.120.120.120 -j DROP

Для блокировки трафика, поступающего с нескольких айпишников в определенном диапазоне, следует воспользоваться стандартной записью масок посредством слэша:

iptables -A INPUT -s 120.120.120.0/24 -j DROP

Либо записью необходимого диапазона:

iptables -A INPUT -s 120.120.120.0/255.255.255.0 -j DROP

Подключения к определенному порту

Следующая команда сделает блокировку соединений типа Secure Shell с хостом 120.120.120.120:

iptables -A INPUT -p tcp –dport ssh -s 120.120.120.120 -j DROP

На месте Secure Shell допустимо применение любого протокола. После команды –р указывается тип подключений, в данном случае – TCP. В случае, когда используется другой тип, следует указывать его.

Любому айпишнику будет запрещено подключаться к машине по Secure Shell соединению, если выполнить:

iptables -A INPUT -p tcp –dport ssh -j DROP

О состояниях соединения

Существует множество протоколов, которым требуется двусторонняя коммуникация. К примеру, пользователю понадобилось поработать с SSH-соединением, ему придется внести правило сразу и в Output, и в Input.

Что делать, если юзер хочет предоставить разрешение исключительно входящему соединению? В этом случае поможет состояние соединения. Оно даст возможность пользователю описать любую двустороннюю коммуникацию, в которой разрешено подключение заданного направления.

Разрешим соединение типа SSH, приходящее через хост 120.120.120.120. Система будет отправлять данные по этому протоколу только, если сессия установлена.

iptables -A INPUT -p tcp –dport ssh -s 120.120.120.120 -m state –state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp –sport 22 -d 120.120.120.120 -m state –state ESTABLISHED -j ACCEPT

Как сохранить изменения в конфигурации файрвола

После всех изменений, которые мы внесли в цепочку межсетевого экрана, понадобится их сохранение. Иначе перезапуск утилиты удалит проделанные нами настройки. Команда сохранения будет различаться от дистрибутива к дистрибутиву Линукс.

Для Убунту команда выглядит так:

Для Red Hat и CentOS:

=/sbin/service iptables save

Дополнительно

Чтобы вывести сконфигурированное ранее правило:

Чтобы просмотреть данные о входящих/исходящих пакетах и трафике, достаточно добавить ключ –v.

Данные об имени хоста, протоколах, сетях появятся в цифровом виде, если дописать в команду –n.

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

голоса
Рейтинг статьи
Ссылка на основную публикацию
Статьи c упоминанием слов: