linux防火墙不能查dns内容但能精准控流,通过限定可信源访问53端口、禁用反射响应、拦截源端口53包、限速查询、启用rp_filter和关闭广播服务,切断dns放大攻击链路。

Linux 防火墙本身不“查DNS内容”,但能精准控制 DNS 流量的进出方向、源目地址、端口、连接状态和报文特征,从而切断 DNS 放大攻击链路、防止本机被劫持为反射源,并保障合法解析不受干扰。关键不在放行或封禁整个服务,而在分层校验与最小暴露。
只允许可信来源发起 DNS 查询
默认开放 53 端口等于把解析服务裸露在公网。必须显式限定谁可以发请求:
- 若仅服务内网(如 192.168.1.0/24),执行:
iptables -A INPUT -p udp --dport 53 -s 192.168.1.0/24 -j ACCEPTiptables -A INPUT -p tcp --dport 53 -s 192.168.1.0/24 -j ACCEPT - 立即拒绝所有其他来源:
iptables -A INPUT -p udp --dport 53 -j DROPiptables -A INPUT -p tcp --dport 53 -j DROP - 若本机不提供递归服务(强烈推荐),禁止向外发送 DNS 响应,防被用作反射节点:
iptables -A OUTPUT -p udp --dport 53 -j DROPiptables -A OUTPUT -p tcp --dport 53 -j DROP
拦截典型伪造 DNS 请求包
DNS 放大攻击依赖源 IP 伪造。防火墙可基于端口、速率、路径等维度识别异常:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 丢弃源端口为 53 的 UDP 入站包(正常客户端绝不用 53 当源端口):
iptables -A INPUT -p udp --sport 53 -j DROP - 限制单 IP 每秒最多 5 次 DNS 查询,防探测与放大扫描:
iptables -A INPUT -p udp --dport 53 -m limit --limit 5/sec --limit-burst 10 -j ACCEPTiptables -A INPUT -p udp --dport 53 -j DROP - 启用反向路径过滤(rp_filter),让内核检查入包源 IP 是否可通过本机路由表返回:
echo 1 | sudo tee /proc/sys/net/ipv4/conf/all/rp_filter
并写入 /etc/sysctl.conf:`net.ipv4.conf.all.rp_filter = 1`
关闭非必要广播与辅助服务
DNS 协议本身不依赖广播,但系统若响应 ICMP 广播或运行 Avahi/NetBIOS 等服务,可能被卷入 Smurf+DNS 混合攻击:
- 禁用 ICMP 广播响应:
echo 1 | sudo tee /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
写入 /etc/sysctl.conf:`net.ipv4.icmp_echo_ignore_broadcasts = 1` - 停用 Avahi(零配置网络服务):
sudo systemctl stop avahi-daemonsudo systemctl disable avahi-daemon - 关闭 Samba 的 NetBIOS 广播(如已安装):
编辑 /etc/samba/smb.conf,设 `disable netbios = yes`,重启 smb 服务
配合 BIND 安全策略形成纵深防御
防火墙是第一道闸门,BIND 配置才是核心防线。二者需协同:
- 在 /etc/named.conf 中严格设置:
allow-query { 192.168.1.0/24; };allow-recursion { 192.168.1.0/24; };allow-transfer { none; }; # 禁止区域传送,除非明确需要 - 禁用递归查询(若仅作权威服务器):
recursion no; - 启用响应速率限制(RRL),缓解缓存投毒与放大:
在 options 或 zone 中添加:rate-limit { responses-per-second 5; window 10; };










