iptables - ddos protections

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
Davsharyan
Сообщения: 39
ОС: Debian Lenny

iptables - ddos protections

Сообщение Davsharyan »

Здрямс,

Есть веб сервак который находится за шлюзом
Шлюз - ubuntu
Веб Сервер - Windows Server - IIS

IIS (10.10.0.2) <--> eth1 Ubuntu eth0 <--> Public

На сервер валятся много HTTP запросов ака атака ддос. Интересуют максимальные методы защиты от ддос с использованием шлюза.
Вот что есть на данный момент
sysctl.conf

Код: Выделить всё

net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.tcp_syncookies=1
net.ipv4.ip_forward=1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0


через iptables вроде каките запросы отбиваются. За сутки в логах посчитал больше 14К уникальных IP адресов

всё это делается тремя строками

Код: Выделить всё

$IPT -A FORWARD -p tcp -i eth0 -o eth1 -m tcp --dport 80 -m state --state NEW -m recent --set --name DEFAULT --rsource
$IPT -A FORWARD -p tcp -i eth0 -o eth1 -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 --name DEFAULT --rsource -j LOG --log-prefix "iptables: FORWARD " --log-level 5
$IPT -A FORWARD -p tcp -i eth0 -o eth1 -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 --name DEFAULT --rsource -j DROP


Нужно ли что-то тут менять/добавлять ?
Какие-то другие решения ?

все рулы iptables

Код: Выделить всё

#!/bin/bash

#
# eth0 - public interface - 99.99.99.99/28
# eth1 - local interface - 10.10.0.0/24
#

# Define variables
IPT=/sbin/iptables

#
# Forwarding is enabled in sysctl.conf
#

# Load modules
/sbin/rmmod xt_recent
/sbin/modprobe ip_conntrack
/sbin/modprobe ipt_recent ip_list_tot=5000 ip_pkt_list_tot=100

echo "Setting kernel tcp parameters to reduct DoS effects"
echo "Reduce DoSing ability by reducing timeouts"

echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 1 > /proc/sys/net/ipv4/tcp_window_scaling
echo 0 > /proc/sys/net/ipv4/tcp_sack
echo 1280 > /proc/sys/net/ipv4/tcp_max_syn_backlog

# Set default policies
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT

# Flush all rules
$IPT -F
$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD
$IPT -F -t nat
$IPT -X -t nat
$IPT -X

# Allow incoming on loopback interface
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -d 127.0.0.0/8 -j REJECT

#
# Chains to DROP too many SYN-s
#

$IPT -N syn-flood
$IPT -A syn-flood -m limit --limit 100/second --limit-burst 150 -j RETURN
$IPT -A syn-flood -j LOG --log-prefix "SYN flood: "
$IPT -A syn-flood -j DROP

# Allow incoming ICMP
$IPT -A INPUT -p icmp -m state --state ESTABLISHED -j ACCEPT
$IPT -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

# Allow incoming SSH
$IPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 2022 -j ACCEPT

# Allow connections between FW and LAN
$IPT -A INPUT -p all -s 10.10.0.0/24 -i eth1 -j ACCEPT
$IPT -A OUTPUT -p all -d 10.10.0.0/24 -o eth1 -j ACCEPT

#
# Check for RFC subnets
#

$IPT -A INPUT -s 0.0.0.0/255.0.0.0 -i eth0 -j DROP
$IPT -A INPUT -s 127.0.0.0/255.0.0.0 ! -i lo -j DROP
$IPT -A INPUT -s 10.0.0.0/255.0.0.0 -i eth0 -j DROP
$IPT -A INPUT -s 172.16.0.0/255.240.0.0 -i eth0 -j DROP
$IPT -A INPUT -s 192.168.0.0/255.255.0.0 -i eth0 -j DROP
$IPT -A INPUT -s 224.0.0.0/224.0.0.0 -i eth0 -j DROP

#
# Check connection state
#
$IPT -A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
$IPT -A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
$IPT -A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -m limit --limit 20/sec -j LOG --log-prefix "iptables: IV1" --log-level 5
$IPT -A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
$IPT -A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -m limit --limit 20/sec -j LOG --log-prefix "iptables: IV2" --log-level 5
$IPT -A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
$IPT -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 20/sec -j LOG --log-prefix "iptables: IV3" --log-level 5
$IPT -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPT -A FORWARD -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -m limit --limit 20/sec -j LOG --log-prefix "iptables: IV4" --log-level 5
$IPT -A FORWARD -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP
$IPT -A FORWARD -p tcp -m tcp --tcp-flags FIN,ACK FIN -m limit --limit 20/sec -j LOG --log-prefix "iptables: IV5" --log-level 5
$IPT -A FORWARD -p tcp -m tcp --tcp-flags FIN,ACK FIN -j DROP
$IPT -A FORWARD -p tcp -m tcp --tcp-flags ACK,URG URG -m limit --limit 20/sec -j LOG --log-prefix "iptables: IV6" --log-level 5
$IPT -A FORWARD -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP
$IPT -A FORWARD -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
$IPT -A FORWARD -f -j DROP

