Иконка ресурса

Мануал Грамотная настройка Iptables на сервере

Alligat0r

Рекрут
Пользователь
Сообщения
77
Розыгрыши
0
Репутация
313
Реакции
76
Баллы
0
Описание на примере операционной системы CentOS 6/7
Чем она лучше дебиана это отдельная большая статься и может быть я как нибудь возьмусь написать ее.

И так имеем свежеустановленную операционную систему Centos на сервере.

Заходим по SSH под пользователем root и проводим следующие манипуляции:

Подключаем репозитарий epel, обновляемся и перезагружаемся

# yum install epel-release
# yum update -y
# shutdown -r 0


Поскольку при перезагрузке нас выкинет из консоли заходим заново по SSH.

Отрубаем штатный скрипт фаервола

Если у нас CentOS 6

# service iptables stop
# service ip6tables stop

# chkconfig iptables off
# chkconfig ip6tables off


Если у нас CentOS 7

# systemctl stop iptables.service
# systemctl stop ip6tables.service
# systemctl disable iptables.service
# systemctl disable ip6tables.service


Если ругнется что ip6tables нет - не обращаем внимания, не во всех дистрибутивах присутствует.

Устанавливаем ipset для бана особо умных рекламщиков в игре которые умеют обходить бан по железу.

# yum install ipset

Создаем свой скрипт с правилами и даем права запуска
# touch /etc/init.d/rc.firewall
# chmod 755 /etc/init.d/rc.firewall


Редактируем

# vi /etc/init.d/rc.firewall

В открывшемся окне редактирования нажимаем 1 раз клавишу Insert и вписываем свои правила.

#!/bin/sh

IPT="/sbin/iptables"


# сбрасываем все при запуске
$IPT -F
$IPT -X
$IPT -Z

# Выставляем правила по умолчанию
# Все входящие неописанные правилами блокируем,
# все исходящие от имени сервера разрешаем

$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP
$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD

###Имя нашей сетевой карты (у меня она к примеру eth0 )

IFACE=eth0

# Активируем цепочки ipset
# banip - для бана по IP
# nabnet - для бана по подсети


ipset -N banip iphash
ipset -N nabnet nethash

# Дропаем все, что занесено в цепочки IPSET

$IPT -A INPUT -m set --set banip src -j DROP

# Разрешаем localhost и запрещаем спуфить на него через внешний интерфейс

$IPT -A INPUT -s 127.0.0.1/255.0.0.0 ! -i lo -j DROP
$IPT -A INPUT -i lo -j ACCEPT

# Дропаем битые пакеты и разрешаем уже установленные соединения

$IPT -A INPUT -m conntrack --ctstate INVALID -j DROP
$IPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Разрешаем коннектиться на порт логин сервера (не более 3 подключений с одного IP )

$IPT -A INPUT -p tcp -i $IFACE --dport 2106 -m connlimit --connlimit-above 3 -j DROP
$IPT -A INPUT -p tcp -i $IFACE --dport 2106 -j ACCEPT

# Разрешаем коннектиться на порт гейм сервера (не более 5 подключений с одного IP )
# Если кто то захочет с одного компа поиграть в более 5 окон - его ждет разочарование

$IPT -A INPUT -p tcp -i $IFACE --dport 7777 -m connlimit --connlimit-above 5 -j DROP
$IPT -A INPUT -p tcp -i $IFACE --dport 7777 -j ACCEPT


# Разрешаем подключаться к порту MySQL только с разрешенных IP
# К примеру IP сервера где стоит вебобвязка и домашние IP
# Вместо xx.xx.xx.xx соответственно свои IP
# Если у Вас дома IP меняется то можно добавить целую сеть, к примеру вместо xx.xx.xx.xx 122.12.0.0/16

$IPT -A INPUT -m conntrack --ctstate NEW -p tcp -i $IFACE -d xx.xx.xx.xx --dport 3306 -j ACCEPT
$IPT -A INPUT -m conntrack --ctstate NEW -p tcp -i $IFACE -d xx.xx.xx.xx --dport 3306 -j ACCEPT
$IPT -A INPUT -m conntrack --ctstate NEW -p tcp -i $IFACE -d xx.xx.xx.xx --dport 3306 -j ACCEPT

# Разрешаем SSH порт для доверенных IP (то же самое что и 3306 только IP сервера с вебобвязкой не нужен)

