最近我有很多小规模的DoS攻击。 我想知道什么iptables规则应该用来对付最常见的DoS攻击,并且通常保护我的web服务器。
Web服务器运动Varnish – > nginx / php5 – > memcached – > mysql
我尝试了一些普通的收据,但他们也阻止访问我的数据库服务器位于远程服务器,所以我只是刷新build议的规则,现在感觉有点勉强,当我在iptables上只看到fail2ban volnurable。
所以感谢你的规则,阻止最常见的攻击媒介。
以下是我使用的一些规则:
# Reject spoofed packets iptables -A INPUT -s 10.0.0.0/8 -j DROP iptables -A INPUT -s 169.254.0.0/16 -j DROP iptables -A INPUT -s 172.16.0.0/12 -j DROP iptables -A INPUT -s 127.0.0.0/8 -j DROP iptables -A INPUT -s 224.0.0.0/4 -j DROP iptables -A INPUT -d 224.0.0.0/4 -j DROP iptables -A INPUT -s 240.0.0.0/5 -j DROP iptables -A INPUT -d 240.0.0.0/5 -j DROP iptables -A INPUT -s 0.0.0.0/8 -j DROP iptables -A INPUT -d 0.0.0.0/8 -j DROP iptables -A INPUT -d 239.255.255.0/24 -j DROP iptables -A INPUT -d 255.255.255.255 -j DROP # Stop smurf attacks iptables -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP iptables -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP iptables -A INPUT -p icmp -m icmp -j DROP # Drop all invalid packets iptables -A INPUT -m state --state INVALID -j DROP iptables -A FORWARD -m state --state INVALID -j DROP iptables -A OUTPUT -m state --state INVALID -j DROP # Drop excessive RST packets to avoid smurf attacks iptables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT # Attempt to block portscans # Anyone who tried to portscan us is locked out for an entire day. iptables -A INPUT -m recent --name portscan --rcheck --seconds 86400 -j DROP iptables -A FORWARD -m recent --name portscan --rcheck --seconds 86400 -j DROP # Once the day has passed, remove them from the portscan list iptables -A INPUT -m recent --name portscan --remove iptables -A FORWARD -m recent --name portscan --remove # These rules add scanners to the portscan list, and log the attempt. iptables -A INPUT -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:" iptables -A INPUT -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:" iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP
所以感谢你的防弹规则。
您应该联系您的ISP,并在stream量下降到骨干网之前将其丢弃。 如果您的防火墙需要丢弃stream量,那么它已经占用了可用的带宽并使用了系统的资源。
这是唯一的“防弹”方式。
我使用IPtables为了限制访问FTP和SSH,我只允许我的计算机的IP连接到服务器。 我不能说我有DOS攻击的问题。
/sbin/iptables -A INPUT -p tcp --dport 22 -s 86.106.0.0/16 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 22 -s 89.122.0.0/16 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 22 -j DROP /sbin/iptables -A INPUT -p tcp --dport 21 -s 86.106.0.0/16 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 21 -s 89.122.0.0/16 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 21 -j DROP
这些规则允许在两个不同的IP上访问端口22和21。 您可以添加您的数据库服务器的MySQL端口,并阻止其他客户端直接连接到您的服务器。
编辑:当服务器超载,我发现它有助于看到Apache的“mod-status”统计,输出如下所示: http : //www.apache.org/server-status你可以看到所有的网站访问者,蜘蛛,url请求等等。执行时间不到1分钟: http : //httpd.apache.org/docs/2.2/mod/mod_status.html