• 售前

  • 售后

热门帖子
入门百科

linux下高级SSH安全本领

[复制链接]
音乐之家1 显示全部楼层 发表于 2021-10-26 13:40:21 |阅读模式 打印 上一主题 下一主题
SSH服务器配置文件是/etc/ssh/sshd_conf。在你对它举行每一次改动后都必要重新启动SSH服务,以便让改动生效。

1、修改SSH监听端口

默认情况下,SSH监听连接端口22,攻击者使用端口扫描软件就可以看到主机是否运行有SSH服务,将SSH端口修改为大于1024的端口是一个明智的选择,由于大多数端口扫描软件(包罗nmap)默认情况都不扫描高位端口。

打开/etc/ssh/sshd_config文件并查找下面如许的行:
Port 22

修改端口号并重新启动SSH服务:
/etc/init.d/ssh restart

2、仅允许SSH协议版本2

有两个SSH协议版本,仅使用SSH协议版本2会更安全,SSH协议版本1有安全问题,包罗中间人攻击(man-in-the-middle)和注入(insertion)攻击。编辑/etc/ssh/sshd_config文件并查找下面如许的行:
Protocol 2,1
修改为
Protocol 2

3、仅允许特定的用户通过SSH登岸

你不一个允许root用户通过SSH登岸,由于这是一个巨大的不必要的安全风险,如果一个攻击者得到root权限登岸到你的系统,相对他得到一个平凡用户权限能造成更大的粉碎,配置SSH服务器不允许root用户通过SSH登岸,查找下面如许的行:
PermitRootLogin yes

将yes修改为no,然后重新启动服务。如今,如果你想使用特权用户,你可以先以其他用户登岸,然后再转换到root。

创建一个没有现实权限的假造用户是一个明智的选择,用这个用户登岸SSH,即使这个用户遭到破解也不会引起什么粉碎,当创建这个用户时,确保它属于wheel组,由于那样你才气切换到特权用户。

如果你想让一列用户都能通过SSH登岸,你可以在sshd_config文件中指定它们,比方:我想让用户anze、dasa、kimy能通过SSH登岸,在sshd_config文件的末了我添加下面如许一行:
AllowUsers anze dasa kimy

4、创建一个自定义SSH banner

如果你想让任何连接到你SSH服务的用户看到一条特别的消息,你可以创建一个自定义SSH banner,只必要创建一个文本文件(我的是/etc/ssh-banner.txt),然后输入你想的任何文本消息,如:
*This is a private SSH service. You are not supposed to be here.*
*Please leave immediately. *

编辑好后,保存这个文件,在sshd_config中查找下面如许一行:
#Banner /etc/issue.net

取消掉注释【将#去掉】,然后将路径修改为你自定义的SSH banner文本文件。

5、使用DSA公钥认证

取代使用用户名和暗码对SSH举行认证,你可以使用DSA公钥举行认证,注意你既可以使用登岸名,也可以使用DSA公钥举行认证,使用DSA公钥认证可以预防你的系统遭受字典攻击,由于你不必要用登岸名和暗码登岸SSH服务,而是必要一对DSA密钥,一个公钥和一个私钥,在你当地呆板上保存私钥,将公钥放在服务器上。当你发起一个SSH登岸会话时,服务器查抄密钥,如果它们匹配的话,你就可以直接进入shell,如果它们不匹配,你的连接将被主动断开。

在本例中的私家盘算机叫‘工作站1’,服务器叫‘服务器1’。在两个呆板上我有相同的home目次,如果服务器和客户端上的home目次不同将不能工作,实现,你必要在你的私家盘算机上创建一对密钥,下令:~$ ssh-keygen -t dsa,它将要求你为私钥输入一个密语,但是你可以保存为空,由于这不是一个保举的做法。密钥对创建好了:你的私钥在~/.ssh/id_dsa,你的公钥在.ssh/id_dsa.pub。


接下来,拷贝~/.ssh/id_dsa.pub中的内容到‘服务器1’的~/.ssh/authorized_keys文件中,~/.ssh/id_dsa.pub的内容看起来象下面如许:

