SIP 暴露公网的代价
一台暴露 5060 端口的 SIP 服务器上线 24 小时内就会遭到扫描爆破。一旦弱密码被攻破,攻击者会通过你的服务器向国际长途发起呼叫,几小时就能烧光几万甚至几十万话费。这不是危言耸听,每年都有真实案例。
典型爆破日志(Asterisk 控制台):
NOTICE[1234]: chan_sip.c: Registration from '<sip:1000@1.2.3.4>'
failed for '5.6.7.8:5060' - Wrong password
NOTICE[1234]: chan_sip.c: Registration from '<sip:1000@1.2.3.4>'
failed for '5.6.7.8:5060' - No matching peer found
高危警告:上线 SIP 服务器前必须做好以下三道防线!不要有任何侥幸心理。
第一道:强密码
分机密码必须满足:
- 长度 ≥ 16 位
- 包含大写、小写、数字、符号
- 不要使用与分机号相同的密码(如 1000/1000)
- 不要使用电话号码、生日、123456 等
生成强密码:
# 生成 20 位强密码
openssl rand -base64 20
第二道:fail2ban 拦截爆破
fail2ban 通过监控日志,对短时间内多次失败的 IP 自动拉黑。安装:
apt install -y fail2ban
创建 Asterisk 专用规则 /etc/fail2ban/filter.d/asterisk.conf:
[INCLUDES]
before = common.conf
[Definition]
failregex = .*Registration from '<sip:.*>' failed for '<HOST>.*' - .*
.*No matching peer found for '<HOST>.*'.*
.*SecurityEvent="InvalidAccountID".*Address="<HOST>.*
ignoreregex =
启用 jail /etc/fail2ban/jail.d/asterisk.local:
[asterisk]
enabled = true
filter = asterisk
logpath = /var/log/asterisk/messages
maxretry = 5
findtime = 600
bantime = 86400
FreeSWITCH 类似规则,把 logpath 改为 /var/log/freeswitch/freeswitch.log,正则匹配 Invalid registration 等关键字。
重启并验证:
systemctl restart fail2ban
fail2ban-client status asterisk
fail2ban-client status # 查看总览
参数解释:
maxretry=5 表示 10 分钟内失败 5 次就拉黑 24 小时。攻击者一次爆破 5 次后就再也连不上了,省服务器也省钱。
第三道:IP 白名单
如果只服务固定地区的用户,最稳的方式是用防火墙限制 5060 端口:
# 只允许特定 IP 段访问 5060
ufw allow from 1.2.3.0/24 to any port 5060 proto udp
ufw deny 5060/udp
# 或者用 iptables
iptables -A INPUT -p udp --dport 5060 -s 1.2.3.0/24 -j ACCEPT
iptables -A INPUT -p udp --dport 5060 -j DROP
RTP 媒体端口也要限制范围,Asterisk 的 rtp.conf:
[general]
rtpstart=10000
rtpend=10100 # 仅 100 个端口,按并发量评估
对应防火墙规则:
ufw allow 10000:10100/udp
加分项:TLS 加密信令
明文 SIP 信令会被运营商 / 中间设备嗅探、改写,开启 TLS + SRTP 让通信全程加密:
# Asterisk pjsip.conf 启用 TLS transport
[transport-tls]
type=transport
protocol=tls
bind=0.0.0.0:5061
cert_file=/etc/asterisk/keys/asterisk.crt
priv_key_file=/etc/asterisk/keys/asterisk.key
method=tlsv1_2
客户端用 sip:user@host:5061;transport=tls 注册,配合 ZRTP / SRTP 加密媒体更佳。
安全 Checklist
- ✅ 所有人分机密码 ≥ 16 位随机字符串
- ✅ 禁用 guest 呼叫与 allowguest=no
- ✅ fail2ban 已运行,监控 5min 内失败次数
- ✅ 防火墙限制 5060 + RTP 端口范围
- ✅ 关闭国际长途路由,或单独设置密码
- ✅ 信令走 TLS(5061)
- ✅ 定期检查 CDR,发现异常立即封号
- ✅ 服务器关闭 SSH 密码登录,仅允许密钥
- ✅ 重要数据每天备份到异地
- ✅ 给服务器加运营商流量告警
结尾
SIP 安全说难不难,难在养成习惯。三道防线做齐,被爆的概率就接近于 0。下一篇文章我们聊 Whisper + LLM 打造语音切台助手。