应对VPS暴力破解

in centos with 0 comment

确认有人在暴力破解

直接输入

utmpdump /var/log/btmp

可查看所有的登录失败的案例,正常一台机器,这种案例不会多出一屏,但是如果发现屏幕在滚动,,,,,

那基本确定肯定是有人在暴力破解你的服务器某个账号了,上面有IP和尝试登录的账号,,,自己想想吧


附录:
保留、维护和分析日志(如某个特定时期内发生过的,或正在发生的帐号事件),是Linux系统管理员最基础和最重要的任务之一。对于用户管理,检查用户的登入和登出日志(不管是失败的,还是成功的)可以让我们对任何潜在的安全隐患或未经授权使用系统的情况保持警惕。例如,工作时间之外或放假期间的来自未知IP地址或帐号的远程登录应当发出红色警报。
  在CentOS系统上,用户登录历史存储在以下这些文件中:
  /var/run/utmp(用于记录当前打开的会话)被who和w工具用来记录当前有谁登录以及他们正在做什么,而uptime用来记录系统启动时间。
  /var/log/wtmp (用于存储系统连接历史记录)被last工具用来记录最后登录的用户的列表。
  /var/log/btmp(记录失败的登录尝试)被lastb工具用来记录最后失败的登录尝试的列表。

在CentOS系统上查看用户登录记录的方法-centos 查看系统用户
  在本文中,我将介绍如何使用utmpdump,这个小程序来自sysvinit-tools包,可以用于转储二进制日志文件到文本格式的文件以便检查。此工具默认在CentOS 6和7系列上可用。utmpdump收集到的信息比先前提到过的工具的输出要更全面,这让它成为一个胜任该工作的很不错的工具。除此之外,utmpdump可以用于修改utmp或wtmp。如果你想要修复二进制日志中的任何损坏条目,它会很有用(LCTT 译注:我怎么觉得这像是做坏事的前奏?)。

Utmpdump的使用及其输出说明

  正如我们之前提到的,这些日志文件,与我们大多数人熟悉的其它日志相比(如/var/log/messages,/var/log/cron,/var/log/maillog),是以二进制格式存储的,因而我们不能使用像less或more这样的文件命令来查看它们的内容。所以,utmpdump的出现拯救了世界。

  为了要显示/var/run/utmp的内容,请运行以下命令:

  代码如下:

  # utmpdump /var/run/utmp

在CentOS系统上查看用户登录记录的方法-centos 系统登录日志
  同样要显示/var/log/wtmp的内容:

  代码如下:

  # utmpdump /var/log/wtmp | tail -15[code]

  在CentOS系统上查看用户登录记录的方法-centos 系统用户

最后,对于/var/log/btmp:

# utmpdump /var/log/btmp


在CentOS系统上查看用户登录记录的方法-centos root用户登录
  正如你所能看到的,三种情况下的输出结果是一样的,除了utmp和btmp的记录是按时间排序,而wtmp的顺序是颠倒的这个原因外(LCTT 译注:此处原文有误,实际上都是按照时间顺序排列的)。

  每个日志行格式化成了多列,说明如下。第一个字段显示了会话识别符,而第二个字段则是PID。第三个字段可以是以下值:--(表示运行等级改变或系统重启),bw(启动守候进程),数字(表示TTY编号),或者字符和数字(表示伪终端)。第四个字段可以为空或用户名、重启或运行级别。第五个字段是主TTY或PTY(伪终端),如果此信息可获得的话。第六个字段是远程主机名(如果是本地登录,该字段为空,运行级别信息除外,它会返回内核版本)。第七个字段是远程系统的IP地址(如果是本地登录,该字段为0.0.0.0)。如果没有提供DNS解析,第六和第七字段会显示相同的信息(远程系统的IP地址)。最后一个(第八)字段指明了该记录创建的日期和时间。

Utmpdump使用样例

  下面提供了一些utmpdump的简单使用情况。

  1、 检查8月18日到9月17日之间某个特定用户(如gacanepa)的登录次数。

  代码如下:

  # utmpdump /var/log/wtmp | grep gacanepa


