Что такое iptables linux
ИТ База знаний
Полезно
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Погружение в Iptables – теория и настройка
Большой и наглядный материал
Онлайн курс по Linux
Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps
Netfilter является основой для построения Firewall’а в дистрибутивах Linux, но для того, чтобы он заработал в полную силу его нужно настроить. Как раз с помощью iptables мы можем взаимодействовать с хуками Netfilter и создавать правила фильтрации, маршрутизации, изменения и транслирования пакетов. Иногда про Netfilter забывают и называют эту связку просто iptables.
Введение
Почему же iptables всем так понравился, что его стали включать во все сборки Linux? Всё дело в том, что iptables действительно очень прост в настройке. С помощью него можно решить следующие задачи:
Прежде чем переходить к практике, давайте обратимся к теории и поймём саму логику iptables.
Логика и основные понятия iptables
Правила
Как и все файрволлы, iptables оперирует некими правилами (rules), на основании которых решается судьба пакета, который поступил на интерфейс сетевого устройства (роутера).
Ну допустим у нас есть сетевое устройство с адресом 192.168.1.1, на котором мы настроили iptables таким образом, чтобы запрещать любые ssh (порт 22) соединения на данный адрес. Если есть пакет, который идёт, например, с адреса 192.168.1.15 на адрес 192.168.1.1 и порт 22, то iptables скажет: “Э, нет, брат, тебе сюда нельзя” и выбросит пакет.
Или вообще ничего не скажет и выбросит, но об этом чуть позже 🙂
Каждое правило в iptables состоит из критерия, действия и счётчика
Цепочки
Набор правил формируется в цепочки (chains)
Существуют базовые и пользовательские цепочки.
Существует 5 базовых цепочек и различаются они в зависимости от того, какое назначение имеет пакет. Имена базовых цепочек записываются в верхнем регистре.
В базовых цепочках обязательно устанавливается политика по умолчанию, как правило – принимать (ACCEPT) или сбрасывать (DROP) пакеты. Действует она только в цепочках INPUT, FORWARD и OUTPUT
Таблица
Существует 5 таблиц:
Теперь мы можем представить себе логику iptables в виде следующей схемы:
Действия
Итак, наиболее используемые действия:
Помимо этих четырех, есть ещё масса других действий, которые называются расширенными (extension modules):
Есть действия, которые доступны только в определенной цепочке и таблицах, например, только в табоице nat и цепочках OUTPUT и PREROUTING доступно действие DNAT, которое используется в NAT’ировании и меняет Destination IP пакета. В той же таблице, только в цепочке POSTRUNNING доступно действие SNAT, меняющее Source IP пакета.
Отдельно остановимся на действии MASQUERADE, которое делает то же самое что SNAT, только применяется на выходном интерфейсе, когда IP адрес может меняться, например, когда назначается по DHCP.
Пишем правила
Отлично, теперь давайте приближаться к практике. Как Вы уже поняли, мы будем писать правила, поэтому нам нужно понять, как они строятся.
Итак, допустим у нас есть хост с адресом 192.168.2.17, на 80 (http) порту которого, работает вэб-сервер Apache. Мы заходим на адрес http://192.168.2.17 с хоста с адресом 192.168.2.2 и всё отлично работает:
А теперь открываем командную строку под root на хосте 192.168.2.17 и пишем:
Попробуем открыть открыть http://192.168.2.17 ещё раз:
Упс, не работает. Давайте теперь разбираться, что мы наделали?
Всё очень просто – данной командой мы:
Таким образом, мы заблокировали все пакеты с адреса 192.168.2.2 на локальный порт 80 и тем самым закрыли доступ к нашему серверу Apache для данного хоста.
Чтобы открыть доступ опять просто поменяем ключ -A в правиле на -D, тем самым мы удалим данное правило из iptables.
Синтаксис iptables
Друзья, на самом деле в iptables очень богатый синтаксис правил. Полный список ключей и параметров вы можете найти в официальном гайде на iptables.org. Мы же приведём самые “ходовые” опции, которыми вы, вероятно, будете пользоваться. Чтобы вы не запутались, мы приводим их в табличках ниже.
Для удобства, в iptables реализовано очень много сокращений для разных ключей. Например, мы писали ключ -A вместо полного —append, -p вместо полного —proto и -s вместо полного —source, дальше мы покажем, что ещё можно сократить и где применить.
Начнём с команд для редактирования правил и цепочек – добавления, удаления, замены и так далее:
Продолжим синтаксисом настройки правил – на каком сетевом интерфейсе следить за пакетами, какой протокол проверять, адрес источника, назначения и так далее.
Теперь рассмотрим опции для действий, которые должны сработать по совпадению критериев:
коротко | синтаксис опции | применение |
-j | —jump | применяет одно из действий accept, drop, reject и другие |
-g | —goto | переходит к другой цепочке правил |
Теперь рассмотрим какую информацию мы можем вытянуть с помощью iptables и какие опции для этого нужно использовать:
коротко | синтаксис команды | применение |
-l | —list <цепочка> | показывает правила в цепочке или всех цепочках. по умолчанию покажет таблицу filter |
-s | —list-rules <цепочка> | показывает текст правила в цепочке или всех цепочках |
-n | —numeric | покажет параметры правила в числовом виде. например не порт будет не http, а 80 |
-v | —verbose | выводит более подробную информацию |
-v | —version | покажет версию iptables |
-x | —exact | покажет точные значения числовых параметров |
—line-numbers | покажет номера правил |
Пример посложнее
Давайте рассмотрим ещё один пример. Допустим у нас во локальной сети есть хост 192.168.2.19 с сервером Apache. Мы хотим сделать его доступным из Интернета. Для этого нам нужно воспользоваться возможностями таблицы nat и написать правило, которое будет перенаправлять входящий http трафик на внешний интерфейс (пусть будет enp0s3 с адресом 101.12.13.14) и порт 80 на адрес нашего сервера внутри сети и 80 порт – 192.168.2.19:80. По сути – нужно сделать проброс портов.
Напишем такое правило:
Теперь если мы перейдём по адресу http://101.12.13.14, то должны попасть на наш Apache.
Возможности iptables настолько обширны, что мы могли бы начать писать новую Базу знаний по нему. В статье мы показали лишь базовые варианты применения. Это действительно великий инструмент и освоить его не так уж сложно. Надеюсь, данная статья Вам в этом поможет. Спасибо за внимание!
Настройка iptables для чайников
Каждый компьютер, подключенный к сети, находится в потенциальной опасности. В сети очень много угроз начиная от программ, которые будут пытаться любым способом проникнуть в систему и заканчивая хакерами, которые хотят получить доступ к нужному им компьютеру. А программное обеспечение, установленное на компьютере, может содержать еще не известные и неисправленные уязвимости, которые и могут стать дырой в безопасности.
Если для домашних компьютеров это не очень актуально, так как они подключены к сети через роутеры и NAT, которые скрывают их от внешней сети, то для серверов это актуально как никогда. В операционной системе Linux в ядро встроен очень гибкий и надежный фаервол iptables.
Именно с помощью этой программы выполняется защита системы от внешних вторжений, перенаправление портов, а также еще очень много действий с трафиком. Но ее минус в том, что она немного сложна в настройке. В этой статье будет рассмотрена настройка iptables для чайников. Я надеюсь, что после нее вы сможете уверенно пользоваться базовыми возможностями iptables.
Что такое Iptables?
Подсистема iptables и Netfilter уже достаточно давно встроена в ядро Linux. Все сетевые пакеты, которые проходят через компьютер, отправляются компьютером или предназначены компьютеру, ядро направляет через фильтр iptables. Там эти пакеты поддаются проверкам и затем для каждой проверки, если она пройдена выполняется указанное в ней действие. Например, пакет передается дальше ядру для отправки целевой программе, или отбрасывается.
Виды пакетов
Соответственно в фильтре iptables все пакеты делятся на три аналогичные цепочки:
Но если вы думаете что можно просто полностью закрыть цепочку Input для увеличения безопасности, то вы очень сильно ошибаетесь. При работе сети используются обе цепочки input и output. Например, вы пытаетесь выполнить ping, данные отправляются через output, но ответ приходит через input. То же самое происходит при просмотре сайтов и других действиях. А вот цепочка forward может вообще не использоваться если ваш компьютер не является маршрутизатором. Так что настройка iptables должна выполняться очень аккуратно.
Правила и действия
Перед тем как перейти к созданию списка правил iptables нужно рассмотреть как они работают и какие бывают. Для каждого типа пакетов можно установить набор правил, которые по очереди будут проверяться на соответствие с пакетом и если пакет соответствует, то применять к нему указанное в правиле действие. Правила образуют цепочку, поэтому input, output и forward называют цепочками, цепочками правил. Действий может быть несколько:
Правила могут проверять любые соответствия, например, по ip, по порту получателя или отправителя, заголовкам пакета и многому другому. Если пакет не подходит ни одному из правил, то к нему применяется действие по умолчанию, обычно ACCEPT.
Когда мы разобрались с правилами, можно вернутся обратно к цепочкам. Кроме перечисленных выше, есть еще две дополнительные цепочки правил:
Но это еще не все. У нас еще есть таблицы iptables, с которыми тоже желательно разобраться.
Таблицы ipatables
Над цепочками правил в iptables есть еще один уровень абстракции, и это таблицы. В системе есть несколько таблиц, и все они имеют стандартный набор цепочек input, forward и output. Таблицы предназначены для выполнения разных действий над пакетами, например для модификации или фильтрации. Сейчас это для вас не так важно и будет достаточно знать что фильтрация пакетов iptables осуществляется в таблице filter. Но мы рассмотрим их все:
С теорией почти все, теперь давайте рассмотрим утилиту командной строки iptables, с помощью которой и выполняется управление системой iptables.
Утилита Iptables
Подсистема iptables и netfilter встроены в ядро, но вот набор утилит для управления всем этим не всегда поставляется вместе с системой. Для установки утилиты в Ubuntu наберите:
sudo apt install iptables
А в дистрибутивах, основанных на Fedora, установка iptables выполняется немного по-другому:
sudo yum install iptables
Когда установка iptables будет завершена, можно переходить к настройке, но давайте сначала рассмотрим синтаксис утилиты. Обычно команда имеет такой общий вид:
Осталось рассмотреть основные действия, которые позволяет выполнить iptables:
Дополнительные опции для правил:
Теперь вы можем перейти рассмотрению примеров того как выполняется настройка iptables.
Примеры настройки Iptables
Мы рассмотрим несколько основных примеров, чтобы вы смогли закрепить все прочитанное выше.
Список правил
Также вы можете указать нужную цепочку, чтобы вывести правила только для нее:
Очистка правил
Вы не можете просто так отключить iptables остановив сервис обновления правил iptables через systemd или даже удалив набор утилит для настройки. Подсистема работает на уровне ядра и не зависит от того, что там у вас установлено. Поэтому если сделаете что-то не так, то нужно будет очистить правила. Для этого выполните:
Или только для определенной цепочки:
Правила по умолчанию
В этом примере мы разрешаем цепочки INPUT и OUTPUT, но запрещаем FORWARD.
Блокировка пакетов
Для блокировки пакетов мы можем использовать действие DROP, фильтровать пакеты, которые нужно заблокировать мы можем по множеству критериев, например, протоколу, ip адресу, маске сети, порту и многому другому.
Вот так будет выглядеть команда, которая позволяет добавить правило iptables для блокировки всех входящих пакетов от 10.10.10.10:
А теперь исходящие пакеты на этот же адрес:
Блокировка диапазона ip выполняется подобным образом. Для этого нужно использовать маску сети 10.10.10.0/24. Это будут все адреса начиная от 10.10.10.0 до 10.10.10.255:
Или расширенный вариант маски:
Также вы можете заблокировать все входящие соединения ssh:
Как видите, добавить правило iptables очень просто.
Удаление правил
Удаление правил iptables выполняется точно так же, как и создание новых, только вместо опции A нужно использовать опцию D. Сначала смотрим список правил:
Например, вот так можно удалить правило iptables, которое было создано вторым:
Сохранить правила Iptables
Все настройки iptables, которые вы указали с помощью этих команд сохранятся только до перезагрузки. После перезагрузки компьютера все изменения будут стерты. Поэтому чтобы сохранить правила iptables, нужно выполнить специальную команду. Только в разных дистрибутивах она отличается. В Ubuntu выполните:
А в Red Hat или CentOS:
sudo /sbin/service iptables save
Выводы
Вот и все. Наша статья о том, как выполняется настройка iptables для чайников подошла к концу. Эта система действительно сложна, на первый взгляд, но если разобраться, то с помощью нее возможно делать очень интересные вещи. В этой статье была рассмотрены основы использования iptables, в следующих статьях мы более подробно остановимся на практическом применении.
На завершение видео о том, как увеличить безопасность вашего сервера:
Руководство по Iptables: как это работает (понятное объяснение с примерами)
На следующей диаграмме приведены таблицы с соответствующими цепочками, поддерживаемыми в iptables :
Порядок прохождения цепочки пакетов в сетевом стеке ядра следующий:
Затем установите пакет iptables-services (в CentOS):
(В Ubuntu вы должны установить iptables с помощью sudo apt-get install iptables ).
Настройка iptables
В системе с конфигурацией брандмауэра по умолчанию вывод будет следующим:
Мы можем быть более конкретными, например, перечислив все правила INPUT для таблицы nat с помощью следующей команды:
Если только -t ( —table не указан) параметр опции Iptables принимает фильтр таблицу по умолчанию.
Когда вы разрабатываете правила брандмауэра с чистого листа, обычно рекомендуются следующие шаги:
Предыдущие команды не выводят никаких результатов, если нет ошибки или вы не вызываете команду iptables с параметром -v ( —verbose ); Например:
Результат выглядит следующим образом:
Далее мы настроим политику брандмауэра по умолчанию.
По умолчанию iptables позволяет всем пакетам проходить через сетевую цепочку (брандмауэр). Конфигурация безопасного брандмауэра должна использовать DROP в качестве цели по умолчанию для соответствующих цепочек:
Параметр опции -P ( —policy ) устанавливает политику для конкретной цепочки (такой как INPUT ) для данной цели (например, DROP ). Цель DROP заставляет систему корректно игнорировать все пакеты.
На этом этапе, если мы сохраним конфигурацию брандмауэра, система не будет принимать ни входящие, ни исходящие пакеты. Итак, мы должны быть осторожны, чтобы случайно не потерять доступ к системе, если мы использовали SSH или не имеем прямого доступа к консоли.
Далее мы настроим правила брандмауэра.
Давайте создадим несколько примеров правил брандмауэра, таких как прием соединений SSH, DNS и HTTPS.
Следующие команды разрешают доступ по SSH из локальной сети ( 192.168.0.0/24 ):
Поясним параметры, которые использовались в предыдущем блоке кода:
Точно так же следующие команды включают HTTPS-трафик:
Чтобы включить DNS-трафик, нам нужно использовать следующие команды:
Результат выглядит следующим образом:
Мы также можем выгрузить текущую конфигурацию в файл (например, iptables.config ) для дальнейшего использования с помощью следующей команды:
Настройка Iptables для чайников
Подключение к сети само по себе несет в себе «угрозу», ведь за счет «видимости» хакеры получают возможность просканировать удаленный компьютер на предмет открытых портов, доступных для подключения извне. И наиболее подвержены сетевым опасностям серверы, которые специально и «открывают» для внешних пользователей.
Что такое Iptables?
Операционные системы Linux, на которых чаще всего и функционируют серверы (виртуальные машины), имеют встроенный инструмент защиты – программный фильтр Iptables. Все сетевые пакеты идут через ядро приложения и проходят проверку на безопасность для компьютера. Сценария всего два – или данные передаются дальше на обработку, или полностью блокируются.
Виды пакетов
Информационные пакеты фильтруются исходя из назначения. Под контроль попадают все данные, входящие на сервер, исходящие из него или проходящие через него как маршрутизатор (например, если компьютер используется в качестве прокси). Такой подход создает сплошной защитный экран (файрвол), через который практически нереально проникнуть с вредоносными целями.
В реальной работе сервера постоянно формируется минимум два вида пакетов – Input и Output. Ведь на каждый запрос пользователя положено дать ответ: сначала о поступлении данных на сервер, а затем и о результате обработки. Если «принято решение» отказать в доступе, об этом также сообщается на удаленное рабочее место. Иначе запрос зависнет, и пользователь будет видеть пустой экран.
Правила и действия Iptables
На каждый тип пакетов распространяется определенный набор правил, и их следует учитывать при настройке программы Iptables. Большая часть запросов проходит в виде последовательных цепочек в различных комбинациях. Если ошибиться на этом этапе, приложение будет функционировать со сбоями и блокировать «полезные» запросы.
Правила проверки устанавливаются в зависимости от характера соединения. Возможен мониторинг IP-адреса, порта подключения, отправителя, заголовка. Если пакет не проходит хотя бы по одному критерию, осуществляется действие ACCEPT (сквозное пропускание пакета, который не требуется блокировать файрволом). Фильтрация возможна на двух этапах:
Таблицы Iptables
Существует еще один «уровень» обработки – это таблицы, содержащие правила обработки тех или иных действий над пакетами. Например, фильтрация данных в Iptables осуществляется в таблице filter. К ней придется обращаться чаще всего.
Об основах работы с утилитой Iptables я рассказал, теперь можно приступать к тестовому запуску.
Запуск утилиты Iptables
Перед активацией приложение требуется установить из стандартного репозитория Linux. Так, для инсталляции в Ubuntu подойдет команда:
В дистрибутиве, базируемом на ядре Fedora, она выглядит несколько иначе:
Общий синтаксис запуска программы выглядит следующим образом:
Перечень основных действий, для выполнения которых используется Iptables:
В качестве дополнительных параметров используются опции:
Примеры настройки Iptables
Чтобы закрепить навыки настройки Iptables, рекомендуется протестировать утилиту в разных режимах. Например, отобразить список правил, очистить его, установить параметры по умолчанию или удалить их.
Список правил
Просмотр правил Iptables осуществляется командой:
Также есть возможность указать нужную цепочку, например:
Очистка правил
При любых ошибках в работе Iptables, чтобы исключить нарушение функционирования ядра перед другими действиями, требуется очистить правила, «обнулить» вводные данные. Выполняется эта процедура командой:
Если речь идет об определенной цепочке, то она будет выглядеть иначе:
Перечисленные действия выполняются для таблицы filter, которая подключена изначально.
Правила «по умолчанию»
Задаются правила «по умолчанию» вручную. Пример команд:
Здесь мы разрешаем все цепочки INPUT и OUTPUT, запрещаем FORWARD.
Блокировка пакетов
Заблокировать пакеты можно действием DROP. Оно позволяет включать фильтрацию по разным признакам вроде IP-адреса, маске сети, порту и пр.
Блокируются входящие пакеты на IP 20.20.20.20.
Теперь мы заблокировали пакеты, исходящие на IP 20.20.20.20.
Есть возможность указать маску сети, например, 20.20.20.0/255. Тогда правила будут применяться ко всем IP, входящим в указанный диапазон. Если же требуется заблокировать подключение строго по определенному протоколу, вводится команда:
Она блокирует все входящие соединения по SSH.
Удаление правил
При удалении правил в Iptables вводится команда с опцией -D. Но перед этим может понадобиться просмотреть перечень правил:
Пример удаления правила:
Если требуется полное удаление правил, применяется команда:
Сохранение правила Iptables
Теперь остается опробовать режим сохранения правил. Важно учитывать, что он действует до перезагрузки компьютера. После этой процедуры необходимо задавать их заново. В Ubuntu процесс требует ввода команды:
Для операционных систем на ядре Red Hat и CentOS она выглядит иначе:
Ничего сложного в настройке и управлении Iptables нет. Основные функции понятны даже новичкам, поэтому утилита и остается стандартом де-факто для всех систем на базе Linux.