保护Linux Web服务器以进行公共访问

时间:2008-08-07 18:10:17

标签: linux security webserver

我想设置一个便宜的Linux机器作为Web服务器来托管各种Web技术(PHP和Java EE会想到,但我希望将来可以尝试使用Ruby或Python)好)。

我非常精通设置Tomcat在Linux上运行以提供Java EE应用程序,但我希望能够打开这个服务器,即便只是因为我可以创建一些我可以使用的工具我在办公室工作。我在配置Java EE站点方面的所有经验都是针对内部网应用程序的,我们被告知不要专注于为外部用户保护页面。

您有什么建议以足够安全的方式设置个人Linux Web服务器以打开外部流量?

12 个答案:

答案 0 :(得分:5)

本文介绍了解决问题的一些最佳方法:

http://www.petefreitag.com/item/505.cfm

一些亮点:

  • 确保没有人可以浏览目录
  • 确保只有root拥有对所有内容的写权限,并且只有root拥有对某些配置文件的读权限
  • 运行mod_security

本文还从本书中提出了一些建议:

Apache Securiy(O'Reilly Press)

就发行版而言,我经营过Debain和Ubuntu,但这取决于你想做多少。我在没有X的情况下运行Debian,只要我需要任何东西就可以直接进入它。这是一种降低开销的简单方法。或者Ubuntu有一些很好的GUI,可以很容易地控制Apache / MySQL / PHP。

答案 1 :(得分:5)

尽可能遵循安全最佳实践非常重要,但是您不希望为自己造成过分困难或者为了跟上最新漏洞而担心失眠。根据我的经验,有两个关键的事情可以帮助保持您的个人服务器足够安全,以便在保持理智的同时上网:

1)通过默默无闻的安全性

毋庸置疑,在“现实世界”中依赖于此是一个坏主意而不是被娱乐。但那是因为在现实世界中,坏人知道那里有什么,而且还有战利品。

在个人服务器上,您遭受的大多数“攻击”只是来自已经受到攻击的机器的自动扫描,寻找已知易受攻击的产品的默认安装。如果您的服务器没有在默认端口或默认位置提供任何诱惑,则自动攻击者将继续。因此,如果您要运行ssh服务器,请将其放在非标准端口(> 1024)上,并且可能永远不会找到它。如果你可以为你的网络服务器摒弃这种技术那么好,那么也将它转移到一个不起眼的端口。

2)包裹管理

除非你绝对必须,否则不要自己编译和安装Apache或sshd。如果您这样做,您将负责及时了解最新的安全补丁。让来自Linux发行版(如Debian或Ubuntu)的优秀软件包维护者为您完成工作。从发行版的预编译软件包安装,并保持最新状态成为偶尔发布 apt-get update&& amp; apt-get -u dist-upgrade 命令,或使用Ubuntu提供的任何花哨的GUI工具。

答案 2 :(得分:2)

您应该考虑的一件事是港口对世界开放。我个人只需为SSH打开端口22,为ntpd打开端口123。但是,如果您打开端口80(http)或ftp,请确保您学会了解至少为世界服务的内容以及谁可以做到这一点。我对ftp了解不多,但是有数百万个伟大的Apache教程只是谷歌搜索。

答案 3 :(得分:2)

Bit-Tech.Net发表了几篇关于如何使用linux设置家庭服务器的文章。以下是链接:

Article 1
Article 2

希望这些有所帮助。

答案 4 :(得分:2)

@svrist提到了EC2。 EC2提供用于远程打开和关闭端口的API。这样,您就可以保持盒子运行。如果您需要从咖啡店或客户办公室提供演示,您可以获取IP并将其添加到ACL中。

答案 5 :(得分:1)

如果您对此保持低调(例如,如果您只是在家庭连接上托管一个美化的webroot,很少会有人来到您的家庭服务器之后)并且您对您的配置有所了解(例如,避免使用root用户,确保你的软件保持最新状态。

就此而言,虽然这个帖子可能会减少到只是燃烧,我对你的个人服务器的建议是坚持任何Ubuntu(get Ubuntu Server here);根据我的经验,从论坛上提问的最快答案是什么(不知道该怎么说才能吸收)。

我的家庭服务器安全性BTW有点好处(我想,或者我喜欢思考)没有静态IP(在DynDNS上运行)。

祝你好运!

/ MP

答案 6 :(得分:1)

小心打开SSH端口到野外。如果这样做,请确保禁用root登录(一旦进入,您可以始终susudo)并考虑更合理的身份验证方法。我在服务器日志中看到一个巨大的字典攻击,一个周末从我的SSH服务器发送到DynDNS家庭IP服务器。

话虽这么说,能够从工作或离开你的家庭外壳真的很棒......而且你可以在相同的端口上使用SFTP,我无法想象没有它的生活。 =)

答案 7 :(得分:1)

您可以考虑EC2 instance from Amazon。这样你就可以轻松地测试出“东西”而不会搞乱生产。并且只需支付您使用的空间,时间和带宽。

答案 8 :(得分:1)

如果您从家中运行Linux服务器,请在其上安装ossec,以获得非常好用的轻量级IDS。

[编辑]

作为旁注,请确保不要违反ISP的可接受使用策略,以确保它们允许标准端口上的传入连接。我曾经工作过的互联网服务提供商以其条款编写,除非您使用的是商务级帐户,否则您可以通过端口80/25断开连接以运行服务器。虽然我们没有主动阻止这些端口(我们不关心,除非它导致问题),一些ISP不允许通过端口80或25的任何流量,所以你将不得不使用备用端口。

答案 9 :(得分:1)

如果您要这样做,花一点钱,至少购买一个带有单独DMZ端口的专用路由器/防火墙。您需要从服务器中关闭内部网络的防火墙,以便在您的Web服务器受到威胁时(而不是!),您的内部网络也不会立即受到攻击。

答案 10 :(得分:0)

有很多方法可以解决这个问题。我通常会使用.htaccess文件。快速设置和保护足够的。可能不是最好的选择,但它对我有用。我不会把我的信用卡号码放在后面,除了我真的不在乎。

答案 11 :(得分:0)

哇,一旦你开始打开任何外部流量,你就会打开一堆蠕虫。请记住,您认为实验性服务器,几乎就像牺牲的羊羔,对于那些希望利用您的网络和资源做坏事的人来说也很容易。

您对外部可用服务器的整体方法应该非常保守和彻底。它从简单的事情开始,如防火墙策略,包括底层操作系统(保持修补,配置安全性等),并涉及您将使用的每个堆栈的每一层。我担心没有一个简单的答案或食谱。

如果您想进行试验,如果您需要远程处理服务器,那么您可以更好地保持服务器的私密性并使用VPN。