记服务器遭遇ssh攻击及应对过程

前几天登录服务器一看,短短十几个小时的时间有七千多次ssh错误登录记录,毫无疑问,有人在对我进行ssh远程暴库攻击。

利用命令

grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' /var/log/secure | sort | uniq -c

可以看到每个ip的访问次数(其实图没截完,还有很多),可以看到这个人应该有很多“肉鸡”来对别人进行攻击,比较有趣的是就在我查看登录记录的同时,他还在暴力破解,咱也不知道用的啥破软件,咱也不敢问,总而言之,需要对服务器进行安全设置了。

在进行应对这种暴行之前,当然需要首先分析服务器当前的漏洞

  • 第一 、SSH远程连接的默认端口没有修改;

这一条是登录路径问题,同样适用网站后台默认登录地址的情况。以前很多人扫注入漏洞,得到账号密码就是去找后台登录地址。因为大部分网站,都是固定的源码,后台登录界面都是固定的。有账号密码,又找到了登录页面,那进后台基本就没跑了。不少工具骇客就是,因为找不到登录页面在手里有账号密码的情况下,也无法成功入侵网站。所以,服务器或网站上线之前,一定要修改一个比较不易找到的登录地址或端口

  • 第二、默认管理员root 账号没有禁用远程访问;

无论Windows 还是 Linux 系统,都有自己特定的最高管理员账号。自己电脑,这方面无关紧要,这么多层的路由器,我们电脑躲在里面其实已经安全不少了。但是放在公网的服务器,任何人都可以试图通过IP和相应远程访问端口,进行账号的登录。骇客知道登录地址可以尝试连接我,骇客知道默认账号可以尝试暴力猜解密码。如果密码被猜中,那服务器就玩完了。

  •     第三、多次远程登录失败,没有将其IP加入黑名单。

服务器远程登录访问这是必有的功能,你不可能给服务器连接一台显示器本地登录。也基本不可能,屏蔽所有IP只留下一两个IP进行远程操控(万一IP突然变了,毕竟我们用的大部分是动态分配的)。服务器既然可以设置指定IP允许访问和禁止访问,那也就可以通过脚步进行控制,某IP登录多少次失败,将其加入黑名单。日常使用,也是如此操作的。

下面我们就在这三方面来搞

  • 第一、修改ssh默认端口

一般,ssh默认监听的端口都是22,而骇客一般也就是通过这个端口通过ssh连接你的服务器,所以我们需要修改一个别人不易想到的端口。

编辑 /etc/ssh/sshd_config 文件

vim  /etc/ssh/sshd_config

把 Port 22

改成 Port xxx(一个别人不易猜到的端口)

然后保存退出

  • 第二、禁用root账户远程登录

骇客一般找到你的ssh端口后,一般会通过root账户进行登录,而此时如果你能把你的root账户禁止ssh登录的话就能避免很大一部分攻击。

禁用root账户登录的前提是我们有另一个账户

linux添加账户的教程可以参见我的另一篇文章

Linux系统添加用户、管理员权限

然后就是禁止root账户进行远程登陆

方法还是修改 /etc/ssh/sshd_config 文件

vim  /etc/ssh/sshd_config

将文件改成

PermitRootLogin no

完成!

  • 第三、安装denyhost

这个方法比较省时省力。denyhosts 是 Python 语言写的一个程序,它会分析 sshd 的日志文件,当发现重复的失败登录时就会记录 IP 到 /etc/hosts.deny 文件,从而达到自动屏 IP 的功能。

安装:

# Debian/Ubuntu:
$ sudo apt-get install denyhosts
# RedHat/CentOS
$ yum install denyhosts

默认配置就能很好的工作,如要个性化设置可以修改 /etc/denyhosts.conf

$ vi /etc/denyhosts.conf
SECURE_LOG = /var/log/auth.log #ssh 日志文件,它是根据这个文件来判断的。
HOSTS_DENY = /etc/hosts.deny #控制用户登陆的文件
PURGE_DENY = #过多久后清除已经禁止的,空表示永远不解禁
BLOCK_SERVICE = sshd #禁止的服务名,如还要添加其他服务,只需添加逗号跟上相应的服务即可
DENY_THRESHOLD_INVALID = 5 #允许无效用户失败的次数
DENY_THRESHOLD_VALID = 10 #允许普通用户登陆失败的次数
DENY_THRESHOLD_ROOT = 1 #允许root登陆失败的次数
DENY_THRESHOLD_RESTRICTED = 1
WORK_DIR = /var/lib/denyhosts #运行目录
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
HOSTNAME_LOOKUP=YES #是否进行域名反解析
LOCK_FILE = /var/run/denyhosts.pid #程序的进程ID
ADMIN_EMAIL = root@localhost #管理员邮件地址,它会给管理员发邮件
SMTP_HOST = localhost
SMTP_PORT = 25
SMTP_FROM = DenyHosts <nobody@localhost>
SMTP_SUBJECT = DenyHosts Report
AGE_RESET_VALID=5d #用户的登录失败计数会在多久以后重置为0,(h表示小时,d表示天,m表示月,w表示周,y表示年)
AGE_RESET_ROOT=25d
AGE_RESET_RESTRICTED=25d
AGE_RESET_INVALID=10d
RESET_ON_SUCCESS = yes #如果一个ip登陆成功后,失败的登陆计数是否重置为0
DAEMON_LOG = /var/log/denyhosts #自己的日志文件
DAEMON_SLEEP = 30s #当以后台方式运行时,每读一次日志文件的时间间隔。
DAEMON_PURGE = 1h #当以后台方式运行时,清除机制在 HOSTS_DENY 中终止旧条目的时间间隔,这个会影响PURGE_DENY的间隔。

查看我的 /etc/hosts.deny 文件发现里面已经有 87条记录。

cat /etc/hosts.deny | wc -l
87
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