在Synology NAS(DSM 5)上防止从端口80到5000的默认重定向

Bac*_*h36 4 port nas synology

我想nginx在Synology NAS上使用前端服务器来进行反向代理.目标是为托管NAS的各种Web服务器使用的非标准端口号提供外观.nginx应该在端口80上侦听,否则这一切都没有任何意义.

然而,DSM开箱即用,其Apache服务器已经在端口80上侦听.它的作用真的很愚蠢:它只是重定向到端口5000,这是NAS Web管理器(DSM)的入口点.

我想要做的是禁用此功能,使端口80可用于我的nginx服务器.我怎样才能做到这一点 ?

kop*_*por 6

由于最近的 Synology DSM 谷歌也重定向到这里,我回答 DSM6(基于http://tonylawrence.com/posts/unix/synology/freeing-port-80/

从 DSM6 开始,nginx 被用作 HTTP 服务器和重定向的地方。以下命令将保留 ngingx,在端口 8880 而不是 80 上运行它。

  1. ssh 进入您的 Synology
  2. sudo -s
  3. cd /usr/syno/share/nginx
  4. 备份server.mustache, DSM.mustache,WWWService.mustache
    • cp server.mustache server.mustache.bak
    • cp DSM.mustache DSM.mustache.bak
    • cp WWWService.mustache WWWService.mustache.bak
  5. sed -i "s/80/8880/g" server.mustache
  6. sed -i "s/80/8880/g" DSM.mustache
  7. sed -i "s/80/8880/g" WWWService.mustache
  8. 或者,您还可以移动4438881
    • sed -i "s/443/8881/g" server.mustache
    • sed -i "s/443/8881/g" DSM.mustache
    • sed -i "s/443/8881/g" WWWService.mustache
  9. 退出外壳(例如,通过Ctrl+ D
  10. 转到控制面板并更改任何设置(例如,应用程序门户 -> 反向代理转发http://YOURSYNOLOGYHOSTNAME:80http://localhost:8181- 8181 是DSM 教程中pi-hole建议的端口)。


Mik*_*eGM 5

tl; dr 编辑/usr/syno/etc/synoservice.d/httpd-user.cfg看起来像:

   {
        "init_job_map":{"upstart":["httpd-user"]},
        "user_controllable":"no",
        "mtu_sensitive":"yes",
        "auto_start":"no"
    }
Run Code Online (Sandbox Code Playgroud)

然后编辑stop on runlevel[0123456]进入/etc/init/httpd-user.conf:

Syno-Server> cat /etc/init/httpd-user.conf 
description "start httpd-user daemon"
author "Development Infrastructure Team"
console log
reload signal SIGUSR1

start on syno.share.ready and syno.network.ready
stop on runlevel [0123456]
...
Run Code Online (Sandbox Code Playgroud)

...然后重新启动.

背景信息

Backslash36给出的答案不是最简单的解决方案,也可能更难维护.在这里,我提供的解决方案也不涉及启动webstation,这是大多数其他解决方案所需要的.请注意,有关更新的文档,请参阅此处,其中提供了有关synology系统的大量信息.

重要的是要注意新的DSM(> 5.x)upstart现在使用,以前的大部分文档都不正确.httpd默认情况下,在synology机器上有两个作业:

  1. httpd-sys:提供管理页面,位于5000/ 5001默认情况下.
  2. httpd-user:这有点令人困惑,即使未启用该程序也始终运行webstation.

如果webstation:

  1. 启用:然后此程序为用户网页提供服务.
  2. 不是启用:那么这个程序设置/usr/syno/synoman/phpsrc/webDocumentRoot(/usr/syno/synoman/phpsrc/web/index.cgi -> /usr/syno/synoman/webman/index.cgi),这意味着调用http://address.of.my.dsm会调用该index.cgi文件.此cgi文件驱动重定向5000(或您设置的任何内容admin_port).

从命令行,您可以检查[secure_]admin_port设置的内容:

Syno-Server> get_key_value /etc/synoinfo.conf admin_port
5184
Syno-Server> get_key_value /etc/synoinfo.conf secure_admin_port
5185
Run Code Online (Sandbox Code Playgroud)

我以不同的方式设置我的地方.

好的,现在到了解决方案.最好的解决方案就是停止httpd-user守护进程启动.这可能是你想要的(例如在docker中启动另一个服务器,如`nginx').为此,请编辑相关的upstart配置文件:

Syno-Server> cat /usr/syno/etc/synoservice.d/httpd-user.cfg 
{
        "init_job_map":{"upstart":["httpd-user"]},
        "user_controllable":"no",
        "mtu_sensitive":"yes",
        "auto_start":"no"
}
Run Code Online (Sandbox Code Playgroud)

以便该"auto_start"条目"no"(如上所述).它可能是"yes"在你的机器上,默认情况下.然后编辑stop on runlevel[0123456]进入/etc/init/httpd-user.conf:

Syno-Server> cat /etc/init/httpd-user.conf 
description "start httpd-user daemon"
author "Development Infrastructure Team"
console log
reload signal SIGUSR1

start on syno.share.ready and syno.network.ready
stop on runlevel [0123456]
...
Run Code Online (Sandbox Code Playgroud)

最后一步是确保httpd-user服务确实启动,但随后自动停止.这是因为否则会有许多服务依赖于它实际启动.重新启动计算机,您现在将看到端口80上没有任何内容正在侦听(或转发).


Bac*_*h36 1

完毕 !这很棘手,但现在我可以正常工作了。我是这样做的。

下面的操作需要使用 ssh 连接到 NAS,如果您想保留产品的保修,则可能不推荐(即使它是完全安全的恕我直言)

TL;DR:在以下文件中,将所有出现的 port 替换80为非标准端口(例如,8080)。这将释放该端口80并使其可供您想要的任何人使用。

  • /etc/httpd/conf/httpd.conf
  • /etc/httpd/conf/httpd.conf-user
  • /etc/httpd/conf/httpd.conf-sys
  • /etc.defaults/httpd/conf/httpd.conf-user
  • /etc.defaults/httpd/conf/httpd.conf-sys

请注意,修改这些文件的子集可能就足够了(我可以观察到第一个文件实际上是根据其他几个文件计算出来的)。我想修改其中的文件/etc.defaults/就足够了,但如果没有,最坏的情况是修改所有这些文件,你就会没事的。

完成此操作后,请不要忘记重新启动 NAS!


对于那些对我如何发现感兴趣的人

我对 Linux 文件系统不太熟悉,更不熟悉Apache配置。但我知道处理启动进程的脚本位于/etc/init. Apache执行重定向的服务器肯定会从那里启动。

  • 这是我必须亲自动手的地方。cat <filename> | grep 80我对我认为相关的目录中的文件执行了一些操作,希望找到将端口号设置为 的配置行80

  • 这种直觉得到了回报:/etc/init/httpd-user.conf包含了这条线echo "DocumentRoot \"/usr/syno/synoman/phpsrc/web\"" >> "${HttpdConf}" #port 80 to 5000。答对了 !

  • 查看文件顶部,我发现该HttpdConf变量引用的是/etc/httpd/conf/httpd.conf. 这是实际配置发生的地方。

从那里开始,它就相对简单了,即使对于那些对配置一无所知的 John Snow 来说也是如此Apache。诀窍是注意它httpd.conf是在启动时从某个模板实例化的(因此更改此文件是不够的)。执行find / -name "*httpd.conf*", 结合一些grep 80给了我要修改的文件列表。

当你回头看时,这一切看起来当然是显而易见的。不过,我希望 Synology 能给我们更多的灵活性,这样我们就不必执行这样的肮脏黑客行为......

  • 不幸的是,当我安装更新时,设置又回到了 80 (2认同)