SSH安全设置

news2024/10/6 0:37:43

 今天发现自己的公有云服务器被攻击了
在这里插入图片描述
然后查看了登录日志,如上图

ls -sh /var/log/secure
vim /var/log/secure

然后增加了安全相关的设置
具体可以从以下方面增加安全性:

  1. 修改默认SSH端口
  2. 公有云修改安全组策略及防火墙端口
  3. 设置登录失败次数锁定用户及限制多久之后才能登录
  4. 限制IP登录
  5. 设置失败自动将IP加入SSH黑名单
  6. 禁用ROOT登录
  7. 禁止ROOT用户直接登录
  8. 禁止国外IP

考虑自己有时候要登陆,目前我采用了方法1、2。
先修改公有云的安全组策略,增加一个端口Port 54321
在这里插入图片描述
开放防火墙端口54321

firewall-cmd --zone=public --add-port=54321/tcp --permanent
firewall-cmd --reload

修改默认SSH端口22改为端口54321。

vim   /etc/ssh/sshd_config

在这里插入图片描述
重启sshd

systemctl restart sshd

删掉公有云安全组中的22端口
移除防火墙22端口

firewall-cmd --zone=public --remove-port=22/tcp --permanent

改完之后,发现没有人攻击了。等下次被攻击再学着弄自动IP封锁。

改完之后,下午又有人攻击了,然后找了半天方案,找到一个脚本确实能把攻击的IP和攻击次数列出来,放到/etc/hosts.deny文件中。脚本如下:

cat /shell_script/hosts_deny.sh
#!/bin/bash
#Host.deny Shell Script
#2013-08-24
cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2 "=" $1;}' > /tmp/black_ip.txt
DEFINE=10
for i in `cat /tmp/black_ip.txt`
do
        IP=`echo $i | awk -F= '{print $1}'`
        NUM=`echo $i | awk -F= '{print $2}'`
        if [ $NUM -gt $DEFINE ]
        then
                grep $IP /etc/hosts.deny > /dev/null
                if [ $? -gt 0 ]
                then
                        echo "sshd:$IP:deny" >> /etc/hosts.deny
                fi
        fi
done

crontab -e
# 将下面脚本加进去, 定时检测.
# */1 * * * * sh /shell_script/hosts_deny.sh

但是该在centos7下一直报错如下:
在这里插入图片描述
提示是缺少模块,而且原本/etc/目录下也没有hosts.deny文件,因此干脆换种方案,即找了好久的fail2ban和denyhosts。这里denyhosts是0几年的,要下载文件并且安装python,所以直接就用fail2ban了。这个简直不要太好用。

使用fail2ban+firewalld防护

参考:Fail2ban + firewalld 防护doss攻击

安装fail2ban

fail2ban可以监控系统日志,并且根据一定规则匹配异常IP后使用Firewalld将其屏蔽,尤其是针对一些爆破/扫描等非常有效。

#CentOS内置源并未包含fail2ban,需要先安装epel源
yum -y install epel-release
#安装fial2ban
yum -y install fail2ban

安装成功后fail2ban配置文件位于/etc/fail2ban,其中jail.conf为主配置文件,相关的匹配规则位于filter.d目录,其它目录/文件一般很少用到,如果需要详细了解可自行搜索。

配置规则

新建jail.local来覆盖fail2ban的一些默认规则:

#新建配置
vi /etc/fail2ban/jail.local
#默认配置
[DEFAULT]
ignoreip = 127.0.0.1/8
bantime  = 86400
findtime = 600
maxretry = 5
#这里banaction必须用firewallcmd-ipset,这是fiewalll支持的关键,如果是用Iptables请不要这样填写
banaction = firewallcmd-ipset
action = %(action_mwl)s

参数说明:

ignoreip:IP白名单,白名单中的IP不会屏蔽,可填写多个以(,)分隔
bantime:屏蔽时间,单位为秒(s)
findtime:时间范围
maxretry:最大次数
banaction:屏蔽IP所使用的方法,上面使用firewalld屏蔽端口
防止SSH爆破

如果您还在使用默认SSH端口(22),可能每天都会被扫描,我们可以修改端口尽量避免被扫,参考: https://www.moerats.com/archives/394/ ,或者可以使用fail2ban将恶意IP屏蔽。

继续修改jail.local这个配置文件,在后面追加如下内容:

[sshd]
enabled = true
filter  = sshd
port    = 22
action = %(action_mwl)s
logpath = /var/log/secure

