Защита маршрутизатора от переполнения NAT: настройка Connection Limit
- Падение интернета у всех пользователей из-за одного зараженного хоста (вирус-спамер, BitTorrent, сканеры портов).
- В системном журнале появляются ошибки
nat: table full, dropping packetилиconntrack: table full. - Отказ новых сессий и невозможность установить соединения наружу при наличии свободной полосы пропускания.
- Резкий скачок потребления RAM ядром сетевого шлюза.
1. Ограничение количества соединений на одного клиента в MikroTik RouterOS
Установите жесткий лимит одновременных исходящих соединений (например, не более 200 сессий на один IP):
/ip firewall filter
# Блокировка клиентов, превысивших лимит TCP соединений
add chain=forward action=drop protocol=tcp connection-state=new connection-limit=200,32 in-interface-list=LAN comment="Drop excessive TCP connections per IP"
# Ограничение UDP-потоков
add chain=forward action=drop protocol=udp connection-state=new connection-limit=100,32 in-interface-list=LAN comment="Drop excessive UDP connections per IP"2. Автоматическое помещение нарушителей в черный список (Tarpit / Blacklist)
/ip firewall filter
add chain=forward action=add-src-to-address-list address-list=NAT_Spammers address-list-timeout=1h protocol=tcp connection-state=new connection-limit=300,32 in-interface-list=LAN comment="Add abusive IPs to blacklist"
add chain=forward action=drop src-address-list=NAT_Spammers comment="Block abusive NAT hosts"3. Оптимизация таймаутов NAT и Conntrack в RouterOS
/ip firewall connection tracking set tcp-syn-sent-timeout=15s
/ip firewall connection tracking set tcp-syn-received-timeout=15s
/ip firewall connection tracking set tcp-established-timeout=30m
/ip firewall connection tracking set udp-timeout=30s
/ip firewall connection tracking set generic-timeout=1m4. Настройка connlimit в Linux iptables (альтернатива)
iptables -A FORWARD -p tcp --syn -m connlimit --connlimit-above 150 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
iptables -A FORWARD -p udp -m connlimit --connlimit-above 100 --connlimit-mask 32 -j DROP Частые вопросы (FAQ)
Что означает маска /32 в параметре connection-limit=200,32?
Маска /32 указывает, что лимит в 200 соединений рассчитывается индивидуально для каждого отдельного хоста (IP-адреса). Если указать /24, лимит будет действовать суммарно на всю подсеть из 254 адресов.
Почему стандартный таймаут tcp-established-timeout в 1 день — это плохо?
Таймаут в 24 часа удерживает 'мертвые' записи сессий в памяти шлюза при некорректном разрыве связи клиентом, быстро заполняя таблицу conntrack. Снижение таймаута до 30–60 минут безопасно освобождает пул портов.
Сколько портов трансляции доступно на одном внешнем белом IP?
В классическом NAPT (Source NAT / Masquerade) доступно около 64 512 динамических портов (от 1024 до 65535) на каждый внешний IP-адрес для каждого транспортного протокола (TCP/UDP).
Как найти конкретный IP, который забил таблицу соединений?
В MikroTik откройте IP -> Firewall -> Connections, отсортируйте по Src. Address или выполните: /ip firewall connection print stats.