在CentOS系统上查看用户登录记录的方法-centos 用户无法登录
  如果你需要回顾先前日期的登录信息,你可以检查/var/log下的wtmp-YYYYMMDD(或wtmp.[1...N])和btmp-YYYYMMDD(或btmp.[1...N])文件,这些是由logrotate生成的旧wtmp和btmp的归档文件。

  2、 统计来自IP地址192.168.0.101的登录次数。

  代码如下:

  # utmpdump /var/log/wtmp | grep 192.168.0.101


在CentOS系统上查看用户登录记录的方法-centos 查看系统用户
  3、 显示失败的登录尝试。

  代码如下:

  # utmpdump /var/log/btmp


在CentOS系统上查看用户登录记录的方法-centos 系统登录日志
  在/var/log/btmp输出中,每个日志行都与一个失败的登录尝试相关(如使用不正确的密码,或者一个不存在的用户ID)。上面图片中高亮部分显示了使用不存在的用户ID登录,这警告你有人尝试猜测常用帐号名来闯入系统。这在使用tty1的情况下是个极其严重的问题,因为这意味着某人对你机器上的终端具有访问权限(该检查一下谁拿到了进入你数据中心的钥匙了,也许吧?)

  4、 显示每个用户会话的登入和登出信息

  代码如下:

  # utmpdump /var/log/wtmp


在CentOS系统上查看用户登录记录的方法-centos 系统用户
  在/var/logwtmp中,一次新的登录事件的特征是,第一个字段为‘7’,第三个字段是一个终端编号(或伪终端id),第四个字段为用户名。相关的登出事件会在第一个字段显示‘8’,第二个字段显示与登录一样的PID,而终端编号字段空白。例如,仔细观察上面图片中PID 1463的行。

  在 [Fri Sep 19 11:57:40 2014 ART],TTY1上显示登录提示符。

  在 [Fri Sep 19 12:04:21 2014 ART],用户 root 登入。

  在 [Fri Sep 19 12:07:24 2014 ART],用户 root 登出。

  旁注:第四个字段的LOGIN意味着出现了一次登录到第五字段指定的终端的提示。

  到目前为止,我介绍一些有点琐碎的例子。你可以将utmpdump和其它一些文本处理工具,如awk、sed、grep或cut组合,来产生过滤和加强的输出。

  例如,你可以使用以下命令来列出某个特定用户(如gacanepa)的所有登录事件,并发送输出结果到.csv文件,它可以用像LibreOffice Calc或Microsoft Excel之类的文字或工作簿应用程序打开查看。让我们只显示PID、用户名、IP地址和时间戳:

  代码如下:

  # utmpdump /var/log/wtmp | grep -E "[7].*gacanepa" | awk -v OFS="," 'BEGIN {FS="] "}; {print $2,$4,$7,$8}' | sed -e 's/[//g' -e 's/]//g'


在CentOS系统上查看用户登录记录的方法-centos root用户登录
  就像上面图片中三个高亮区域描绘的那样,过滤逻辑操作是由三个管道步骤组成的。第一步用于查找由用户gacanepa触发的登录事件([7]);第二步和第三部用于选择期望的字段,移除utmpdump输出的方括号并设置输出字段分隔符为逗号。

  当然,如果你想要在以后打开来看,你需要重定向上面的命令输出到文件(添加“>[文件名].csv”到命令后面)。

在CentOS系统上查看用户登录记录的方法-centos 用户无法登录
  在更为复杂的例子中,如果你想要知道在特定时间内哪些用户(在/etc/passwd中列出)没有登录,你可以从/etc/passwd中提取用户名,然后运行grep命令来获取/var/log/wtmp输出中对应用户的列表。就像你看到的那样,有着无限可能。

  在进行总结之前,让我们简要地展示一下utmpdump的另外一种使用情况:修改utmp或wtmp。由于这些都是二进制日志文件,你不能像编辑文件一样来编辑它们。取而代之是,你可以将其内容输出成为文本格式,并修改文本输出内容,然后将修改后的内容导入回二进制日志中。如下:

  代码如下:

  # utmpdump /var/log/utmp > tmp_output

  <使用文本编辑器修改 tmp_output>

  # utmpdump -r tmp_output > /var/log/utmp

  这在你想要移除或修复二进制日志中的任何伪造条目时很有用。

  下面小结一下,utmpdump从utmp、wtmp和btmp日志文件或轮循的旧归档文件来读取详细的登录事件,来补充如who,w,uptime,last,lastb之类的标准工具的不足,这也使得它成为一个很棒的工具。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有 的相关内容,欢迎继续使用右上角搜索按钮进行搜索登录 , 文件 , 用户 , 输出 , 字段 , var , 登出 菜单 远程 , utmp 远程登录日志 centos 查看系统用户、centos 系统登录日志、centos 系统用户、centos root用户登录、centos 用户无法登录,以便于您获取更多的相关知识。

