Для IPv6 используется ip6tables
Сперва теория:
СИНТАКСИС:
iptables [-t ТАБЛИЦА] -A ЦЕПОЧКА ПАРАМЕТРЫ [опция]ДЕЙСТВИЕ
Таблица:
-t
raw - с сырыми пакетами, пока они еще не прошли обработку;
mangle - для модификации пакетов;
nat - работа nat, в качестве маршрутизатора;
nat - таблица, предназначенная целиком по функции трансляции сетевых адресов
filter - основная таблица для фильтрации пакетов, используется по умолчанию.
security - используется для назначения пакетам или соединениям неких меток, которые в дальнейшем может интерпретировать SElinux
ЦЕПОЧКА ПАРАМЕТРЫ:
-A - добавить правило в цепочку (в самое начало);
-С - проверить все правила;
-D - удалить правило;
-I - <номер> вставить правило с нужным номером;
-L - вывести все правила в текущей цепочке;
-S - вывести все правила;
-F - удалить все правила из цепочки, если цепочка не указана, удаляются все правила;
-N - создать цепочку;
-X - удалить цепочку;
-P - установить действие по умолчанию, действие будет выполняться на все пакеты, которые не подошли по каким-либо параметрам в другие правила.
-R <цепочка> <номер> - заменяет определенные критерии цепочки с номером
-Z <цепочка> - обнуляет все счётчики пакетов и байтов в цепочке
БАЗОВЫЕ ЦЕПОЧКИ:
INPUT - входящие пакеты и подключения
OUTPUT - исходящих пакетов и соединений
FORWARD - проходящих соединения
PREROUTING - правила в этой цепочке применяются ко всем пакетам, которые поступают на сетевой интерфейс извне
POSTROUTING - применяются к пакетам, которые должны покинуть сетевой интерфейс
ПАРАМЕТРЫ:
-p - указать протокол, один из all,tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh;
-m - включает дополнительные модули, явно задающимися данным ключём (например -m limit --limit 3/min - установит лимит на количество пакетов в минуту, -m tcp)
-s - указать ip/dns адрес устройства-отправителя пакета;
-d - указать ip/dns адрес получателя;
-i <имя интерфейса> - входной сетевой интерфейс;
-o <имя интерфейса> - исходящий сетевой интерфейс;
–-sport - порт источника
-–dport - порт назначения
ОПЦИИ ДЛЯ ДЕЙСТВИЙ:
-j (--jump) - применяет одно из действий accept, drop, reject и другие, если правило подошло.
-g (--goto) - переходит к другой цепочке правил
Действия:
ACCEPT - разрешить прохождение пакета
DROP - отбросить пакет не сообщая причины(более приоритетный вариант, нежели REJECT, т.к для блокируемого ip адреса(или диапазонов) будет аналогичный эффект тому, когда сервер находится в дауне)
REJECT - выбрасывает пакет и возвращает причину в виде ошибки, например: icmp unreachable
QUEUE - отправляет пакет за пределы логики iptables, в стороннее приложение. Это может понадобиться, когда нужно обработать пакет в рамках другого процесса в другой программе
RETURN - остановить обработку правила и вернуться на одно правило назад. Это действие подобно break'у в языке программирования
LOG - просто делает запись в логе, если пакет соответствует критериям правила;
DNAT - правило используется в NAT-ировании и меняет Destination IP пакета. Используется только в таблице nat и цепочках OUTPUT и PREROUTING
SNAT - правило используется в NAT-ировании и меняет Source IP пакета. Используется только в таблице nat и цепочке POSTROUTING
MASQUERADE - делает то же самое что SNAT, только применяется на выходном интерфейсе, когда IP адрес может меняться, например, когда назначается по DHCP
Как вы уже наверняка заметили, в пространстве ядра, в зависимости от типа протокола, пакеты могут иметь несколько различных состояний. Однако, вне ядра пакеты могут иметь только 4 состояния. В основном состояние пакета используется критерием --state. Допустимыми являются состояния NEW, ESTABLISHED, RELATED и INVALID. В таблице, приводимой ниже, рассматриваются каждое из возможных состояний.
--state
Состояние Описание
NEW - Признак NEW сообщает о том, что пакет является первым для данного соединения. Это означает, что это первый пакет в данном соединении, который увидел модуль трассировщика. Например если получен SYN пакет являющийся первым пакетом для данного соединения, то он получит статус NEW. Однако, пакет может и не быть SYN пакетом и тем не менее получить статус NEW. Это может породить определенные проблемы в отдельных случаях, но может оказаться и весьма полезным, например когда желательно "подхватить" соединения, "потерянные" другими брандмауэрами или в случаях, когда таймаут соединения уже истек, но само соединение не было закрыто.
ESTABLISHED - Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении. Схема установки состояния ESTABLISHED достаточна проста для понимания. Единственное требование, предъявляемое к соединению, заключается в том, что для перехода в состояние ESTABLISHED необходимо чтобы узел сети передал пакет и получил на него ответ от другого узла (хоста). После получения ответа состояние соединения NEW или RELATEDбудет изменено на ESTABLISHED.
RELATED - Состояние RELATED одно из самых "хитрых". Соединение получает статус RELATED если оно связано с другим соединением, имеющим признак ESTABLISHED. Это означает, что соединение получает признак RELATED тогда, когда оно инициировано из уже установленного соединения, имеющего признак ESTABLISHED. Хорошим примером соединения, которое может рассматриваться как RELATED, является соединение FTP-data, которое является связанным с портом FTP control, а так же DCC соединение, запущенное из IRC. Обратите внимание на то, что большинство протоколов TCP и некоторые из протоколов UDP весьма сложны и передают информацию о соединении через область данных TCP или UDP пакетов и поэтому требуют наличия специальных вспомогательных модулей для корректной работы.
INVALID - Признак INVALID говорит о том, что пакет не может быть идентифицирован и поэтому не может иметь определенного статуса. Это может происходить по разным причинам, например при нехватке памяти или при получении ICMP-сообщения об ошибке, которое не соответствует какому либо известному соединению. Наверное наилучшим вариантом было бы применение действия DROP к таким пакетам.
Эти четыре состояния могут использоваться в критерии --state. Механизм определения состояния позволяет строить чрезвычайно мощную и эффективную защиту. Раньше приходилось открывать все порты выше 1024, чтобы пропустить обратный трафик в локальную сеть, теперь же, при наличии механизма определения состояния, необходимость в этом отпала, поскольку появилась возможность "открывать" доступ только для обратного (ответного) трафика, пресекая попытки установления соединений извне.
Варианты просмотра
iptables -L - просмотр текущих правил
iptables -L INPUT - просмотр правил входящие пакеты и подключения
iptables -L INPUT --line-numbers - вывод с номерами правил
iptables -L -t nat - покажет правила таблицы nat
iptables -L –line-numbers - узнать номер правила
iptables -D INPUT 5 - удалить правило номер 5 из цепочки INPUT
iptables -L -n
iptables -L -n -v --line-numbers - параметр -v показывает детальную статистику по правилам, -n не резолвит ip
iptables -F - полностью очищаем список со всеми правилами
iptables -F -t nat - удаляем правила таблицы nat
iptables -h - вызвать справку
Более подробно можно почитать Руководство по iptables (Iptables Tutorial)
Руководство в архиве # Удаление всех правил
iptables -F
# Очистка правил для входящих
iptables -F Input
# На Дефолт
iptables-restore
# Разрешить всё
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
prerouting - в эту цепочку пакет попадает перед обработкой iptables, система еще не знает куда он будет отправлен, в input, output или forward;
postrouting - сюда попадают все проходящие пакеты, которые уже прошли цепочку forward.
Примеры:
# ПОРТ 22 SSH (SFTP)
# Разрешить для
iptables -I INPUT -s 192.168.175.8 -p tcp --dport 22 -j ACCEPT
# Блокируем для всех остальных 22 порт
iptables -A INPUT -p tcp --dport 22 -j DROP
# ПОРТ 80 Вебка
# Разрешить для
iptables -I INPUT -s 192.168.175.8 -p tcp --dport 80 -j ACCEPT
# Блокируем для всех остальных 80 порт
iptables -A INPUT -p tcp --dport 80 -j DROP
И так мы ограничили внешние подключения для 2х портов с одного ПК, так же указываем остальные порты которые нужно разрешить для входящих подключений.
Заблокировать все порты, кроме разрешенных
# ЗАКРЫТЬ ВСЕ ОСТАЛЬНЫЕ ВХОДЯЩИЕ ПОРТЫ (если для пакета не подходит ни одно правило)
iptables -P INPUT DROP
Тут мы получаем интересную ситуацию, с данного узла где производим настройки, у нас идут OUTPUT исходящие подключения на 80 и 22 (проверка доступности сайтов и 22 порта). OUTPUT - у нас разрешен запрос уходит, но обратно пакет не принимается правилом INPUT.
Ситуация аналогична всем остальным портам.
Получается что нужно прописать правило еще и для исходящих подключение ? Это как то не правильно.
В данном случае нужно задать правило все исходящие пакеты, разрешить на прием. Если узел на котором мы производим настройку делает запрос на 80 порт то и ответ он должен принять, если он запрос не делал то пакеты не пройдут.
#Разрешаем исходящие соединения, в целях, например, использования ping и других внутренних приложений
#если не собираетесь использовать, то можно не указывать, но тогда есть вероятность того, что не будут работать, скажем, обновления из интернета
#установленные соединения пропускаются, иначе каждый (а не только инициирующий) пакет в tcp-соединении будет проходить через эти цепочки правил
# Приём пакетов для установленных соединений:
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Более новая версия
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Это правило позволит пропускать пакеты, относящиеся к уже установленным соединениям (ESTABLISHED) или связанным с ними (RELATED). Таким образом, вы сможете видеть активные соединения в вашей сети.
В данной команде используется модуль state, который является устаревшим и был заменен модулем conntrack.
Параметр --state ESTABLISHED,RELATED указывает на установленные соединения (ESTABLISHED) и связанные с ними (RELATED), что позволяет пропускать пакеты, относящиеся к этим соединениям.
Эта команда может быть использована в старых версиях iptables, но рекомендуется использовать модуль conntrack для более современных версий.
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT:
В данной команде используется модуль conntrack, который предоставляет более широкие возможности отслеживания состояний подключений.
Параметр --ctstate ESTABLISHED,RELATED также указывает на установленные соединения (ESTABLISHED) и связанные с ними (RELATED).
Модуль conntrack обеспечивает более гибкое и эффективное отслеживание состояний подключений и рекомендуется для использования в более современных версиях iptables.
Таким образом, основное отличие заключается в использовании устаревшего модуля state в первой команде и более современного и рекомендуемого модуля conntrack во второй команде для отслеживания установленных и связанных соединений в iptables.
iptables -P INPUT ACCEPT
#разрешает трафик на локальный интерфейс. localhost часто используется для размещения, например, базы данных, к которой подключаются веб-сайт и почтовый сервер, т.е таким образом, сервер имеет доступ к базе данных, но взломать её через интернет сложно
# Разрешить loopback интерфейс
iptables -I INPUT -i lo -j ACCEPT
# разрешаем исходящие соединения c сервера
iptables -P OUTPUT ACCEPT
НЕКОТОРЫЕ ПОРТЫ ZABBIX:
21 FTP
22 SSH (SFTP)
80 Вебка http
443 Вебка https (ssl)
3000 Grafana web
3306 MySql
53 dns
123 ntp время
25 SMTP Почта
465 SMTP Почта
143 imap
993 imap
НА ПОДСЕТИ
10050 Заббикс Агент Пассивный
10051 Заббикс Агент Активный
10052 JMX
12345 JMX
161 SNMP
162 Trap SNMP
166 SNMP ИБП
623 IPMI
Для ограничения доступа подключения к заббикс серверу нужно выбрать только те порты, на которые будет выполнятся подключение со стороны узлов, если заббикс сервер будет сам опрашивать узел такой порт не нужно включать в правило!
например порт 10050 - опрашивается с заббикс сервера его можно не включать в правило, а порт
10051 - он сам передает информацию на заббикс сервер такой порт нужно включать в правило.
порты Trap так же не обходимо включать в правило так как они передают данные сами на сервер.
Можно сделать скрипт с 2 циклами 2 списка ip/dns и порты, первый перебирает IP а второй под цикл подставляет порты.
порты можно указать в одной строке через двоеточие 10051:162
Я же делал обычный скрипт добавляя в него не обходимые правила, часть правил можно было не прописывать для исходящих подключений.
Пример скрипта большую часть портов можно не указывать так как они являются исходящими, указать только те к которым нам нужен доступ для подключения с других узлов.
spisokiptables.sh
Код: Выделить всё
#!/bin/bash
# Инфо https://www.opennet.ru/docs/RUS/iptables/
# Удаление всех правил
iptables -F
# На Дефолт
#iptables-restore
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
# ДЛЯ АДМИНИСТРАТОРОВ И СЛУЖЕБНЫЕ ПОРТЫ
# ПОРТ 21 FTP
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 21 -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p tcp --dport 21 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p tcp --dport 21 -j ACCEPT
# Блокируем для всех остальных 21 порт
iptables -A INPUT -p tcp --dport 21 -j DROP
# ПОРТ 22 SSH (SFTP)
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p tcp --dport 22 -j ACCEPT
# Блокируем для всех остальных 22 порт
iptables -A INPUT -p tcp --dport 22 -j DROP
#Пресечь попытки взлома
#iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --udpate --seconds 3600 --hitcount 8 -j REJECT
#iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --set
#iptables -A INPUT -p tcp --dport 22 -m recent --name ssh ! --rcheck --seconds 15 --hitcount 2 -j REJECT
# ПОРТ 80 Вебка
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p tcp --dport 80 -j ACCEPT
# Блокируем для всех остальных 80 порт
iptables -A INPUT -p tcp --dport 80 -j DROP
# ПОРТ 443 Вебка
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p tcp --dport 443 -j ACCEPT
# Блокируем для всех остальных 443 порт
iptables -A INPUT -p tcp --dport 443 -j DROP
# ПОРТ 3000 Grafana web
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 3000 -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p tcp --dport 3000 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p tcp --dport 3000 -j ACCEPT
# Блокируем для всех остальных 3000 порт
iptables -A INPUT -p tcp --dport 3000 -j DROP
# ПОРТ 3306 MySql
iptables -I INPUT -s 192.168.175.111 -p tcp --dport 3306 -j ACCEPT
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 3306 -j ACCEPT
# Блокируем для всех остальных 3306 порт
iptables -A INPUT -p tcp --dport 3306 -j DROP
# ПОРТ 53 dns
# Блокируем для всех остальных 53 порт
iptables -A INPUT -p tcp --dport 53 -j DROP
# ПОРТ 123 ntp время
iptables -I INPUT -s 192.168.175.111 -p tcp --dport 123 -j ACCEPT
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 123 -j ACCEPT
# Блокируем для всех остальных 123 порт
iptables -A INPUT -p tcp --dport 123 -j DROP
# ПОРТ 25 SMTP Почта
# Разрешить для
iptables -I INPUT -s 192.168.175.110 -p tcp --dport 25 -j ACCEPT
# Блокируем для всех остальных 25 порт
iptables -A INPUT -p tcp --dport 25 -j DROP
#разрешает smtp-трафик (если сервер не выступает как почтовый, то можно не разрешать):
#iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
#iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
#разрешает pop-трафик
#iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
#iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT
#разрешает imap-трафик
#iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
#iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
# НАШИ ПОДСЕТИ
# ПОРТ 10050 Заббикс Агент Пассивный
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 10050 -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p tcp --dport 10050 -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p tcp --dport 10050 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p tcp --dport 10050 -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p tcp --dport 10050 -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p tcp --dport 10050 -j ACCEPT
# Блокируем для всех остальных 10050 порт
iptables -A INPUT -p tcp --dport 10050 -j DROP
# ПОРТ 10051 Заббикс Агент Активный
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 10051 -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p tcp --dport 10051 -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p tcp --dport 10051 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p tcp --dport 10051 -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p tcp --dport 10051 -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p tcp --dport 10051 -j ACCEPT
# Блокируем для всех остальных 10051 порт
iptables -A INPUT -p tcp --dport 10051 -j DROP
# ПОРТ 10052 JMX
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 10052 -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p tcp --dport 10052 -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p tcp --dport 10052 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p tcp --dport 10052 -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p tcp --dport 10052 -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p tcp --dport 10052 -j ACCEPT
# Блокируем для всех остальных 10052 порт
iptables -A INPUT -p tcp --dport 10052 -j DROP
# ПОРТ 12345 JMX
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 12345 -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p tcp --dport 12345 -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p tcp --dport 12345 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p tcp --dport 12345 -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p tcp --dport 12345 -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p tcp --dport 12345 -j ACCEPT
# Блокируем для всех остальных 12345 порт
iptables -A INPUT -p tcp --dport 12345 -j DROP
# ПОРТ 161 SNMP
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 161 -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p tcp --dport 161 -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p tcp --dport 161 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p tcp --dport 161 -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p tcp --dport 161 -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p tcp --dport 161 -j ACCEPT
# Блокируем для всех остальных 161 порт
iptables -A INPUT -p tcp --dport 161 -j DROP
# ПОРТ 162 Trap SNMP
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 162 -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p tcp --dport 162 -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p tcp --dport 162 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p tcp --dport 162 -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p tcp --dport 162 -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p tcp --dport 162 -j ACCEPT
# Блокируем для всех остальных 162 порт
iptables -A INPUT -p tcp --dport 162 -j DROP
# ПОРТ 166 SNMP ИБП
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 166 -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p tcp --dport 166 -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p tcp --dport 166 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p tcp --dport 166 -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p tcp --dport 166 -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p tcp --dport 166 -j ACCEPT
# Блокируем для всех остальных 166 порт
iptables -A INPUT -p tcp --dport 166 -j DROP
# ПОРТ 623 IPMI
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 623 -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p tcp --dport 623 -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p tcp --dport 623 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p tcp --dport 623 -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p tcp --dport 623 -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p tcp --dport 623 -j ACCEPT
# Блокируем для всех остальных 623 порт
iptables -A INPUT -p tcp --dport 623 -j DROP
#*****udp*****
# ДЛЯ АДМИНИСТРАТОРОВ И СЛУЖЕБНЫЕ ПОРТЫ
# ПОРТ 21 FTP
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 21 -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p udp --dport 21 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p udp --dport 21 -j ACCEPT
# Блокируем для всех остальных 21 порт
iptables -A INPUT -p udp --dport 21 -j DROP
# ПОРТ 22 SSH (SFTP)
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 22 -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p udp --dport 22 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p udp --dport 22 -j ACCEPT
# Блокируем для всех остальных 22 порт
iptables -A INPUT -p udp --dport 22 -j DROP
#Пресечь попытки взлома
#iptables -A INPUT -p udp --dport 22 -m recent --name ssh --udpate --seconds 3600 --hitcount 8 -j REJECT
#iptables -A INPUT -p udp --dport 22 -m recent --name ssh --set
#iptables -A INPUT -p udp --dport 22 -m recent --name ssh ! --rcheck --seconds 15 --hitcount 2 -j REJECT
# ПОРТ 80 Вебка
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 80 -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p udp --dport 80 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p udp --dport 80 -j ACCEPT
# Блокируем для всех остальных 80 порт
iptables -A INPUT -p udp --dport 80 -j DROP
# ПОРТ 443 Вебка
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 443 -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p udp --dport 443 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p udp --dport 443 -j ACCEPT
# Блокируем для всех остальных 443 порт
iptables -A INPUT -p udp --dport 443 -j DROP
# ПОРТ 3000 Grafana web
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 3000 -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p udp --dport 3000 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p udp --dport 3000 -j ACCEPT
# Блокируем для всех остальных 3000 порт
iptables -A INPUT -p udp --dport 3000 -j DROP
# ПОРТ 3306 MySql
iptables -I INPUT -s 192.168.175.111 -p udp --dport 3306 -j ACCEPT
iptables -I INPUT -s 127.0.0.1 -p udp --dport 3306 -j ACCEPT
# Блокируем для всех остальных 3306 порт
iptables -A INPUT -p udp --dport 3306 -j DROP
# ПОРТ 53 dns
# Блокируем для всех остальных 53 порт
iptables -A INPUT -p udp --dport 53 -j DROP
# ПОРТ 123 ntp время
iptables -I INPUT -s 192.168.175.111 -p udp --dport 123 -j ACCEPT
iptables -I INPUT -s 127.0.0.1 -p udp --dport 123 -j ACCEPT
# Блокируем для всех остальных 123 порт
iptables -A INPUT -p udp --dport 123 -j DROP
# ПОРТ 25 SMTP Почта
# Разрешить для
iptables -I INPUT -s 192.168.175.110 -p udp --dport 25 -j ACCEPT
# Блокируем для всех остальных 25 порт
iptables -A INPUT -p udp --dport 25 -j DROP
#разрешает smtp-трафик (если сервер не выступает как почтовый, то можно не разрешать):
#iptables -A INPUT -p udp -m udp --dport 25 -j ACCEPT
#iptables -A INPUT -p udp -m udp --dport 465 -j ACCEPT
#разрешает pop-трафик
#iptables -A INPUT -p udp -m udp --dport 110 -j ACCEPT
#iptables -A INPUT -p udp -m udp --dport 995 -j ACCEPT
#разрешает imap-трафик
#iptables -A INPUT -p udp -m udp --dport 143 -j ACCEPT
#iptables -A INPUT -p udp -m udp --dport 993 -j ACCEPT
# НАШИ ПОДСЕТИ
# ПОРТ 10050 Заббикс Агент Пассивный
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 10050 -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p udp --dport 10050 -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p udp --dport 10050 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p udp --dport 10050 -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p udp --dport 10050 -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p udp --dport 10050 -j ACCEPT
# Блокируем для всех остальных 10050 порт
iptables -A INPUT -p udp --dport 10050 -j DROP
# ПОРТ 10051 Заббикс Агент Активный
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 10051 -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p udp --dport 10051 -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p udp --dport 10051 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p udp --dport 10051 -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p udp --dport 10051 -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p udp --dport 10051 -j ACCEPT
# Блокируем для всех остальных 10051 порт
iptables -A INPUT -p udp --dport 10051 -j DROP
# ПОРТ 10052 JMX
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 10052 -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p udp --dport 10052 -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p udp --dport 10052 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p udp --dport 10052 -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p udp --dport 10052 -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p udp --dport 10052 -j ACCEPT
# Блокируем для всех остальных 10052 порт
iptables -A INPUT -p udp --dport 10052 -j DROP
# ПОРТ 12345 JMX
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 12345 -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p udp --dport 12345 -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p udp --dport 12345 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p udp --dport 12345 -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p udp --dport 12345 -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p udp --dport 12345 -j ACCEPT
# Блокируем для всех остальных 12345 порт
iptables -A INPUT -p udp --dport 12345 -j DROP
# ПОРТ 161 SNMP
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 161 -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p udp --dport 161 -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p udp --dport 161 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p udp --dport 161 -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p udp --dport 161 -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p udp --dport 161 -j ACCEPT
# Блокируем для всех остальных 161 порт
iptables -A INPUT -p udp --dport 161 -j DROP
# ПОРТ 162 Trap SNMP
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 162 -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p udp --dport 162 -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p udp --dport 162 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p udp --dport 162 -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p udp --dport 162 -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p udp --dport 162 -j ACCEPT
# Блокируем для всех остальных 162 порт
iptables -A INPUT -p udp --dport 162 -j DROP
# ПОРТ 166 SNMP ИБП
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 166 -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p udp --dport 166 -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p udp --dport 166 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p udp --dport 166 -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p udp --dport 166 -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p udp --dport 166 -j ACCEPT
# Блокируем для всех остальных 166 порт
iptables -A INPUT -p udp --dport 166 -j DROP
# ПОРТ 623 IPMI
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 623 -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p udp --dport 623 -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p udp --dport 623 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p udp --dport 623 -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p udp --dport 623 -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p udp --dport 623 -j ACCEPT
# Блокируем для всех остальных 623 порт
iptables -A INPUT -p udp --dport 623 -j DROP
# ПОРТ icmp Проверка пинга
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p icmp -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p icmp -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p icmp -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p icmp -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p icmp -j ACCEPT
# ВНЕШНИЕ ПРОВЕРКИ
iptables -I INPUT -s 110.10.182.34/24 -p icmp -j ACCEPT
# Блокируем для всех остальных icmp порт
iptables -A INPUT -p icmp -j DROP
#Разрешаем исходящие соединения, в целях, например, использования ping и других внутренних приложений
#если не собираетесь использовать, то можно не указывать, но тогда есть вероятность того, что не будут работать, скажем, обновления из интернета
#установленные соединения пропускаются, иначе каждый (а не только инициирующий) пакет в tcp-соединении будет проходить через эти цепочки правил
# Приём пакетов для установленных соединений:
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#разрешает трафик на локальный интерфейс. localhost часто используется для размещения, например, базы данных, к которой подключаются веб-сайт и почтовый сервер, т.е таким образом, сервер имеет доступ к базе данных, но взломать её через интернет сложно
# Разрешить loopback интерфейс
iptables -I INPUT -i lo -j ACCEPT
# разрешаем исходящие соединения c сервера
iptables -P OUTPUT ACCEPT
# ЗАКРЫТЬ ВСЕ ОСТАЛЬНЫЕ ВХОДЯЩИЕ ПОРТЫ (если для пакета не подходит ни одно правило)
iptables -P INPUT DROP
# Разрешить
#iptables -P INPUT ACCEPT
#блокирует нулевые пакеты
#iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
#сброс пакетов XMAS
#iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
#защита от syn-flood
#iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
# Сохранить правила
iptables-save
service iptables save
# Показать правила
#prav=`iptables -S`
# вывести все правила в текущей цепочке
prav=`iptables -L INPUT --line-numbers`
echo -e "${prav}"
echo "Готово"
Другие различные примеры
Блокировка пакетов
iptables -A INPUT -s 10.10.10.10 -j DROP
iptables -A OUTPUT -s 10.10.10.10 -j DROP
Блокировка диапазона
iptables -A INPUT -s 10.10.10.0/24 -j DROP
или
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
заблокировать все входящие соединения ssh
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
Удаление правил вместо A пишем D
iptables -A OUTPUT -s 10.10.10.10 -j DROP
iptables -F - Очистка всех правил
iptables -F Input - Очистка правил для входящих
таблицы по умолчанию - filter
Сохранить правила
iptables-save
или
service iptables save
если пропадают у меня писало что все сохранено выдавало список что сохранено, но после перезагрузки все правила слетали
добавить в /etc/network/interfaces post-up iptables-restore < /etc/iptables/iptables.rules
Или можно добавить в Крон при включении запускать скрипт с правилами.
Еще пример: для 1 ip сразу несколько портов, для определенного сегмента ip адресов
Код: Выделить всё
#!/bin/bash
# Удаление всех правил
iptables -F
#iptables-restore
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
# ПОРТ 25 (SMTP) Разрешить для всех
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
# Разрешает трафик на локальный интерфейс. localhost часто используется для размещения, например, базы данных, к которой подключаются веб-сайт и почтовый сервер, т.е таким образом, сервер имеет доступ к базе данных, но взломать её через интернет сложно. Разрешить loopback интерфейс
iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -s 127.0.0.0 -j ACCEPT
iptables -I INPUT -s 127.0.0.1 -j ACCEPT
iptables -I INPUT -s 127.0.0.2 -j ACCEPT
#Разрешаем исходящие соединения, в целях, например, использования ping и других внутренних приложений. Если не собираетесь использовать, то можно не указывать, но тогда есть вероятность того, что не будут работать, скажем, обновления из интернета. Установленные соединения пропускаются, иначе каждый (а не только инициирующий) пакет в tcp-соединении будет проходить через эти цепочки правил Приём пакетов для установленных соединений:
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# ДЛЯ АДМИНИСТРАТОРОВ И СЛУЖЕБНЫЕ ПОРТЫ Разрешить для
# multiport максимум 15 портов, так же можно указать диапазонами c 1 по 5 порт 1:5(диапазон занимает два слота) и (+ 1) отдельный порт 7 будет 1:5,7
# Eсли нужно использовать большой диапазон портов можно использовать --sport (--source-port) 513:65535, s-Источник(ip отправителя) d-Пункт назначения(ip получателя) --dport (--destination-port) без указания -s или -d,
# --port тогда будут и входящие и исходящие. Важный момент! в какой секции иптейблс(INPUT/OUTPUT) стоит правило, и важно понимать кто будет Источник и кто Пункт назначения. То же самое и с портами. https://losst.ru/nastrojka-iptables-dlya-chajnikov
# Важен порядок правил! Если первым правилом запретить, а после разрешить пакет уже будет отбит первым правилом и не дойдет до второго, поэтому запрещающие правила ставятся после разрешающихся!
# TCP
iptables -I INPUT -s 127.0.0.1 -p tcp -m multiport --port 21,22,80,443,1311,3000,3306,123,10050:10052,12345,161,162,166,623 -j ACCEPT
iptables -I INPUT -s 192.168.175.36 -p tcp -m multiport --port 21,3306,123 -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p tcp -m multiport --port 21,3306,123,22,80,443 -j ACCEPT
iptables -I INPUT -s 192.168.175.111 -p tcp -m multiport --port 21,3306,123,10050,10051 -j ACCEPT
# ПОРТ 443 Веб Разрешить для
iptables -I INPUT -s 10.0.0.211 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s 192.168.125.3/28 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s 172.16.39.0/24 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -m iprange --src-range 172.16.101.0-172.16.128.255 -p tcp -m multiport --port 80,443 -j ACCEPT
# разрешаем исходящие соединения c сервера
iptables -P OUTPUT ACCEPT
# ЗАКРЫТЬ ВСЕ ОСТАЛЬНЫЕ ВХОДЯЩИЕ ПОРТЫ (если для пакета не подходит ни одно правило)
iptables -P INPUT DROP
# Сохранить правила
iptables-save
service iptables save
# Показать правила
#prav=`iptables -S`
# вывести все правила в текущей цепочке
prav=`iptables -L INPUT --line-numbers`
echo -e "${prav}"
echo "Готово"
Multiport
Расширение multiport позволяет указывать в тексте правила несколько портов и диапазонов портов.
Вы не сможете использовать стандартную проверку портов и расширение -m multiport (например –sport 1024:63353 -m multiport –dport 21,23,80) одновременно. Подобные правила будут просто отвергаться iptables. Выделяет не один порт, как –dport или –sport, а несколько по списку (до 15 штук). Можно задавать диапазоны как первый_порт:последний_порт. Может быть использовано только вместе с -p udp или -p tcp.
Отправитель -–source-ports порт1,порт2,порт3:порт4
Код: Выделить всё
iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110
Полкучатель -–destination-ports порт1,порт2,порт3:порт4
Код: Выделить всё
iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110
-–ports порт1,порт2,порт3:порт4
Код: Выделить всё
iptables -A INPUT -p tcp -m multiport --port 22,53,80,110
iprange
iprange — позволяет указать диапазон IP-адресов, не являющийся подсетью. Поддерживает следующие параметры:
-–src-range адрес[-адрес] — позволяет указать диапазон исходных адресов. Например,
Код: Выделить всё
iptables -I INPUT -m iprange --src-range 192.168.0.8-192.168.0.25 -j DROP
-–dst-range адрес[-адрес] — позволяет указать диапазон адресов назначения.
Еще вариант записи
Код: Выделить всё
# Generated by iptables-save v1.4.21 on Mon Nov 14 16:13:02 2022
*filter
:INPUT DROP [8938:1462782]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [397735:75577431]
-A INPUT -s 192.168.175.23/32 -p tcp -m tcp --dport 445 -j ACCEPT
-A INPUT -s 192.168.175.111/32 -p tcp -m tcp --dport 10051 -j ACCEPT
-A INPUT -s 192.168.175.111/32 -p tcp -m tcp --dport 10050 -j ACCEPT
-A INPUT -s 192.168.175.111/32 -p icmp -j ACCEPT
-A INPUT -s 192.168.98.0/24 -p tcp -m tcp --dport 201:500 -j ACCEPT
Порядок работы:
ЛОГИРОВАТЬ
ПРИНЯТЬ
ОТБРАСЫВАТЬ