【linux】记一次linux(centos)被暴力破解事件,从修改linux默认登录端口为普通账号授权到linux基础操作命令


第一次直面黑客攻击 有点小兴奋 反手就总结了一下知识点 并写了这篇博客。

本教程已在 centos7.6, centos8不同版本中实验

/var/log/btmp 记录登录失败信息
/var/log/secure 一般用来记录安全相关的,授权或登录信息。

如果上述两个文件很大,或者大小一直在增长,说明有人在 爆力破解密码。

基本命令及教程:

查看阶段

列出登入系统失败的用户相关信息

lastb 

查找恶意登录的前十个IP

sudo lastb | awk '{ print $3}' | awk '{++S[$NF]} END {for(a in S) print a, S[a]}' | sort -rk2 |head

统计登录

lastb | awk '{ print $3}' | sort | uniq -c | sort -n

需要注意的是,一般被暴力破解 对方都会准备大量的代理ip 这时优先的是更改默认登录端口,封禁ip是下策。

处理阶段

处理阶段-更改默认登录端口

第一步 输入命令:

vim /etc/ssh/sshd_config

第二步:

tips: 按i 键进入编辑模式, 按ESC回到查看模式 , 再按shift+ : 进入命令模式 输入wq (保存退出)
找到Port 22,把注释放开 我们先保留22端口,并在下面另起一行 新增一个Port 例如Port 122

第三步 重启ssh服务:

低版本centos使用:

 service sshd restart

高版本centos使用:

 systemctl restart sshd.service

如果此时用的122端口登录,很可能连接会马上被断开,所以这也是为什么Port 22不要马上修改,而是新增一个

第四步: 防火墙开放新端口:

新端口我们还是以122端口举例

查看防火墙状态

systemctl status firewalld

如果是dead 需要启动防火墙

systemctl start firewalld

查看122端口是否开放

firewall-cmd --query-port=122/tcp

开放122端口 (注意 这只是防火墙的端口开放 ; 在云服务器中 第四步不能省略)

firewall-cmd --add-port=122/tcp --permanent

如果不小心输错了 需要关闭防火墙则把add替换成remove

重新加载防火墙

firewall-cmd --reload

重启防火墙

systemctl restart firewalld

第五步:云服务器处理

我们还需要在云服务的安全组(腾讯云轻量级服务器中的防火墙)中放开端口122,如果ssh软件122登录成功,
我们再回到第一、二步把22端口删除。

处理阶段-新增账户并禁止root远程登录

新增用户

adduser yourName

设置密码

passwd yourName
输入密码,确认密码
这样就得到一个新账号:yourName # yourName 替换成你的账号名 尽量保证自定义账号及密码的复杂度

禁止root远程登录:

第一步:(没错 就是上面更改登录端口的这个配置文件)
vim /etc/ssh/sshd_config
第二步: 找到PermitRootLogin yes
把yes改成no

第三步: 重启shh服务
低版本centos使用: service sshd restart
高版本centos使用: systemctl restart sshd.service

这样我们通过我们自己的账户进行远程登录,登录完成再通过 su - root 进行切换。

这里会有一个问题,我们平常复制文件到linux系统上 一般会利用图形化界面远程传输 如FileZilla,
我们就新账号权限是不够的,且在该软件中不能切换root用户,这里有两种思路:

  1. 如果就只想使用root账号来操作 不想授权给其它账号 且又要保证安全,
    那就在需要使用的时候 PermitRootLogin改回 yes ,用完再改回 no

  2. 我们也可以给我们自定义账号进行授权。

授权步骤:
a. 我们先用自定义的账号登录 再切回root :
命令: su -root

b. 查找sudoers文件
(注意whereis只能用于查找二进制文件、源代码文件和man手册页 通俗点可以理解为某些系统自带文件):
命令: whereis sudoers

c. 一般都是在 /etc/sudoers 目录下 修改配置文件:
命令: ls -l /etc/sudoers #查看原来的权限 并把它记在心里 记不住就备份
命令: vim /etc/sudoers
找到以下内容:

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

在root下方新起一行
yourName ALL=(ALL) ALL

这个文件是只读的,我们可以在命令模式下 强制保存并退出
强制保存退出命令: wq!

或者先使用命令修改权限:
chmod 777 /etc/sudoers

在root下方新起一行
yourName ALL=(ALL) ALL

保存退出命令: wq
再将权限改回
chmod 440 /etc/sudoers

当然,chmod 777 这个操作是将所有权限授予给yourName 账户, 具体的授权可以自己组合

tips:
r : 4 读
w : 2 写
x : 1 执行
例如 -r–r----- 就是440 ,-rw------- 就是600

第一个数字:表示当前文件的拥有者的权限

第二个数字:表示当前文件的所属组(同组用户)权限

第三个数字:表示当前文件的组外权限

假设我们想用我们自己新增的账号 来代替root账户 我们还得修改用户的所属组

查看用户所属组命令

