LINUX.ORG.RU

DDoS или как защитить сервер / IP / канал

 , ,


0

5

Есть крупный TeamSpeak3-голосовой сервер переговоров различного рода людей с разделами и ветками.

TS-server располагается на выделенном сервере и, само собой, имеет определенный IP.
Периодически начинается атака на IP-адрес со множества различных IP из разных стран. Узнают IP очень легко: просматривая текущее соединение с сервером, пингуя IP, просматривая информацию по домену и т.п.
Есть сервис CloudFlare, однако он проксирует только HTTP TCP траффик. Здесь же нужна фильтрация по UDP протоколу...
Задача состоит в следующем: защититься от DDoS-атаки на IP-адрес.
В IPtables прописаны правила.

iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A INPUT -i ppp0 -p udp --syn --dport ПОРТ_СЕРВЕРА -m limit --limit 10/s -j ACCEPT
iptables -t filter -A INPUT -i ppp0 -p udp --dport ПОРТ_СЕРВЕРА -m connlimit --connlimit-above 200 --connlimit-mask 0 -j DROP
iptables -t filter -A INPUT -i ppp0 -p udp --dport ПОРТ_СЕРВЕРА -m connlimit --connlimit-above 200 --connlimit-mask 0 -j LOG --log-prefix "DoS200:"
iptables -t filter -A INPUT -i ppp0 -p udp --dport ПОРТ_СЕРВЕРА --syn -m connlimit --connlimit-above 5 -j DROP
iptables -t filter -A INPUT -i ppp0 -p udp --dport ПОРТ_СЕРВЕРА --syn -m connlimit --connlimit-above 5 -j LOG --log-prefix "DoS5:"
iptables -t filter -A INPUT -i ppp0 -p udp --dport ПОРТ_СЕРВЕРА -j ACCEPT
iptables -I UDP -p udp -m recent --update --seconds 60 --name UDP-PORTSCAN -j REJECT --reject-with icmp-port-unreachable
iptables -D INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
iptables -A INPUT -p udp -m recent --set --name UDP-PORTSCAN -j REJECT --reject-with icmp-port-unreachable
iptables -D INPUT -j REJECT --reject-with icmp-proto-unreachable
iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -I INPUT -i eth0 -s 10.0.0.0/8 -j DROP
iptables -I INPUT -i eth0 -s 172.16.0.0/12 -j DROP
iptables -I INPUT -i eth0 -s 192.168.0.0/16 -j DROP
iptables -I INPUT -i eth0 -s 127.0.0.0/8 -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -i eth0 -j DROP
iptables -I INPUT -p icmp --icmp-type redirect -j DROP
iptables -I INPUT -p icmp --icmp-type router-advertisement -j DROP
iptables -I INPUT -p icmp --icmp-type router-solicitation -j DROP
iptables -I INPUT -p icmp --icmp-type address-mask-request -j DROP
iptables -I INPUT -p icmp --icmp-type address-mask-reply -j DROP

В /etc/sysctl.d/90-firewall.conf

net.ipv4.icmp_echo_ignore_all = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.conf.all.send_redirects = 0
net/ipv4/conf/default/accept_redirects=0
net/ipv4/conf/all/accept_redirects=0
net/ipv6/conf/default/accept_redirects=0
net/ipv6/conf/all/accept_redirects=0
net.ipv4.conf.all.accept_source_route=0
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_responses=1
kernel.sysrq = 0
net.ipv4.ip_forward = 0 #это если компьютер не используется как шлюз
net.ipv4.tcp_syncookies = 1
net.ipv6.conf.all.forwarding = 0
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1 #игнорируем broadcasts пакеты
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.all.send_redirects = 0 #это если компьютер не используется как маршрутизатор
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 4294967295
kernel.shmall = 268435456
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_max_syn_backlog=2048
net.ipv4.tcp_synack_retries=1
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_fin_timeout = 20
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0net.ipv4.tcp_timestamps = 0
И ещё есть следующий вопрос. Можно ли как-то полностью запретить все соединения с IP-адресами, которые не относятся к странам: Россия, Казахстан, Украина, Беларусь, Сербия, Молдавия, Эстония, Латвия, Литва, Румыния?



Последнее исправление: ring0kill (всего исправлений: 3)

По поводу стран есть база данных geoip и модуль для iptables.

Только, ИМХО, для DDoS это всё бесполезно. Я не знаю как в вашем случае, но обычно DDoS просто забивает канал, что критично для голосового трафика и со стороны сервера от этого не защититься.

mky ★★★★★
()

я бы

-j REJECT

поменял на

-j DROP

а так, да. если тебе канал забьют, то ничего ты не сделаешь. поинтересуйся у провайдера, некоторые предоставляют защиту от DDoS, у них там DPI или что-то вроде того стоит.

Gu4
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.