# NAT DMZ -> WAN

$IPT -A POSTROUTING -t nat -p tcp --sport 999 -s 10.10.0.2 -o eth0 -j SNAT --to 99.99.99.99:25
$IPT -A POSTROUTING -t nat -s 10.10.0.0/24 -o eth0 -j SNAT --to 99.99.99.99
$IPT -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -i eth1 -o eth0 -j ACCEPT

#
# Port forwarding rules
#
$IPT -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j DNAT --to 10.10.0.2:80
$IPT -A FORWARD -p tcp -i eth0 -o eth1 -m tcp --dport 80 -m state --state NEW -m recent --set --name DEFAULT --rsource

# limit and hitcount
$IPT -A FORWARD -p tcp -i eth0 -o eth1 -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 --name DEFAULT --rsource -j LOG --log-prefix "iptables: FORWARD " --log-level 5
$IPT -A FORWARD -p tcp -i eth0 -o eth1 -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 --name DEFAULT --rsource -j DROP

# Same as above, but using also limit and limit burst
#$IPT -A FORWARD -p tcp -i eth0 -o eth1 -m tcp --dport 80 -m state --state NEW -m limit --limit 10/sec --limit-burst 10 -m recent --update --seconds 100 --hitcount 6 --name DEFAULT --rsource -j LOG --log-prefix "iptables: " --log-level 5
#$IPT -A FORWARD -p tcp -i eth0 -o eth1 -m tcp --dport 80 -m state --state NEW -m limit --limit 10/sec --limit-burst 10 -m recent --update --seconds 100 --hitcount 6 --name DEFAULT --rsource -j DROP

# Only limit
#$IPT -A FORWARD -p tcp -i eth0 -o eth1 -m tcp --dport 80 -m state --state NEW -m limit --limit 5/sec --limit-burst 10 -j LOG --log-prefix "iptables: " --log-level 5
#$IPT -A FORWARD -p tcp -i eth0 -o eth1 -m tcp --dport 80 -m state --state NEW -m limit --limit 5/sec --limit-burst 10 -j DROP

$IPT -A PREROUTING -t nat -i eth0 -p tcp --dport 25 -j DNAT --to 10.10.0.2:999
$IPT -A FORWARD -p tcp -i eth0 -o eth1 -d 10.10.0.2 --dport 999 -m state --state NEW -j ACCEPT

$IPT -A PREROUTING -t nat -i eth0 -p tcp --dport 3389 -j DNAT --to 10.10.0.2:3389
$IPT -A FORWARD -p tcp -i eth0 -o eth1 -d 10.10.0.2 --dport 3389 -m state --state NEW -j ACCEPT


з.ы. софты типо apf не работают, так как они только для INPUT,OUTPUT запросов а тут форвардинг
<<EOF
everything that has a beginning has an end as well...
EOF
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: iptables - ddos protections

Сообщение Ленивая Бестолочь »

попробуйте поставить ddos deflector.
это скрипт такой, легко гуглится.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Аватара пользователя
Davsharyan
Сообщения: 39
ОС: Debian Lenny

Re: iptables - ddos protections

Сообщение Davsharyan »

Ленивая Бестолочь писал(а):
02.10.2011 20:31
попробуйте поставить ddos deflector.
это скрипт такой, легко гуглится.


Если Вы не заметили то повторюсь

мне нужно что-то для форвардинга, а если хоть одинь раз смотрели в скрипте ddos.sh из ddos deflate, тогда бы знали, что там используется

Код: Выделить всё

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

а там видны только соединения к шпюзу.
<<EOF
everything that has a beginning has an end as well...
EOF
Спасибо сказали:
JwsD
Сообщения: 129
ОС: ArchLinux

Re: iptables - ddos protections

Сообщение JwsD »

Davsharyan писал(а):
03.10.2011 00:31
Ленивая Бестолочь писал(а):
02.10.2011 20:31
попробуйте поставить ddos deflector.
это скрипт такой, легко гуглится.


Если Вы не заметили то повторюсь

мне нужно что-то для форвардинга, а если хоть одинь раз смотрели в скрипте ddos.sh из ddos deflate, тогда бы знали, что там используется

Код: Выделить всё

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

а там видны только соединения к шпюзу.

Поставь nginx настрой его на проксирвоание. Сделай limit_req limit_conn на вхост нужный.
ТАкже почитай: http://bkmz.org/425/zashtita-ot-ddos-iptables
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: iptables - ddos protections

Сообщение Ленивая Бестолочь »

Davsharyan писал(а):
03.10.2011 00:31
мне нужно что-то для форвардинга, а если хоть одинь раз смотрели в скрипте ddos.sh из ddos deflate, тогда бы знали, что там используется

смотреть смотрел, просто как-то не сообразил, что форварды там не будут видны.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали: