sshd服务---暴力破解应对策略
sshd服务暴力破解步骤
sshd暴力破解方法
防止暴力破解调优
1. 变更默认端口
2. 变更root用户
3. 日志监控-->防止暴力破解(fail2ban应用)
fail2ban详解
在初始化的服务器中,20种ssh服务调优方法!
技术来源于生活!!!
===============================================
第三步:运行暴力破解程序,破解密码
为了防止我们的密码被暴力破解,服务器的密码一定不要使用弱口令!!!而且在企业中,一般会要求半个月或多长时间变更一次密码(公司中运维工程师会要求的)
弱口令:简单的密码,如下:
123456
awp@host
12HLad^
强口令: ---> 密码长度大于8位(最好不少于14位),且有字母 数字 和特殊符号混合构成的高复杂度的字符串
防止暴力破解调优
安装sshd-server
查询服务是否安装:
rpm -qa | grep openssh-server

若没有安装,可使用如下命令进行安装:
yum -y install openssh* #安装所有openssh软件包
通过如下命令,查看openssh生成的文件列表:
rpm -ql openssh
1. 变更默认端口
sshd服务配置文件位于/etc/ssh目录下!
ls /etc/ssh

ssh_config ---> 客户端配置文件
sshd_config ---> 服务器端配置文件
我们修改服务器端文件(别人访问我们时,我们是sshd服务器!!!)
vim /etc/ssh/sshd_config
修改默认端口配置:
#Port 22
改为:
Port 123

保存退出,并重启sshd服务:
service sshd restart
或
/etc/init.d/sshd restart

查看监听端口是否生效:
netstat -anlpt | grep ssh

通过本机远程连接测试!(本机远程连接本机!)本机即使客户端,也是服务端
ssh 192.168.31.222 -p 123 #指定端口远程连接

------------------------------
2. 扫描某IP地址开放端口
nmap 192.168.171.120

这里我发现,当设置ssh开放端口在1000以内是扫描不出来的!!!而且若是指定到其他服务的端口上时,扫描到的服务名称就是该服务的名称!!!

这就是为什么我们要修改端口的意思!!!让别人不知道我们的哪个端口是sshd服务的端口!
------------------------------
编辑/etc/passwd文件,修改如下:
修改:root:x:0:0:root:/root:/bin/bash
为:root:x:0:0:root:/root:/bin/nologin #禁止root用户登录
修改:xg:x:500:500::/home/xg:/bin/bash
为:xg:x:0:0::/home/xg:/bin/bash #普通用户提权
远程连接测试:
root用户连接测试

xg用户连接测试:

