我正在安装直接连接到Internet的Debian服务器。显然,我想使其尽可能安全。我希望你们/大家添加一些想法来保护它,以及它使用的程序是什么。

我希望这个问题的一部分涵盖您用作防火墙的什么?只是手动配置iptables还是使用某种软件来帮助您?最好的方法是什么?阻止一切,只允许需要什么?

您是否更改了SSH端口?您是否使用Fail2Ban之类的软件来防止暴力攻击?

评论

与serverfault.com/questions/42/securing-a-fresh-ubuntu-server和
有很多重叠
Ubuntu拥有ufw Debian却没有;)我很伤心,是人们自己配置iptables还是使用诸如fireHOL之类的软件

我一直倾向于自己写iptables规则。我有一个样板,可以丢弃所有碎片,圣诞节数据包等。除此以外的任何东西都是系统特定的,通常很小。顺便说一句,使用iptables时,我无法承受足够多的丢弃片段。出于某种原因,我尚未研究,iptables仅检查第一个片段,而盲目传递其余部分而不检查。在我看来,这使碎片成为一种责任。

嗯... Debian有自慰。 packages.debian.org/ufw

#1 楼

必需:


以专家模式安装系统,只有我需要的程序包
iptables输入具有默认策略的手写防火墙:丢弃,允许访问SSH,HTTP或给定服务器正在运行的其他任何资源

用于SSH的Fail2Ban [有时是FTP / HTTP /其他-取决于上下文]
禁用root登录,强制使用普通用户和sudo
自定义内核[只是旧习惯]
计划的系统升级

另外,还取决于妄想症的级别:


对输出的丢弃策略,除了几个允许的目的地/ ports

integrit用于检查文件系统软件的某些部分是否未修改[校验和保存在机器外部],例如Tripwire
至少从外部使用系统nmap计划扫描
自动检查未知的模式[但这主要是为了检测硬件故障或一些轻微的崩溃]
chkrootkit的计划运行

不可变属性对于/etc/passwd,因此使用noexec
端口门环或其他打开SSH端口的非标准方式来安装新用户要困难一些
/ tmp。通过访问Web服务器上的“秘密”网页,可以在有限的时间内从查看该网页的IP地址进入SSH连接。如果您已建立连接,则只要您使用单个SSH会话,-m state --satete ESTABLISHED就会允许数据包流传输。]

我不做任何事情,但很有意义:



内核的grsecurity
远程系统日志,因此当系统受到威胁时日志不会被覆盖
关于任何SSH登录名的警告
配置rkhunter并将其设置为不定期运行


评论


完成所有这些操作后,对系统运行BASTILLE,以查找其他内容。我还建议您对系统进行Nessus全面扫描,不安全检查;然后修复所有警报。

–斯科特包
09年5月23日在21:33

除非您真的知道自己在做什么,否则编译自定义内核不会带来安全优势。除非将其放在软件包管理系统中,否则您还会忽略其最新信息,这将导致安全性下降。

–亚当·吉本斯(Adam Gibbins)
09年5月23日在21:37

-1通过模糊处理获得安全性。否则,得体的答案。

– dwc
09年5月23日在21:46

@Adam-是的,我确实知道,我仍然更喜欢具有仅包含我需要的部分的整体内核。那可能很落后,但是我做到了。 @dwc-这只是一个额外的步骤,这只是锦上添花,或者就像我们所说的在令人不快的臭味堆顶部所说的樱桃。

– pQd
09年5月23日在21:53

你的意思是sudo not su-

–LapTop006
09年6月20日在11:03

#2 楼

只是有关对计算机进行防火墙保护的说明...


