Есть веб сервак который находится за шлюзом
Шлюз - 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
всё это делается тремя строками
Код: Выделить всё
$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