TLDR:如何深入研究我的 Mac mini OSX 服务器以确定哪些进程消耗了如此多的带宽,或者所有入站流量来自哪里?
资源缓存已打开,所有资源均已最小化或图像已压缩,我们的页面消耗的带宽比上个月的网站(www.vulytrampolines.com)要少,并且我们的分析流量也相同。
背景故事:我们有 2 台 Mac Mini 服务器运行我们的网站/暂存/数据库等。自从从美国的专用服务器转移到城市的托管服务器后,我们的带宽消耗不知何故四倍. 两者之间设置了数据库复制进程,以及 DNS 和各种网站(例如大文件、数据库任务、内联网包等在暂存服务器上,网站和数据库在生产服务器上)
我们的临时服务器已经7GB 入站流量在3天。有谁知道如何检查入站流量源,以查看 200k 连接的持续入站流量可能来自何处?我们不知道。我们根本没有向它发送文件,唯一应该处于活动状态的是 SSH 和数据库复制过程。netstat
[见下文] 显示我们在端口 625 上建立了大约 20 多个连接,并建立了 30 多个 close_weight 连接。我们完全不知道这是怎么发生的。
令人恼火的是,网络统计数据显示,我们的 HTTP 流量使用量远未达到 11.66GB(它表示,上个月我们使用了 22GB,但我们的出站流量却记录超过 100GB)。数据库统计数据也表明,我们使用的带宽远未达到导致问题的程度。
这是我们的登台服务器,venus1(几个星期以来它一直这样):
这是我们的生产服务器,venus2:
netstat -anp tcp
venus1 上的输出。大多数外部地址来自我们的工作 IP 地址。11211 是 memcached。
tcp4 0 0 122.99.117.18.49712 204.93.223.143.80 ESTABLISHED
tcp4 0 0 122.99.117.18.11211 122.99.117.18.49711 ESTABLISHED
tcp4 0 0 122.99.117.18.49711 122.99.117.18.11211 ESTABLISHED
tcp4 0 52 122.99.117.18.22 59.167.152.67.56106 ESTABLISHED
tcp4 0 0 122.99.117.18.11211 122.99.117.18.49588 ESTABLISHED
tcp4 0 0 122.99.117.18.49588 122.99.117.18.11211 ESTABLISHED
tcp4 0 0 122.99.117.18.49410 122.99.117.19.3306 ESTABLISHED
tcp4 0 0 122.99.117.18.5432 122.99.117.18.58704 ESTABLISHED
tcp4 0 0 122.99.117.18.58704 122.99.117.18.5432 ESTABLISHED
tcp4 0 0 127.0.0.1.58699 *.* LISTEN
tcp4 0 0 122.99.117.18.625 110.142.234.238.62055 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.71.206.61838 ESTABLISHED
tcp4 5 0 122.99.117.18.625 203.206.171.34.61741 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 110.142.234.238.61270 ESTABLISHED
tcp4 0 0 127.0.0.1.54 *.* LISTEN
tcp4 0 0 122.99.117.18.53 *.* LISTEN
tcp4 0 0 127.0.0.1.53 *.* LISTEN
tcp4 0 0 122.99.117.18.625 110.142.234.238.63980 ESTABLISHED
tcp4 0 0 122.99.117.18.625 203.206.171.34.55282 ESTABLISHED
tcp46 0 0 *.80 *.* LISTEN
tcp4 0 0 *.* *.* CLOSED
tcp46 0 0 *.443 *.* LISTEN
tcp4 0 0 *.* *.* CLOSED
tcp4 0 0 122.99.117.18.625 122.99.117.19.50766 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 122.99.117.19.63981 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 110.142.234.238.60214 ESTABLISHED
tcp4 0 0 122.99.117.18.625 27.33.32.204.65196 ESTABLISHED
tcp4 0 0 122.99.117.18.625 110.142.234.238.60274 ESTABLISHED
tcp4 0 0 122.99.117.18.625 122.99.117.19.53201 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 203.206.171.34.59662 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 122.99.117.19.49869 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 122.99.117.19.53827 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 110.142.234.238.64678 ESTABLISHED
tcp4 0 0 122.99.117.18.625 122.99.117.19.52810 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 110.142.234.238.62510 ESTABLISHED
tcp4 0 0 122.99.117.18.625 122.99.117.19.49909 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 110.142.234.238.56096 ESTABLISHED
tcp4 0 0 122.99.117.18.625 203.206.171.34.53247 ESTABLISHED
tcp4 0 0 122.99.117.18.625 203.206.171.34.62051 ESTABLISHED
tcp4 0 0 122.99.117.18.625 58.111.93.92.59123 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 122.99.117.19.57173 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 203.206.171.34.49352 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 110.142.234.238.64362 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 27.33.32.204.59772 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 59.167.152.67.59528 CLOSE_WAIT
tcp4 0 0 *.3306 *.* LISTEN
tcp4 0 0 122.99.117.18.625 27.33.32.204.56812 ESTABLISHED
tcp4 0 0 122.99.117.18.625 110.142.234.238.52987 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 59.167.152.67.50598 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 110.142.234.238.63339 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 110.142.234.238.63283 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 59.167.152.67.61312 ESTABLISHED
tcp4 0 0 122.99.117.18.625 110.142.234.238.52045 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 122.99.117.19.49172 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 203.206.171.34.50501 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.93.92.56042 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 27.33.32.204.55882 ESTABLISHED
tcp4 0 0 122.99.117.18.311 58.111.93.92.55875 ESTABLISHED
tcp4 0 0 122.99.117.18.625 203.206.171.34.58776 ESTABLISHED
tcp6 0 0 *.5432 *.* LISTEN
tcp4 0 0 *.5432 *.* LISTEN
tcp4 0 0 122.99.117.18.625 58.111.93.92.52692 ESTABLISHED
tcp4 0 0 122.99.117.18.625 203.206.171.34.57121 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 27.33.32.204.54673 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 27.33.32.204.53915 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 27.33.32.204.52109 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 27.33.32.204.51807 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 27.33.32.204.65049 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.93.92.64442 ESTABLISHED
tcp4 0 0 122.99.117.18.311 203.206.171.34.51628 ESTABLISHED
tcp4 0 0 122.99.117.18.625 203.206.171.34.51594 ESTABLISHED
tcp4 0 0 122.99.117.18.625 58.111.79.42.62597 ESTABLISHED
tcp4 0 0 122.99.117.18.625 58.111.79.42.62454 ESTABLISHED
tcp4 0 0 122.99.117.18.625 58.111.79.42.58088 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.57305 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.53724 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.62224 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.62064 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.58236 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 203.206.171.34.51320 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 203.206.171.34.51297 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 203.206.171.34.50864 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 110.142.234.238.49800 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 27.33.32.204.50894 ESTABLISHED
tcp4 0 0 122.99.117.18.625 59.167.152.67.50411 ESTABLISHED
tcp4 0 0 122.99.117.18.625 27.33.32.204.54446 ESTABLISHED
tcp4 0 0 122.99.117.18.625 58.111.79.42.51680 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.60797 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.60729 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 59.167.152.67.49209 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.63371 CLOSE_WAIT
tcp4 81 0 122.99.117.18.625 113.128.44.66.3842 CLOSE_WAIT
tcp4 11 0 122.99.117.18.625 213.57.189.27.55646 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 110.142.234.238.53655 ESTABLISHED
tcp4 0 0 122.99.117.18.625 110.142.234.238.53644 ESTABLISHED
tcp4 0 0 122.99.117.18.625 58.111.79.42.52146 CLOSE_WAIT
tcp4 0 0 127.0.0.1.8005 *.* LISTEN
tcp46 0 0 *.8009 *.* LISTEN
tcp46 0 0 *.8080 *.* LISTEN
tcp4 0 0 122.99.117.18.625 58.111.79.42.50716 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 59.167.152.67.49872 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.63218 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.62471 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.64758 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.64646 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.56788 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.56770 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.56017 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.53131 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.52519 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.51215 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.51131 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 59.167.152.67.57058 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 59.167.152.67.56711 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.50975 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.57209 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.54753 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.60786 CLOSE_WAIT
tcp4 0 0 122.99.117.18.625 58.111.79.42.56174 CLOSE_WAIT
tcp4 0 0 *.11212 *.* LISTEN
tcp6 0 0 *.11212 *.* LISTEN
tcp4 0 0 127.0.0.1.5348 127.0.0.1.49167 ESTABLISHED
tcp4 0 0 127.0.0.1.49167 127.0.0.1.5348 ESTABLISHED
tcp4 0 0 122.99.117.18.5218 122.99.117.18.49166 ESTABLISHED
tcp4 0 0 122.99.117.18.49166 122.99.117.18.5218 ESTABLISHED
tcp46 0 0 *.5268 *.* LISTEN
tcp46 0 0 *.5218 *.* LISTEN
tcp4 0 0 127.0.0.1.5348 127.0.0.1.49163 ESTABLISHED
tcp4 0 0 127.0.0.1.49163 127.0.0.1.5348 ESTABLISHED
tcp4 0 0 127.0.0.1.5348 127.0.0.1.49162 ESTABLISHED
tcp4 0 0 127.0.0.1.49162 127.0.0.1.5348 ESTABLISHED
tcp4 0 0 127.0.0.1.5348 127.0.0.1.49161 ESTABLISHED
tcp4 0 0 127.0.0.1.49161 127.0.0.1.5348 ESTABLISHED
tcp4 0 0 127.0.0.1.5348 *.* LISTEN
tcp4 0 0 *.11211 *.* LISTEN
tcp6 0 0 *.11211 *.* LISTEN
tcp4 0 0 *.88 *.* LISTEN
tcp6 0 0 *.88 *.* LISTEN
tcp6 0 0 *.2000 *.* LISTEN
tcp4 0 0 *.2000 *.* LISTEN
tcp6 0 0 *.4190 *.* LISTEN
tcp4 0 0 *.4190 *.* LISTEN
tcp4 0 0 *.464 *.* LISTEN
tcp6 0 0 *.464 *.* LISTEN
tcp6 0 0 *.25 *.* LISTEN
tcp4 0 0 *.25 *.* LISTEN
tcp4 0 0 *.749 *.* LISTEN
tcp6 0 0 *.749 *.* LISTEN
tcp4 0 0 *.22 *.* LISTEN
tcp6 0 0 *.22 *.* LISTEN
tcp4 0 0 *.5900 *.* LISTEN
tcp6 0 0 *.5900 *.* LISTEN
tcp4 0 0 *.625 *.* LISTEN
tcp6 0 0 *.625 *.* LISTEN
tcp4 0 0 127.0.0.1.631 *.* LISTEN
tcp6 0 0 ::1.631 *.* LISTEN
tcp4 0 0 *.311 *.* LISTEN
答案1
除非你有一个非常不这样做的充分理由是,请对 Mac Mini 上的所有非公共端口进行防火墙保护立即地并且只公开您需要的内容!我做了一个快速检查,您目前的所有服务似乎都完全向互联网开放(SSH、SMTP、Tomcat、VNC、MySQL 和 apple-xsrvr-admin (TCP625) 当然是开放的),这是一个非常糟糕的主意。
您看到的大量入站流量很可能是黑客/机器人试图强行破解您服务的登录名和密码——我经常在服务器上看到这种情况,特别是针对 SSH(因为它通常面向公众)和直接针对流行的网络软件,例如 WordPress 的 /wp-login.php 页面。从您的 netstat 中,我可以看到来自以色列和中国的 IP 试图访问 TCP625(apple-xsrvr-admin,用于 DirectoryService、Open Directory Assistant 和 Workgroup Manager),这不是一个好兆头。我希望您的所有用户名和密码都是强密码,因为——并不是想在这里危言耸听,但是——7GB 的暴力破解可能会让一些坏人获得他们不应该访问的东西,无论任何软件的安全/补丁状态如何。
请与您的托管服务提供商/托管商核实您是否具有某种远程串行控制台和/或 VNC 访问权限,以防您不小心阻止自己访问服务器,然后将您自己远程管理服务器所需的绝对最低限度添加到规则集中并打开防火墙,我假设他们还没有。默认情况下,OS X Server 的防火墙会阻止除用于远程配置服务器的端口(TCP22、TCP311、TCP626、TCP625、ICMP 标准 ping(进出)、UDP53 DNS 名称解析)之外的所有传入端口,因此您可以直接打开它,但是您需要在这样做之后进一步锁定它们。创建特定于您的办公室 IP(如果您的办公室没有静态 IP 地址,则为您的 ISP 的 IP 网络块)的地址组,并使用它们打开管理员访问权限(例如 SSH、OpenDirectory、VNC)仅对这些地址组进行访问。为 122.99.117.18 和 122.99.117.19(或 122.99.117.18/31 掩码)创建另一个具有单一 IP 访问权限的组,以便彼此通信并允许其进行 MySQL 复制。向全世界开放 SMTP、HTTP、HTTPS 端口,假设它们是面向公众的。将所有东西都锁定严密,只向需要访问每个端口的 IP 授予权限。考虑对出站流量也这样做。您需要提前计划并确保一切顺利,但要尽快完成,而不是让服务器成为容易被攻击的目标。
检查服务器日志并查找可疑活动。特别要查找从奇怪位置或奇怪时间成功登录服务的情况。建立一些程序定期执行此操作。
我不确定你使用的是哪个版本的 OS X Server,但猜测是 10.6 或 10.7,这个 Peachpit 文档可以帮助您开始防火墙工作。
可能此 Apple 支持网络服务 PDF(有关防火墙,请参阅第 4 章)。
对于更高级的防火墙配置,请尝试 Waterroof 或 Icefloor,它们提供了一个简单的 GUI,而不必在命令行上使用 pf。
(编辑以解决从每个服务器粘贴的 ipfilter 规则)
好的,让我们从 venus1 (122.99.117.18) 开始。这里明显的问题是没有 catch-all deny ip from any to any
,所以我们需要立即修复它。从命令行,您可以发出:
sudo ipfw add 65534 deny log logamount 1000 ip from any to any
或者,如果您不太习惯从命令行操作 ipfw 规则(这会让您感到紧张,因为如果您失误,后果会很糟糕),也可以从服务器管理员的“设置”选项卡下的“高级”子选项卡中进行操作。应该有一个类似于下图的高级规则列表。假设规则已经在底部,请勾选它以启用它:
请记住,ipfw 规则会按照优先级列表向下流动,因此优先级 1 的规则优先于其他所有规则。因此,在 65534 处添加“拒绝一切”规则是列表的最后一个规则,这意味着只有当它上面的所有内容都不允许某项连接时,它才会拒绝连接。
好的,解决了这个问题后,让我们来处理一些地址组。您已定义地址组为 122.99.117.16/29,因此 122.99.177.16-22(其中一个 IP 是网关),这是您的 Mac Mini 和其他 co-lo IP 地址。您可能想为您的办公室位置定义另一个地址组,我猜是静态 IP 59.167.152.67(或者如果您的工作获得动态 IP,则 Internode 的整个网络块是 59.167.0.0/16)。对 venus1 和 venus2 执行此操作,并为您拥有的任何其他办公室添加更多。
定义办公室组后,请授予每个办公室组访问 TCP22、TCP311、TCP626、TCP625、TCP3283 和 TCP5900 的权限,这样即使您禁用了对这些端口的全球访问,您也始终可以管理您的 Minis。使用 GUI,转到服务器管理员设置的“服务”子选项卡。将“编辑服务:”更改为您的办公室地址组,然后勾选上述端口的相关框。
现在让我们解决一些更成问题的 venus1 规则。例如:
12321 1570 78548 allow tcp from any to any dst-port 3306
规则 12321 允许所有东西连接到 MySQL。禁用“任何”地址组的此规则(再次使用“服务”子选项卡),同时禁用世界上不需要访问的任何其他服务。您可能希望保持 TCP25(smtp 邮件)、TCP/UDP53(dns)、TCP80(HTTP)、TCP443(HTTPS)可在全球范围内访问,但您是否需要在全球范围内访问 TCP8080(tomcat 的服务器状态)?还有其他吗?锁定所有内容,并仅在适当的情况下授予对您的办公室地址组和 co-lo 的访问权限(例如 MySQL 复制)。
记住要测试一切!学会使用nmap扫描服务器端口,以便查看哪些端口是打开的,哪些端口是关闭的。从不同位置(例如您的办公室、通过 ssh 连接到其他服务器、在家中通过其他 ISP 等)进行扫描,以确保规则正常工作。小心不要将自己锁在外面,但要尽可能严密地锁定一切。重新阅读上面链接的 Peachpit 文档和 Apple 支持 PDF,并真正学习材料,这对您大有裨益。哦,还要定期查看您的日志!
好的,希望这能让你走上正轨,或者至少让你走上更好的道路。祝你好运。
答案2
最快的解决方案就是使用数据包嗅探器 - tcpdump 或 wireshark(后者具有图形界面)。如果有某种持续的流量源,它就会显得突出。一旦您发现未知流量的来源,您还可以深入了解有效负载的细节。
答案3
根据测试服务器和生产服务器的流量统计数据之间的密切相关性,看来你的两台服务器正在通信彼此。
端口 625 是 Apple 产品使用的管理端口。从您的 netstat 来看,似乎一台机器 (.19) 正在通过端口 625 连接到另一台机器 (.18)。从一些 Google 搜索来看,Mac OS X 使用端口 625 进行工作组经理(即在 Mountain Lion 中被 Profile Manager 取代)。
互联网上似乎还有许多其他机器正在连接到端口 625,这可能是入侵企图。您应该尽快为服务器设置防火墙,以防止入侵。