你采取哪些步骤来保护Debian服务器?

我正在安装直接连接到Internet的Debian服务器。 显然我想尽可能保证安全。 我希望你们/女士join你的想法来保护它,以及你使用什么程序。

我希望这个问题的一部分能够涵盖你作为防火墙使用什么? 只是手动configurationiptables或你使用某种软件来帮助你? 什么是最好的方法? 阻止一切,只允许需要什么? 有没有可能为这个主题的初学者提供很好的教程?

你改变你的SSH端口? 你使用类似Fail2Ban的软件来防止暴力攻击吗?

强制性:

  • 以专家模式安装系统,只有我需要的软件包
  • 手写防火墙默认的iptables'input:drop策略,允许访问SSH,HTTP或任何其他服务器运行
  • 用于SSH的Fail2Ban [有时是FTP / HTTP /其他 – 取决于上下文]
  • 禁用rootlogin,强制使用普通用户和sudo
  • 定制内核[只是老习惯]
  • 预定的系统升级

另外根据偏执的程度:

  • 除了一些允许的目的地/端口之外,在输出上丢弃策略
  • 用于检查文件系统软件的某些部分是否未经修改[校验和保留在机器外],例如Tripwire
  • 从外部至less预定扫描系统的nmap
  • 自动日志检查未知模式[但主要是为了检测硬件故障或一些小的崩溃]
  • 预定的chkrootkit运行
  • /etc/passwd不可变属性,因此添加新用户稍微困难一些
  • / tmp安装noexec
  • 端口敲门人或其他非标准方式打开SSH端口[例如,访问Web服务器上的“秘密”网页允许从浏览页面的IP地址在有限的时间段内传入SSH连接。 如果连接, -m state --satete ESTABLISHED只要您使用单个SSH会话, -m state --satete ESTABLISHED就会允许数据包stream动]

事情我不做自己,但有道理:

  • 内核的grsecurity
  • 远程系统日志,因此系统受到威胁时不能覆盖日志
  • 提醒任何SSHlogin
  • configurationrkhunter并将其设置为不时运行

只是注意防火墙的机器…

  • 使用白名单,而不是黑名单 – 即阻止一切,只允许你所需要的,否认一切。
  • 不要使用GUI / ncurses或其他任何试图为您编写防火墙任务的软件。 如果你这样做,你会让软件为你做假设 – 你不需要冒这个风险,也不应该这样做。 如果您不确定,请自行configuration,禁用它 – 如果需要,您会很快发现。 如果它已经是一个正在运行的系统,并且不能中断stream量(意外阻塞它),那么运行tcpdump(转储到文件)并取样 – 稍后再研究它们,然后找出什么是有效的,哪些不是。
  • 我个人没有看到在非标准端口上运行服务的任何一点,现在工具不是愚蠢的假设,因为例如,在端口22上运行的东西,那么它必须是ssh,而不是其他 – 对于例如amapnmap-A选项。 话虽如此,您可以(也可能应该担心)修改您的服务,以躲避自己的眼睛,例如,以下将让攻击者知道您正在运行的OpenSSH的确切版本,然后他们可以寻找漏洞利用对于那个确切的版本。 如果你隐藏这些东西,你会让它变得更难。
     [root @ ud-olis-1 uhtbin]#telnet localhost 22
    尝试127.0.0.1 ...
    连接到localhost.localdomain(127.0.0.1)。
    转义字符是'^]'。
     SSH-2.0-OpenSSH_3.9p1
  • 保持最新的所有公共服务,并使用最新的安全补丁进行修补。
  • 不要在网关服务器本身存储任何数据,至less你会花时间打开这台机器,你将失去一两个服务,有一段时间,而不是数据。

底线是,你将永远不会成功地使任何事情100%安全 – 这是不可能的 – 所以目标是使尽可能安全 – 如果只是太多的努力,打破你的系统,这是够好的,最lamer脚本小子将移动到下一个系统。

  • iptables是任何Linux系统的方式 – 但是要自己configuration它。

永远不要使用任何不以开放标准为基础的“安全软件”,它们注定是写得不好,会被黑客攻击(不是“如果”,而是“什么时候”)。 开放源代码和开放协议是公开审查,并趋于成为一个成熟和可靠的产品; 封闭源代码软件主要依靠作者对他们认为是多么伟大/安全的产品的自信心 – 即less数眼睛与眼睛充满地球。

