小米路由器4 80 端口被占用

前言:如果我们想在家中架设自己的 Web 服务器,则需要对外开放 80 端口。这时我们发现小米路由器4 的 端口转发 中设置 80 端口时,会提示 端口号有冲突,请检查后重新设置 。这是因为小米 Web 管理后台的默认端口是 80 端口,我们可以将这个端口改为别的,例如 8000 ,来释放 80 端口供我们自己使用。

具体操作如下:
由于小米路由器4 官方并未提供开发版固件,我们无法通过官方的方式开启 ssh,因此我们需要先将小米路由器4 root,来获取 root 权限,具体操作步骤参考我的上一篇文章。

root 后,我们依次修改文件 /etc/sysapihttpd/sysapihttpd.conf/etc/config/firewall 中的 80 端口。

sysapihttpd.conf

1
2
3
4
5
6
7
8
9
10
...
server {
#
#server for sysapi
#
listen 80; # 此处的 80 改为 8000
listen 8098;
server_name _;
access_log off;
...

firewall

1
2
3
4
5
6
7
8
9
10
11
...
config redirect 'nxdomain'
option name 'nxdomain'
option src 'lan'
option src_dport '80' # 此处的 80 改为 8000
option src_dip '198.51.100.9'
option dest_port '8190'
option proto 'tcp'
option target 'DNAT'
option family 'ipv4'
...

我们原本可以使用 vi 命令进行修改,但是路由器内的 vi 命令很难用,几乎无法操作,所以我想到了用 sed 命令的方式来替换。

1
2
3
4
5
cd /etc/sysapihttpd
sed -i "s/listen 80;/listen 8000;/g" sysapihttpd.conf

cd /etc/config
sed -i "s/option src_dport '80'/option src_dport '8000'/g" firewall

然后重启路由器即可。

注意:

  1. 之后我们再登录路由器 Web 管理后台的时候,需要添加 8000 端口来访问,例如:http://192.168.0.1:8000
  2. 手机端 小米WiFi App 部分功能会受影响。

后续:
修改 80 端口后,之前的路由器 root 方式也报错了,我们可以通过简单修改 remote_command_execution_vulnerability.py 文件,在 request.postrequest.get 方法中的 url 地址中添加 :8000 ,来修复修改端口后的 root 报错问题。

1
2
3
4
5
6
7
8
9
## upload config file
print("start uploading config file ...")
r1 = requests.post("http://{}:8000/cgi-bin/luci/;stok={}/api/misystem/c_upload".format(router_ip_address, stok), files={"image":open("build/payload.tar.gz",'rb')}, proxies=proxies)
# print(r1.text)

## exec download speed test, exec command
print("start exec command...")
r2 = requests.get("http://{}:8000/cgi-bin/luci/;stok={}/api/xqnetdetect/netspeed".format(router_ip_address, stok), proxies=proxies)
# print(r2.text)

再后续:
虽然我们成功修改了 80 端口的占用,能够在路由器 端口转发 中设置外网 80 端口的转发,但 Web 服务器仍无法使用外网 80 端口访问,其他端口尝试是没问题。对于这个结果,我也很无奈,也不知道原因。
不过我们可以换一个思路,现在基本上 Web 服务器都使用 https 了,我们可以把 Web 服务器也改成 https ,这样就不用 80 端口了,而改用 443 端口,小米路由器4 对 443 端口没有限制,可以自由使用。但经过亲自尝试后,发现使用 443 端口仍然无法访问自己的 Web 服务器。唉!
经过多方搜索,才发现是电信运营商默认屏蔽了家庭网络的 80、443 等端口。。。

本文参考:https://blog.csdn.net/weixin_39750410/article/details/111178787