#!/bin/bash
# conntrack-tune.sh — не даёт таблице conntrack переполниться под флудом (корень падений).
SELF="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"; source "$SELF/../defender.conf"

# больший потолок таблицы (~300MB на 1M записей)
sysctl -w net.netfilter.nf_conntrack_max=1048576 >/dev/null
echo 262144 > /sys/module/nf_conntrack/parameters/hashsize 2>/dev/null || true
# короткие таймауты — мусор от флуда выветривается быстро
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_syn_recv=15 >/dev/null
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_syn_sent=15 >/dev/null
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30 >/dev/null
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_close_wait=30 >/dev/null
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_fin_wait=30 >/dev/null
sysctl -w net.netfilter.nf_conntrack_tcp_loose=0 >/dev/null
# SYN-backlog + syncookies
sysctl -w net.ipv4.tcp_max_syn_backlog=8192 >/dev/null
sysctl -w net.core.somaxconn=8192 >/dev/null
sysctl -w net.ipv4.tcp_syncookies=1 >/dev/null
sysctl -w net.ipv4.tcp_synack_retries=2 >/dev/null

echo "[conntrack] max=$(cat /proc/sys/net/netfilter/nf_conntrack_max) syn_recv=15s time_wait=30s backlog=8192"