使用白名单,而不是黑名单-即阻止所有内容,仅允许您需要的内容,拒绝其他所有内容。
请勿使用GUI / ncurses或其他任何试图为您编写防火墙的软件。如果这样做,您将允许该软件为您做假设-您不需要冒险,也不应该这样做。您可以自行配置,如果不确定,请禁用它-如果需要,您会很快发现。如果它已经启动并且正在运行,并且您无法中断流量(通过意外阻止它),请运行tcpdump(转储到文件)并进行采样-稍后进行研究,然后找出有效的和无效的。
我个人没有看到在非标准端口上运行服务的任何意义,如今这些工具并没有那么愚蠢,以为例如由于某些东西正在端口22上运行,那么它一定是ssh,而不是否则-例如amapnmap-A选项。话虽这么说,您可以(并且如果担心的话)可能会修改服务,以使自己不被窥探,例如,以下内容将使攻击者知道您所运行的OpenSSH的确切版本,然后他们便可以查找漏洞该确切的版本。如果您隐藏了这些东西,将会使它们变得更难。

    [root@ud-olis-1 uhtbin]# telnet localhost 22
    Trying 127.0.0.1...
    Connected to localhost.localdomain (127.0.0.1).
    Escape character is '^]'.
    SSH-2.0-OpenSSH_3.9p1



使您的所有公共服务保持最新状态并提供最新补丁安全补丁。
不要在网关服务器本身上存储任何数据,至少当它们设法闯入这台计算机时,您会花一些时间,而您会失去一两个服务,有时,但不是数据。

最重要的是,您将永远无法成功地确保100%的安全性-这是不可能的-因此,我们的目标是使之尽可能地安全-如果付出过多的努力破坏您的系统就足够了,大多数比较成熟的脚本都将转移到下一个系统中。



iptables是适用于任何Linux系统的方法-可以自行配置。

永远不要使用任何不基于开放标准的“安全软件”-它们是注定写得不好,会被黑(不是“如果”,而是“何时”)。开源和开放协议接受公众审查,并逐渐成为一种成熟可靠的产品;闭源软件主要依靠作者对产品的出色/安全性的自信心,即少数人的眼睛与人眼中充满眼神的东西。

希望帮助:)

评论


“……眼睛的数量很少,而眼睛却充满了。” -我希望有足够多的“公司”意识到这一点,但是通过默默无闻的安全性似乎是大多数人遵循的趋势。是的,在非标准端口上运行ssh之类的服务并不能阻止坚定的攻击者。但是,它将使脚本远离孩子们-有人在端口22上的一系列ip地址上进行字典攻击。

– L0neRanger
2014年3月29日在18:26



#3 楼


禁用root登录
禁用密码登录(仅允许通过公钥登录)
更改SSH端口
使用denyhosts(或类似功能)
编写自己的iptbles脚本(因此,您可以完全控制允许的内容并丢弃其他所有内容)
强制使用SSL / TLS安全的通信,并确保拥有有效,未过期和已签名的证书
对以下内容启用严格的证书验证所有外部服务(例如,当使用另一台计算机上的LDAP服务器对用户进行身份验证时)


评论


您会因禁用密码身份验证而受到支持。

–德罗伯特
09年6月3日在5:30

#4 楼

从这里开始:

http://www.debian.org/doc/manuals/securing-debian-howto/

评论


Debian安全手册是一个了不起的资源。

–user62491
11年1月24日在21:01

#5 楼

作为一个总体起点,我遵循Internet安全中心的基准/指南,这些基准/指南是对安全最佳做法的全面汇编。看起来他们的Debian基准测试似乎还没有更新,但是步骤概述如下:


应用最新的OS补丁/软件包
启用系统/内核/进程记帐。
启用MAC(例如SELinux或AppArmor)。
启用基于主机的防火墙(iptables)。
验证APT source.list(密钥正确,来源可信)
最小化网络服务,禁用所有不需要的功能,并使用防火墙。
使用TCPWrappers进一步限制系统访问。
仅使用加密的网络协议,禁用未加密的服务(telnet,f​​tp等) )。
仅配置对SSH的远程访问。
禁用用户登录密码并需要基于密钥的身份验证。
禁用文件系统共享(NFS,SMB)。
启用远程/集中式系统日志记录(并定期查看日志!)。
设置BIOS /固件级别的密码。
设置引导加载程序的密码。
配置系统备份,制定灾难恢复计划并测试backu ps是有效的,并且人员知道灾难恢复过程!

