说实话,论坛里聊VPS的帖子不少,但大多停留在“选哪家机房”、“延迟多少ms”这个层面。真正把防火墙和端口管理讲透的,我翻了几页没找到几个。今天不聊那些虚的,直接说我在Ubuntu 22.04上部署MT5 EA时,跟防火墙死磕出来的那点经验。
先说个最典型的坑:很多人EA挂不上,第一反应是代码逻辑问题,其实八成是VPS的入站规则把MT5的端口给堵了。MT5默认用的不是固定端口,而是
我之前帮一个朋友调一个马丁策略的EA,他在VPS上开了个Webhook用来接收信号,结果死活连不上。我SSH上去一看,UFW防火墙默认策略是deny incoming,他压根没放行那个自定义端口。所以第一步,先搞清楚你的EA到底需要哪些端口——是只出站连接经纪商服务器,还是需要入站监听?前者基本不用管防火墙出站规则(默认允许),后者就必须显式放行。
具体操作,我习惯用UFW,比iptables直观太多。装好MT5的VPS,我一般这么配:
踩过的坑里,最恶心的是MT5的“允许WebRequest”列表。这跟防火墙是两码事,但很多人混在一起。你防火墙放行了8080,但MT5设置里没把API的URL加进白名单,照样连不上。而且这个列表是精确匹配域名的,别用IP,要写完整URL,比如https://api.xxx.com,末尾带不带斜杠都有讲究。我上次就是被这个卡了两小时,最后发现是URL里多了个空格。
再说说端口扫描的问题。VPS裸奔在公网上,每天被扫描是常态。我试过用fail2ban配合UFW,效果还行,但有个副作用——如果EA的登录频率太高,比如每次tick都触发一次重连,fail2ban可能会误封你的IP。我后来把maxretry调到了10,findtime设成600秒,才消停。如果你用的是Windows VPS,那更得注意,Windows防火墙默认对入站是拒绝的,但出站全放行,MT5的EA如果要用到本地回环地址127.0.0.1做Socket通信,记得在防火墙里加一条允许规则,不然程序跑起来没报错,但数据就是传不出去。
最后提一个容易被忽略的点:VPS提供商的安全组。有些云厂商(比如AWS、阿里云)除了系统防火墙,还有一层安全组策略。你在Ubuntu里把端口全放开了,但安全组没加规则,照样连不上。我踩过这个坑,当时折腾了半天UFW,最后发现是阿里云的安全组把入站端口给拦了。所以排查顺序一定是:先看云控制台安全组,再看系统防火墙,最后才看MT5自身的设置。
大概就这些。你们有没有遇到过那种“防火墙全关了还是连不上”的诡异情况?我最近在琢磨是不是MT5的UDP穿透问题,有经验的老哥来聊聊?
补充一句:UFW放行端口别只加TCP,UDP经常被忽略,EA的心跳包就是走UDP的,漏了照样连不上。
先说个最典型的坑:很多人EA挂不上,第一反应是代码逻辑问题,其实八成是VPS的入站规则把MT5的端口给堵了。MT5默认用的不是固定端口,而是
- MetaTrader 5客户端连接服务器走的是[trade]端口,通常443或80,但VPS上你自己跑的EA如果开了WebRequest或者绑定了本地Socket,那端口就得自己管了。
我之前帮一个朋友调一个马丁策略的EA,他在VPS上开了个Webhook用来接收信号,结果死活连不上。我SSH上去一看,UFW防火墙默认策略是deny incoming,他压根没放行那个自定义端口。所以第一步,先搞清楚你的EA到底需要哪些端口——是只出站连接经纪商服务器,还是需要入站监听?前者基本不用管防火墙出站规则(默认允许),后者就必须显式放行。
具体操作,我习惯用UFW,比iptables直观太多。装好MT5的VPS,我一般这么配:
- sudo ufw allow 22/tcp(SSH,千万别漏,不然断连就哭了)
- sudo ufw allow 80,443/tcp(MT5连接经纪商主服务器,有些经纪商还用到8443,最好去官方文档查一下)
- 如果EA开了WebRequest,比如要访问API获取行情,那得放行出站端口,UFW默认出站是allow的,但如果你改过默认策略,记得加sudo ufw allow out 8080/tcp之类的规则
- 最后sudo ufw enable,然后sudo ufw status verbose确认规则生效
踩过的坑里,最恶心的是MT5的“允许WebRequest”列表。这跟防火墙是两码事,但很多人混在一起。你防火墙放行了8080,但MT5设置里没把API的URL加进白名单,照样连不上。而且这个列表是精确匹配域名的,别用IP,要写完整URL,比如https://api.xxx.com,末尾带不带斜杠都有讲究。我上次就是被这个卡了两小时,最后发现是URL里多了个空格。
再说说端口扫描的问题。VPS裸奔在公网上,每天被扫描是常态。我试过用fail2ban配合UFW,效果还行,但有个副作用——如果EA的登录频率太高,比如每次tick都触发一次重连,fail2ban可能会误封你的IP。我后来把maxretry调到了10,findtime设成600秒,才消停。如果你用的是Windows VPS,那更得注意,Windows防火墙默认对入站是拒绝的,但出站全放行,MT5的EA如果要用到本地回环地址127.0.0.1做Socket通信,记得在防火墙里加一条允许规则,不然程序跑起来没报错,但数据就是传不出去。
最后提一个容易被忽略的点:VPS提供商的安全组。有些云厂商(比如AWS、阿里云)除了系统防火墙,还有一层安全组策略。你在Ubuntu里把端口全放开了,但安全组没加规则,照样连不上。我踩过这个坑,当时折腾了半天UFW,最后发现是阿里云的安全组把入站端口给拦了。所以排查顺序一定是:先看云控制台安全组,再看系统防火墙,最后才看MT5自身的设置。
大概就这些。你们有没有遇到过那种“防火墙全关了还是连不上”的诡异情况?我最近在琢磨是不是MT5的UDP穿透问题,有经验的老哥来聊聊?
补充一句:UFW放行端口别只加TCP,UDP经常被忽略,EA的心跳包就是走UDP的,漏了照样连不上。