$IPT -A INPUT -m conntrack --ctstate NEW -p tcp -i $IFACE -d xx.xx.xx.xx --dport 22 -j ACCEPT
$IPT -A INPUT -m conntrack --ctstate NEW -p tcp -i $IFACE -d xx.xx.xx.xx --dport 22 -j ACCEPT

# Все что не подпало под описанные правила - дропаем

$IPT -A INPUT -j DROP


Правим естественно под себя.
Далее нажимаем 1 раз Esc и далее Shift+ZZ

Активируем скрипт при запуске системы:

# chmod +x /etc/rc.d/rc.local
# vi /etc/rc.d/rc.local


Нажимаем Insert и дописываем туда:
/etc/init.d/rc.firewall

Выходим Shift+ZZ и перезагружаемся shutdown -r 0

Фаервол готов к работе.

Теперь как пользоваться утилитой IPSET которая описана у нас в скрипте фаервола для бана нерадивых нам IP адресов и сетей :)
Делается это очень просто и быстро. Заходим по SSH под пользователем root
Для бана какого нибудь IP даем команду:

ipset -A banip xx.xx.xx.xx (xx меняем на IP подлежащий бану)

И все, фаервол будет дропать все с этого IP и не пускать на сервер.

Для разбана этого IP можно дать команду
ipset -D banip xx.xx.xx.xx
После этого IP будет удален из списка бана.

Для бана целой сети используем:

ipset -A bannet 192.168.10.0/24 (где сеть меняем на нужную)
 
Последнее редактирование:

Rekt4Life

Рекрут
Пользователь
Сообщения
237
Розыгрыши
0
Репутация
406
Реакции
104
Баллы
0
если 7 centos то как правило еще я бы добавил
yum install iptables && yum install iptables-services
systemctl stop firewalld && systemctl mask firewalld
systemctl enable iptables && systemctl start iptables
 

Alligat0r

Рекрут
Пользователь
Сообщения
77
Розыгрыши
0
Репутация
313
Реакции
76
Баллы
0
если 7 centos то как правило еще я бы добавил
yum install iptables && yum install iptables-services
systemctl stop firewalld && systemctl mask firewalld
systemctl enable iptables && systemctl start iptables

iptables - он там стоит по умолчанию. Получите ошибку что установлен.

Вы забыли про дропы или реджекты icmp трафика, по мимо этого о syn/ack/fin/urg/psh пакетов
+ ко всему можно подпилить ещё и sysctl.conf
+ по мимо коннлимитов можно запилить :
/sbin/iptables -N syn-flood
/sbin/iptables -A syn-flood -m limit --limit 10/sec --limit-burst 15 -j RETURN
/sbin/iptables -A syn-flood -j LOG --log-prefix "SYN flood: "
/sbin/iptables -A syn-flood -j DROP
, что будет записывать в логи и дропать более syn 15 соединений за 10 секуд

P.s немного дополню :
/
***Скрытый текст не может быть процитирован.***
Я ничего не забыл, эти правила Вас даже от hping3 не спасут, прос будет в 100% загрузки, поэтому и добавлять нет смысла.
 

TeJIo

Выдающийся
Местный
Сообщения
250
Розыгрыши
0
Репутация
257
Реакции
472
Баллы
1 430
Я ничего не забыл, эти правила Вас даже от hping3 не спасут, прос будет в 100% загрузки, поэтому и добавлять нет смысла.
ICMP закрывается в 99% случаев на аппаратке, по поводу правил от syn/ack и т.п пакетов - это помогает в случае того же VAC , который на 99.9% пропускает ACK/PTR флуд (я говорю о некоторых обходов самого вака)
 

Rekt4Life

Рекрут
Пользователь
Сообщения
237
Розыгрыши
0
Репутация
406
Реакции
104
Баллы
0
iptables - он там стоит по умолчанию. Получите ошибку что установлен.
все зависит от того, что за машинка и где.
Оффтоп:
Like most other Linux distributions, CentOS 7 uses the netfilter framework inside the Linux kernel in order to access packets that flow through the network stack. This provides the necessary interface to inspect and manipulate packets in order to implement a firewall system.
Most distributions use the iptables firewall, which uses the netfilter hooks to enforce firewall rules. CentOS 7 comes with an alternative service called firewalld which fulfills this same purpose
 

Alligat0r