清除登陆系统成功的记录
[root@localhost root]# echo > /var/log/wtmp //此文件默认打开时乱码,可查到ip等信息
[root@localhost root]# last //此时即查不到用户登录信息

清除登陆系统失败的记录
[root@localhost root]# echo > /var/log/btmp //此文件默认打开时乱码,可查到登陆失败信息
[root@localhost root]# lastb //查不到登陆失败信息

清除历史执行命令
[root@localhost root]# history -c //清空历史执行命令
[root@localhost root]# echo > ./.bash_history //或清空用户目录下的这个文件即可

导入空历史记录
[root@localhost root]# vi /root/history //新建记录文件
[root@localhost root]# history -c //清除记录
[root@localhost root]# history -r /root/history.txt //导入记录
[root@localhost root]# history //查询导入结果

example
[root@localhost root]# vi /root/history
[root@localhost root]# history -c
[root@localhost root]# history -r /root/history.txt
[root@localhost root]# history
[root@localhost root]# echo > /var/log/wtmp
[root@localhost root]# last
[root@localhost root]# echo > /var/log/btmp
[root@localhost root]# lastb
[root@localhost root]# history -c
[root@localhost root]# echo > ./.bash_history
[root@localhost root]# history

添加其它自定义的管理员账号


1、添加用户,首先用adduser命令添加一个普通用户,命令如下:

#adduser keaising//添加一个名为keaising的用户
#passwd ljl //修改密码
Changing password for user keaising.
New UNIX password: //在这里输入新密码
Retype new UNIX password: //再次输入新密码
passwd: all authentication tokens updated successfully.

