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

时间:2015-05-22 22:06:25

标签: port nas synology

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

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

我想要做的是禁用此功能,使端口80可用于我的nginx服务器。我怎么能这样做?

3 个答案:

答案 0 :(得分: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"
    }
     

然后在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]
...
     

...然后重启。

背景信息

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

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

  1. httpd-sys:提供管理页面,默认情况下位于5000 / 5001
  2. httpd-user:即使webstation程序未启用,但有点令人困惑的是,总是也会运行。
  3. 如果webstation

    1. 已启用:此程序将为用户提供网页。
    2. 未启用:然后此程序将/usr/syno/synoman/phpsrc/web设置为DocumentRoot/usr/syno/synoman/phpsrc/web/index.cgi -> /usr/syno/synoman/webman/index.cgi),这意味着对http://address.of.my.dsm的调用将调用index.cgi文件。这个cgi文件驱动重定向到5000(或者您设置admin_port的任何内容)。
    3. 从命令行,您可以检查[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
      

      我以不同的方式设置了我的。

      好的,现在来解决方案了。最好的解决方案就是阻止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"
      }
      

      以便"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]
      ...
      

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

答案 1 :(得分:1)

完成!这很棘手,但现在我工作得很好。我就是这样做的。

以下内容需要使用ssh连接到NAS,如果您想保证产品的保修,可能不建议使用(即使它完全安全恕我直销)

  

TL; DR :在以下文件中,用非标准端口(例如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。这是实际配置发生的地方。

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

当你回头看时,这一切看起来很明显。 但是我希望Synology给我们更大的灵活性,所以我们不必像那样执行肮脏的黑客......

答案 2 :(得分:0)

由于Google也将最新的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.mustacheDSM.mustacheWWWService.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. 您也可以选择将443移至8881
    • 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:80转发到http://localhost:8181-8181是pi-hole on DSM tutorial建议的端口)。 / li>