当前位置: 首页 > Linux

服务器ssh安全性

时间:2023-04-06 01:34:35 Linux

没有序言。..马上开始。..在我的githubrepoitnotes的linux/network/ssh中有一些ssh相关的比较,欢迎访问指正。升级openssh版本如果服务器上的openssh版本过低,应该更新openssh,尤其是某些版本暴露了重大漏洞。使用高强度加密算法检查服务器sshd使用的加密算法,已经证明弱的加密算法,如arcfour、des系列算法,应该去掉。新版openssh一般不会使用暴露的弱加密算法。可以使用nmap扫描目标ssh服务器,获取其sshd使用的加密算法(encryption_algorithms)。nmap--scrip"ssh2*"可以在sshd_config中配置Ciphers指定使用高强度加密算法,例如:Ciphersaes256-ctrchacha20-poly1305@openssh.comaes256-gcm@openssh.comneeds修改后重启sshd服务。检查登录记录。目前的linux发行版大多将历史记录保存在二进制文件中,所以你可能无法在/var/log中找到有历史记录的文本文件。登录历史用户最近登录状态:lastlog成功登录记录:上次登录失败记录:lastblastb是需要注意的,输出内容按时间排序,最后输出内容为最早的记录。当表项过多时,可以使用tac将其倒序:lastb|tac。从这个文件中,您可以看到脚本小子喜欢使用哪些用户名来尝试登录到您的服务器。使用lastb|wc-l统计失败的记录(注意:记录过多会根据设置清空旧记录),我的一台云服务器某一周的lastb记录超过20万条...当前登录的usercurrentlyloggedin列表(以及登录用户在做什么操作):w当前登录用户信息:who防御工具fail2ban具体使用方法请参考文档,配合firewalld或iptables使用。文末附上自己写的fail2ban脚本,轻松配置fail2ban(当然fail2ban的配置也很简单)。sshguard有点旧,从未使用过。root用户登录限制是禁止root用户登录或者只允许其使用密钥登录。如果不需要,建议关闭root登录。(看到我lastb里有几千条root登录记录,别慌,我把root登录关掉了)。修改服务器的/etc/ssh/sshd_config文件中PermitRootLogin的值,值可以是:no或yes禁止或允许root用户登录prohibit-password或without-password不允许密码登录(可以使用其他认证方式,如sshKey)forced-commands-only可以只使用key登录,只允许授权命令,禁止部分用户使用shell。禁止他们使用shell当然会禁止他们登录。有些用户可能只习惯于不登录就自动启动一个daemon进程,可以将他们的shell改成nologin。扫描工具一般扫描知名软件的默认用户,比如postgresql的postgres用户,zabbix的zabbix用户。当然默认情况下是没有给用户设置密码的,用户是无法通过ssh登录的。安装好postgresql后,就可以轻松设置了密码postgresql,终于被黑了,安装了挖矿程序。修改方法:chsh-s/sbin/nologinusernameusername是编辑/etc/passwd文件的用户名,找到用户所在行,把/bin/bash这个词改成/sbin/nologin。更换sshd监听端口没什么技术含量但是很有效。它可以与修改默认的弱密码并驾齐驱。两种简单有效的防御方式,可以降低被工具批量扫描的几率。别把大多数黑客的手段看得太高,毕竟弱口令和默认端口的机器那么多。扫描简单的机器不好吗?也许您的服务器将因此而被跳过。当然,这在非针对性攻击中有一定的效果,是一种侥幸的手段。如果对方专门针对它,那当然就没有用了。将服务器的/etc/ssh/sshd_config文件中的Port值修改为其他可用端口。如果要监听多个端口,添加多行Port。如果要指定监听的地址,添加ListenAddress这一行:Port1234Port4567ListenAddress0.0.0.0使用密钥代替密码登录是安全但不方便的。ssh-keygen#orssh-keygen-trsa4096客户端生成密钥ssh-copy-id-p23579user@host#上传公钥到服务器注意dsa密钥已经被证明是不安全的,并且rsa密钥的位数太低也不安全,建议至少4096位。IP白名单和黑名单在黑名单/etc/hosts.deny中添加禁止名单。将允许列表添加到白名单/etc/hosts.allow。用户白名单和黑名单sshd控制,在/etc/sshd_config中添加配置行白名单用户:AllowUsersusername1username2用户组:AllowGroupsgroupname1groupname2黑名单用户:DenyUsersusername1username2用户组:DenyGroupsgroupname1groupname2PAM控制在/etc/pam中添加。d/sshdfile:authrequiredpam_listfile.soitem=usersense=denyfile=/etc/ssh/denyonerr=succeedsense值:黑名单值为拒绝,白名单值为允许。将黑名单/白名单用户添加到/etc/ssh/denyhosts,每行一个用户名。fail2ban配置脚本安装fail2ban后,执行脚本,根据提示配置sshd的规则。配置规则:某个ip连续5次登录失败,加入黑名单。黑名单时间为8640000秒(100天)。执行后会生成以下可用命令:banip:封禁指定ipban_ip1.2.3.43.4.5.6unbanip:unban用法同上ignoreip:忽略ip(不被拉黑)用法同上delignoreip:delete被忽略的ip用法同上unbanipall:清空黑名单blacklist:查看黑名单#!/bin/shif[[$USER!=root]];然后回显“需要root或sudo”。退出如果[[!$(哪个fail2ban服务器)]];thenecho"pleaseinstallfail2ban"exitfi#-----jail_file=/etc/fail2ban/jail.d/jail.localbandtime=8640000#ban的默认时间是秒smhdwfindtime=6000#从过去的记录中过滤nsecondsmaxretry=5#Maximum#-----[[-f$jail_file]]&&mv$jail_file$jail_file.bakecho"[DEFAULT]bantime=$bandtimefindtime=$findtimemaxretry=$maxretry[sshd]enabled=true">$jail_filefunctiongen_scripts(){#banipecho'#!/bin/shsudofail2ban-clientsetsshdbanip"$@"'>/usr/local/bin/banip#unbanipecho'#!/bin/shcase"$@"inall)sudofail2ban-clientunban--all;;*)sudofail2ban-clientsetsshdunbanip"$@";;esac'>/usr/local/bin/unbanip#ignoreipecho'#!/bin/shsudofail2ban-clientsetsshdaddignoreip"$@"'>/usr/local/bin/ignoreip##deleteignoreipecho'#!/bin/shsudofail2ban-clientsetsshddelignoreip"$@"'>/usr/local/bin/delignoreip##sshdblacklistecho'#!/bin/shsudofail2ban-clientstatussshdecho===========banip[ip1ip2]:ban1个IP或多个IP,eg,banip8.8.8.89.9.9.9unbanip[ip1ip2]:unban1IPormoreIPsunbanipall:unbanallIPsignoreip[ip1ip2]:ignore1IPormoreIPsdelignoreip[ip1ip2]:deleteaignoredIP"'>/usr/local/bin/blacklistchmod+x/usr/local/bin/{banip,unbanip,delignoreip,ignoreip,blacklist}}#=====gen_scriptssystemctlenable--nowfail2bansystemctlrestartfail2banblacklist

猜你喜欢