~$ cat .ssh/id_dsa.pub ssh-dss AAAAB3NzaC1kc3MAAACBAM7K7vkK5C90RsvOhiHDUROvYbNgr7YEqtrdfFCUVwMWc JYDusNGAIC0oZkBWLnmDu+y6ZOjNPOTtPnpEX0kRoH79maX8NZbBD4aUV91lbG7z604ZTdr LZVSFhCI/Fm4yROHGe0FO7FV4lGCUIlqa55+QP9Vvco7qyBdIpDuNV0LAAAAFQC/9ILjqII7n M7aKxIBPDrQwKNyPQAAAIEAq+OJC8+OYIOeXcW8qcB6LDIBXJV0UT0rrUtFVo1BN39cAWz5pu Fe7eplmr6t7Ljl7JdkfEA5De0k3WDs 9/rD1tJ6UfqSRc2qPzbn0p0j89LPIjdMMSISQqaKO4m2fO2VJcgCWvsghIoD0AMRC7ngIe6bta NIhBbqri10RGL5gh4AAACAJj1/rV7iktOYuVyqV3BAz3JHoaf+H/dUDtX+wuTuJpl+tfDf61rb WOqrARuHFRF0Tu/Rx4oOZzadLQovafqrDnU/No0Zge+WVXdd4ol1YmUlRkqp8vc20ws5mLVP 34fST1amc0YNeBp28EQi0xPEFUD0IXzZtXtHVLziA1/NuzY= anze@station1.example.com

如果文件~/.ssh/authorized_keys已经存在,请将上面的内容附加在该文件的反面。剩下的只是给该文件设置精确的权限了:

~$ chmod 600 ~/.ssh/authorized_keys

如今,配置sshd_config文件使用DSA密钥认证,确保你将下面三行前的注释去掉了:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

重新启动服务,如果你的配置没有错误,如今你就可以SSH到你的服务器,而且无需任何交互动作(如输入用户名和暗码)就直接进入你的home目次了。
如果你只想使用DSA认证登岸,确保你在sshd_config中取消掉注释并修改PasswordAuthentication这一行,将yes改为no:
PasswordAuthentication no

任安在服务器上没有公钥的人试图连接到你的SSH服务,它就被拒绝,给它显示如下一个拒绝提示信息:
Permission denied (publickey).

6、使用TCP wrappers仅允许指定的主机连接

如果你想在你的网络上只允许特定的主机才气连接到你的SSH服务,但又不想使用或弄乱你的iptables配置,那这个方法非常有效,你可以使用TCP wrappers。在这个例子中对sshd举行TCP包裹,我将创建一条规则允许当地子网192.168.1.0/24和远程193.180.177.13的本身连接到我的SSH服务。
默认情况下,TCP wrappers起首在/etc/hosts.deny中查找看主机是否允许访问该服务,接下来,TCP wrappers查找/etc/hosts.allow看是否有规则允许该主机服务指定的服务,我将在/etc/hosts.deny中创建一个规则,如下:
sshd: ALL

这意味着默认情况下全部主机被拒绝访问SSH服务,这是应该的,否则全部主机都能访问SSH服务,由于TCP wrappers起首在hosts.deny中查找,如果这里没有关于阻止SSH服务的规则,任何主机都可以连接。

接下来,在/etc/hosts.allow中创建一个规则允许指定的主机使用SSH服务:
sshd: 192.168.1 193.180.177.13

如今,只有来自192.168.1.0/24和193.180.177.13的主机可以大概访问SSH服务了,其他主机在连接时还没有到登岸提示符时就被断开了,并收到错误提示,如下:
ssh_exchange_identification: Connection closed by remote host

7、使用iptables允许特定的主机连接

作为TCP wrappers的一个取代品,你可以使用iptables来限定SSH访问(但可以同时使用这个两个的),这里有一个简朴的例子,指出了如何允许一个特定的主机连接到你的SSH服务:
~# iptables -A INPUT -p tcp -m state --state NEW --source 193.180.177.13 --dport 22 -j ACCEPT

并确保没有其他的主机可以访问SSH服务:

~# iptables -A INPUT -p tcp --dport 22 -j DROP

保存你的新规则,你的任务就完成了,规则是立即生效的

8、SSH时间锁定本领

你可以使用不同的iptables参数来限定到SSH服务的连接,让其在一个特定的时间范围内可以连接,其他时间不能连接。你可以在下面的任何例子中使用/second、/minute、/hour或/day开关。

第一个例子,如果一个用户输入了错误的暗码,锁定一分钟内不允许在访问SSH服务,如许每个用户在一分钟内只能尝试一次登岸:

~# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
~# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP

第二个例子,设置iptables只允许主机193.180.177.13连接到SSH服务,在尝试三次失败登岸后,iptables允许该主机每分钟尝试一次登岸:

~# iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
~# iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -j DROP

9、结论

这些本领都不是很难掌握,但是它们对于保护你的SSH服务却是很强劲的本领,花一点代价换来的是睡一个好觉。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作