我将服务器设置为拒绝所有传入的 UDP 数据包,以防止 UDP 泛洪。但是,有人告诉我,因为我将自己的域和服务器用于名称服务器,所以这可能会导致一些问题。我怎样才能解决这个问题?
我的防火墙是 iptables,我的发行版是 CentOS5.5。
如果您遵循标准的安全实践,那么您的默认防火墙策略将是阻止一切。如果您想允许传入的 DNS 请求,您所要做的就是编写一个规则来允许 tcp 和 udp 流量到端口 53。
你所说的流量是UDP。UDP 是无状态的。这意味着有兴趣使您的连接饱和的人可以将数据包发送到您的地址,即使您只是丢弃它们。您仍然可以对 iptables 最近的匹配做一些半有用的事情,只允许系统实际接受和处理有限的流量。Evan 有一个在此处用于 SSH的示例。我们可能需要查看您的整个防火墙规则集,以告诉您必须添加哪些规则。
如果您的系统受到严重的 DoS 攻击,您几乎肯定需要您的 ISP 来帮助您,尝试在 VPS 上使用基于主机的防火墙来处理洪水真的不会很有用。
如果您还没有它,您应该考虑在完全不同的网络上为您的区域设置几个辅助 DNS 服务器。
在 Iptables 中,接受传入端口 53 的 UDP 流量并拒绝临时端口端口范围内的所有内容。
最高限制不应太高,否则您的服务器将无法从服务器内部解析外部域(例如,当您执行“ping google.com”时)。在 Linux 操作系统上,32768 是最多 61000 个套接字的第一个临时端口(也称为动态端口)。因此,32767 是静态分配端口的最高端口。仅当不使用您的服务器作为 DNS 解析器(又名 DNS 缓存)且 /etc/resolv.conf 指向名称服务器 127.0.0.1 或 ::1 时,这才是正确的
这是一个 tcpdump 示例:
23:10:13.315832 IP b.b.b.b.34507 > a.a.a.a.53: 23674% [1au] A? whitehouse.gov. (38)
23:10:13.377619 IP a.a.a.a.53 > b.b.b.b.34507: 23674*- 1/2/3 A 172.230.122.69(122)
Run Code Online (Sandbox Code Playgroud)
通常,要在 Linux 上查找 UDP 和 TCP 的本地动态(也称为临时或私有)端口范围:
cat /proc/sys/net/ipv4/ip_local_port_range
Run Code Online (Sandbox Code Playgroud)
但是,它仅适用于不托管 DNS 解析器的服务器(例如,当您将 /etc/resolv.conf 指向 8.8.8.8 时)。
服务器不是 DNS 解析器:
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p udp -m udp --dport 0:32767 -j DROP
Run Code Online (Sandbox Code Playgroud)
服务器是 DNS 解析器:
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p udp -m udp --dport 0:1023 -j DROP
Run Code Online (Sandbox Code Playgroud)
如果您想托管自己的 DNS 解析器来解析所有域名,则应考虑到这一点。
最好自己检查一下:
您可以使用以下方式监控发送端口
tcpdump udp and port 53 and not dst host *yourserveripaddress*
Run Code Online (Sandbox Code Playgroud)
然后查看发送端口并尝试找到最小的端口号。这个最低数字不应低于 --dport 0:xxxx 中的端口号 xxxx,否则您会阻止或减慢 DNS 请求。
归档时间: |
|
查看次数: |
12851 次 |
最近记录: |