ubuntu dhcp如何与防火墙配合
小樊
43
2025-12-30 00:37:51
Ubuntu DHCP 与防火墙配合实践
一、端口与方向速览
- DHCP 基于 UDP,涉及 67/68 端口;DHCPv6 使用 546/547。
- 角色与方向对照:
- DHCP 服务器:入站 UDP 67(接收 Discover/Request),出站 UDP 68(发送 Offer/Ack)
- DHCP 客户端(如 dhclient):入站 UDP 68(接收 Offer/Ack),出站 UDP 67(发送 Discover/Request)
- 若启用 IPv6,需额外放行 UDP 546/547。
二、使用 UFW 的推荐做法
- 安装与启用
- 安装:sudo apt update && sudo apt install ufw
- 启用:sudo ufw enable
- 仅放行 DHCP 相关流量(示例为所有来源,可按需收紧)
- IPv4
- 服务器:sudo ufw allow in proto udp from any to any port 67
- 客户端:sudo ufw allow in proto udp from any to any port 68
- IPv6(如启用 DHCPv6)
- 服务器:sudo ufw allow in proto udp from any to any port 547
- 客户端:sudo ufw allow in proto udp from any to any port 546
- 查看与重载
- 查看:sudo ufw status verbose
- 重载:sudo ufw reload
- 说明
- UFW 规则默认持久化,重启后仍然有效;如需更细粒度控制,可在规则中加入 from <网段> 限制来源。
三、使用 iptables 的推荐做法
- 基本放行(示例为所有来源,可按需收紧)
- 服务器
- 入站:sudo iptables -A INPUT -p udp --dport 67 -j ACCEPT
- 出站:sudo iptables -A OUTPUT -p udp --sport 67 -j ACCEPT
- 客户端
- 入站:sudo iptables -A INPUT -p udp --dport 68 -j ACCEPT
- 出站:sudo iptables -A OUTPUT -p udp --sport 68 -j ACCEPT
- 可选:同时放行源端口 67/68,以兼容某些实现
- 例如:sudo iptables -A INPUT -p udp --sport 67 -j ACCEPT
- 持久化保存
- 安装:sudo apt-get install iptables-persistent
- 保存:sudo netfilter-persistent save
- 重载:sudo netfilter-persistent reload
- 说明
- 若系统启用 IPv6,请为 UDP 546/547 添加对应规则。
四、常见场景与排错要点
- 场景一:本机作为 DHCP 服务器
- 放行 UDP 67 入站(服务器收 Discover/Request),放行 UDP 68 出站(服务器发 Offer/Ack);如启用 IPv6,放行 UDP 547 入站、546 出站。
- 场景二:本机作为 DHCP 客户端(如 dhclient)
- 放行 UDP 68 入站(收 Offer/Ack),放行 UDP 67 出站(发 Discover/Request);如启用 IPv6,放行 UDP 546 入站、547 出站。
- 场景三:多网卡/仅特定网段放行
- 在 UFW 中使用 from <网段> to any 或在 iptables 中增加 -s <网段> 条件,仅对内部接口放行,避免外网滥用。
- 快速验证
- 查看状态:sudo ufw status 或 sudo iptables -L -v -n
- 抓包定位:sudo tcpdump -ni <接口> udp and port 67 or port 68(IPv6 加 and port 546 or port 547)
- 服务日志:sudo journalctl -u isc-dhcp-server -b(服务器)或查看 /var/log/syslog(客户端)。