• 苗山脱贫影像志——父母在 不远行 2019-11-10
  • 河北省大气环境问题曝光台 2019-11-10
  • 广州市第十五届人大常委会第十一次会议第二次全体会议 2019-10-29
  • 吉林省首届艺术节拉开帷幕 2019-10-29
  • 国贸集团机关支部全体党员参观2018世界制造业大会和徽商大会 2019-10-16
  • 马上背!十九大报告中的四个“新” 2019-10-04
  • 三日内8省区调整省级政府副职 4省常务副省长变动 2019-10-04
  • 湖南:专题研究“互联网+政务服务”和政务公开工作 2019-10-01
  • 大同市纪委监委通报5起违反中央八项规定精神问题典型案例 2019-10-01
  • 互联网基金违规销售乱象:巧立名目送红包、送份额 2019-09-30
  • 夏天喝饮料越喝越渴吗 三款饮料不利于健康-美食资讯 2019-09-30
  • 北欧的千湖之国被选为2018全球最幸福国家 2019-09-27
  • 车俊会见毛里求斯代总统 2019-09-27
  • 你不看文章的内容吗? 2019-09-14
  • 回复@“老笑头”,你的这种逻辑是你当年生sj病住院时向你同室的“病友”学来的吧!哈哈哈哈! 2019-09-05
  • 一尾中特连准开奖结果:Linux系统下如何配置SSH_Centos7 ssh连接配置 CentOS7下安全配置SSH

    时间:2016-06-11 11:13来源:未知 作者:Linux先生 举报 点击:
    SSH 通常是我们进入新伺服器的第一个应用程式,它也取代了telnet 和rsh 成为管理伺服器的最主要介面。

    免费一尾中特 www.nifws.tw SSH 通常是我们进入新伺服器的第一个应用程式,它也取代了telnet 和rsh 成为管理伺服器的最主要介面。尽管SSH 预设使用加密通讯,登入的密码和通讯内容都不容易被偷窥,预设的设定大致上安全,可惜由于需要兼顾旧用户和旧系统,一些过时和不安全的选项仍然被开启着,在国家级黑客横行无忌的年代,系统中任何一颗松掉的螺丝都会致命,所以我们将会讨论如何加强SSH 的安全性。这一篇只讨论基本的安全配置,比较容易理解,过程也比较简单,对用户的负面影响也比较少,较进阶和较具争议性的安全配置将会留待下一篇讨论。

    以下的方法,一部分已经在「安装CentOS 7后必做的七件事」中讨论过,不过为了完整起见,我会重复解说SSH相关的部分,希望大家包涵,不过内容会比较详尽,例如会加入对用户体验的影响,增加技术讨论的篇幅,和比较支持与反对方的意见等等。在该篇文章中与SSH无关的部分例如更改root密码等等,将不会重复讨论,但他们对系统的安全性同样重要,请大家不要忽视。

    1. 使用第二代通讯协定

    SSH的通讯协定分为第一代和第二代,不用多说第二代有更多功能、选项、和更高的安全性,它是在2006 正式由IETF发表,至今已有十年。由于两代SSH协定并不兼容,我们只能二选其一,CentOS 7的SSH预设使用第二代协定,所以无需做任何设定,但我建议在设定档中明确写清楚,开启/etc/ ssh/sshd_config,寻找:

    改为:

    跟着输入以下指令重新启动sshd

    完成后不要登出系统,使用另一个视窗尝试用普通帐号SSH登入。

    2. 不容许空白密码

    其中一个登入SSH的方法是输入帐号名称和密码,不过当CentOS 7新增一个帐号的时候,可以不设定初始密码,登入的时候只需输入帐号名称,这显然十分不安全,所以我们应该禁止这类型的帐号登入SSH,CentOS7的SSH预设禁止这类型的帐号登入,但我建议在设定档中明确写清楚,开启/etc/ssh/sshd_config,寻找:

    改为:

     

    3. 禁止root 使用SSH 登入

    CentOS 7的SSH预设容许任何帐号登入,包括root和普通帐号,为了避免root帐号被暴力入侵,我们必须禁止root帐号的SSH功能,事实上root也没有必要SSH登入伺服器,因为只要使用susudo指令(当然需要输入root的密码)普通帐号便可以拥有root的权限???code style="font-family: 'Courier New', Courier, monospace; font-size: 1em;">/etc/ssh/sshd_config,寻找:

    修改为:

    最后输入以下指令重新启动sshd

    这样黑客要取得root的权限,必须先破解一个普通用户帐号,然后再破解root的密码,难度增加了。

    完成后不要登出系统,使用另一个视窗尝试用普通帐号SSH登入,退出后再尝试用root帐号SSH登入。

    这一项设定只会影响需要使用root 权限工作的人,所以影响的人数十分少,影响也很轻微,但对安全性却有极大帮助。

    4. 使用非常规的SSH 端口

    SSH预设使用端口(port) 22,这是在IANA注册的官方端口,但没有人说SSH不能使用其他端口,很多黑客专门向伺服器的22端口发动攻击,即使你的伺服器固若金汤、 牢不可破,但是要系统日以继夜接受攻击,消耗的系统资源(网络、处理器、记忆体等等)也不会少,何况它是否真的牢不可破还说不定呢!所以有必要让SSH使用其他端口,只让有权使用SSH的用户知道。

    开启/etc/ssh/sshd_config,寻找:

    修改为:

    你可以把10837改为任何1024 – 65535之间的数字,若果怕与某些系统服务发生冲突,可以参考一下这里。

    跟着重新启动sshd

    然后是设定防火墙,CentOS 7的内核已经有防火墙netfilter,但你的系统未必安装了用户界面,较前版本的CentOS预设使用iptables,但CentOS 7开始使用效能更高、稳定性更好的firewalld。习惯使用iptables的管理员仍然可以在CentOS 7安装和使用iptables,但必须注意iptablesfirewalld不能同时运作。

    如果伺服器尚未安装firewalld,可以使用以下指令安装,不确定是否已经安装的话也可以输入这个指令,它会告诉你已经安装然后退出。

    跟着启动:

    设定firewalld的方法有两个,第一个是修改firewalld有关sshd的设定,把端口22改为10837,这是正统的做法,但步骤比较多;第二个是要求firewalld开启端口10837,不指定它属于哪一个服务(service),这个做法通常处理临时的端口开启/封锁,步骤简单,但是日后你要是忘记了这个端口为什么开启了呢?什么时候开启的呢?为了哪一项服务开启呢?可能有点麻烦。我两种方法都会介绍一下,但作为专业的系统管理员(即使不是真正的专业,也应该具备这样的心态),我推荐使用第一种方法。

    设定防火墙方法一:

    复制firewalld有关sshd的设定档案:

     

     

    开启/etc/firewalld/services/ssh.xml,寻找:

     

     

    修改为:

     

     

    储存后重新载入firewalld

     

     

    设定防火墙方法二:

    输入以下指令:

     

     

    就是这样简单!

    不论使用哪种方法,完成后不要登出系统,使用另一个视窗尝试登入,例如:

    不少人对更改SSH端口的有效性有异议,主要的反对意见认为铁了心要骇入你的伺服器的人,不会只尝试端口22后便放弃,一定会扫描所有65,536个TCP端口( port scanning),编写一个扫描TCP端口的程式很简单,执行起来也很快速,除非你不使用SSH,否则一定会被他们找到你使用的端口,然后发动攻击,所以更改SSH端口无助加强安全性。另一方面,用户每次登入SSH都要加上-p 10837这个参数,也添加麻烦。

    我同意这些论点,更改SSH 端口无助防止有技术、有决心、有资源的黑客,但是它至少阻挡一些随意找一个伺服器,然后在端口22 碰碰运气的小伙子,别低估这些小伙子的数量,这些十来岁还在读中学或者大学的小伙子的数量是十分惊人的,而且借着自动ip 扫描的程式,他们可以在短时间内扫描大量开启了端口22 的伺服器,更改SSH 的端口可以避免成为他们的攻击对象。总的来说,这是防范低阶黑客的有效手段。

    更改SSH 端口的另一个好处,是大幅减少SSH 日志(log)的长度,当你用人手翻阅日志查找不寻常的网络活动时,便了解它的可贵。一些查阅日志的工具例如fail2ban 等也可因此而提升效能。

    5. 启用公钥验证

    现在只有普通帐号才能透过 SSH 登入伺服器,但是 SSH 提供一个更先进更安全的验证方法:公钥验证法。

    首先每一名用户建立一对加密钥匙(密钥和公钥),密钥储存在日常使用的电脑,公钥则储存在伺服器,使用SSH 联系到伺服器的时候,电脑会把一些建立连线请求的资料,其中包括帐号名称和公钥,并且把部分资料用密钥制作数码签署,一股脑儿送到伺服器,伺服器检查自己的「公钥库」是否包含送来的公钥,有的话再验证数码签署,成功的话便直接登入伺服器,无需输入帐号密码。

    第一步在日常使用的电脑上使用ssh-keygen指令建立一对加密钥匙,它会询问储存加密钥匙的档案名称,和把钥匙加密的密码,档案名称使用预设的路径和名称便可以:

    建立帐号的RSA 加密钥匙

    这个指令会创造两个档案,一个名为id_rsa,是你的RSA密钥,另一个是id_rsa.pub,是你的RSA公钥。这两条钥匙的预设长度是2048 bit,安全程度达112 bit,估计在2030年前都不可能暴力破解,可说十分安全(这纯碎是数学上的预测,不考虑硬件技术的突破、加密算法研究的突破、硬件瑕疵等因素),如果你不放心,可以使用-b参数设定钥匙的长度,例如:

    有些人认为太长的钥匙拖慢了加密/解密的过程,因而减慢了通讯的速度,那是对加密通讯的无知做成的误解!公钥加密法只是用来建立通讯,过程中双方会协商对称加密法(例如AES)的钥匙,此后SSH 只会使用对称加密法来加密通讯的内容。所以公钥加密法钥匙长度对速度的影响,只发生在开始的阶段,此后的加密/解密的工作都由效能远远优胜的对称加密法负责。

    你也可以把加密算法从RSA改为更先进、效能更高的椭圆曲线算法(elliptic curve crytography),只要把上面指令中的rsa改为ed25519便可以了,ed25519的钥匙长度固定是256 bit,安全程度相当于128 bit,由于长度固定,所以无须使用-b指定长度。

    公钥必需上传到伺服器并且附加于用户帐号里面的~/.ssh/authorized_keys档案中,这个档案储存所有可透过SSH登入到这一个帐号的公钥。

    SSH的设定档/etc/ssh/sshd_config中可以使用PubkeyAuthentication来启用/停用公钥验证法,没有设定的话CentOS 7的SSH预设启用这个方法,你也可以加入这一行明确启用它:

    如果你有两台或以上电脑需要使用SSH 登入伺服器,便要在每一台电脑重复以上步骤,很多懒惰的人把这一对加密钥匙(公钥和密钥)复制到其他电脑,这样做的确可以从不同的电脑登入伺服器,但却提高了加密钥匙被盗取的风险,违反了公钥验证的原意。

    有些人建议使用公钥验证法后,密码登入的方法便应该停用,因为这是一个比较容易被暴力破解的方法,方法是在设定档/etc/ssh/sshd_config 中寻找:

    把它改为:

    如果你打算只使用公钥验证法,这是对的。不过我在下一篇文章将会讨论双重验证法,即是公钥验证法和密码验证法同时使用,届时我们仍然要开启密码验证法,倒不如暂时把它保留着。

    在日常使用电脑中的加密钥匙应该以稳当的密码?;?,必须明白你的电脑并不是绝对安全的,例如你的朋友可能会借你的电脑检查电邮;当你离开位子上厕所而屏幕?;こ淌狡舳?,谁人接触过你的电脑?你的手提电脑也有可能被盗取或遗失,诸如此类的情况多不胜数,倘若你的SSH 密钥没有密码?;?,等于你的伺服器没有密码?;?。

    公钥验证法比密码登入法安全的原因,是用暴力破解公钥/密钥近乎不可能,尤其是你使用的RSA 钥匙长度达到2048 bit 或以上,相当于黑客要暴力测试2^112 个密码,以现代的电脑技术,即使具备国家级的电脑设备也不可能破解。相反地,暴力破解你的登入密码便容易得多了,假设你精心挑选了一个8 个字符,包含大小写英文字母、数字和标点符号,并且完全随机产生的密码,安全性也只有大约48 bit ,相当于黑客要暴力测试2^48 个密码,即使是一台桌面电脑也可以轻易做到。

    使用公钥验证法后,伺服器不容易被暴力入侵,但储存在桌面电脑或手提电脑内的密钥又怎么样呢?它们的安全性取决于那些电脑的安全性,和?;っ茉康拿苈氚踩?。有些人认为公钥验证法只是把风险从伺服器转移到桌面和手提电脑,安全性没有提高,某些情况下反而下降了。所以有人提出多重验证(multi-factor authentication)概念,我们将会在第二部分详细讨论。

    6. 限制可登入SSH 的用户

    审视一下哪些帐号需要使用SSH登入伺服器,只让这些帐号透过SSH登入,可以减少被攻击的和被攻陷的机会。假如伺服器只容许peter和jane两个帐号登入,可以在/etc/ssh/sshd_config加入:

    帐号名称之间用空白字符分隔,帐号名称可以使用通配字符*?,不过我不建议这样做,因为

    1. 你可能不小心容许了一些不该使用SSH 的帐号登入。
    2. 将来新增了一些不该使用SSH,但巧合地匹配这些模式的帐号,让他们拥有登入SSH 权限。

    跟着输入以下指令重新启动sshd

    完成后不要登出系统,尝试使用peter或者jane帐号在另一个视窗登入,退出后再尝试用其他帐号登入。

    除了AllowUsers之外,也可以使用DenyUsers明确拒绝某些帐号登入,例如:

    如果伺服器设定了用户群组,也可以用群组名称来授权/拒绝SSH 登入,例如:

     

    7. 停用不需要的验证方法

    CentOS 7 的SSH 提供九种帐户验证方法:

    验证方法

    SSH 协定版本

    设定档案中没有指定时的预设值 CentOS 7 的SSH 预设值
    ChallengeResponseAuthentication 1, 2 yes no
    GSSAPIAuthentication 2 no yes
    HostbasedAuthentication 2 no no
    KbdInteractiveAuthentication 1, 2 yes* no
    KerberosAuthentication 1, 2 no no
    PasswordAuthentication 1, 2 yes yes
    PubkeyAuthentication 2 yes yes
    RhostsRSAAuthentication 1 no no
    RSAAuthentication 1 no no
    * 如果设定档案没有指定KbdInteractiveAuthentication 的值,它将会与ChallengeResponseAuthentication 的值相同。

    启用不需要的验证法等于设立一道我们不会使用的门,尽管这道门关着,但它始终是一个安全隐患,所以我们应该只启用需要的验证法。

    假如你只使用公钥验证法,请把所有其他验证法明确设定为no,不要依赖SSH的预设值。前面第五节已经介绍过公钥验证法和启用它的方法,启用/停用其他验证法的方法也差不多,这里不打算逐一说明。

    我建议你最少要启用公钥验证法( PubkeyAuthentication yes ),若果你打算结合密码验证法实现多重验证,可以保留密码验证法( PasswordAuthentication yes ),其他验证法除非真的有需要,否则都应该停用(例如  GSSAPIAuthentication no )。

    若果你不使用外挂验证模组(PAM – Pluggable Authentication Module),应该一并停用PAM,不过如果系统正在运行SELinux,停用PAM而没有加入适当的SELinux规则,会引致不可预知的结果,所以在SELinux环境下可以保留使用PAM。CentOS 7的SSH预设启用PAM,需要停用的话可以在/etc/ssh/sshd_config中寻找:

    改为:

    跟着输入以下指令重新启动sshd

    一如既往,完成后不要登出系统,尝试在另一个视窗登入。

    总结

    以上是比较简单和容易理解的设定,如果你有任何问题或指正,欢迎在下面回响中提出和讨论。下一篇将讨论比较复杂,必较具争议性,和对用户体验有较大影响的设定。

    推荐内容
  • 免费一尾中特
  • 苗山脱贫影像志——父母在 不远行 2019-11-10
  • 河北省大气环境问题曝光台 2019-11-10
  • 广州市第十五届人大常委会第十一次会议第二次全体会议 2019-10-29
  • 吉林省首届艺术节拉开帷幕 2019-10-29
  • 国贸集团机关支部全体党员参观2018世界制造业大会和徽商大会 2019-10-16
  • 马上背!十九大报告中的四个“新” 2019-10-04
  • 三日内8省区调整省级政府副职 4省常务副省长变动 2019-10-04
  • 湖南:专题研究“互联网+政务服务”和政务公开工作 2019-10-01
  • 大同市纪委监委通报5起违反中央八项规定精神问题典型案例 2019-10-01
  • 互联网基金违规销售乱象:巧立名目送红包、送份额 2019-09-30
  • 夏天喝饮料越喝越渴吗 三款饮料不利于健康-美食资讯 2019-09-30
  • 北欧的千湖之国被选为2018全球最幸福国家 2019-09-27
  • 车俊会见毛里求斯代总统 2019-09-27
  • 你不看文章的内容吗? 2019-09-14
  • 回复@“老笑头”,你的这种逻辑是你当年生sj病住院时向你同室的“病友”学来的吧!哈哈哈哈! 2019-09-05
  • 快乐扑克3360彩票 福彩3d和值走势图带连线易彩网 内蒙古十一选五技巧 万人棋牌 股票分析师炒股厉害吗 陕西十一选五中奖技巧 新浪斗地主官网 3d试机号开奖号历史记录 彩票安徽十一选五 民生银行股票