为什么我应该使用一个众所周知的端口号? (例如22,80等)

我刚刚用openssh设置了远程的ssh。

我可以使用以下三个设置ssh到我的服务器与腻子

  1. /etc/init.d/ssh重启

    # What ports, IPs and protocols we listen for Port 1234 
  2. dd-wrtnetworking控制面板(192.168.1.1进入浏览器的url)

    应用—-端口从—-协议—- IP地址—-端口—-启用

    myssh ———- ———- 1234 TCP ——— 192.168.1.X — 1234 ——-是

  3. 油灰

    主机名(或IP地址)—-端口

    WXYZ —————————– 1234

是否有理由使用端口22而不是1234?

首先,众所周知的港口号码是“知名的”。 它们消除了某个服务正在监听的端口的猜测。

其次,端口1024及以下只能由root打开。 这给了这些服务更多的“信任”。 IE浏览器,我连接到端口22的服务必须以root身份运行(或已经启动)。 如果一个服务在1234上运行,它可以是任何有权访问打开的盒子并启动一个“程序即行为式SSHD-but-intercepts-passwords”程序的用户。 (这里假设没有NAT或其他redirect – 见mmi的回答。)

也同意由mmi提出的一点 – 我不会不必要地以root身份运行一个程序来获得所需的端口号。 如果以root用户身份运行的程序受到威胁,整个系统就会受到威胁。 但是,如果某个程序已经以其他需要的身份运行,那么也可以使用正确的端口号。

有些人会build议不要使用知名的港口来“掩盖”可能用于利用企图的共同服务,但是我认为这只是“默默无闻的安全”,并且build议不要这样做。

这基本上取决于你想隐藏多less服务。

人们(和机器人扫描安全漏洞)将假定SSH在端口22上运行,HTTP在端口80上运行,依此类推。 如果某个服务在非标准端口上运行,将不易检测到,但合法用户使用起来会更困难。

  • 运行在端口80上的HTTP:
    • 您可以使用http://servername访问它
    • 任何指向Web浏览器的人都可以轻松访问它
  • 运行在端口8042上的HTTP:
    • 您将需要键入http://servername:8042才能到达它
    • 它不会被轻易地检测为Web服务器
  • 运行在端口22上的SSH:
    • 您可以通过告诉Putty(或任何类似的程序)连接到您的服务器的主机名或IP地址来达到目的
    • 指向SSH客户端的任何人都可以轻松访问它
  • 运行在端口2242上的SSH:
    • 您将需要告诉您的SSH客户端使用该自定义端口
    • 它不会被轻易地检测为SSH服务器

等等…

你可以使用任何你喜欢的端口。 对于ssh使用22端口是常规的,你会发现许多防火墙,SSH客户端和守护进程默认为了方便。

更好的问题应该是“为什么我不应该使用22端口?”。 这样做有一些有争议的安全好处,但我从来没有亲自说服过他们。

我不赞同ziesemer:这些程序并不一定是以root身份运行的。 除非您需要,否则不build议以root身份运行任何与networking相关的服务。 当有人能够利用你的服务,他或她将获得根权。

另外,NAT可以将80端口从外部转换到局域网中的任何端口。 因此,您可以以非root用户身份运行服务。

众所周知的端口(特别是端口80)的主要优点:它们通常不被防火墙(端口filter)阻塞。 如果您尝试从学校访问您的服务器,则可能会失败,具体取决于学校的路由器configuration。

是否有理由使用端口22而不是1234?

因为这是其他99%的SSH服务听的地方,人们会期望它是如此。 “公约”并不是一条硬性规定,但您会发现大多数pipe理员希望在端口22上看到SSH,在端口80上看到HTTP等等。 除非你有很好的理由偏离既定的惯例 – 我build议你不要。

十分之九,有一个比你更聪明(或者我)select了默认的设置,除非你有更好的理由,为什么改变呢?

(真的很烦人,不得不在工作上花费你的第一天的工作,试图找出以前的pipe理员/顾问/ BOFH决定运行所有的“非常规”端口)。

有一个很好的理由使用22 ssh,避免学习如何configuration或额外的参数在几个客户端,ssh,scp,git,rsync等使用的必要性。也避免改变预先编写的脚本,以承担默认的端口。

总是有主观的安全性改变默认端口,但我认为这应该存在一个很好的,不可改变的理由来改变默认行为。