另外,改下面内容后,xg用户也是登录不上的。只判断UID是否为0,不查看用户名的:
vim /etc/ssh/sshd_config
改:
#PermitRootLogin yes
为:
PermitRootLogin no
service sshd restart
测试:
ssh xg@192.168.31.222
xg@192.168.31.222's password:
Permission denied, please try again.
一般情况这个就可以解决了暴力破解的问题了。
到目前为止小的暴力破解已经解决了!!!
但是,虽然我们有效的降低了别人破解我们系统的可能性,但是,别人在攻击时,会造成sshd服务器系统资源占用(可能导致瘫痪!)
为有效防止系统资源无辜被占用导致系统缓慢或瘫痪,我们可以使用防火墙!!!---->一般公司不使用防火墙.
我们还可以使用fail2ban软件,实现一些规则的制定!!避免别人恶意攻击服务器造成不必要的损失!
fail2ban ---> 系统日志监控
通过匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送e-mail通知系统管理员,很好 很实用 很强大!
#ban (bæn)禁令
简单来说其功能就是防止暴力破解。工作的原理是通过分析一定时间内的相关服务日志,将满足动作的相关IP利用iptables加入到dorp列表一定时间。
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name ROUTER-SSH --update --seconds 1800 --hitcount 5 -j DROP
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name ROUTER-SSH --set -j ACCEPT
两种安装方式
Way 1. yum安装
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum -y install fail2ban
Way 2. 源码安装
下载地址:
http://www.fail2ban.org
尽量使用稳定版本(推荐0.8.14或0.9.4)
下载下来后,怎么安装呢?!
第一步:上传压缩包到虚拟机,并解压
tar -zxf fail2ban-0.8.14.tar.gz -C /usr/src
第二步:查看解压目录下的配置文档
vim /usr/src/fail2ban-0.8.14/README.md
17 Installation:
18 -------------
19
20 **It is possible that Fail2ban is already packaged for your distribution. In
21 this case, you should use it instead.**
22
23 Required:
24 - [Python >= 2.4](http://www.python.org)
25
26 Optional:
27 - [pyinotify >= 0.8.3](https://github.com/seb-m/pyinotify)
28 - Linux >= 2.6.13
29 - [gamin >= 0.0.21](http://www.gnome.org/~veillard/gamin)
30
31 To install, just do:
32
33 tar xvfj fail2ban-0.8.12.tar.bz2
34 cd fail2ban-0.8.12
35 python setup.py install
由配置文档得知,安装本源码程序需要
1. Python版本为2.4或以上
2. pyinotify版本为0.8.3或以上
3. gamin版本为0.0.21或以上
4. Linux内核版本在2.6.13或以上

查看依赖关系已满足条件!
切换到源码文档目录,进行安装,执行如下命令:
python setup.py install

安装完成后,为了便于后期的管理操作,以及添加开机启动等,我们需要将fail2ban启动脚本复制到/etc/init.d目录下. 根据/etc/init.d目录下的文件特点,他们都存在chkconfig配置项,在源码目录中通过grep查找
grep chkconfig ./* -R --color #在当前目录下,查找所有文件中,存在chkconfig字段的文件
cp files/redhat-initd /etc/init.d/fail2ban #拷贝启动脚本到目标位置
chkconfig --add fail2ban #添加开机启动项fail2ban
chkconfig --list fail2ban #查看

------------------------------
2)
echo -e “this is a world \n nest line” |grep word
3)打印除包含 math_pattern 行之外的所有的行
grep -v match_pattern file
4)统计文件或文本中包含匹配字符串的行数:
grep -c “test” filename
5)忽略大小写
echo ”hello world” |grep -I ”HELLO”
------------------------------
/etc/fail2ban/fail2ban.conf #定义了fai2ban日志级别、日志位置及sock文件位置
/etc/fail2ban/filter.d #条件文件夹,内含默认文件。过滤日志关键内容设置
/etc/fail2ban/jail.conf #主要配置文件,模块化。主要设置启用ban动作的服务及动作阀值
# jail [dʒeɪl] 监狱
/etc/rc.d/init.d/fail2ban #启动脚本文件
ignoreip = ipaddress/prefix #忽略监控ip
ignoreip = 127.0.0.1/8 10.10.10.0/24 #忽略的IP列表,不受设置限制 如果有二组以上用空白做为间隔
ignorecommand = #忽略命令
bantime = 600 #屏蔽时间,单位:秒(设置IP被封锁的时间)
findtime = 600 #这个时间段内超过规定次数会被ban掉(设定多长时间内达到最大次数就解锁。)
maxretry = 3 #在被ban之前,发生错误的最大次数
backend = auto #日志修改检测机制(pyinotify、gamin、polling和auto这三种)
usedns = warn #yes/warn/no 处理方式
===================================================
[] #剩下的配置信息是模块设置,发送信息等
格式如下:
[ssh-iptables] #ssh配置设置 #单个服务检查设置,如设置bantime、findtime、maxretry和全局冲突,服务优先级大于全局设置。
enabled = false #是否启用该模块
filter = sshd #监控字符串 过滤规则filter的名字,对应filter.d目录下的sshd.conf
action = iptables[name=SSH, port=ssh, protocol=tcp] #事件
#动作的相关参数,对应action.d/iptables.conf文件 SSH服务名称 ssh端口好 protocol协议
logpath = /var/log/sshd.log #日志文件路径,检测的系统的登陆日志文件。
# 这里要写sshd服务日志文件。
# 默认为logpath = /var/log/sshd.log ,可在/etc/rsyslog.conf文件中查看
# ----- /etc/ssh/sshd_config -----
# 36 #SyslogFacility AUTH
# 37 SyslogFacility AUTHPRIV
# ----- /etc/rsyslog.conf -----
# 44 # The authpriv file has restricted access.
# 45 authpriv.* /var/log/secure
maxretry = 5 #最大错误次数
#5分钟内3次密码验证失败,禁止用户IP访问主机1小时。 配置如下
bantime = 3600 #禁止用户IP访问主机1小时
findtime = 300 #在5分钟内内出现规定次数就开始工作
maxretry = 3 #3次密码验证失败

保存退出后,重启fail2ban服务
/etc/init.d/fail2ban restart #重启服务
ssh远程连接,测试是否生效
ssh 192.168.31.222 -p 123 #故意三次输错密码后,重新连接!
[root@xiaogan120 ~]# ssh 192.168.31.222 -p 123
ssh: connect to host 192.168.31.222 port 123: Connection refused

1. 查看防火墙规则:
iptables -L |tail -4
2. 查看fail2ban状态:
fail2ban-client status
3. 查看fail2ban详情:
fail2ban-client status sshd
4. 查看fail2ban日志文件:
tail /var/log/fail2ban.log
[root@xiaogan120 ~]# iptables -L |tail -4
Chain fail2ban-SSHD (1 references)
target prot opt source destination
REJECT all -- 192.168.31.222 anywhere reject-with icmp-port-unreachable
RETURN all -- anywhere anywhere
[root@xiaogan120 ~]# fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
[root@xiaogan120 ~]# fail2ban-client status sshd
Status for the jail: sshd
|- filter
| |- File list: /var/log/secure
| |- Currently failed: 0
| `- Total failed: 3
`- action
|- Currently banned: 1
| `- IP list: 192.168.31.222
`- Total banned: 1
[root@xiaogan120 ~]# tail /var/log/fail2ban.log
2016-09-19 18:12:51,624 fail2ban.server [1629]: INFO Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.14
2016-09-19 18:12:51,624 fail2ban.jail [1629]: INFO Creating new jail 'sshd'
2016-09-19 18:12:51,624 fail2ban.jail [1629]: INFO Jail 'sshd' uses poller
2016-09-19 18:12:51,636 fail2ban.jail [1629]: INFO Initiated 'polling' backend
2016-09-19 18:12:51,637 fail2ban.filter [1629]: INFO Added logfile = /var/log/secure
2016-09-19 18:12:51,637 fail2ban.filter [1629]: INFO Set maxRetry = 3
2016-09-19 18:12:51,638 fail2ban.filter [1629]: INFO Set findtime = 300
2016-09-19 18:12:51,639 fail2ban.actions[1629]: INFO Set banTime = 600
2016-09-19 18:12:51,724 fail2ban.jail [1629]: INFO Jail 'sshd' started
2016-09-19 18:12:52,756 fail2ban.actions[1629]: WARNING [sshd] Ban 192.168.31.222
[root@xiaogan120 ~]#
2. 等待超过时间限制
拓展配置文件:
0.9.4配置文件
ls /etc/fail2ban/
[root@xiaogan121 fail2ban-0.9.4]# ls /etc/fail2ban/
action.d filter.d paths-common.conf paths-freebsd.conf
fail2ban.conf jail.conf paths-debian.conf paths-opensuse.conf
fail2ban.d jail.d paths-fedora.conf paths-osx.conf
[DEFAULT]
bantime = 3600 禁止此用户IP访问主机1小时
findtime = 300在5分钟内内出现规定次数就实施动作,默认时间单位:秒
maxretry = 3密码验证失败次数最大值为3
filter = sshd
protocol = tcp协议为TCP
action = iptables[name=SSH, port=ssh, protocol=tcp] 所采用的工作,按照名字可在action.d目录下找到
[sshd]
port = ssh
logpath = /var/log/secure 检测的系统的登陆日志文件,这里要写sshd服务日志文件的路径
最后保存设置
第二步:上传公有密钥到服务器
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.171.121

第三步:尝试远程连接服务器
ssh 192.168.171.121

看到了么?没有输入密码,就直接登录了!!!
-2 强制scp命令使用协议ssh2
-4 强制scp命令只使用IPv4寻址
-6 强制scp命令只使用IPv6寻址
-B 使用批处理模式(传输过程中不询问传输口令或短语)
-C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p 保留原文件的修改时间,访问时间和访问权限。
-q 不显示传输进度条。
-r 递归复制整个目录。
-v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port 注意是大写的P, port是指定数据传输用到的端口号
-S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
4.使用实例:
scp命令的实际应用概述:
从本地服务器复制到远程服务器:
(1) 复制文件:
命令格式:
1). scp local_file remote_username@remote_ip:remote_folder
或者
2). scp local_file remote_username@remote_ip:remote_file
或者
3). scp local_file remote_ip:remote_folder
或者
4). scp local_file remote_ip:remote_file
第1,2个指定了用户名,命令执行后需要输入用户密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名
(2) 复制目录:
命令格式:
1). scp -r local_folder remote_username@remote_ip:remote_folder
或者
2). scp -r local_folder remote_ip:remote_folder
第1个指定了用户名,命令执行后需要输入用户密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码;硬盘I/O非常高,而scp基本不影响系统正常使用。
从远程服务器复制到本地服务器:
从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。
实例:
scp root@192.168.171.121:/root/fail2ban-0.9.4.tar.gz /root
#已root用户身份,从192.168.171.121拷贝/root/fail2ban-0.9.4.tar.gz文件到/root目录下!

scp /root/sshd_config 192.168.171.121:/root
#拷贝/root/sshd_config文件到192.168.171.121地址/root目录下
#############################################
20种调优方式--->刚建好的服务器?!
sshd服务---暴力破解应对策略的更多相关文章
- 2-3 sshd服务---暴力破解应对策略
sshd服务暴力破解步骤 sshd暴力破解方法 防止暴力破解调优 1. 变更默认端口 2. 变更root用户 3. 日志监控-->防止暴力破解(fail2ban应用) fail2ban详解 ...
- 服务器如何防ssh服务暴力破解??
如图: 当我们遭到暴力破解ssh服务该怎么办 内行看门道 外行看热闹 下面教大家几招办法: 1 密码足够的复杂,密码的长度要大于8位最好大于20位.密码的复杂度是密码要尽可能有数字.大小写字母和特 ...
- CTF--HTTP服务--暴力破解
开门见山 1. 扫描靶机ip,发现PCS 192.168.1.103 2. 用nmap扫描靶机开放服务和服务版本 3. 再扫描全部信息 4. 用nikto探测敏感文件 5. 打开敏感网页发掘信息 6. ...
- shell脚本,防止sshd被暴力破解
1.tail -f /var/log/secure 你会发现有很多的登录 错误.这说明你的机器正在被暴力破解. 2.新建 一个 shell脚 本 保存退出. 3.加入定时crontab -e 我这里每 ...
- sshd 防止暴力破解
- sshd服务器搭建管理和防止暴力破解
1.1 Linux服务前期环境准备,搭建一个RHEL7环境 1.2 sshd服务安装-ssh命令使用方法 1.3 sshd服务配置和管理 1.4 防止SSHD服务暴力破解的几种方式 1.1 Linux ...
- sshd服务防止暴力破解
sshd防止暴力破解几种方式: 1.密码足够复杂 2.修改默认端口号 3.不适用root用户名登录. #是否可以禁止root身份登录?不行,因为有些程序需要使用root什么登录,另外判断一个用户是不是 ...
- 防止sshd服务被暴力破解
方法有很多种,这里介绍两种. (1).配置安全的shhd设置 不允许root用户直接登录到系统,添加一个普通用户,必要时再切换到root用户. 修改默认端口号. 不允许密码登录,只能通过密钥登录系统. ...
- 开源服务专题之------ssh防止暴力破解及fail2ban的使用方法
15年出现的JAVA反序列化漏洞,另一个是redis配置不当导致机器入侵.只要redis是用root启动的并且未授权的话,就可以通过set方式直接写入一个authorized_keys到系统的/roo ...
随机推荐
- 2015.4.7-C#入门基础(一)
一. .net framework 的特点 1.两个主要组件 1> CLR 表示运行时的环境,同时也保证了.net 中的一种一种语言具有的功能其他语言也都具有: 2> 统一的类库集 2.M ...
- apache 设置
此博客是网站www.beilei123.cn镜像,转载请注明出处. 1.ServerTokens ProdServerTokens Prod 显示“Server: Apache”ServerToken ...
- $digest already in progress
最近在写项目时经常遇到一个小问题,在上下文外改变视图,通常来说我们需要apply()便可以实现,问题是加了apply()后控制台报错:$digest already in progress:随后我把a ...
- 使用事件CreateEvent注意事项
HANDLECreateEvent( LPSECURITY_ATTRIBUTESlpEventAttributes,// 安全属性 BOOLbManualReset,// 复位方式 BOOLbInit ...
- 你应该知道的CSS文字大小单位PX、EM、PT[转]
摘要: 这里引用的是Jorux的“95%的中国网站需要重写CSS”的文章, 题目有点吓人,但是确实是现在国内网页制作方面的一些缺陷.我一直也搞不清楚px与em之间的关系和特点,看过以后确实收获很大.平 ...
- 创建以 API 为中心的 Web 应用
http://www.oschina.net/translate/creating-an-api-centric-web-application?from=20130818 正计划着要开始搞一个新的网 ...
- DM368启动串口打印分析
DM36x initialization passed! TI UBL Version: 1.50 Booting Catalog Boot Loader //启动目 ...
- C指针
1,每行最大长度,处理的最大列号; preprocessor directives,preprocessor,预处理器读入源代码,根据预处理指令对其进行修改,把修改后 的源代码递交给编译器; 预处理器 ...
- Java List 汉字进行排序
Comparator<Person> cmp = new Comparator<Person>() { public int compare(Person o1, Person ...
- OC基础12:数字、字符串和集合1
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.有时要将一些数字数据类型的值当做对象来 ...