Генератор правил iptables online:

https://www.perturb.org/content/iptables-rules.html

Описание цепочек iptales

Input — обрабатываются входящие подключения вроде подключения по протоколу SSH или при отправке на веб-сайт каких-либо файлов.
Forward —  цепочка формируется при активации проходящего соединения, когда информация предназначена «третьему» компьютеру, а текущий сервер выполняет роль маршрутизатора.
Output —  исходящие пакеты данных, например, при запуске какого-либо сайта в браузере или при проверке скорости соединения и доступности PING.
В реальной работе сервера постоянно формируется минимум два вида пакетов – Input и Output. Т.к. на каждый запрос пользователя сервер обязан дать ответ (сначала о поступлении данных на сервер, а затем и о результате обработки) или отклонить вредоносный запрос. Если «принято решение» отказать в доступе, об этом также сообщается пользователю (REJECT). Иначе запрос зависнет, и пользователь будет видеть пустой экран (DROP).

Примеры действий iptables

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

Правила проверки устанавливаются в зависимости от характера соединения. Возможен мониторинг IP-адреса, порта подключения, отправителя, заголовка. Если пакет не проходит хотя бы по одному критерию, осуществляется действие ACCEPT (сквозное пропускание пакета, который не требуется блокировать файрволом). Фильтрация возможна на двух этапах:

  • prerouting – система только получила пакет, и нет команды «что с ним делать»: обрабатывать на сервере, возвращать пользователю или пропускать насквозь;
  • postroutnig – обработка после оценки «пункта назначения».

Таблицы iptables

Существует еще один «уровень» обработки – это таблицы, содержащие правила обработки тех или иных действий над пакетами. Например, фильтрация данных в Iptables осуществляется в таблице filter.

Варианты таблиц iptables:

  • raw – предназначен для работы с «сырыми» данными, еще не прошедшими обработку;
  • mangle – используется для модификации пакетов;
  • nat – обеспечивает работу сервера в качестве маршрутизатора;
  • filter – основная таблица, используемая «по умолчанию».

Cинтаксис запуска iptables

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

Перечень основных действий iptables

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

Дополнительные параметры iptables

  • -p – вручную установить протокол (TCP, UDP, UDPLITE, ICMP, ICMPv6, ESP, AH, SCTP, MH);
  • -s – указать статичный IP-адрес оборудования, откуда отправляется пакет данных (ip-источник);
  • -d – установить IP получателя;
  • -i – настроить входной сетевой интерфейс;
  • -o – то же самое в отношении исходящего интерфейса;
  • -j – выбрать действие при подтверждении правила.

Как показать текущие правила iptables?

iptables -L

iptables -L INPUT

iptables -L INPUT -n -v

iptables -L --line-numbers

Образец вывода:


Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       all  --  123.123.123.101      anywhere
2    REJECT     all  --  123.123.123.102      anywhere             reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Как сбросить все правила iptables?

sudo iptables -F

sudo iptables -F Input

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

Разрешаем все цепочки INPUT и OUTPUT, запрещаем FORWARD.

sudo iptables -p INPUT ACCEPT

sudo iptables -p OUTPUT ACCEPT

sudo iptables -p FORWARD DROP

Как заблокировать ip или ip подесть в iptables?

sudo iptables -t filter -A INPUT -s 123.456.789.101 -j DROP
или
sudo iptables -t filter -A INPUT -s 123.456.789.101/32 -j DROP

Как разблокировать ip или ip подесть в iptables?

sudo iptables -t filter -D INPUT -s 123.456.789.101 -j DROP
или
sudo iptables -t filter -D INPUT -s 123.456.789.101/32 -j DROP

Схема движения пакетов по цепочкам в различных таблицах iptables

Сохранение правила Iptables

В Ubuntu 16.04-20.04 процесс требует ввода команды:

sudo /sbin/iptables-save > /dir/filename

Официальный мануал по iptables

https://ipset.netfilter.org/iptables.man.html

подробнее: https://losst.ru/kak-zablokirovat-ip-v-iptables

Полезные команды iptables

Сброс всех правил iptables при помощи cron

В момент настройки вы можете случайно допустить ошибку и создать правило, которое заблокирует сервер и все возможности подключиться к нему, включая доступ по ssh.


Открываем таблицу заданий cron:

crontab -e

Вписываем следующее правило:

#каждые 30 минут очищаем все правила iptables и делаем действием по умолчанию для всех цепочек ACCEPT
*/30 * * * *	sleep 1 &&	/sbin/iptables	-P INPUT ACCEPT			> /dev/null 2>&1
*/30 * * * *	sleep 2 &&	/sbin/iptables	-P OUTPUT ACCEPT		> /dev/null 2>&1
*/30 * * * *	sleep 3 &&	/sbin/iptables	-P FORWARD ACCEPT		> /dev/null 2>&1
*/30 * * * *	sleep 4 &&	/sbin/iptables	-F						> /dev/null 2>&1

Теперь в случае ошибки сервер каждые 30 минут будет сбрасывать все настройки iptables. После настройки не забываем удалить данное правило и проверить сохранность всех внесенных изменений!

Сбросить счетчики iptables

В iptables для каждой цепочки и каждого правила есть два счетчика - счетчик обработанных пакетов и счетчик пропущенного / заблокированного трафика. Их можно посмотреть командой:

iptables -nvL

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


iptables -Z

Как в одном правиле iptables добавить сразу несколько (диапазон) портов

Для этого используем следующее выражение

-m multiport --dports 80,443
***********************
#При помощи следующей команды смотрим номер правила, которое нам здесь необходимо удалить:
iptables -L INPUT --line-number

#Запомним номер и удалим правило под номером 2
iptables -D INPUT 2
***********************


############## дополнительно
#Отклоняем все подключения на порт 80 и 443 порт сервера c ip# 37.120.136.252:
iptables -A INPUT -p tcp -s 37.120.136.252 -m multiport --dports 80,443 -j REJECT

#Блокируем без ответа все подключения на порт 80 и 443 сервера c ip# 37.120.136.252:
iptables -A INPUT -p tcp -s 37.120.136.252 -m multiport --dports 80,443 -j DROP