介绍:SSH 协议:安全外壳协议,为 Secure Shell 的缩写。SSH 为建立在应用层和传输层基础上的安全协议。
作用:sshd服务使用SSH协议可以用来进行远程控制, 或在计算机之间传送文件,相比较之前用telnet方式来传输文件要安全很多,因为telnet使用明文传输,ssh是加密传输。
OpenSSH软件包,提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程中的数据,并由此来代替原来的类似服务。
安装包 | 说明 |
---|---|
openssh-6.4p1-8.el7.x86_64.rpm | 包含OpenSSH服务器及客户端需要的核心文件 |
openssh-clients-6.4p1-8.el7.x86_64.rpm | OpenSSH客户端软件包 |
openssh-server-6.4p1-8.el7.x86_64.rpm | OpenSSH服务器软件包 |
在我们的镜像文件里查找安装包,使用之前记得要先挂载
[root@qianshuiliyu ~]# ls /mnt/Packages/openssh* -l
-r--r--r--. 79 root root 348728 4月 3 2014 /mnt/Packages/openssh-6.4p1-8.el7.x86_64.rpm
-r--r--r--. 76 root root 68000 4月 3 2014 /mnt/Packages/openssh-askpass-6.4p1-8.el7.x86_64.rpm
# 图形界面下,支持对话框窗口的显示,是一个基于X 系统的密码诊断工具
-r--r--r--. 79 root root 480984 4月 3 2014 /mnt/Packages/openssh-clients-6.4p1-8.el7.x86_64.rpm
-r--r--r--. 79 root root 82192 4月 3 2014 /mnt/Packages/openssh-keycat-6.4p1-8.el7.x86_64.rpm
-r--r--r--. 79 root root 376088 4月 3 2014 /mnt/Packages/openssh-server-6.4p1-8.el7.x86_64.rpm
查看安装包是否安装支持对话框窗口的显示,是一个基于X 系统的密码诊断工具
[root@qianshuiliyu ~]# rpm -qa |grep opssh
挂载镜像,通过yum源安装软件
yum安装,会自动解决依赖关系
[root@qianshuiliyu ~]# yum install -y openssh
已加载插件:langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
源 'local' 在配置文件中未指定名字,使用标识代替
local | 4.1 kB 00:00:00
软件包 openssh-6.4p1-8.el7.x86_64 已安装并且是最新版本
无须任何处理
查看是否安装
[root@qianshuiliyu ~]# rpm -qa |grep openssh
openssh-6.4p1-8.el7.x86_64
openssh-clients-6.4p1-8.el7.x86_64
openssh-server-6.4p1-8.el7.x86_64
查看安装软件产生的文件,与etc有关的是关于配置文件的
[root@qianshuiliyu ~]# rpm -ql openssh
/etc/ssh
/etc/ssh/moduli
/usr/bin/ssh-keygen
/usr/libexec/openssh
/usr/libexec/openssh/ctr-cavstest
......
openssh的配置文件
配置文件 | 说明 |
---|---|
ssh_config | 客户端配置文件 |
sshd_config | 服务器端配置文件 |
[root@qianshuiliyu ~]# ll /etc/ssh/*
-rw-------. 1 root root 242153 3月 20 2014 /etc/ssh/moduli
-rw-r--r--. 1 root root 2123 3月 20 2014 /etc/ssh/ssh_config
-rw-------. 1 root root 4442 3月 20 2014 /etc/ssh/sshd_config
-rw-r-----. 1 root ssh_keys 227 6月 11 2018 /etc/ssh/ssh_host_ecdsa_key
-rw-r--r--. 1 root root 162 6月 11 2018 /etc/ssh/ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys 1679 6月 11 2018 /etc/ssh/ssh_host_rsa_key
-rw-r--r--. 1 root root 382 6月 11 2018 /etc/ssh/ssh_host_rsa_key.pub
设置开启自启动,7版本,查看状态
[root@qianshuiliyu ~]# systemctl enable sshd
[root@qianshuiliyu ~]# systemctl list-dependencies |grep sshd
├─sshd.service
[root@qianshuiliyu ~]# systemctl status sshd
sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
Active: active (running) since 五 2020-09-18 13:05:36 CST; 3h 18min ago
Process: 1902 ExecStartPre=/usr/sbin/sshd-keygen (code=exited, status=0/SUCCESS)
Main PID: 1912 (sshd)
CGroup: /system.slice/sshd.service
└─1912 /usr/sbin/sshd -D
......
[root@qianshuiliyu ~]# systemctl list-unit-files |grep sshd
anaconda-sshd.service static
sshd-keygen.service static
sshd.service enabled
[email protected] static
sshd.socket disabled
设置开启自启动,6版本
[root@qianshuiliyu ~]# chkconfig sshd on
[root@qianshuiliyu ~]# systemctl list-unit-files | grep sshd
ssh [远程主机用户名]@[远程服务器主机名或IP地址] [-p指定端口]
或者
ssh -l [远程主机用户名] [远程服务器主机名或IP 地址]
1、不指定用户,当前登录的是哪个就连接哪个用户
第一次登录服务器时系统没有保存远程主机的信息,为了确认该主机身份会提示用户是否继续连接,输入yes 后登录,这时系统会将远程服务器信息写入用户主目录下的$HOME/.ssh/known_hosts 文件中,下次再进行登录时因为保存有该主机信息就不会再提示了
[root@qianshuiliyu ~]$ ssh 192.172.168.100
The authenticity of host '192.172.168.100 (192.172.168.100)' can't be established.
ECDSA key fingerprint is 34:e9:9f:05:ec:c7:18:da:6f:5e:9e:ca:83:32:1f:44.
Are you sure you want to continue connecting (yes/no)? yes
# 无法确认host主机的真实性,只知道它的密钥指纹,问你还想继续连接吗
Warning: Permanently added '192.172.168.100' (ECDSA) to the list of known hosts.
[email protected]'s password:
Last login: Fri Sep 18 17:29:36 2020
[root@qianshuiliyu ~]# cat /root/.ssh/known_hosts
192.172.168.100 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIblzdHAyNTY
AAABBBPiXTbK2LYsd/8PE+uRO91D/418Mb7qm0rGDT+fPxwcInq36D0TfsIFtvkPfh5H4qOJoAB+I/3UFj9
EI9fPdXOE=
RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
2、连接指定用户登陆,用户不存在需要创建用户以及密码
[root@qianshuiliyu ~]# ssh [email protected]
[email protected]'s password:
Last login: Fri Sep 18 17:30:28 2020 from 192.172.168.100
3、-l方式
[student@qianshuiliyu ~]$ ssh -l root 192.172.168.100
[email protected]'s password:
Last login: Fri Sep 18 17:31:13 2020 from 192.172.168.100
通过密钥对的方式实现免密码方式连接
密钥连接是单向的,如果需要双向都连接,就双向都要进行认证操作
公钥是加密的,私钥是解密的,公钥可以再网络中传输,私钥不能再网络中传输
私钥就相当于你账号的密码,不能忘记,公钥相当于账号
1、在客户机上连接服务器,在客户机上生成密钥对
[root@qianshuiliyu ~]# ssh-keygen
# -t参数可以指定密钥类型 ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
# 提示输入密匙文件的保存路径
Enter passphrase (empty for no passphrase):
# 保护密钥的密码,直接回车为空
Enter same passphrase again:
# 再次输入保护密钥的密码
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
97:e0:f3:c0:fe:5f:5a:a4:c5:5f:b8:d3:10:fe:ab:43 root@qianshuiliyu
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| . . |
| o . . o o |
| S o B .|
| . = E *.|
| . . o = +|
| . = ..|
| ..o.o. |
+-----------------+
查看密钥对:
[root@qianshuiliyu ~]# ll /root/.ssh/*
-rw-------. 1 root root 1679 9月 19 10:59 /root/.ssh/id_rsa
-rw-r--r--. 1 root root 399 9月 19 10:59 /root/.ssh/id_rsa.pub
2、将公钥发布到服务器(复制文件发过去也行,把内容放到对应的文件里)
[root@qianshuiliyu ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub 192.172.168.100
# -i,指定本地公钥的存放位置
The authenticity of host '192.172.168.100 (192.172.168.100)' can't be established.
ECDSA key fingerprint is 34:e9:9f:05:ec:c7:18:da:6f:5e:9e:ca:83:32:1f:44.
Are you sure you want to continue connecting (yes/no)? yes
# 无法确定对方的真实性,是否继续连接
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:
# 首次分发密钥需要输入对端服务器的用户密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.172.168.100'"
and check to make sure that only the key(s) you wanted were added.
说明:
如果服务器不是监听22端口,则需要这样传输密钥:
ssh-copy-id -i /root/.ssh/id_rsa.pub "-p 212 [email protected]"
其他参数
ssh-copy-id [-n] [-i [identity_file]] [-p port] [-o ssh_option] [user@]hostname
选项 | 说明 |
---|---|
-l | 指定身份文件路径 |
-p | 指定端口 |
-o | 其他的参数,时间等 |
user@]hostname | 用户名@IP或者主机名 |
把本地主机的公钥发送(或复制)到远程主机,在authorized_keys文件上
查看服务器端的文件
这个密钥的权限只能是600或者700,安全方面
[root@qianshuiliyu ~]# cat /root/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/Hp8mhY3te+wtnOyL9qBb/k/BHrubMthrPF1t3pYOxZcPluG
j/LZy3c22CHviWefbKjMcHSLfx7Dvj7M4U77He9cwuy+hUKHavkc4Tw0hYvEdL9mwT7iOhrvtdjQj2PKXAk
Acot+WMGxEVrAN3tZIFef8jjmt2hf8AOn4bl9am7+pmZUpIye1q/I6GVu8kb2LASMMw7w7Bv3+gURtfXty
vGYphrwSt0cj+3zrIHFbDIRuASU5cR45QP+k38RDBLweM960joukVvpSNLgAf/Y8GbAGzK3Yol7amwYn
faQ3g1C3rDb4V3XJCwZmRmd2kwXKh5A9NTls3uC51adb5np root@qianshuiliyu
# 查看权限
[root@qianshuiliyu ~]# ll /root/.ssh/authorized_keys
-rw-------. 1 root root 399 9月 19 11:12 /root/.ssh/authorized_keys
免密码登陆服务
[root@qianshuiliyu ~]# ssh [email protected]
Last login: Sat Sep 19 12:05:13 2020 from 192.172.168.200
[root@qianshuiliyu ~]# ll /etc/ssh/
总用量 268
-rw-------. 1 root root 242153 3月 20 2014 moduli
-rw-r--r--. 1 root root 2123 3月 20 2014 ssh_config
# 客户端配置文件
-rw-------. 1 root root 4442 3月 20 2014 sshd_config
# 服务端配置文件
-rw-r-----. 1 root ssh_keys 227 6月 11 2018 ssh_host_ecdsa_key
-rw-r--r--. 1 root root 162 6月 11 2018 ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys 1679 6月 11 2018 ssh_host_rsa_key
-rw-r--r--. 1 root root 382 6月 11 2018 ssh_host_rsa_key.pub
编辑配置文件
[root@qianshuiliyu ~]# vim /etc/ssh/sshd_config
#Port 22
# 默认监听端口22,可以设置多个端口
===========================================================
1、修改服务器端口,客户机的22端口无法连接
[root@qianshuiliyu ~]# vim /etc/ssh/sshd_config
...
#Port 22
Port 289
port 296
...
===========================================================
2、重启服务
[root@qianshuiliyu ~]# systemctl restart sshd
===========================================================
3、查看修改的端口
[root@qianshuiliyu ~]# netstat -anutp |grep sshd
tcp 0 0 0.0.0.0:289 0.0.0.0:* LISTEN 14340/sshd
tcp 0 0 0.0.0.0:296 0.0.0.0:* LISTEN 14340/sshd
==========================================================
4、此时客户机连接服务器默认的22端口是连接不了的
[root@qianshuiliyu ~]# ssh [email protected]
ssh: connect to host 192.172.168.100 port 22: Connection refused
==========================================================
5、指定端口进行连接
[root@qianshuiliyu ~]# ssh [email protected] -p 289
[email protected]'s password:
Last failed login: Sat Sep 19 19:15:43 CST 2020 from 192.172.168.200 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Sat Sep 19 19:04:38 2020 from 192.172.168.1
#AddressFamily any
#ListenAddress 0.0.0.0
# 服务器绑定的IP 地址,0.0.0.0 表示监听所有地址
#ListenAddress ::
# IPV6版本地址
==========================================================
1、添加一个地址进行监听
[root@qianshuiliyu ~]# ifconfig ifcfg-wang:0 192.172.168.99
==========================================================
2、修改监听地址
#ListenAddress 0.0.0.0
ListenAddress 192.172.168.99
==========================================================
3、重启服务
[root@qianshuiliyu ~]# systemctl restart sshd
==========================================================
4、查看
[root@qianshuiliyu ~]# netstat -anutp |grep sshd|grep 22
tcp 0 0 192.172.168.99:22 0.0.0.0:* LISTEN 14780/sshd
==========================================================
5、此时其他的地址是无法登陆的
[root@qianshuiliyu ~]# ssh [email protected]
ssh: connect to host 192.172.168.100 port 22: Connection refused
6、使用监听地址进行登录
[root@qianshuiliyu ~]# ssh [email protected]
The authenticity of host '192.172.168.99 (192.172.168.99)' can't be established.
ECDSA key fingerprint is 34:e9:9f:05:ec:c7:18:da:6f:5e:9e:ca:83:32:1f:44.
Are you sure you want to continue connecting (yes/no)?
# The default requires explicit activation of protocol 1
#Protocol 2
# SSH协议版本2,支持1,要把Protocol 2改为Protocol 2,1
# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# 设置包含计算机私人密匙的文件
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
# ssh version 2使用REA的私钥
#HostKey /etc/ssh/ssh_host_dsa_key
# ssh version 2使用DSA的私钥
HostKey /etc/ssh/ssh_host_ecdsa_key
密钥说明:
RSA 是一种非对称加解密算法。
RSA 与 DSA 都是非对称加密算法。其中RSA的安全性是基于极其困难的大整数的分解(两个素数的乘积);
DSA 的安全性是基于整数有限域离散对数难题。基本上可以认为相同密钥长度的 RSA 算法与 DSA 算法安全性相当。
公钥用于加密,它是向所有人公开的;私钥用于解密,只有密文的接收者持有。
# Lifetime and size of ephemeral version 1 server key
# 临时版本1服务器密钥的生命周期和大小
#KeyRegenerationInterval 1h
# 密钥更新间隔时长
#ServerKeyBits 1024
# 服务器密钥长度
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
# 当有人使用 SSH 登入系统的时候,SSH 会记录信息,这个信息要记录的类型为AUTHPRIV。
#LogLevel INFO
# 登录记录的等级!INFO级别以上。
默认日志存放在哪?
sshd服务日志存放在: /var/log/secure
查看日志
[root@qianshuiliyu ~]# ll /var/log/secure
-rw-------. 1 root root 12815 9月 19 14:19 /var/log/secure
/etc/rsyslog.conf指明这个类型的存放路径
[root@qianshuiliyu ~]# vim /etc/rsyslog.conf
......
#The authpriv file has restricted access.
authpriv.* /var/log/secure
......
#LoginGraceTime 2m
# 优雅的登录等待时间,默认2分钟
==========================================================
1、修改时间
[root@qianshuiliyu ~]# vim /etc/ssh/sshd_config
LoginGraceTime 20s
==========================================================
2、重启:
[root@qianshuiliyu ~]# systemctl restart sshd
==========================================================
3、超过时间,连接断开
[root@qianshuiliyu ~]# ssh [email protected]
[email protected]'s password:
Connection closed by 192.172.168.100
#PermitRootLogin yes
# 是否允许root登录,yes or no,建议设置成no
==========================================================
1、修改配置
#PermitRootLogin yes
PermitRootLogin no
==========================================================
2、重启服务
[root@qianshuiliyu ~]# systemctl restart sshd
==========================================================
3、登录
[root@qianshuiliyu ~]# ssh [email protected]
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
# 权限被拒绝
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
# 是否允许空密码登录,不要管
PasswordAuthentication yes
# 是否用密码认证,如果no掉一定要做好密钥,否则凉凉
==========================================================
1、修改配置文件
PasswordAuthentication no
==========================================================
2、重启服务
[root@qianshuiliyu ~]# systemctl restart sshd
==========================================================
3、使用密钥登录
[root@qianshuiliyu ~]# ssh [email protected]
Last login: Sun Sep 20 09:21:43 2020 from 192.172.168.200
==========================================================
4、取消密钥无法登陆(删除密钥文件)
[root@qianshuiliyu ~]# ssh 192.172.168.100
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
7、设置登录提示
#PrintMotd yes
# 打印登陆提示信息,内容是 /etc/motd 这个文档的内容
#PrintLastLog yes
# 打印最近一次登录的日志
==========================================================
1、编辑提示
[root@qianshuiliyu ~]# echo "你已经来到Linux的世界,你的一切操作都将被记录!" > /etc/motd
==========================================================
2、重启服务
[root@qianshuiliyu ~]# systemctl restart sshd
==========================================================
3、连接查看
[root@qianshuiliyu ~]# ssh [email protected]
[email protected]'s password:
Last login: Sun Sep 20 09:53:51 2020 from 192.172.168.200
你已经来到Linux的世界,你的一切操作都将被记录!
122 #TCPKeepAlive yes
123 #UseLogin no
124 UsePrivilegeSeparation sandbox # Default for new installations.
# UsePrivilegeSeparation yes
# 是否权限较低的程序来提供用户操作。我们知道 sshd 启动在 port 22 ,
# 因此启动的程序是属于 root 的身份。那么当 student 登入后,这个设定值
# 会让 sshd 产生一个属于 sutdent 的 sshd 程序来使用,对系统较安全
==========================================================
[root@qianshuiliyu ~]# ssh [email protected]
[email protected]'s password:
Last login: Fri Sep 18 18:38:01 2020 from 192.172.168.100
[student@qianshuiliyu ~]$ ps -axu |grep sshd
root 1929 0.0 0.1 135680 4928 ? Ss 09:13 0:00 sshd: root@pts/0
root 5383 0.0 0.0 82956 3580 ? Ss 10:50 0:00 /usr/sbin/sshd -D
root 5844 0.1 0.1 135680 4884 ? Ss 11:31 0:00 sshd: student [priv]
student 5849 0.0 0.0 135680 2096 ? S 11:31 0:00 sshd: student@pts/1
student 5901 0.0 0.0 112656 992 pts/1 R+ 11:31 0:00 grep --color=auto sshd
# 这样,当这个进程sshd被缓存区溢出等手段,得到登录的权限后,还是student普通用户。不会得到root身份。
#UseDNS yes
# 为了要判断客户端来源是正常合法的,因此会使用 DNS 去反查客户端的主机名
# 连接内网主机慢的时候可以no
# GSSAPIAuthentication yes
# 两个都改才生效,都no才生效
#PidFile /var/run/sshd.pid
# 可以放置 SSHD 这个 PID 的文档
方法一:密码足够复杂
密码足够的复杂,密码的长度要大于8位最好大于20位(当然越长越好)。密码的复杂度是密码要尽可能有数字、大小写字母和特殊符号混合组成
方法二:修改默认端口
方法三:通过密钥进行认证
方法四:不允许root用户直接登陆,添加普通账号,授予root的权限
是否可以禁止root身份登录? 不行,因为有些程序需要使用root身份登录并运行。另外判断一个用户是不是超级管理员,看的是用户的ID是否为0。
方法五:直接禁止网络
不让root登录修改passwd的bash修改位/sbin/nologin,或者sshd的配置文件no掉
root:x:0:0:root:/root:/sbin/nologin
==========================================================
给普通账号权限
student:x:0:0:student:/home/student:/bin/bash
查看登录
[root@qianshuiliyu ~]# ssh [email protected]
[email protected]'s password:
Last login: Sun Sep 20 10:48:27 2020 from 192.172.168.200
[root@qianshuiliyu ~]# whoami
root
# 此时,如果配置文件no掉root,student无法登陆
scp [源] [目标]
-r | 复制目录 |
---|
要把当前一个文件copy到远程另外一台主机上
[root@qianshuiliyu ~]# scp /etc/passwd [email protected]:/root/
[email protected]'s password:
passwd 100% 1968 1.9KB/s 00:00
[root@qianshuiliyu ~]#
把文件从远程主机copy到当前系统
[root@qianshuiliyu ~]# scp [email protected]:/etc/passwd /root/
[email protected]'s password:
passwd 100% 1917 1.9KB/s 00:00
[root@qianshuiliyu ~]# ls
a.txt core.3492 fail2ban-0.8.14 fail2ban-0.8.14.tar.gz passwd
fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送e-mail通知系统管理员,很好、很实用、很强大!
#ban (bæn)禁令
简单来说其功能就是防止暴力破解。工作的原理是通过分析一定时间内的相关服务日志,将满足动作的相关IP利用iptables加入到dorp列表一定时间。
重启iptables服务的话,所有DORP将重置。
下载地址:fail2ban官网
将下载的安装包上传到服务器,或者直接在服务器上下载
[root@qianshuiliyu ~]# ls
fail2ban-0.8.14.tar.gz
将下载的压缩包进行解压
[root@qianshuiliyu ~]# tar -zxvf fail2ban-0.8.14.tar.gz
fail2ban-0.8.14/
fail2ban-0.8.14/.coveragerc
......
==========================================================
[root@qianshuiliyu ~]# ls
fail2ban-0.8.14 fail2ban-0.8.14.tar.gz
查看文档说明
[root@qianshuiliyu ~]# vim fail2ban-0.8.14/README.md
因为软件是由python编写的,所以必须安装python解释器,且版本大于等于2.4
查看当前系统python版本
[root@qianshuiliyu ~]# python -V
Python 2.7.5
安装:
[root@qianshuiliyu ~]# cd fail2ban-0.8.14/
[root@qianshuiliyu fail2ban-0.8.14]# python setup.py install
running install
running build
running build_py
creating build
creating build/lib
查看当前路径
[root@qianshuiliyu fail2ban-0.8.14]# pwd
/root/fail2ban-0.8.14
==========================================================
将启动脚本添加到启动项里面,并重命名为fail2ban
[root@qianshuiliyu fail2ban-0.8.14]# cp files/redhat-initd /etc/init.d/fail2ban
[root@qianshuiliyu fail2ban-0.8.14]# ls /etc/init.d/
fail2ban functions iprdump iprinit iprupdate netconsole network README rhnsd
启动脚本
[root@qianshuiliyu fail2ban-0.8.14]# systemctl start fail2ban
[root@qianshuiliyu fail2ban-0.8.14]# chkconfig --add fail2ban
[root@qianshuiliyu ~]# ll /etc/init.d
lrwxrwxrwx. 1 root root 11 6月 11 2018 /etc/init.d -> rc.d/init.d
启动脚本查找, 一个新的软件包,怎么知道哪个文件是启动脚本文件?
这就要找服务器启动脚本文件中有什么特点,然后过滤出来对应的文件名。
[root@qianshuiliyu fail2ban-0.8.14]# grep chkconfig ./* -R
./files/redhat-initd:# chkconfig: - 92 08
# chkconfig
/etc/fail2ban/action.d
# 动作文件夹,内含默认文件。iptables以及mail等动作配置
/etc/fail2ban/fail2ban.conf
# 定义了fai2ban日志级别、日志位置及sock文件位置
/etc/fail2ban/filter.d
# 条件文件夹,内含默认文件。过滤日志关键内容设置
/etc/fail2ban/jail.conf
# 主要配置文件,模块化。主要设置启用ban动作的服务及动作阀值 , jail,监狱
/etc/rc.d/init.d/fail2ban
# 启动脚本文件
因为动作文件(action.d/iptables.conf)以及日志匹配条件文件(filter.d/sshd.conf )安装后是默认存在的。基本不用做任何修改。所有主要需要设置的就只有jail.conf文件。
启用sshd服务的日志分析,指定动作阀值即可。实例文件/etc/fail2ban/jail.conf及说明如下:
[DEFAULT]
# 全局设置
ignoreip = 127.0.0.1/8
# 忽略的IP列表,不受设置限制
bantime = 600
# 屏蔽时间,单位:秒
findtime = 600
# 这个时间段内超过规定次数会被ban掉
maxretry = 3
# 最大尝试次数
backend = auto
# 日志修改检测机制(gamin、polling和auto这三种)
==========================================================
[ssh-iptables]
# 单个服务检查设置,如设置bantime、findtime、maxretry和全局冲突,服务优先级大于全局设置
enabled = true
# 是否激活此项(true/false)修改成 true,这个不激活,一切操作都无法使用
filter = sshd
# 过滤规则filter的名字,对应filter.d目录下的sshd.conf
action = iptables[name=SSH, port=ssh, protocol=tcp]
# 动作的相关参数,对应action.d/iptables.conf文件
sendmail-whois[name=SSH, [email protected], [email protected], sendername="Fail2Ban"]
# dest,触发报警的收件人
logpath = /var/log/sshd.log
检测的系统的登陆日志文件。这里要写sshd服务日志文件。 默认为logpath = /var/log/sshd.log
maxretry = 3
# 输入密码次数
bantime = 1800
# 禁止用户IP访问主机半小时
findtime = 300
# 在5分钟内超过规定次数会被ban掉
修改局部的配置文件
logpath = /var/log/secure
# 将日志改为自己的日志,要不可能不显示效果
maxretry = 3
bantime = 1800
findtime = 300
==========================================================
清空日志,便于查看
[root@qianshuiliyu ~]# > /var/log/secure
==========================================================
重启服务
[root@qianshuiliyu ~]# systemctl restart fail2ban.service
==========================================================
以防火墙的形式显示
[root@qianshuiliyu fail2ban-0.8.14]# iptables -nvL
...
Chain fail2ban-SSH (1 references)
pkts bytes target prot opt in out source destination
77 5056 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
远程主机进行连接,三次密码输错
[root@qianshuiliyu ~]# ssh 192.172.168.100
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
# 第四次登录就直接拒绝的
[root@qianshuiliyu ~]# ssh 192.172.168.100
ssh: connect to host 192.168.1.63 port 22: Connection refused
查看fail2ban是否工作
[root@qianshuiliyu ~]# fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: ssh-iptables
具体看某一项的状态也可以看,如果显示被ban的ip和数目就表示成功了,如果都是0,说明没有成功
[root@qianshuiliyu ~]# fail2ban-client status ssh-iptables
Status for the jail: ssh-iptables
|- filter
| |- File list: /var/log/secure
| |- Currently failed: 1
| `- Total failed: 12
`- action
|- Currently banned: 1
| `- IP list: 192.172.168.200
`- Total banned: 1
查看日志显示
[root@qianshuiliyu ~]# tail -10 /var/log/fail2ban.log
2020-09-21 08:42:21,123 fail2ban.jail [3797]: INFO Jail 'ssh-iptables' uses pyinotify
2020-09-21 08:42:21,146 fail2ban.jail [3797]: INFO Initiated 'pyinotify' backend
2020-09-21 08:42:21,149 fail2ban.filter [3797]: INFO Added logfile = /var/log/secure
2020-09-21 08:42:21,150 fail2ban.filter [3797]: INFO Set maxRetry = 3
2020-09-21 08:42:21,151 fail2ban.filter [3797]: INFO Set findtime = 300
2020-09-21 08:42:21,152 fail2ban.actions[3797]: INFO Set banTime = 1800
2020-09-21 08:42:21,192 fail2ban.jail [3797]: INFO Jail 'ssh-iptables' started
2020-09-21 08:42:26,267 fail2ban.actions[3797]: WARNING [ssh-iptables] Ban 192.172.168.200
2020-09-21 08:45:45,938 fail2ban.comm [3797]: WARNING Command ['stats', 'ssh-iptable'] has failed. Received Exception('Invalid command',)
1.让黑名单的用户登录,清空相关日志就可以了
[root@qianshuiliyu ~]# > /var/log/secure
2.防火墙的变动也需要重启fail2ban
3.修改端口,配置文件的端口也要相对应
/etc/fail2ban/jail.conf
/etc/fail2ban/action.d/iptables.conf
查看模块
[root@qianshuiliyu ~]# ls /etc/pam.d/
atd gdm-fingerprint other remote sshd systemd-user
chfn gdm-launch-environment passwd rhn_register su vlock
chsh gdm-password password-auth runuser subscription-manager vmtoolsd
config-util gdm-pin password-auth-ac runuser-l subscription-manager-gui xserver
crond gdm-smartcard pluto setup sudo
cups kcheckpass polkit-1 smartcard-auth sudo-i
fingerprint-auth kscreensaver postlogin smartcard-auth-ac su-l
fingerprint-auth-ac liveinst postlogin-ac smtp system-auth
gdm-autologin login ppp smtp.postfix system-auth-ac
查看某一用户错误登陆次数:,root代表用户名
pam_tally –-user
例如,查看root用户的错误登陆次数:
pam_tally –-user root
清空某一用户错误登陆次数:
pam_tally –-user –-reset
例如,清空 root 用户的错误登陆次数,
pam_tally –-user root –-reset