ssh登陆记录查看
# 通过who检查当前在线用户
who
#查看登陆的情况
less /var/log/secure
# 在/var/log/btmp中可以查看到登陆失败的记录
lastb
# 查看w记录
who /var/log/wtmp
# 在/var/log/lastlog中可以查看最近登陆的记录 (可通过last命令进行检查)
last
(可通过lastb命令进行检查)
最近我的多台 linux 服务器遭受黑客攻击,虽没被攻下,但占用一些网络资源。攻击记录如下:
Mar 23 02:02:19 zgyt-server sshd[8161]: pam_unix(sshd:auth): check pass; user unknown
Mar 23 02:02:19 zgyt-server sshd[8161]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.15.21.106
Mar 23 02:02:19 zgyt-server sshd[8161]: pam_succeed_if(sshd:auth): error retrieving information about user test
Mar 23 02:02:21 zgyt-server sshd[8161]: Failed password for invalid user test from 218.15.21.106 port 53996 ssh2
Mar 23 02:02:21 zgyt-server sshd[8162]: Received disconnect from 218.15.21.106: 11: Bye Bye
Mar 23 02:02:21 zgyt-server sshd[8163]: Invalid user guest from 218.15.21.106
Mar 23 02:02:21 zgyt-server sshd[8164]: input_userauth_request: invalid user guest
Mar 23 02:02:21 zgyt-server sshd[8163]: pam_unix(sshd:auth): check pass; user unknown
Mar 23 02:02:21 zgyt-server sshd[8163]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.15.21.106
Mar 23 02:02:21 zgyt-server sshd[8163]: pam_succeed_if(sshd:auth): error retrieving information about user guest
Mar 23 02:02:23 zgyt-server sshd[8163]: Failed password for invalid user guest from 218.15.21.106 port 54275 ssh2
Mar 23 02:02:23 zgyt-server sshd[8164]: Received disconnect from 218.15.21.106: 11: Bye Bye
Mar 23 02:02:24 zgyt-server sshd[8165]: Invalid user admin from 218.15.21.106
Mar 23 02:02:24 zgyt-server sshd[8166]: input_userauth_request: invalid user admin
Mar 23 02:02:24 zgyt-server sshd[8165]: pam_unix(sshd:auth): check pass; user unknown
Mar 23 02:02:24 zgyt-server sshd[8165]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.15.21.106
Mar 23 02:02:24 zgyt-server sshd[8165]: pam_succeed_if(sshd:auth): error retrieving information about user admin
Mar 23 02:02:27 zgyt-server sshd[8165]: Failed password for invalid user admin from 218.15.21.106 port 54534 ssh2
Mar 23 02:02:27 zgyt-server sshd[8166]: Received disconnect from 218.15.21.106: 11: Bye Bye
Mar 23 02:02:27 zgyt-server sshd[8167]: Invalid user admin from 218.15.21.106
Mar 23 02:02:27 zgyt-server sshd[8168]: input_userauth_request: invalid user admin
Mar 23 02:02:27 zgyt-server sshd[8167]: pam_unix(sshd:auth): check pass; user unknown
Mar 23 02:02:27 zgyt-server sshd[8167]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.15.21.106
Mar 23 02:02:27 zgyt-server sshd[8167]: pam_succeed_if(sshd:auth): error retrieving information about user admin
Mar 23 02:02:29 zgyt-server sshd[8167]: Failed password for invalid user admin from 218.15.21.106 port 54855 ssh2
Mar 23 02:02:29 zgyt-server sshd[8168]: Received disconnect from 218.15.21.106: 11: Bye Bye
Mar 23 02:02:30 zgyt-server sshd[8169]: Invalid user user from 218.15.21.106
Mar 23 02:02:30 zgyt-server sshd[8170]: input_userauth_request: invalid user user
Mar 23 02:02:30 zgyt-server sshd[8169]: pam_unix(sshd:auth): check pass; user unknown
Mar 23 02:02:30 zgyt-server sshd[8169]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.15.21.106
Mar 23 02:02:30 zgyt-server sshd[8169]: pam_succeed_if(sshd:auth): error retrieving information about user user
Mar 23 02:02:32 zgyt-server sshd[8169]: Failed password for invalid user user from 218.15.21.106 port 55041 ssh2
Mar 23 02:02:32 zgyt-server sshd[8170]: Received disconnect from 218.15.21.106: 11: Bye Bye
Mar 23 02:02:32 zgyt-server sshd[8171]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.15.21.106 user=root
Mar 23 02:02:34 zgyt-server sshd[8171]: Failed password for root from 218.15.21.106 port 55204 ssh2
Mar 23 02:02:34 zgyt-server sshd[8172]: Received disconnect from 218.15.21.106: 11: Bye Bye
Mar 23 02:02:35 zgyt-server sshd[8173]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.15.21.106 user=root
Mar 23 02:02:37 zgyt-server sshd[8173]: Failed password for root from 218.15.21.106 port 55314 ssh2
Mar 23 02:02:37 zgyt-server sshd[8174]: Received disconnect from 218.15.21.106: 11: Bye Bye
因此,在这给大家提个醒,注意你的服务器的安全。
解决方案
源生
方案一
使用以下解决方案,攻击者可以在2分钟内生成3次错误登录,否则将被阻止120秒。
**config
MaxAuthTries 1
每个连接只能进行1次登录尝试。重新启动ssh服务器。
2)添加以下防火墙规则
创建一个新链
iptables -N SSHATTACK
iptables -A SSHATTACK -j LOG --log-prefix "Possible SSH attack! " --log-level 7
iptables -A SSHATTACK -j DROP
阻止每个IP地址120秒,这将在120秒内建立三个以上的连接。在进行第四次连接尝试时,该请求将委派给该SSHATTACK链,该链负责记录可能的ssh攻击并最终删除该请求。
iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --set
iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --update --seconds 120 --hitcount 4 -j SSHATTACK
3)查看可能的ssh攻击的日志条目 /var/log/syslog
Dec 27 18:01:58 ubuntu kernel: [ 510.007570] Possible SSH attack! IN=eth0 OUT= MAC=01:2c:18:47:43:2d:10:c0:31:4d:11:ac:f8:01 SRC=192.168.203.129 DST=192.168.203.128 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=30948 DF PROTO=TCP SPT=53272 DPT=1785 WINDOW=14600 RES=0x00 SYN URGP=0
方案二
在文件中进行两个配置更改:/ etc / ssh / sshd_config
限制ssh服务器将同时处理的未认证连接的最大数量。这越小,脚本小子就很难通过多个连接进行并行,协调的破解尝试。编辑sshd_config并将MaxStartups从默认的“ 10”更改为“ 3:50:10”。以冒号分隔的值告诉ssh服务器:“允许3个用户尝试同时登录,并在3个和最多10个之间(最多10个)之间随机增加连接尝试次数”。注意:在具有大量有效ssh用户登录的服务器上,应增加此数目。
- 默认值:MaxStartups 10
- MaxStartups 3:50:10
减少断开连接前成功登录所允许的最长时间。默认的2分钟是太多时间,无法打开未经身份验证的连接尝试(请参见上文);30秒足以登录:
- 默认值:LoginGraceTime 2m
- LoginGraceTime 30
方案三
我将这些IPTables规则用于此目的:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 4 --rttl --name SSH -j DROP
这将仅允许5分钟内从IP地址向端口22发送4个TCP / SYN数据包。如果尝试更多,则将门关闭直到5分钟结束。
第三方软件
下面是我的解决办法,希望对你有所帮助。
1、制作密钥,用密钥登录系统 ,之后也可以禁止root密码登陆
2、用 DenyHosts 防止重复登录爆破
2.1、DenyHosts 是 Python 语言写的一个程序,它会分析 SSHD 的日志文件,当发现重复的攻击时就会记录 IP 到 / etc/hosts.deny 文件,从而达到自动屏蔽 IP 的功能。
2.2 下载 DenyHosts 与安装
地址:DenyHosts 官方网站为:,下载与你操作系统对应的版本安装。如我的系统 centos5.2 操作为:
sudo rpm -ivh DenyHosts-2.6-python2.4.noarch.rpm
Preparing... ########################################### [100%]
1:DenyHosts ########################################### [100%]
2.3、配置
默认安装目录为 / usr/share/denyhosts/,操作命令:
cd /usr/share/denyhosts/
sudo cp daemon-control-dist daemon-control
sudo cp denyhosts.cfg-dist denyhosts.cfg
cd /etc/init.d/
sudo ln -s /usr/share/denyhosts/daemon-control denyhosts
sudo /sbin/chkconfig --add denyhosts
sudo /sbin/chkconfig --level 2345 denyhosts on
sudo /sbin/service denyhosts start
starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg
DenyHosts 配置文件: vi /etc/denyhosts.cfg
#ssh 日志文件,如果是 redhat 系列是根据 / var/log/secure 文件来判断的。
#Mandrake、FreeBSD 是根据 /var/log/auth.log 来判断的,而 SUSE 则是用 / var/log/messages 来判断的。这些在配置文件里面都有很详细的解释。
SECURE_LOG = /var/log/secure
#控制用户登陆的文件
HOSTS_DENY = /etc/hosts.deny
#过多久后清除已经禁止的,空表示永久不清除
# 'm' = minutes
# 'h' = hours
# 'd' = days
# 'w' = weeks
# 'y' = years
PURGE_DENY = 30m
#禁止的服务名,当然 DenyHost 不仅仅用于 SSH 服务,还可用于 SMTP 等等。
BLOCK_SERVICE = sshd
#允许无效用户失败的次数
DENY_THRESHOLD_INVALID = 1
#允许普通用户登陆失败的次数
DENY_THRESHOLD_VALID = 5
#允许 root 登陆失败的次数
DENY_THRESHOLD_ROOT = 3
#是否做域名反解
HOSTNAME_LOOKUP=NO
#管理员邮件地址, 它会给管理员发邮件
ADMIN_EMAIL =
#DenyHosts 日志文件存放的路径
DAEMON_LOG = /var/log/denyhosts
2.4、重启 denyhosts 服务
sudo /sbin/service denyhosts restart
Password:
sent DenyHosts SIGTERM
starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py —daemon —config=/usr/share/denyhosts/denyhosts.cfg
OK, 你已大功告成,可以看看 / etc/hosts.deny 内是否有禁止的 IP
http://blog.chinaunix.net/uid-17238776-id-1693197.html