您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# EMQ如何监听1024以下的端口
## 引言
在Linux系统中,1024以下的端口号(0-1023)被称为**特权端口**(Privileged Ports),只有root用户或具有CAP_NET_BIND_SERVICE能力的进程才能绑定这些端口。EMQ X(现更名为EMQX)作为一款开源的MQTT消息中间件,默认情况下以非root用户运行,因此直接监听特权端口会遇到权限问题。本文将详细介绍如何解决这一问题。
---
## 方法一:以root用户启动EMQ(不推荐)
### 步骤说明
1. 修改EMQX启动脚本,强制以root身份运行
```bash
sudo ./bin/emqx start
User=root
sudo setcap 'cap_net_bind_service=+ep' /path/to/emqx/bin/emqx
getcap /path/to/emqx/bin/emqx
cap_net_bind_service
能力专门解决非root进程绑定特权端口问题sudo iptables -t nat -A PREROUTING -p tcp --dport 888 -j REDIRECT --to-port 1883
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8883
# Ubuntu/Debian
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
# CentOS/RHEL
sudo service iptables save
# /etc/systemd/system/emqx.socket
[Socket]
ListenStream=80
ListenStream=443
BindIPv6Only=both
stream {
server {
listen 8883;
proxy_pass 127.0.0.1:1883;
}
}
frontend mqtt_ssl
bind :443
default_backend emqx
sudo netstat -tulnp | grep emqx
ss -tulnp | grep emqx
# MQTT测试
mosquitto_pub -h 127.0.0.1 -p 443 -t test -m "hello"
# HTTP API测试
curl http://127.0.0.1:80/api/v4/status
sudo setcap 'cap_net_bind_service=+ep' /path/to/emqx
sudo ufw allow 443/tcp
sudo ufw allow 80/tcp
sudo semanage port -a -t mqtt_port_t -p tcp 443
{error, eacces}
:权限不足
{error, eaddrinuse}
:端口冲突
ss -tulnp
查找占用进程tail -f /var/log/emqx/emqx.log.1
journalctl -u emqx --no-pager -n 50
通过上述方法,EMQX可以安全地监听1024以下端口。生产环境推荐方法二(能力设置)或方法五(反向代理),在安全性和功能性之间取得平衡。无论采用哪种方案,都应遵循最小权限原则,并做好相应的安全加固措施。
注意:本文基于EMQX 5.x版本编写,不同版本可能存在配置差异,请以官方文档为准。 “`
(全文约980字,可根据需要增减细节)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。