Подключение к сети само по себе несет в себе «угрозу», ведь за счет «видимости» хакеры получают возможность просканировать удаленный компьютер на предмет открытых портов, доступных для подключения извне. И наиболее подвержены сетевым опасностям серверы, которые специально и «открывают» для внешних пользователей.
Что такое Iptables?
Операционные системы Linux, на которых чаще всего и функционируют серверы (виртуальные машины), имеют встроенный инструмент защиты – программный фильтр Iptables. Все сетевые пакеты идут через ядро приложения и проходят проверку на безопасность для компьютера. Сценария всего два – или данные передаются дальше на обработку, или полностью блокируются.
Виды пакетов
Информационные пакеты фильтруются исходя из назначения. Под контроль попадают все данные, входящие на сервер, исходящие из него или проходящие через него как маршрутизатор (например, если компьютер используется в качестве прокси). Такой подход создает сплошной защитный экран (файрвол), через который практически нереально проникнуть с вредоносными целями.
Описания пакетов:
- Input. Обрабатываются входящие подключения вроде подключения по протоколу SSH или при отправке на веб-сайт каких-либо файлов.
- Forward. Цепочка формируется при активации проходящего соединения, когда информация предназначена «третьему» компьютеру, а текущий сервер выполняет роль маршрутизатора.
- Output. Исходящие пакеты данных, например, при запуске какого-либо сайта в браузере или при проверке скорости соединения и доступности PING.
В реальной работе сервера постоянно формируется минимум два вида пакетов – Input и Output. Ведь на каждый запрос пользователя положено дать ответ: сначала о поступлении данных на сервер, а затем и о результате обработки. Если «принято решение» отказать в доступе, об этом также сообщается на удаленное рабочее место. Иначе запрос зависнет, и пользователь будет видеть пустой экран.
Правила и действия Iptables
На каждый тип пакетов распространяется определенный набор правил, и их следует учитывать при настройке программы Iptables. Большая часть запросов проходит в виде последовательных цепочек в различных комбинациях. Если ошибиться на этом этапе, приложение будет функционировать со сбоями и блокировать «полезные» запросы.
Примеры действий:
- ACCEPT – пропустить пакет данных далее по цепочке;
- DROP – полностью удалить пакет;
- REJECT – отклонить запрос и направить пользователю ответ с информацией об этом;
- LOG – инициируется запись в лог-файл об обработанном пакете;
- QUEUE – отправка данных на компьютер пользователя.
Правила проверки устанавливаются в зависимости от характера соединения. Возможен мониторинг IP-адреса, порта подключения, отправителя, заголовка. Если пакет не проходит хотя бы по одному критерию, осуществляется действие ACCEPT (сквозное пропускание пакета, который не требуется блокировать файрволом). Фильтрация возможна на двух этапах:
- prerouting – система только получила пакет, и нет команды «что с ним делать»: обрабатывать на сервере, возвращать пользователю или пропускать насквозь;
- postroutnig – обработка после оценки «пункта назначения».
Таблицы Iptables
Существует еще один «уровень» обработки – это таблицы, содержащие правила обработки тех или иных действий над пакетами. Например, фильтрация данных в Iptables осуществляется в таблице filter. К ней придется обращаться чаще всего.
Варианты:
- raw – предназначен для работы с «сырыми» данными, еще не прошедшими обработку;
- mangle – используется для модификации пакетов;
- nat – обеспечивает работу сервера в качестве маршрутизатора;
- filter – основная таблица, используемая «по умолчанию».
Об основах работы с утилитой Iptables я рассказал, теперь можно приступать к тестовому запуску.
Запуск утилиты Iptables
Перед активацией приложение требуется установить из стандартного репозитория Linux. Так, для инсталляции в Ubuntu подойдет команда:
$ sudo apt install iptables
В дистрибутиве, базируемом на ядре Fedora, она выглядит несколько иначе:
$ sudo yum install iptables
Общий синтаксис запуска программы выглядит следующим образом:
$ iptables -t таблица действие цепочка дополнительные_параметры
Перечень основных действий, для выполнения которых используется Iptables:
- -A – добавить правило в цепочку;
- -C – проверить применяемые правила;
- -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 осуществляется командой:
$ iptables –L
Также есть возможность указать нужную цепочку, например:
$ iptables -L INPUT
Очистка правил
При любых ошибках в работе Iptables, чтобы исключить нарушение функционирования ядра перед другими действиями, требуется очистить правила, «обнулить» вводные данные. Выполняется эта процедура командой:
$ sudo iptables –F
Если речь идет об определенной цепочке, то она будет выглядеть иначе:
$ sudo iptables -F Input
Перечисленные действия выполняются для таблицы filter, которая подключена изначально.
Правила «по умолчанию»
Задаются правила «по умолчанию» вручную. Пример команд:
$ sudo iptables -p INPUT ACCEPT $ sudo iptables -p OUTPUT ACCEPT $ sudo iptables -p FORWARD DROP
Здесь мы разрешаем все цепочки INPUT и OUTPUT, запрещаем FORWARD.
Блокировка пакетов
Заблокировать пакеты можно действием DROP. Оно позволяет включать фильтрацию по разным признакам вроде IP-адреса, маске сети, порту и пр.
Пример:
$ sudo iptables -A INPUT -s 20.20.20.20 -j DROP
Блокируются входящие пакеты на IP 20.20.20.20.
$ sudo iptables -A OUTPUT -s 20.20.20.20 -j DROP
Теперь мы заблокировали пакеты, исходящие на IP 20.20.20.20.
Есть возможность указать маску сети, например, 20.20.20.0/255. Тогда правила будут применяться ко всем IP, входящим в указанный диапазон. Если же требуется заблокировать подключение строго по определенному протоколу, вводится команда:
$ sudo iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
Она блокирует все входящие соединения по SSH.
Удаление правил
При удалении правил в Iptables вводится команда с опцией -D. Но перед этим может понадобиться просмотреть перечень правил:
$ sudo iptables -L
Пример удаления правила:
$ sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP
Если требуется полное удаление правил, применяется команда:
$ sudo iptables –F
Сохранение правила Iptables
Теперь остается опробовать режим сохранения правил. Важно учитывать, что он действует до перезагрузки компьютера. После этой процедуры необходимо задавать их заново. В Ubuntu процесс требует ввода команды:
$ sudo /sbin/iptables-save
Для операционных систем на ядре Red Hat и CentOS она выглядит иначе:
$ sudo /sbin/service iptables save
Ничего сложного в настройке и управлении Iptables нет. Основные функции понятны даже новичкам, поэтому утилита и остается стандартом де-факто для всех систем на базе Linux.
Комментарии