Каждый компьютер, подключенный к сети, находится в потенциальной опасности. В сети очень много угроз, начиная от программ, которые будут пытаться любым способом проникнуть в систему и заканчивая хакерами, которые хотят получить доступ к нужному им компьютеру. А программное обеспечение, установленное на компьютере, может содержать еще не известные и неисправленные уязвимости, которые и могут стать дырой в безопасности.
Если для домашних компьютеров это не очень актуально, так как они подключены к сети через роутеры и NAT, которые скрывают их от внешней сети, то для серверов это актуально как никогда. В операционной системе Linux в ядро встроен очень гибкий и надежный фаервол iptables.
Именно с помощью этой программы выполняется защита системы от внешних вторжений, перенаправление портов, а также еще очень много действий с трафиком. Но ее минус в том, что она немного сложна в настройке. В этой статье будет рассмотрена настройка iptables для чайников. Я надеюсь, что после нее вы сможете уверенно пользоваться базовыми возможностями iptables.
Содержание статьи
Что такое Iptables?
Подсистема iptables и Netfilter уже достаточно давно встроена в ядро Linux. Все сетевые пакеты, которые проходят через компьютер, отправляются компьютером или предназначены компьютеру, ядро направляет через фильтр iptables. Там эти пакеты поддаются проверкам и затем для каждой проверки, если она пройдена выполняется указанное в ней действие. Например, пакет передается дальше ядру для отправки целевой программе, или отбрасывается.
Виды пакетов
Все пакеты делятся на три типа: входящие, исходящие и проходящие. Входящие - это те, которые были отправлены на этот компьютер, исходящие - отправленные из этого компьютера в сеть. А проходящие - это пакеты, которые просто должны быть пересланы дальше, например, если ваш компьютер выступает в качестве маршрутизатора.
Соответственно в фильтре iptables все пакеты делятся на три аналогичные цепочки:
- Input - обрабатывает входящие пакеты и подключения. Например, если какой-либо внешний пользователь пытается подключиться к вашему компьютеру по ssh или любой веб-сайт отправит вам свой контент по запросу браузера. Все эти пакеты попадут в эту цепочку;
- forward - эта цепочка применяется для проходящих соединений. Сюда попадают пакеты, которые отправлены на ваш компьютер, но не предназначены ему, они просто пересылаются по сети к своей цели. Как я уже говорил, такое наблюдается на маршрутизаторах или, например, если ваш компьютер раздает wifi;
- output - эта цепочка используется для исходящих пакетов и соединений. Сюда попадают пакеты, которые были созданы при попытке выполнить ping losst.pro или когда вы запускаете браузер и пытаетесь открыть любой сайт.
Но если вы думаете что можно просто полностью закрыть цепочку 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, с которыми тоже желательно разобраться.
Таблицы iptables
Над цепочками правил в iptables есть еще один уровень абстракции, и это таблицы. В системе есть несколько таблиц, и все они имеют стандартный набор цепочек input, forward и output. Таблицы предназначены для выполнения разных действий над пакетами, например для модификации или фильтрации. Сейчас это для вас не так важно и будет достаточно знать что фильтрация пакетов iptables осуществляется в таблице filter. Но мы рассмотрим их все:
- raw - предназначена для работы с сырыми пакетами, пока они еще не прошли обработку;
- mangle - предназначена для модификации пакетов;
- nat - обеспечивает работу nat, если вы хотите использовать компьютер в качестве маршрутизатора;
- filter - основная таблица для фильтрации пакетов, используется по умолчанию.
С теорией почти все, теперь давайте рассмотрим утилиту командной строки 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
Также вы можете указать нужную цепочку, чтобы вывести правила только для нее:
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 -D OUTPUT -s 10.10.10.10 -j DROP
Также вы можете полностью очистить iptables выполнив команду с опцией -F:
sudo iptables -F
Сохранить правила Iptables
Все настройки iptables, которые вы указали с помощью этих команд сохранятся только до перезагрузки. После перезагрузки компьютера все изменения будут стерты. Поэтому чтобы сохранить правила iptables, нужно выполнить специальную команду. Только в разных дистрибутивах она отличается. В Ubuntu выполните:
sudo /sbin/iptables-save
А в Red Hat или CentOS:
sudo /sbin/service iptables save
Выводы
Вот и все. Наша статья о том, как выполняется настройка iptables для чайников подошла к концу. Эта система действительно сложна, на первый взгляд, но если разобраться, то с помощью нее возможно делать очень интересные вещи. В этой статье была рассмотрены основы использования iptables, в следующих статьях мы более подробно остановимся на практическом применении.
На завершение видео о том, как увеличить безопасность вашего сервера:
Проверьте ошибки в правилах-примерах ) там, где пишете удалить, вместо -D написано -A, там где пишете пример с цепочкой по умолчанию вместо -P написано -p ... И еще есть несколько ошибок связанных с регистром .
Боюсь Вы невнимательны. Там где -A - это копия предыдущей команды. А на скрине - ее удаление.
Согласен с человеком по поводу -P -p.
Ошибок в статье много, проверяйте же!
С ошибками беда, зато не дает чайникам расслабляться.:-)
Спасибо автору за материал!
чайники на то и чайники что бы сначала просто повторять, а потом ужо думать)
Если можно напишите про Xtabless-addons для IPtables и такие кошерные вещи как MIRROR, DELUDE, TARPIT и CHAOS - думаю будет полезно ...
Например : TARPIT — широко известный инструмент для активного противодействия DoS-атакам и сканированиям TCP-портов, способный в определенный обстоятельствах неплохо проучить атакующего.
Оставлю это здесь. На всякий случай.
Чтобы получить ответ nslookup нужно добавить такое правило:
-A INPUT -p udp -m udp --sport 53 -j ACCEPT
ключевой параметр > --sport
Не проверять текст статьи и, главное, код перед публикацией - это невежество.
Подскажите, мне нужно весь трафик перекинуть с одного сетевого интерфейса (3G) на устройство(устройство относительно старое и не поддерживает современные 3G модемы), подключенное к другому сетевому интерфейсу (сет.карта), и соответственно наоборот, т.е устройство должно думать, что подключено напрямую к интернету, я так понимаю это NAT 1:1. Можно ли это организовать с помощью iptables?
Оч странно в статье для новичков писать вы можете заблокировать то, можете сё. Где базовые варианты настройки? Что конкретно нужно запрещать в стандартной системе?
********!!! ввел sudo iptables -F и потерял доступ к серверу!!! ******!!!
********** тут нет. Ты знал, что подключен по ssh, и удалил правила. И незная смысла команд, ввёл команду. И у тебя стоит iptables -P INPUT DROP.
Ну ты кадр!
В ubuntu ввел sudo /sbin/iptables-save, потом перезагрузился, а правила исчезли.
добавь в /etc/network/interfaces post-up iptables-restore < /etc/iptables/iptables.rules
Автору спасибо. Я, вот, перегоревший лужёный чайник, который iptables пользовал лет 20 назад, и уже всё забыл. Для меня полезна теоретическая часть с описанием, а конкретные примеры - пофиг. Кстати, то, что при сбросе правил, не сбрасываются умолчания на accept all, это IMHO недостаток самих iptables.
"sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP" тут разве не -d?
В Убунту нет файла /etc/network/interfaces
apt install net-tools в помощь
Чайник лучше научится понимать если в задании есть ошибки. Это спец педагогический прием.
Цель статьи- чтобы чайник понял работу с iptables.
С ошибками он поймет лучше смысл находя ошибки, чем если все готовое было и правильно
Цель достигнута.
Автор это ловко придумал.
Без разбора конкретных настроек это всё фигня, которую можно прочитать в Wiki
Помимо большого количества орфографических ошибок, автор допускает и множество технических. А зачем проверять статьи перед публикацией, правда?
> Например, вот так можно удалить правило iptables, которое было создано вторым:
> sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP
И еще много подобного...
Привет. Ошибка в:
Например, вот так можно удалить правило iptables, которое было создано вторым:
sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP
Необходимо поправить -A на -D
Спасибо.