2、赋予root权限
方法一: 修改 /etc/sudoers 文件,找到下面一行,把前面的注释(#)去掉,最终结果为:

## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL

然后修改用户,使其属于root组(wheel),命令如下:

#usermod -g root keaising

修改完毕,现在可以用keaising帐号登录,然后用命令 su – ,即可获得root权限进行操作。

方法二: 修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:

## Allow root to run any commands anywhere
root ALL=(ALL) ALL
keaising ALL=(ALL) ALL

修改完毕,现在可以用keaising帐号登录,然后用命令 su – ,即可获得root权限进行操作。

补充一下:

为了避免每次使用某些命令的时候都需要输入密码,这里需要改一下上面的配置,如:

keaising       ALL=(ALL)       NOPASSWD: ALL

同时,由于普通用户没有配置xxx/sbin这样的路径,所以还需要在.bash_profile文件中增加环境变量:

PATH=$PATH:$HOME/bin:/usr/kerberos/sbin:/usr/local/sbin:/sbin:/usr/sbin 

方法三: 修改 /etc/passwd 文件,找到如下行,把用户ID修改为 0 ,如下所示:

keaising:x:500:500:keaising:/home/keaising:/bin/bash

修改后如下

keaising:x:0:500:keaising:/home/keaising:/bin/bash

保存,用keaising账户登录后,直接获取的就是root帐号的权限。

禁止ROOT用户登录SSH

在下手前请确认有其它管理员权限用户可正常登录,或是重启SSHD后先不要关闭当前连接,尝试用修改后的配置去新建连接,如果发现连接不了,马上在当前连接上修改回来。别整得整个都无法登录了。

编辑/etc/ssh/sshd_config 文件

vi /etc/ssh/sshd_config

把“#PermitRootLogin no”前的#去掉,变成:

PermitRootLogin no

再输入命令重启SSH:

systemctl restart sshd.service

这样ROOT再试图登录时将会出现拒绝访问的错误提示。

login as: root
Access denied
root@xxx's password:

开放ROOT组里其它用户的登录权限(重要)

可以打开文件/etc/ssh/sshd_config,然后在文件的末尾加上这样一行文字,其中user1、user2即为允许通过ssh登录的用户。

AllowUsers user1 user2

    Linux系统默认情况下,是可以通过ssh以root权限登录的。但出于安全考虑,这样的权限是不合适的,因为黑客可能通过暴力破解你的root密码,然后进入你的系统。
    为了保证服务器安全,几乎所有的服务器都禁止了超级用户直接登录系统,而是通过普通用户登录系统,然后再通过su命令或者sudo命令切换到超级用户下,执行一些需要超级权限的工作。而不是一直以root用户在系统中横冲直撞,因为说不定什么时候你手一抖,就进行了一些危险性的操作。
    那么如何禁止以root通过ssh登录到系统呢?
    是否允许root用户通过ssh登录,是通过操作sshd_config配置文件来实现的。当一个ssh连接建立时,操作系统会检查相关文件的配置信息,从而决定是否接受该连接。
    因此,为禁止root用户通过ssh登录,我们先找到 /etc/ssh/sshd_config文件,通过编辑器打开该文件。比如,通过vi打开该文件:
    # vi /etc/ssh/sshd_config
    在文件中找到下面一行文字:
    #PermitRootLogin no
    去掉该行前面的#号,使其成为下面这样:
    PermitRootLogin no
    接下来,在shell中输入以下命令来重启ssh服务
    # service sshd restart
    这样当你再试图以root登录系统时,就会出现“拒绝访问”的错误提示信息:
    login as: root
    Access denied
    [email protected]'s password:
    如果想要恢复root用户通过ssh登录的权限,我们只要将开始的改变改回去就行。
    如果你的系统里用户众多,想允许一部分用户通过ssh登录,而其他用户则禁止通过ssh登录。可以打开文件/etc/ssh/sshd_config,然后在文件的末尾加上这样一行文字,其中user1、user2即为允许通过ssh登录的用户。
    AllowUsers user1 user2

更改SSH端口

vi /etc/ssh/ssh_congif

配置如下:

Port 12345 #SSH尽量设置大一点
PermitRootLogin no #禁止root登录
X11Forwarding no #禁止X11转发
PermitEmptyPasswords no #禁止空密码登录
AllowUsers cklx #设置刚才创建的cklx可以登录

重启SSH

/etc/init.d/sshd restart
云服务器 ECS Linux CentOS 7 下重启服务不再通过 service 操作,而是通过 systemctl 操作。
查看:systemctl status sshd.service
启动:systemctl start sshd.service
重启:systemctl restart sshd.service
自启:systemctl enable sshd.service

限制SU命令

vi /etc/pam.d/su

添加两行:

auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=isd

执行

usermod -G10 cklx

这样就只有iw3c用户可以使用su命令了.

禁止PING

防止别人Ping通自己的服务器是一个很不错的安全设置,运行命令

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

这样别人Ping自己的服务器时就根本无法Ping通了

启用防火墙

您可以通过设置防火墙来关闭一些不必要的端口,而每一个端口的关闭,就意味着您的服务器更加安全一分
首先清空原有防火墙规则

iptables -F
iptables -X
iptables -Z

配置防火墙

iptables -A INPUT -p tcp -m multiport --dport 12345,80,21,22 -j ACCEPT #允许SSH端口12345、WEB端口80、FTP端口21、22开放
/etc/init.d/iptables save #保存配置规则
service iptables restart #重启防火墙

用DDOSdeflate抵御DDOS攻击

DDOS deflate并不能完全防御DDOS攻击,这东西是专业的硬件防火墙来干的事情,DDOS deflate只能稍微抵御一点点,但一点点也是防护不是?

http://www.inetbase.com/scripts/ddos/install.sh
chmod +x install.sh
./install.sh

这样DDOS deflate就安装好了,剩下的只需要配置一下

vi /usr/local/ddos/ddos.conf

一般来说只需要修改几个配置

APF_BAN=0 #默认为1,改为0
EMAIL_TO="admin@admin" #这里更改为您的邮箱,被攻击时会有邮件发送给我们

可选:删除不使用的用户和组

Linux默认自带了一些用户和用户组,而这些用户和用户组在平时我们根本使用不到,所以,删除吧!

userdel adm
userdel lp
userdel sync
userdel shutdown
userdel halt
userdel news
userdel uucp
userdel operator
userdel games
userdel gopher
userdel ftp #若您需要使用匿名FTP请保留此用户,否则删除
groupdel adm
groupdel lp
groupdel news
groupdel uucp
groupdel games
groupdel dip
groupdel pppusers
Responses