Рекрут
Пользователь
Сообщения
77
Розыгрыши
0
Репутация
313
Реакции
76
Баллы
0
ICMP закрывается в 99% случаев на аппаратке, по поводу правил от syn/ack и т.п пакетов - это помогает в случае того же VAC , который на 99.9% пропускает ACK/PTR флуд (я говорю о некоторых обходов самого вака)
Если на вас будет лететь 1 MPPS синфлуда и все адреса будут рандомные (спуфинг), а это в последнее время так и есть, вас никакой iptables не спасет.
icmp как вы видите на этом скрипте не описаны и будут дропаться по последней строке.

Цель же данного мануала не защита от DDoS а защита сервера от взлома, ибо от современных DDoS атак защититься можно только на аппаратном уровне.

все зависит от того, что за машинка и где.
Оффтоп:
Like most other Linux distributions, CentOS 7 uses the netfilter framework inside the Linux kernel in order to access packets that flow through the network stack. This provides the necessary interface to inspect and manipulate packets in order to implement a firewall system.
Most distributions use the iptables firewall, which uses the netfilter hooks to enforce firewall rules. CentOS 7 comes with an alternative service called firewalld which fulfills this same purpose

Не зависит, iptables включен по умолчанию во все дистрибутивы CentOS, начиная от 5 версии и до текущей седьмой. В дистрибутивы minimal-install от включен так же по дефолту.
 
Последнее редактирование:

TeJIo

Выдающийся
Местный
Сообщения
250
Розыгрыши
0
Репутация
257
Реакции
472
Баллы
1 430
Если на вас будет лететь 1 MPPS синфлуда и все адреса будут рандомные (спуфинг), а это в последнее время так и есть, вас никакой iptables не спасет.
icmp как вы видите на этом скрипте не описаны и будут дропаться по последней строке.

Цель же данного мануала не защита от DDoS а защита сервера от взлома, ибо от современных DDoS атак защититься можно только на аппаратном уровне.
Если будет лететь 1кк pps - то вакум включиться , а я говорю о обходе их sensor мода (берём любой бутер или стрессер - пинаем ovh аск флудом = проффит)
Я говорю о прикрытии косяков самой VAC
 

Alligat0r

Рекрут
Пользователь
Сообщения
77
Розыгрыши
0
Репутация
313
Реакции
76
Баллы
0
Все равно мы походу о разных вещах говорим. Хорошо, давайте пройдемся по Вашему дополнению.

/sbin/iptables -A syn-flood -m limit --limit 10/sec --limit-burst 15 -j RETURN
/sbin/iptables -A syn-flood -j LOG --log-prefix "SYN flood: "
/sbin/iptables -A syn-flood -j DROP


Данная конфигурация работает только в том случае, еслм флуд летит с одного IP адреса.
Теперь предположите ситуацию, когда на Вас летит скажем 10-20 тысяч SYN закетов запросов на соединение и каждый запрос с разного IP адреса (спуфинг), будет ли работать эта комбинация ? Очень сомневаюсь в этом :)

iptables -A syn-flood -j LOG --log-prefix "SYN flood: "

Вы хорошо подумали о том, чтобы при DDoS посыпать это в логи? Вам ресурсов сервера не жалко? В определенных случаях можно получить лог размером, который займет все место на харде.

Далее вернемся к iptables -A syn-flood -m limit --limit 10/sec --limit-burst 15 -j RETURN

Меня брутили используя несколько тысяч проксей по списку, при этом 1 запрос с одного прокси, второй с другого и так поочередности в несколько пакетов. Не будет у Вас работать эта комбинация при этом.

iptables -A INPUT -p icmp -j DROP

Посмотрите внимательно мой конфиг, там где нибудь описано icmp ? Нет? А раз нет, то для него правило одно, последнее $IPT -A INPUT -j DROP и смысла нет никакого вообще отдельно добавлять в конфиг дроп icmp протокола.

Теперь вернемся к флуду ACK-ами. У айпитаблеса с этим тяжеловато, причем ваш папирус который Вы указали выше не будет работать если Вас будут асками флудить. Не верите - проверьте.

В плане ACK на FreeBSD в фаерволе IPFW с этим можно бороться методом выставления в начало правил check-state а сразу же ниже рубить все аски, но в сами правила добавлять keep-state. Если соединение успешно установлено оно будет разрешаться check-state, при этом если летит ACK флуд то он будет прекрасно резаться правилом дропа асков после правила check-state.
Но тут нас ожидает то же засада, в таком режиме фаервол будет работать в режиме контроля состояния соединений и все коннекты на запрос коннекта и полуоткрытые будет держать в памяти, и если при этом на Вас полетит SYN флуд вместо ACK флуда - серверу крышка меньше чем за минуту, думаю догадываетесь из за чего :) .