参数说明:

[sshd]:名称,可以随便填写
filter:规则名称,必须填写位于filter.d目录里面的规则,sshd是fail2ban内置规则
port:对应的端口
action:采取的行动
logpath:需要监视的日志路径

完整版:

[DEFAULT]
ignoreip = 127.0.0.1/8
bantime  = 86400
findtime = 600
maxretry = 5
banaction = firewallcmd-ipset
action = %(action_mwl)s
 
[sshd]
enabled = true
filter  = sshd
port    = 22
action = %(action_mwl)s
logpath = /var/log/secure

禁止ROOT用户登录

最近发现破解密码的人很猖獗,已经做了这么多限制,还是每天几百几千的穷举破解,于是我想直接禁止ROOT用户登录。注意,要提前配置好你自己的其他的用户有比较强的密码强度,并且给了sudo权限。
处理方式如下

# 增加用户
useradd myuser
# 配置密码. 注意尽量用高强度密码才不会被轻易破解
passwd myuser
# 输入密码确认密码

# 这里配置你新增的用户有sodu权限
# 切换到root用户,
su - root
# 编辑/etc/sudoers
vim /etc/sudoers
# 找到## Allow root to run any commands anywhere
# 找到root ALL=(ALL)这一行, 然后加入你刚才新建的用户
myuser ALL=(ALL) ALL

# 请先验证刚才新建的myuser用户是否具有登录权限及sudo操作权限, 如果有,才可以进行下一步
vim /etc/passwd
# 找到root那行, 修改后面的登录脚本/bin/bash为/sbin/nologin即可
# 至此, 配置禁用ROOT登录完毕.

禁止ROOT用户直接登录

# 跟上面一样, 要新建用户, 密码强度要高
useradd myuser
passwd myuser

# 配置不允许root直接登录
vim /etc/ssh/sshd_config
# 禁止用户登录, 找到#PermitRootLogin yes,将末尾的yes改为no,去掉前面的#注释,wq!保存即可。PermitRootLogin no
# 重启sshd服务
systemctl restart sshd
# 再次登录尝试,发现不然ROOT直接登录,然后尝试先登录myuser用户,再登录root用户,可以~

# 至此,centos账号相当稳妥啦~~

禁止ping

服务器攻击一般是从ping开始的,黑客攻击网站前会先ping下服务器看其是否在线,如果服务器禁止ping,可以一定程度的减少服务器被攻击次数。Centos系统默认是允许ping的,可使用root账户修改Centos系统内核参数永久禁止ping。

vim /etc/sysctl.conf

在文件末尾加上一行:

net.ipv4.icmp_echo_ignore_all=1

保存后执行使配置生效

sysctl -p

配置生效后,ping服务器收不到任何响应,ping被永久禁止。如果需要允许ping,修改该文件去掉net.ipv4.icmp_echo_ignore_all=1这行或者修改为net.ipv4.icmp_echo_ignore_all=0即可。

禁止国外IP(请不要使用这个方法,我测试后直接阿里云那台机器登不上了,仅供参考思路。慎用,用之前请自行测试,因为要排除掉自身IP和内网IP,但是公有云无法确定内网IP段是172.x.x.x还是10.x.x.x或者其他)

获取国内IP网段

wget -q --timeout=60 -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /root/china_ip.txt

编辑脚本/root/allcn.sh,内容如下

mmode=$1
CNIP="/root/china_ip.txt"
gen_iplist() {
        cat <<-EOF
                $(cat ${CNIP:=/dev/null} 2>/dev/null)
EOF
}

flush_r() {
iptables  -F ALLCNRULE 2>/dev/null
iptables -D INPUT -p tcp -j ALLCNRULE 2>/dev/null
iptables  -X ALLCNRULE 2>/dev/null
ipset -X allcn 2>/dev/null
}

mstart() {
ipset create allcn hash:net 2>/dev/null
ipset -! -R <<-EOF 
$(gen_iplist | sed -e "s/^/add allcn /")
EOF

iptables -N ALLCNRULE 
iptables -I INPUT -p tcp -j ALLCNRULE 
iptables -A ALLCNRULE -s 127.0.0.0/8 -j RETURN
iptables -A ALLCNRULE -s 172.0.0.0/8 -j RETURN
iptables -A ALLCNRULE -s 192.0.0.0/8 -j RETURN
iptables -A ALLCNRULE -s 10.0.0.0/8 -j RETURN
iptables -A ALLCNRULE -s 169.254.0.0/16 -j RETURN
iptables -A ALLCNRULE -s 224.0.0.0/4 -j RETURN
iptables -A ALLCNRULE -s 255.255.255.255 -j RETURN
iptables -A ALLCNRULE -m set --match-set allcn  src -j RETURN 
iptables -A ALLCNRULE -p tcp -j DROP 
}

