multiport支持单端口(如22,80)和端口范围(如21:25,135:139)混合组合,用英文逗号分隔,最多15组;仅适用于tcp或udp协议单独规则,须明确指定-p tcp或-p udp,不支持跨协议混用。

用 iptables 的 multiport 模块,可以把多个端口合并成一条规则处理,避免重复添加、规则冗长、管理混乱。它特别适合同时开放 Web(80/443)、SSH(22)、数据库(3306)、API(8080)等不连续端口的场景。
multiport 支持哪些端口组合方式
multiport 不仅能列单个端口,还能混合使用「单端口」和「端口范围」,用英文逗号分隔:
-
纯离散端口:如
--dports 22,80,443,3306 -
含端口段:如
--dports 21:25,135:139,443(21–25 和 135–139 是连续段,443 是单独端口) - 最多支持 15 组(端口或端口段算一组),超出需拆分多条规则
一条命令放行常见服务端口
比如要允许来自内网 192.168.1.0/24 的客户端访问 SSH、HTTP、HTTPS 和管理后台端口:
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m multiport --dports 22,80,443,8080 -m state --state NEW -j ACCEPT
注意:-m state --state NEW 只对新建连接生效,已建立的会话由后续 ESTABLISHED 规则放行,更安全。
配合默认策略,让规则逻辑更清晰
推荐先设默认拒绝,再用 multiport 精准放行——这样即使漏掉某条规则,也不会意外暴露服务:
- 设置 INPUT 默认 DROP:
iptables -P INPUT DROP - 放行已建立连接:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT - 再用 multiport 开放业务端口(如上例)
- 最后保存规则:
iptables-save > /etc/sysconfig/iptables(CentOS/RHEL)或iptables-persistent save(Ubuntu/Debian)
注意事项和常见避坑点
multiport 虽好,但有几点必须留意:
- 只支持
--dports(入向目标端口)和--sports(出向源端口),不能混用;--ports已废弃,勿用 - 协议必须明确指定(
-p tcp或-p udp),multiport 不自动适配协议 - UDP 和 TCP 端口不能写在同一规则里,需分开处理,例如 DNS(53/udp)和 HTTP(80/tcp)要两条规则
- 规则顺序很重要:multiport 规则要放在 DROP 默认策略之前,否则会被提前拦截











