Генератор правил 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