提升UNIX安全性的Unix SSH示例配置
管理UNIX服务器通常需要通过命令行访问,这意味着使用SSH(安全Shell)环境,并有可能通过互联网直接访问这个环境。现代的UNIX发行版都带有预配置的SSH,但也有一些后安装的服务器配置变更能够使你的生活更轻松,并增加你组织中的Unix系统的安全性。
如果你使用命令行访问Unix服务器,但仍然使用Telnet,那么请停止。从键盘退出,使用SSH代替Telnet。现在,开始使用SSH。为了我而这样做,如果不是为我,那为贵公司而这样做。使用未加密的通信来管理系统,并传递纯文本密码,这是不能接受的风险,并且没有技术障碍阻止你禁用服务器上的所有Telnet并完全切换到SSH。
对于Unix服务器,SSH是最常用的,但Windows管理员也可以从这个建议获益。对于偶尔的维护任务,SSH是进入你的Windows服务器的一个好的、低带宽的方式。如果你正连接Windows和Unix系统,你可能希望使用加密文件传输而不是正常的CIFS。在跨不受信任的网络系统间移动文件,SCP和SFTP协议是有用的,它们都运行在SSH的顶部。
如果你正在使用SSH,这里有一些需要考虑的想法。大多数Unix SSH示例配置,可以通过简单地改变SSH的配置文件(通常称为/ etc / ssh / sshd_config或/ etc / sshd_config,取决于你使用的UNIX版本),而在几秒钟内完成。
- 为任何面向互联网的系统更改SSH的端口号。SSH通常运行在端口22上,但它不是必须的。我建议改为任何你能容易记住的端口号。例如,我发现有许多开启“222”端口的服务器。为什么要这样做?嗯,没有增加安全性,因为除了无名安全(通过隐匿来实现安全),它实际上没有增加任何安全性。相反,我做的一个原因是:为了避免在互联网上运行的太多的SSH扫描器。这些扫描器使用垃圾数据填充日志,并潜在地掩盖攻击,而且他们能引发非法闯入逃避,这可能导致拒绝服务(DoS)攻击。
- 停止使用密码来访问和管理你的服务器。我们都知道,密码是可怕的:容易被猜出、偷窃、丢失和共享。公钥/私钥加密被用于整个互联网,以帮助提供更好的验证并增加安全性,对于你的SSH访问,为什么不使用它呢?是的,它意味着你现在必须随身携带你的私钥(且不要丢失它、共享它或者让它被盗)。但它确实消除了被盗或猜测的密码将被用来危及安全的任何可能性。为每个用户生成公钥/私钥对,配置SSH服务器只需要几分钟,但它极大地增加了安全级别,并且它是一个廉价的投资。当然,当你这样做时,你也必须禁用密码访问,否则你将功亏一篑。
当服务器的数量很少时,这部分的技术提示才能真正工作;如果你有几十或上百个系统的农场,你应该调查一些其他形式的集中认证,例如,基于令牌的访问。如果你不喜欢这个想法,那么考虑建立一个堡垒主机的可能性,堡垒主机在互联网和本地网络之间充当SSH网关。在这种情况下,你只能使堡垒主机通过互联网可访问的,到堡垒主机,使用公钥/私钥对进行认证,然后使用密码从堡垒主机跳到位于组织中的服务器上。要真正使这个措施有效,在每一台别的主机上,配置SSH服务器,只允许从堡垒主机已知的IP地址进行登录。
- 不要让每个人登录。许多Unix服务器只有少数几个人来管理它们,大量的其他账户只用于守护进程或与管理控制分离。默认情况下,对每个人禁用SSH访问,并只允许真正的人登录——在SSH配置文件中专门列出的人。当我说“真正的人”,我不是指root用户。我总是希望人们在使用像su(超级用户)或sudo工具来取得特权访问之前,首先使用SSH以自己的身份登录。这有助于问责和调试。许多SSH服务器有一个特定的配置,用于禁用完全的root登录,所以即使你不遵循我的建议,将登录限制到列表中的少数几个用户,你也可以通过SSH轻松地禁用root访问。
遵循我在这里建议的措施,配置一台典型的Unix服务器,将花费有经验的Unix管理员不到15分钟的时间,如果你从来没有这样做过,也许需要一两个小时。无论哪种方式,在时间上的投资,将避免出现问题和风险,提高安全性,对于任何规模的网络来说,都是有价值的目标。