В случае же iptables еще раз повторюсь, защищаться от доса - бессмысленно им это первое. Второе - он не поддерживает мультикоре и работает только с 1 из ядер. От взлома и подключений с ненужных IP и закрытие всего в плане протоколов и портов что не нужно - с этой задачей он справляется, чему собственно и посвящен этот мануал.

А относительно DDoS - Эта уже другая тема. Фаерволами с этим бесполезно бороться.
Ибо есть железо специально для этого предназначенное. Только вот стоит оно как бентли и достать не так просто.
 
Последнее редактирование:

DarkEmpire

Прославленный
Местный
Сообщения
537
Розыгрыши
0
Репутация
298
Реакции
351
Баллы
1 503
попробовал твои настройки
debian 8

тачка уходит в софтребут через 10-15 мин.

/del
это овх ложил мою тачку, ибо не мог достучатся до нее...

Хорошо что вспомнил про эту тему, у кого овх нужно дописать:
Вместо "x" ваш ип.

 
Последнее редактирование модератором:

sl4yer

Рекрут
Пользователь
Сообщения
6
Розыгрыши
0
Репутация
50
Реакции
9
Баллы
0
Если уже бампнули тему полуторагодичной давности — добавлю и свои 5 монет.
# сбрасываем все при запуске
$IPT -F
$IPT -X
$IPT -Z
Это сбросит не все, а только то, что в таблице filter. Чтобы сбросить все таблицы — воспользуйся циклом.
Код:
for ipt_table in raw mangle nat filter security
do
        $ipt -t $ipt_table -F
        $ipt -t $ipt_table -X
        $ipt -t $ipt_table -Z
done


$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD
Уже все очистили, зачем еще раз? Если цепочка не указана явно, то очищаются все (не только стандартные) существующие в таблице. Иными словами, $ipt -F равносильно
Код:
$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD
$IPT -F MY_CUSTOM_CHAIN
$IPT -F ...


# Разрешаем подключаться к порту MySQL только с разрешенных IP
Для веб-сервера это еще ладно, а вот разрешать целым подсетям коннект к базе — это так себе. Если у тебя динамический IP, то воспользуйся local port forwarding посредством ssh — очень полезная штука.

# Все что не подпало под описанные правила - дропаем
$IPT -A INPUT -j DROP
Это лишнее, так как все что не попало под описанные правила, будет обрабатываться политикой по умолчанию, которую ты указал в DROP ($IPT -P INPUT DROP)

Активируем скрипт при запуске системы:

# chmod +x /etc/rc.d/rc.local
# vi /etc/rc.d/rc.local


Нажимаем Insert и дописываем туда:
/etc/init.d/rc.firewall

В CentOS 7 используется systemd, поэтому чтобы добавлять правила при загрузке сервера выполни:
Код:
iptables-save > /etc/sysconfig/iptables
и
systemctl enable iptables
При старте сервера будет выполняться
Код:
iptables-restore < /etc/sysconfig/iptables
что, собственно, и загрузит сохраненные правила.
systemctl enable iptables сработает, если ты установил iptables-services ранее, как советовал Rekt4Life
yum install iptables-services
 

DarkEmpire

Прославленный
Местный
Сообщения
537
Розыгрыши
0
Репутация
298
Реакции
351
Баллы
1 503
Для веб-сервера это еще ладно, а вот разрешать целым подсетям коннект к базе — это так себе. Если у тебя динамический IP, то воспользуйся local port forwarding посредством ssh — очень полезная штука.
а вот тут можно по подробнее?
 

sl4yer

Рекрут
Пользователь
Сообщения
6
Розыгрыши
0
Репутация
50
Реакции
9
Баллы
0
DarkEmpire, из man:
-L [bind_address:]port:host:hostport
-L [bind_address:]port:remote_socket
-L local_socket:host:hostport
-L local_socket:remote_socket
Specifies that connections to the given TCP port or Unix socket
on the local (client) host are to be forwarded to the given host
and port, or Unix socket, on the remote side.
...
By default, the local port is bound in accordance with the
GatewayPorts setting. However, an explicit bind_address may be
used to bind the connection to a specific address. The
bind_address of “localhost” indicates that the listening port be
bound for local use only, while an empty address or ‘*’ indicates
that the port should be available from all interfaces.​
Например,
Код:
ssh user@server -L 1234:127.0.0.1:80
где 1234 — это порт на локальной машине, 127.0.0.1:80 — это адрес и порт на который сервер будет форвардить трафик, в данном примере на себя. Таким образом, если ты напишешь у себя в браузере (или через telnet) 127.0.0.1:1234, то попадешь на то, что слушает 80 порт на сервере. Это можеть быть веб-сервер или что-то другое.

