linux防火墙规则中,tcp与udp端口过滤需分别配置:tcp支持状态跟踪(如established),适用于ssh、http等;udp无连接,用于dns、ntp等,必须显式指定协议和端口,如iptables -a input -p tcp --dport 80 -j accept和iptables -a input -p udp --dport 53 -j accept。

Linux 防火墙规则中,针对特定协议(如 TCP 或 UDP)的端口访问过滤,核心在于明确指定协议类型、目标端口,并结合源地址、连接状态等条件进行精准控制。TCP 和 UDP 的处理逻辑不同,不能混用;一条规则只匹配一种协议,多协议服务需分别配置。
区分 TCP 与 UDP 协议配置
TCP 是面向连接的协议,支持状态跟踪(ESTABLISHED/RELATED),适合 Web、SSH、MySQL 等服务;UDP 是无连接协议,不维护会话状态,常用于 DNS、NTP、视频流等场景。
- 开放 TCP 80 端口(HTTP):
iptables -A INPUT -p tcp --dport 80 -j ACCEPT - 开放 UDP 53 端口(DNS 查询):
iptables -A INPUT -p udp --dport 53 -j ACCEPT - 禁止所有 UDP 到 161 端口(SNMP):
iptables -A INPUT -p udp --dport 161 -j DROP
注意:--dport 只作用于目标端口,-p tcp 或 -p udp 必须显式声明,否则规则可能不生效或误匹配。
按协议限制访问来源
同一端口对不同协议可设置完全独立的访问策略。例如,允许内网 TCP 访问 MySQL(3306),但禁止所有 UDP 到该端口(通常无意义,但可防误配):
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 仅允许可信网段通过 TCP 访问 3306:
iptables -A INPUT -p tcp -s 10.0.0.0/8 --dport 3306 -j ACCEPT - 静默丢弃所有 UDP 到 3306 的包:
iptables -A INPUT -p udp --dport 3306 -j DROP - 若未显式拒绝 UDP 3306,而 INPUT 默认策略为 DROP,则它已被阻断;但显式写出更清晰、可审计。
常见协议端口典型配置示例
以下为高频组合,兼顾安全与可用性:
-
DNS:同时放行 TCP/UDP 53(TCP 用于区域传输,UDP 用于普通查询)
iptables -A INPUT -p udp --dport 53 -j ACCEPTiptables -A INPUT -p tcp --dport 53 -j ACCEPT -
SSH:仅限 TCP 22,建议加源 IP 限制
iptables -A INPUT -p tcp -s 192.168.10.0/24 --dport 22 -j ACCEPT -
Syslog(UDP):接收远程日志时开放 UDP 514
iptables -A INPUT -p udp --dport 514 -j ACCEPT -
NTP:通常用 UDP 123,也可开 TCP(较少见)
iptables -A INPUT -p udp --dport 123 -j ACCEPT
firewalld 中协议感知的端口管理
firewalld 对协议同样敏感,添加端口时必须注明 /tcp 或 /udp:
- 开放 TCP 8080:
firewall-cmd --permanent --add-port=8080/tcp - 开放 UDP 8080:
firewall-cmd --permanent --add-port=8080/udp - 用 rich-rule 限制 UDP 53 仅来自某 DNS 服务器:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.50" port protocol="udp" port="53" accept'
执行后务必 firewall-cmd --reload 生效,且所有操作带 --permanent 才能持久化。