查看当前登录用户所属组

groups

查看 yourName的所属组

groups yourName

更改用户所属组

将 yourName加入到root所属组

usermod -g root yourName 

注意上述才是更改用户所属组 区分于文件的所有者、所属组更改命令
冒号前表示文件所有者 冒号后表示所有组

chown -R yourName:root 文件名

举个例子 我们在根目录下 用root账号创建一个文件夹后,想使用我们自定义账号来操作这个文件夹,
那我们就需要将自定义账号加入到root组里面 并修改文件夹的所有者 所有组,否则filezilla工具文件传输时会无法启动传输(权限问题)

封禁ip阶段

虽说是下策 , 封禁总比没封禁好 , 或许对方代理ip不多呢

封禁单个ip

iptables -I INPUT -s 211.1.0.0 -j DROP

封禁ip段 0/16 是固定写法,封禁211.1 段, 不是211.1.0.0 至211.1.0.16的含义

iptables -I INPUT -s 211.1.0.0/16 -j DROP

封禁整个ip段

iptables -I INPUT -s 211.0.0.0/8 -j DROP

封禁多个ip段

iptables -I INPUT -s 61.37.80.0/24 -j DROP
iptables -I INPUT -s 61.37.81.0/24 -j DROP

解封ip

iptables -D INPUT -s 211.1.0.0 -j DROP

全部解封

iptables -F

备份iptables 至tmp目录 (也可以用图形界面操作)

cp /etc/sysconfig/iptables /var/tmp

只允许访问服务器xxx.xxx.xx.x 的80端口

iptables -I INPUT -p TCP –dport 80 -j DROP
iptables -I INPUT -s xxx.xxx.xx.x -p TCP –dport 80 -j ACCEPT
service iptables restart

只允许某个ip 111.111.1.1 访问服务器xxx.xxx.xx.x的80端口

iptables -A FORWARD -s 111.111.1.1 -d xxx.xxx.xx.x -p tcp -m tcp –dport 80 -j ACCEPT
iptables -A FORWARD -d xxx.xxx.xx.x -p tcp -m tcp –dport 80 -j DROP
service iptables restart

博主自用脚本

#! /bin/bash

# 自动封禁脚本
Green="\033[32m"
Font="\033[0m"

#root权限
root_need(){
    if [[ $EUID -ne 0 ]]; then
        echo "ip封禁必须在root权限下执行" 1>&2
        exit 1
    fi
}

#封禁ip
block_ipset(){
check_ipset
#添加ipset规则
echo -e "${Green}超过几次登陆失败ip需要被封禁? ${Font}"

read -p "请输入次数(输入正数):" IPCOUNT

  if [[ IPCOUNT -lt 1 ]]; then
        echo "恶意输入可能导致系统出问题 请严格按照说明输入" 1>&2
        exit 1
   fi


echo -e "${Green}正在拉取历史登录ip"
# 先删除last旧文件-------------
rm -rf /app/last-file

# 查找所有成功登陆过的ip 并写入文件
last |gawk '{ print $3}'| awk '{++S[$NF]} END {for (a in S) if(length(a""S[a]) > 10){ print a}else{continue;}}' |uniq -u |tr -d "a-zA-Z" | tr -s '\n' |sort > /app/last-file

# 先删除lastb旧文件------------
rm -rf /app/lastb-file

# 查找所有登陆过=失败的ip 并写入文件
lastb |gawk '{ print $3}'| awk '{++S[$NF]} END {for (a in S) if(length(a""S[a]) > 10 && S[a]>= "$IPCOUNT"){ print a}else{continue;}}' |uniq -u |tr -d "a-zA-Z" | tr -s '\n' |sort > /app/lastb-file



#检查文件是否生成
    if [ -f "/app/last-file" ]; then
	 echo -e "${Green}已读取登陆成功ip!${Font}"
    else
	 echo -e "${Green}读取失败,登陆成功ip文件未生成 请检查你的文件/文件夹权限 使用chmod命令修改!${Font}"
    exit 1
    fi

    if [ -f "/app/lastb-file" ]; then
	 echo -e "${Green}已读取登陆失败ip!${Font}"
    else
	 echo -e "${Green}读取失败,登陆失败ip文件未生成 请检查你的文件/文件夹权限 使用chmod命令修改!${Font}"
    exit 1
    fi
#创建规则
ipset -N $(date "+%Y-%m-%d-%H:%M") hash:net
# 显示失败登陆的ip文件  且过滤登陆成功过的ip
comm -1 -3 /app/last-file  /app/lastb-file > /app/lastb-only-file

for i in $(cat /app/lastb-only-file ); do ipset -A $(date "+%Y-%m-%d-%H:%M")  $i; done

echo -e "${Green}规则添加成功,即将开始封禁ip!${Font}"
#开始封禁

iptables -I INPUT -p tcp -m set --match-set "$(date "+%Y-%m-%d-%H:%M")" src -j DROP
iptables -I INPUT -p udp -m set --match-set "$(date "+%Y-%m-%d-%H:%M")" src -j DROP

echo -e "${Green}封禁结束!${Font}"
}