Также можно форвардить трафик не только на себя, а куда угодно. Например, у тебя есть супер секретный сервер, доступ к которому есть только по ssh и только с определенных IP. Одним из таких IP является твой другой сервер, доступ к которому есть отовсюду. Теперь, чтобы не делать ssh сначало на обычный сервер, а потом с него ssh на супер секретный можно воспользоваться форвардингом:
Код:
ssh user@not_secret_server.com -L 1234:super_secret_server.com:22
После этого со своей машины пишешь ssh -p 1234 user@127.0.0.1 и попадаешь на секретный сервер.

Пример с MySQL будет выглядеть так:
Код:
ssh user@server -L 3306:127.0.0.1:3306
И потом в локальном phpMyAdmin или в том что ты используешь, указываешь коннект на 127.0.0.1 3306. Правда, последний раз когда я пользовался MySQL нужно было форвардить не порт, а сокет — благо, ssh это умеет.

Для удобности, можно добавить ключи -f и -N.
-f, отправит комманду в бэкграунд;
-N, не будет запускать bash. Очень удобно, и супер полезно, если на сервере у юзера стоит /bin/false или /bin/nologin.​
Таким образом конечная комманда будет:
Код:
ssh user@server -L 3306:127.0.0.1:3306 -fN
Также можно биндить не только на локальный 127.0.0.1, а и на 192.168.0.1 или на свой публичный адрес, позволяя коннет извне. Например:
Код:
ssh user@server -L 1.2.3.4:22:127.0.0.1:22
Как написано в man, контролируется это директивой GatewayPorts.

Ах да, это примеры для Linux клиента. В putty для винды этим тоже можно пользоваться, категория SSH -> Tunnels. И еще, существует и remote port forwarding (ключ -R) — это вообще, супер опасная тема в корпоративной среде. Дает возможность обходить файрволы на раз-два.
 

artemmu

Рекрут
Пользователь
Сообщения
2
Розыгрыши
0
Репутация
3
Реакции
4
Баллы
0
Хотел спросить, скрипт актуален на 2018г, или есть дополнения к нему?
Пользуюсь машиной ovh, нужно дописывать правила как в посте от DarkEmpire,
Хорошо что вспомнил про эту тему, у кого овх нужно дописать:
Вместо "x" ваш ип.

***Скрытый текст не может быть процитирован.***
Спасибо.
 

DarkEmpire

Прославленный
Местный
Сообщения
537
Розыгрыши
0
Репутация
298
Реакции
351
Баллы
1 503
все таки сделаю некроспорт

--connlimit-above это конечно круто в связке с лсом и гсом, а кто то пробовал юзать --hashlimit-above?
если да, то как это правильно реализовать, если быть конкретнее: --connlimit-above ограничивает количество одновременных соединений клиента, а как ограничить количество получаемых пакетов в секунду от клиента

скорее всего на примере логина, это долго выглядеть примерно вот так:

Bash:
$IPT -A INPUT -p tcp -i $IFACE --dport 2106 -m connlimit --connlimit-above 5 -j DROP
$IPT -A INPUT -p tcp -i $IFACE --syn --dport 2106 -m hashlimit --hashlimit 5/second --hashlimit-burst 5 --hashlimit-mode dstip --hashlimit-name ls -j ACCEPT
$IPT -A INPUT -p tcp -i $IFACE --syn --dport 2106 -j DROP
 

6yka

Странник
Проверенный
Сообщения
1 731
Розыгрыши
0
Репутация
1 613
Реакции
1 172
Баллы
1 045
подкину вам запрет для IPTables на 10 стран. знающие поймут че к чему
 

Вложения

  • IPTabless.rar
    272,6 КБ · Просмотры: 9

DarkEmpire