if [ "$mmode" == "stop" ] ;then
flush_r
exit 0
fi

flush_r
sleep 1
mstart

修改脚本执行权限

chmod +x  allcn.sh

屏蔽国外IP

/root/allcn.sh

停止屏蔽国外IP

/root/allcn.sh stop

这是几天后的效果,不仅来攻击我的人少了,而且攻击我的人直接自动被BAN了,哈哈哈~~
在这里插入图片描述
在这里插入图片描述

参考:

  1. 修改ssh默认的22端口号
  2. CentOS7设置ssh服务以及修改默认22端口
  3. linux防火墙常用命令
  4. Centos下限制SSH登录次数详解
  5. ssh 安全配置 锁定次数
  6. Centos下限制SSH登录次数详解
  7. 防止服务器被外网的IP地址ssh连接或扫描试探等
  8. centos7添加ip黑名单禁止某个ip访问
  9. Fail2ban + firewalld 防护doss攻击
  10. Centos7 安装fail2ban基于iptables
  11. CentOS 7 使用 denyhosts 防范暴力破解
  12. Centos禁止ping的设置方法
  13. 如何在Linux云服务器上屏蔽国外IP访问?
  14. 【开发日常】CentOS7添加超级用户权限
  15. CentOS配置禁止root用户直接登录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1602386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[dvwa] sql injection(Blind)

blind 0x01 low 1’ and length(version()) 6 # syntax: substr(string , from<start from 1>, cut length) 1’ and substr(version(),1,1) ‘5’ # 1’ and substr(version(),2,1) ‘.’ # 1’ and substr(version(),3,1) ‘7’ # 1’ and substr(version(),4,…

废液收集系统物联网远程监控解决方案

废液收集系统物联网远程监控解决方案 在面对日益严峻的环保压力和严格的法律法规要求下&#xff0c;构建一套高效、智能的废液收集系统物联网远程监控解决方案显得尤为重要。该方案旨在通过深度融合物联网技术、云计算、大数据分析等先进手段&#xff0c;实现对废液收集系统的…

麻将的玩法及技巧

麻将是一种古老而受欢迎的博弈游戏&#xff0c;其玩法和技巧多种多样&#xff0c;因地区和玩家习惯的不同而有所差异。以下是一些通用的麻将玩法和技巧&#xff1a; 一、玩法 洗牌与码牌&#xff1a;玩家双手搓动牌&#xff0c;使牌均匀而无序地运动&#xff0c;称为“洗牌”。…

前端常见面试题:HTML+CSS

1. title与h1的区别、b与strong的区别、i与em的区别&#xff1f; title与h1的区别&#xff1a; title标签用于定义整个HTML文档的标题&#xff0c;它显示在浏览器窗口的标题栏或者标签页上。每个HTML文档只应该有一个title标签&#xff0c;它对搜索引擎优化&#xff08;SEO&a…

前端开发攻略---实现与ChatGPT同款光标闪烁打字效果。

1、演示 2、实现代码 <!DOCTYPE html> <html lang"ch-ZN"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widt…

后端获取请求体Body,将请求体进行解密放回Request请求,并能通过@RequestBody获取

目前系统发送的post和put请求都是没有加密数据。客户需要将请求体加密。而系统已经基本开发完成&#xff0c;不可能一个一个去修改发送的请求。就需要在发送请求时候在拦截器中将body进行加密。并且在后端进行请求过滤解密&#xff0c;并且能通过RequestBody继续获取对象。 1.…

【STM32HAL库学习】SysTick延时

一、SysTick简单介绍 SysTick是一个包含在内核里面的计数器&#xff0c;是一个24位递减的计数器 二、SysTick寄存器 三、工作原理和延时实现 上图已经很明显了&#xff0c;操作流程就是 先选择时钟源和分频系数在写入递减计数器和设置重装载值在等待标志位值1开始下一次递减计…

实现 Table 的增加和删除,不依赖后端数据回显

需求 删除前 删除后 分析 首先写一个 Table <a-card style"width:100%"><template#extra><a-button type"text" click"addSelectItem" style"margin-right: 5px">添加</a-button><a-button type&quo…

