Как заблокировать ip на UBUNTU 16.04/18.04/20.04 LTS & etc через iptables

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



2021-02-01T03:41:13
Настройка web сервера