Прославленный
Местный
Сообщения
537
Розыгрыши
0
Репутация
298
Реакции
351
Баллы
1 503
подкину вам запрет для IPTables на 10 стран. знающие поймут че к чему
забыл про это, просто юзаю провайдеров с фаерволами в лк, типо ovh и hetzner
достаточно блочить конекты по 22 и 3306 порту и открыть только для своего пк\веб

даже есть решения без фаервола: меняешь порт ssh, так как все брутят дефолтные порты
а с бд, просто не юзать root и лочить к нему доступ из вне, так как в основном все брутят root и прочие дефолтные юзеры, а основого юзера нужно будет еще угадать
 

Evas

Бывалый
Местный
Сообщения
91
Розыгрыши
11
Репутация
203
Реакции
92
Баллы
600
все таки сделаю некроспорт

--connlimit-above это конечно круто в связке с лсом и гсом, а кто то пробовал юзать --hashlimit-above?
если да, то как это правильно реализовать, если быть конкретнее: --connlimit-above ограничивает количество одновременных соединений клиента, а как ограничить количество получаемых пакетов в секунду от клиента

скорее всего на примере логина, это долго выглядеть примерно вот так:

Bash:
$IPT -A INPUT -p tcp -i $IFACE --dport 2106 -m connlimit --connlimit-above 5 -j DROP
$IPT -A INPUT -p tcp -i $IFACE --syn --dport 2106 -m hashlimit --hashlimit 5/second --hashlimit-burst 5 --hashlimit-mode dstip --hashlimit-name ls -j ACCEPT
$IPT -A INPUT -p tcp -i $IFACE --syn --dport 2106 -j DROP
Тогда уже --hashlimit-mode srcip, если хотите ограничить кол-во пакетов получаемых от 1го конкретного ip.
И разумеется кол-во пакетов подбирается индивидуально и опытным путём для каждого случая.
 

DarkEmpire

Прославленный
Местный
Сообщения
537
Розыгрыши
0
Репутация
298
Реакции
351
Баллы
1 503
Тогда уже --hashlimit-mode srcip
так и думал что где то косяк, не нашел описания данных переменных
на счет пакетов в секунду, да тут уже индивидуально разве что на гс
на логин 5 пакетов в секунду я думаю хватит
 

òbi

-
Партнер
Сообщения
602
Розыгрыши
8
Решения
7
Репутация
1 228
Реакции
554
Баллы
863
Когда-то давно заказывал скрипт под centos у сис.админа (fhost.ee) вот такой вот скрипт:
Код:
#!/bin/sh

modprobe ipt_TTL
modprobe ip_nat_ftp

########### сброс всего
iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

### установка дефолтных правил
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT

### разные запреты
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

### Запрещаем пинг и UDP
iptables -t filter -A INPUT -p icmp -j DROP
iptables -t filter -A INPUT -p udp --sport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp -j DROP

### Blocked ip
#iptables -A INPUT -s xxx.xxx.xxx.xxx-j REJECT

### localhost
iptables -t filter -A INPUT -s 127.0.0.1 -j ACCEPT

### Разрешаем udp для ntp
iptables -A INPUT -s 192.168.0.0/16 -m state --state NEW -p udp --dport 123 -j ACCEPT

### Разрешоные TCP порты
#iptables -t filter -A INPUT -p tcp --dport 20202 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 5 -j DROP
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -m connlimit --connlimit-above 5 -j DROP
iptables -t filter -A INPUT -p tcp --dport 2106 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 2106 -m connlimit --connlimit-above 5 -j DROP
iptables -t filter -A INPUT -p tcp --dport 7777 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 7777 -m connlimit --connlimit-above 10 -j DROP

### разрешаем уже устанновленные подключения
iptables --table filter --append INPUT -m conntrack --ctstate ESTABLISHED --jump ACCEPT
iptables --table filter --append OUTPUT -m conntrack --ctstate ESTABLISHED --jump ACCEPT
iptables --table filter --append INPUT -m conntrack --ctstate RELATED --jump ACCEPT
iptables --table filter --append OUTPUT -m conntrack --ctstate RELATED --jump ACCEPT
iptables --table filter --append INPUT --in-interface lo -m conntrack --ctstate NEW --jump ACCEPT
iptables --table filter --append OUTPUT --out-interface lo -m conntrack --ctstate NEW --jump ACCEPT

### Full access
#iptables -t filter -A INPUT -s xxx.xxx.xxx.xxx-j ACCEPT

Полезный скрипт али так се? ?‍♂️
 
Сверху Снизу