Leetcode刷题之合并两个有序数组

Leetcode刷题之合并两个有序数组 一、题目描述二、题目解析 一、题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数…

C 排序算法

冒泡排序 冒泡排序&#xff08;英语&#xff1a;Bubble Sort&#xff09;是一种简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序&#xff08;如从大到小、首字母从A到Z&#xff09;错误就把他们交换过来。 过程演示&…

java中使用RSA非对称加解密

RSA加密算法是一种非对称加密算法 RSA是一对密钥。分别是公钥和私钥,这个公钥和私钥其实就是一组数字! 其二进制位长度可以是1024位或者2048位.长度越长其加密强度越大, 目前为止公之于众的能破解的最大长度为768位密钥,只要高于768位,相对就比较安全. RSA加密的方式 使用公钥…

创建一个javascript公共方法的npm包,js-tool-big-box,发布到npm上,一劳永逸

前端javascript的公共方法太多了&#xff0c;时间日期的&#xff0c;数值的&#xff0c;字符串的&#xff0c;搞复制的&#xff0c;搞网络请求的&#xff0c;搞数据转换的&#xff0c;几乎就是每个新项目&#xff0c;有的拷一拷&#xff0c;没有的继续写&#xff0c;放个utils目…

【汇智知了堂新课上线】——AI互联网营销师培训,开启你的智能营销之旅!

亲爱的朋友们&#xff0c;汇智知了堂又为大家带来了一个重磅新品——AI互联网营销师培训课程&#xff01;在这个信息化、智能化的时代&#xff0c;掌握AI营销技能已经成为职场必备&#xff0c;而我们正是你实现这一目标的不二之选&#xff01; 我们的AI互联网营销师培训服务&a…

Latent Guard、Tokenization in LLM、​3D Human Scan、FusionPortableV2

本文首发于公众号&#xff1a;机器感知 https://mp.weixin.qq.com/s/HlVV3VnqocBI4XBOT6RFHg A Multi-Level Framework for Accelerating Training Transformer Models The fast growing capabilities of large-scale deep learning models, such as Bert, GPT and ViT, are r…

WIN7用上最新版Chrome

1.下载WIN10最新版Chrome的离线安装包 谷歌浏览器 Chrome 最新版离线安装包下载地址 v123.0.6312.123 - 每日自动更新 | 异次元软件 文件名称&#xff1a;123.0.6312.123_chrome_installer.exe。 123.0.6312.123_chrome_installer.exe 文件右键解压缩得到 chrome.7z&#x…

为什么用云渲染农场?3D云渲染农场助力影视动画行业发展

​计算机图形技术的进步使得3D渲染成为多个产业发展的重要推动力。设计师和艺术家利用这项技术将创意实现&#xff0c;创造出震撼的视觉作品。但是&#xff0c;高质量的渲染需要大量的计算资源。云渲染农场通过提供这些资源&#xff0c;有效提高了渲染的速度和效率&#xff0c;…

【数据挖掘】实验8:分类与预测建模

实验8&#xff1a;分类与预测建模 一&#xff1a;实验目的与要求 1&#xff1a;学习和掌握回归分析、决策树、人工神经网络、KNN算法、朴素贝叶斯分类等机器学习算法在R语言中的应用。 2&#xff1a;了解其他分类与预测算法函数。 3&#xff1a;学习和掌握分类与预测算法的评…

【VTKExamples::Meshes】第十二期 QuadricDecimation

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例QuadricDecimation,并解析接口vtkQuadricDecimation,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(…

服务器raid卡,守护数据安全,赋能新质生产力

RAID卡&#xff0c;全称为独立冗余磁盘阵列卡&#xff0c;在数据中心、服务器、网络存储等领域得到广泛应用&#xff0c;RAID卡通过不同的RAID级别实现数据容错和冗余。例如&#xff0c;RAID 0主要适用于需要高速数据传输但对数据安全要求不高的场景&#xff0c;如数据的缓存&a…

C++ 一些编程问题解决 (C++ some programming error solutions)

电脑配置&#xff1a;window10, 64位操作系统&#xff0c;基于x64的处理器&#xff0c;Microsoft Visual Studio Community 2019 Version 16.4.5 问题1&#xff1a;Unhandled exception at 0x00007FFDB39AA839 in TesseractLACadd1.exe: Microsoft C exception: boost::filesy…