在所有这些设置上都有很多资源,包括在CISecurity基准测试中要在系统上实现的特定命令和配置文件。 >

#6 楼

我建议不要将计算机直接连接到Internet。在机器和Internet之间放置某种防火墙。这使您可以进行安全性和网络监视,而不会给服务器增加负担。我个人认为,网络和功能分段通常会简化网络故障排除,尽管有时,附加的复杂性确实会使分析变得更加困难。

最安全但最烦人的防火墙策略是拒绝所有明确地只允许您必须允许的流量。这很烦人,因为随着网络需求的变化,经常需要更新防火墙策略。

我还建议在服务器上使用某种类型的接口防火墙-深度防御是关键。使用非标准端口来管理相关服务不会受到影响。 fail2ban很好。在Serverfault上寻求有关安全应用程序的更具体的问题,以找到更多的想法。

安全性就像两个徒步旅行者和熊的笑话-虽然一个人永远无法实现完美的安全性,但成为一个安全的人是有帮助的比其他人更困难的目标。

评论


+1为好答案。我必须指出,如果您采取正确的做法,默认拒绝就不会令人讨厌。当然,您必须知道您允许什么,对吗?实际上,应将此作为政策声明以通俗易懂的语言写下来。如果您不按照常规方式进行操作,那么您就没有以管理员身份工作。如果是这样,更新防火墙规则很简单。

– dwc
09年5月23日在21:50

非常好点。每个组织都应该有一个简单的语言安全策略声明。随着组织需求的变化,应更新策略声明。如果仅让管理员计划防火墙规则实施和CYA,即使组织管理人员不必费心去考虑安全性,聪明的管理员也将维护这样的策略声明。

–血腥
09年5月23日在22:32

#7 楼

有些人指出了《保护Debian手册》。这对军事需求以外的所有事物都应该是完全足够的。

许多人认为,荒谬的偏执狂是很酷的或专业的。并非如此,这对其他管理员来说很烦人,而对您的用户则完全压抑。您会看到的大多数建议只是虚假的工作,以致对偏执的管理员有用,但实际上却无济于事,因为真正的安全漏洞可能是由于未充分更新的系统和/或内部来源造成的。

话虽如此,我确实认为不信任本地网络上的任何内容而不是信任来自Internet的内容是我的信条之一。因此,我将所有内容都配置为即使在本地网络上也需要身份验证。我使用IPsec对每台计算机之间的所有通信进行加密和身份验证。

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

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

我为帐户使用了随机生成的好密码,并信任我的SSH服务器(以及所有其他服务)将不知道密码的用户拒之门外。 fail2ban仅适用于日志文件空间有限的用户IMO。 (您应该具有足够好的密码才能信任它们。)

#8 楼

在www.debian.org/doc/manuals/securing-debian-howto/

上查看这个不错的方法,我亲自更改了ssh端口并使用fail2ban + denyhosts。我阻止了所有不需要的事情。阻挡得越多,您就不必担心的越多。

评论


啊。您需要我直到“更改SSH端口”。毫无意义。尤其是当任何时间充裕的joe schmoe可以通过端口扫描您并立即找出SSH正在运行的端口时,尤其如此。连接后,它将立即声明服务名称(和服务器版本)。

–马特·西蒙斯(Matt Simmons)
09年3月3日在3:26

是的,我知道任何人都可以端口扫描您,并找出正确的端口。但是大多数攻击都在默认端口上。只需尝试更改端口即可获得一些统计信息。

– Vihang D
09年3月3日在7:07