我问这个问题的背景是这样的。我们的 Direct Access 服务器最近遭受了 DDoS 和其他攻击,当这些攻击来袭时,会大大降低我们网络中所有其他服务器的网络连接速度。我们希望尝试将这两台服务器置于代理或类似设备后面,这样当攻击再次来袭时,它们会关闭代理服务器,从而断开 DA 服务器和客户端之间的连接,但避免其他地方的网络变慢。这只是一个临时解决方案,直到我们得到一个带有防火墙的物理路由器来防止这种情况发生。
由于我对网络管理方式还不太熟悉,所以我不太清楚如何才能实现这一点。有人建议我使用 Squid 进行透明代理,但我遇到的每一份指南都是将 Squid 放在客户端和互联网之间,而我需要在互联网和一两台服务器之间放置一些东西。
我还研究了仅使用 IPtables 的 PREROUTING 规则将连接转发到其他服务器的可能性,但在使用 SSH 进行测试时,它似乎只是拦截连接而不是转发它们。不过,这可能是因为我并不知道如何配置 IPtables 来做到这一点。
作为参考,这些是我使用的 IPtables 规则。第一条规则用于测试 SSH 连接,第二条规则用于端口 443,因为据我所知,传入到 Direct Access 的连接只需要 https。我已将其设置为代理服务器具有我们 DNS 管理系统中分配的目标服务器的 DNS 名称,此处表示为“remoteserver.example.edu”。这个想法是客户端尝试通过 DNS 名称“remoteserver.example.edu”连接到 Direct Access,后者连接到代理,然后代理立即通过 IP 地址将其转发到 DA 服务器。
iptables -t nat -A PREROUTING -p tcp -d remoteserver.example.edu --dport 22 -j DNAT --to-destination remoteserverip:22
iptables -t nat -A PREROUTING -p tcp -d remoteserver.example.edu --dport 443 -j DNAT --to-destination remoteserverip:443
因此,我想问一下,是否有人知道如何实现在两个服务器前面放置缓冲区以减轻恶意攻击造成的网络减速。我愿意听取 Squid 配置技巧、IPtables 规则或其他解决方案。提前致谢。
答案1
您需要使用 nginx 来解决此类问题,而不是 Squid。您甚至可以将 nginx 与 apache 放在同一个盒子里,具体取决于攻击强度和您提供的内容类型。
答案2
我会在单独的服务器上使用 nginx 作为临时解决方案。一个简单的例子是这样的;
- 启动一个面向互联网的新盒子作为反向代理
- 让这个新盒子向网络服务器发送流量
/etc/nginx/conf.d/basic-reverse-proxy.conf 的基本配置文件如下所示
upstream backend {
least_conn;
server 10.1.0.101;
server 10.1.0.102;
}
# This server accepts all traffic to port 80 and passes it to the upstream.
# Notice that the upstream name and the proxy_pass need to match.
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
这只会将端口 80 上的任何流量传递到后端服务器。“least_conn”表示 nginx 将尝试将流量发送到连接数最少的服务器。后端服务器越多,您分散的流量就越多。