#解封ip
unblock_ipset(){
echo -e "${Green}请输入日期 ${Font}"
read -p "请输入国家拼音(文件名 不含后缀):" $(date +%Y-%m-%d %H:%M)
#判断是否有此国家的规则
lookuplist=`ipset list | grep "Name:" | grep "$(date +%Y-%m-%d %H:%M)"`
    if [ -n "$lookuplist" ]; then
        iptables -D INPUT -p tcp -m set --match-set "$(date +%Y-%m-%d %H:%M)" src -j DROP
	iptables -D INPUT -p udp -m set --match-set "$(date +%Y-%m-%d %H:%M)" src -j DROP
	ipset destroy $GEOIP
	echo -e "${Green}解封成功,并删除其对应的规则!${Font}"
    else
	echo -e "${Green}解封失败,请确认你所输入的日期是否在封禁列表内!${Font}"
	exit 1
    fi
}

#查看封禁列表
block_list(){
	iptables -L | grep match-set
}

#检查系统版本
check_release(){
    if [ -f /etc/redhat-release ]; then
        release="centos"
    elif cat /etc/issue | grep -Eqi "debian"; then
        release="debian"
    elif cat /etc/issue | grep -Eqi "ubuntu"; then
        release="ubuntu"
    elif cat /etc/issue | grep -Eqi "centos|red hat|redhat"; then
        release="centos"
    elif cat /proc/version | grep -Eqi "debian"; then
        release="debian"
    elif cat /proc/version | grep -Eqi "ubuntu"; then
        release="ubuntu"
    elif cat /proc/version | grep -Eqi "centos|red hat|redhat"; then
        release="centos"
    fi
}

#检查ipset是否安装
check_ipset(){
    if [ -f /sbin/ipset ]; then
        echo -e "${Green}检测到ipset已存在,并跳过安装步骤!${Font}"
    elif [ "${release}" == "centos" ]; then
        yum -y install ipset
    else
        apt-get -y install ipset
    fi
}

#开始菜单
main(){
root_need
check_release
clear
echo -e "———————————————————————————————————————"
echo -e "${Green}=============================author: 孟秋与你================================== ${Font}"
echo -e "${Green}csdn首页: https://blog.csdn.net/qq_36268103 ${Font}"
echo -e "${Green}tips 1: 不用担心会封禁本机ip 会将成功登陆过的设备视为您的设备 过滤封禁 ${Font}"
echo -e "${Green}tips 2: 如果您的设备长期一直被暴力破解 文件处理可能会较慢 请耐心等待 ${Font}"
echo -e "${Green}tips 3: 若修改脚本代码 请确保你对shell语言以及linux网络有基础知识 否则随意修改很可能导致登陆不上系统 ${Font}"
echo -e "${Green}tips 4: 如果你熟悉shell以及linux网络 自己改写本脚本但不幸出现误封ip 需要更换ip或设备 登陆你的linux 使用该脚本查找封禁列表 并解封${Font}"
echo -e "${Green}tips 5: 更多防暴力破解 保障linux网络安全教程查看博客 https://blog.csdn.net/qq_36268103/article/details/120141989 ${Font}"
echo -e "———————————————————————————————————————"
echo -e "${Green}Linux 查找频繁登陆失败ip并封禁  大幅度降低被暴力破解的可能性${Font}"
echo -e "${Green}1、封禁ip${Font}"
echo -e "${Green}2、解封iP${Font}"
echo -e "${Green}3、查看封禁列表${Font}"
echo -e "———————————————————————————————————————"
read -p "请输入数字 [1-3]:" num
case "$num" in
    1)
    block_ipset
    ;;
    2)
    unblock_ipset
    ;;
    3)
    block_list
    ;;
    *)
    clear
    echo -e "${Green}请输入正确数字 [1-3]${Font}"
    sleep 2s
    main
    ;;
    esac
}
main


其它辅助分析命令

查看磁盘使用情况

df -h

查看内存使用情况

free -h

查看进程

ps -ef

tips:
ps -ef得到到是
UID(用户名)
PID (进程id)
PPID(父进程id)
C(CPU占用率)
STIME(开始时间 )
TTY(终端设备)
TIME(持续时间)
CMD(命令名)

vim 翻页

ctrl f (向下翻页 forward的意思)
ctrl b (向上翻页back的意思)
ctrl u (向上翻半页 up)
ctrl d (向下翻半页 down)

vim 查询

/ enter
(按斜杠后 再按回车 输入要查询的字符)
查询状态下:
n 下一个
N 上一个

查看进程cpu占用情况

top -p pid

查看当前路径

pwd

借助工具查看当前Linux所有登陆用户

下载whowatch 会比较慢 耐心等待

yum whowatch

使用命令

whowatch

使用帮助手册

man whowatch

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孟秋与你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值