SSH安全设置

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

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用户直接登录

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

亚马逊CloudFront使用体验

前言 首先在体验CloudFront之前&#xff0c;先介绍一下什么是CDN&#xff0c;以及CDN的基本原理。 CDN是Content Delivery Network&#xff08;内容分发网络&#xff09;的缩写&#xff0c;是一种利用分布式节点技术&#xff0c;在全球部署服务器&#xff0c;即时地将网站、应…

LSTM 循环神经网络原理深度解读与网络结构精细剖析

长短期记忆网络&#xff08;Long Short-Term Memory, LSTM&#xff09;是一种特殊的循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;&#xff0c;设计用于解决长期依赖问题&#xff0c;特别是在处理时间序列数据时。 循环神经网络&#xff08;RNN&#xf…

每日一VUE——组件的生命周期

文章目录 VUE组件的生命周期生命周期钩子函数实例创建Teleport VUE组件的生命周期 组件生命周期 组件从创建到挂载、更新、到销毁的一系列过程被称为组件的生命周期。 生命周期函数 在组件的各个生命周期节点执行的函数&#xff0c;为生命周期钩子函数。 生命周期钩子函数…

RT-thread信号量与互斥量

1,信号量 信号量是一种轻型的用于解决线程间同步问题的内核对象,线程可以获取或释放它,从而达到同步或互斥的目的。理解资源计数适合于线程间工作处理速度不匹配的场合;信号量在大于0时才能获取,在中断、线程中均可释放信号量。 为了体现使用信号量来达到线程间的同步,…

【STM32】西南交大嵌入式系统设计实验:环境配置

把走过的坑记录一下&#xff0c;希望后来人避坑 No ST-Link device detected.问题解决 如果跟着指导书出现这个问题&#xff1a; 直接跳过这一步不用再更新固件&#xff0c;后面直接创建项目写程序就行了。 在keil里配置成用DAP_link即可。 详细的可以看这篇文章&#xff1a…

NumPy基础及取值操作

文章目录 第1关&#xff1a;ndarray对象第2关&#xff1a;形状操作第3关&#xff1a;基础操作第4关&#xff1a;随机数生成第5关&#xff1a;索引与切片 第1关&#xff1a;ndarray对象 编程要求 根据提示&#xff0c;在右侧编辑器Begin-End中填充代码&#xff0c;根据测试用例…

Oracle 数据库 count的优化-避免全表扫描

Oracle 数据库 count的优化-避免全表扫描 select count(*) from t1; 这句话比较简单&#xff0c;但很有玄机&#xff01;对这句话运行的理解&#xff0c;反映了你对数据库的理解深度&#xff01; 建立实验的大表他t1 SQL> conn scott/tiger 已连接。 SQL> drop table …

Fiddler工具的操作和功能时-----定位到步骤图(助力抓包)

前言&#xff1a; 继续上一篇&#xff0c;已经对fiddler的安装、配置和代理的问题进行了讲解&#xff1a; Fiddle配置代理&#xff0c;保手机模拟器访问外部网络-CSDN博客 本章&#xff0c;讲对一些fiddler的操作进行一系列讲解&#xff01;Fiddler作为一款网络调试工具&…

可视化大屏的应用(13):3D建模运用到机房运维中

可视化大屏在机房运维中发挥着重要的作用&#xff0c;主要体现在以下几个方面&#xff1a; 实时监控 通过可视化大屏&#xff0c;可以实时监控机房的各项指标和状态&#xff0c;如服务器的运行状态、网络流量、机房温度等。运维人员可以通过大屏快速获取关键信息&#xff0c;…

LazyVim开发vue2

neovim 0.5刚出来的时代&#xff0c;那时刚有lua插件我很狂热。每天沉迷于打造自己的IDE之中。写过一堆相关的博客&#xff0c;也录过一些视频教程。后来发现neovim的接口和插件更新的很快&#xff0c;导致配置文件要不定期的修改&#xff0c;才能保证新版本的插件的适配。我也…

程序员学CFA——数量分析方法(三)

数量分析方法&#xff08;三&#xff09; 概率论基础概率论的基本概念概率论的相关术语随机变量结果随机事件 事件之间的关系互斥事件遍历事件独立事件 概率的定义与确定方法概率的定义概率的确定方法赔率条件概率 概率的计算乘法法则与加法法则联合概率与乘法法则加法法则 全概…

LeetCode257:二叉树的所有路径

题目描述 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 解题思想 利用了回溯 代码 class Solution { public:void traversal(TreeNode* node, vector<int> &path, vect…

哈希 | unordered_set + unordered_map 的模拟实现(上)

目录 什么是 unordered_set unordered_map &#xff1f; unordered_set &#xff1a; unordered_map &#xff1a; 哈希 哈希表&#xff1a; 哈希冲突&#xff1a; 如何解决哈希冲突&#xff1a; 闭散列&#xff1a; 负载因子&#xff1a; 闭散列的模拟实现&#xff…

html公众号页面实现点击按钮跳转到导航

实现效果&#xff1a; 点击导航自动跳转到&#xff1a; html页面代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>跳转导航</title><meta name"keywords" conten…

【学习笔记十五】批次管理和容量管理

一、批次管理 1.配置 SAP EWM 特定参数 激活仓库的批次管理 2.ERP端物料需要启用批次管理 3.EWM物料需要启用批次管理 一般是ERP启用批次管理&#xff0c;相关的配置也会传输到EWM系统 4.建立批次主数据 5.创建采购订单并创建内向交货单&#xff0c;维护批次 6.维护产品主数…

【Canvas技法】绘制正三角形、切角正三角形、圆角正三角形

【图例】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>绘制正三角形、切角正三角形、圆角正三角形</title><style …

计算机网络—传输层UDP协议:原理、应用

​ &#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;2月のセプテンバー 1:21━━━━━━️&#x1f49f;──────── 5:21 &#x1f504; ◀️ ⏸ ▶️ ☰ &am…

leetcode.45题:跳跃游戏II

Leetcode.45题&#xff1a;跳跃游戏II /* 题意的理解&#xff1a; nums[0] 只能跳 1 ~ nums[0]步 依次类推&#xff1a;从nums[0] - nums[n - 1] 最少需要多少步数 nums 2 3 1 1 4 nums[0] 2,初始只能跳 1/2步&#xff0c;如跳1步&#xff0c;达到nums[1] 而nums[1] 3,顾第二…

网络篇04 | 应用层 mqtt(物联网)

网络篇04 | 应用层 mqtt&#xff08;物联网&#xff09; 1. MQTT协议介绍1.1 MQTT简介1.2 MQTT协议设计规范1.3 MQTT协议主要特性 2 MQTT协议原理2.1 MQTT协议实现方式2.2 发布/订阅、主题、会话2.3 MQTT协议中的方法 3. MQTT协议数据包结构3.1 固定头&#xff08;Fixed header…