希望帮助:)

  • 禁用rootlogin
  • 禁用密码login(只允许通过公钥login)
  • 更改SSH端口
  • 使用denyhosts(或类似的)

  • 编写你自己的iptbles脚本(这样你就可以准确地控制允许的内容,并可以删除其他所有内容)

  • 强制使用SSL / TLS安全通信,并确保拥有有效的未过期签名证书

  • 打开所有外部服务的严格证书validation(例如,在另一台计算机上使用LDAP服务器validation用户时)

作为一个总的起点,我遵循安全最佳实践的综合汇编的互联网安全中心的基准/指导。 看起来他们的Debian基准testing版在一段时间内没有更新,但是对这些步骤的总体概述是:

  • 应用最新的OS补丁/软件包
  • 启用系统/内核/进程记帐。
  • 启用MAC(例如,SELinux或AppArmor)。
  • 启用基于主机的防火墙(iptables)。
  • validationAPT sources.list(键是正确的,来源是可信的)。
  • 最大限度地减lessnetworking服务,禁用不需要的一切,防火墙是什么。
  • 使用TCPWrappers进一步限制系统访问。
  • 只使用encryption的networking协议,禁用未encryption的服务(telnet,f​​tp等)。
  • 只configuration远程访问SSH。
  • 禁用用户login密码并需要基于密钥的身份validation。
  • 禁用文件系统共享(NFS,SMB)。
  • 启用远程/中央系统日志logging(并定期查看日志!)。
  • 设置BIOS /固件级别的密码。
  • 设置一个引导程序密码。
  • configuration系统备份,制定灾难恢复计划,并testing备份是否有效,以及人员了解灾难恢复程序!

所有这些不同的设置都有很多资源,包括在CISecurity基准testing中在系统上实现的特定命令和configuration文件。

我build议不要将机器直接连接到互联网上。 在机器和互联网之间放置一些防火墙。 这使您可以进行安全和networking监控,而不会增加服务器的负担。 就我个人而言,我发现networking和function分段经常会简化networking故障排除,但有时,额外的复杂性也会使分析变得更加困难。

最安全,但最烦人的pipe理,防火墙的政策是拒绝所有,明确地只允许你必须允许的stream量。 这是烦人的,因为人们经常需要更新防火墙策略,因为networking需要改变。

我也build议在服务器上使用某种接口防火墙 – 深度防御是关键。 使用非标准端口进行pipe理相关的服务不会造成伤害。 fail2ban很好。 在Serverfault上寻找关于安全应用程序的更具体的问题来寻找更多的想法。

安全就像对两个徒步旅行者和熊的笑话 – 而一个人永远不可能达到完美的安全性,这是比其他人更难的目标。

有些人指出了Debian安全手册 。 除了军事要求,这应该是完全足够的。

许多人认为,可笑的偏执是冷静或专业或东西。 事实并非如此 ,这只是其他pipe理员感到烦恼 ,而且对于你的用户来说也是完全压抑的。 大多数你会看到推荐的东西只是假的繁忙工作,让偏执pipe理员觉得有用,但实际上并没有帮助,因为真正的安全漏洞很可能是由系统更新不足和/或内部来源造成的。

也就是说,我确实认为不要信任本地networking上的任何东西,而不仅仅是来自互联网的东西。 因此,我将所有configuration都设置为需要在本地networking上进行身份validation。 我使用IPsec对每台计算机之间的所有stream量进行encryption和身份validation。

我正在为所有服务器转换为全盘encryption。

我只安装我使用的服务。 我没有防火墙; 我configuration服务,我必须要求身份validation或限制(通过程序自己的configuration或TCP包装)到某些IP。 我唯一需要阻止使用iptables的是memcached ,因为它没有configuration文件,也没有使用TCP-wrappers。

我使用随机生成的良好密码为我的帐户,并信任我的SSH服务器(和所有其他服务),以保持那些不知道密码的人。 fail2ban仅适用于空间有限的日志文件,IMO。 (你应该有足够的密码才能够信任它们。)

请浏览www.debian.org/doc/manuals/securing-debian-howto/

我个人更改ssh端口并使用fail2ban + denyhosts。 我阻止了一切不需要的东西。 你阻止越多,你不必担心。