LiangGaRy-学习笔记-Day23

1、准备说明

1.1、环境准备

服务器:3台

  • 克隆虚拟机–>起码克隆三台
  • 192.168.75.131~133
  • 关闭防火墙、关闭selinux
  • 配置/etc/hosts文件的对应关系
  • 修改IP–>/etc/sysconfig/network-scripts

克隆虚拟机

  • 点击虚拟机–>设置–>克隆–>克隆–>然后默认的下一步–>完成

配置网络:

  • 克隆的虚拟机会导致网络不通;请按照以下操作进行
  • 动态不需要修改IP–>DHCP模式
  • 静态需要修改IP–>static模式
#删除一个文件-->这个和网卡的UUID进行删除
[root@Node1 ~]#rm -rf /etc/udev/rules.d/70-persistent-net.rules 

#修改网卡配置文件
[root@Node1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32 
TYPE=Ethernet
BOOTPROTO=static
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.75.131			#修改网卡-->记得把UUID都删掉
PREFIX=24
GATEWAY=192.168.75.2
DNS1=114.114.114.114

关闭防火墙与selinux

[root@Node1 ~]# systemctl stop firewalld &&systemctl disable firewalld
[root@Node1 ~]# sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/selinux/config 

设置主机名以及重启

[root@Node1 ~]# hostnamectl set-hostname LJW --static
[root@Node1 ~]# su -
[root@LJW ~]# reboot

1.2、nmap命令

作用:是一个开源的网络探测和安全扫描程序

语法:nmap+选项+ip

  • nmap +选项+主机名
  • nmap+选项+域名

选项:

  • -p:指定端口
#扫描本机IP
[root@LJW ~]# nmap 127.0.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2023-07-13 14:27 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000030s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
25/tcp open  smtp
Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds

1.3、elinks命令

作用:能实现一个纯文本界面的WWW浏览器

语法:elinks+ 选项 + IP

选项:

  • -anonymous:是否使用匿名帐号方式;
  • -auto-submit:对于偶然遇到的第一个表单是否自动提交;
  • -config-dir:指定elinks指令运行时读取和写入自身的配置和运行状态的存放目录;
  • -dump:将HTML文档以纯文本的方式打印到标准输出设备;
  • -version:显示指令的版本信息;
  • -h:显示帮助信息。
#安装elinks工具
[root@LJW ~]# yum -y install elinks

#直接访问ip
[root@LJW ~]# elinks  192.168.75.131

2、ssh服务

2.1、ssh介绍

介绍:

  • ssh是secure shell protocol的简写,是安全的sshll。由 IETF 网络工作小组(Network Working Group )制定。
  • 在进行数据传输之前,ssh先对联机数据包通过加密技术进行加密处理,加密之后在进行数据传输,确保了传递过程中的数据安全。

安装组件:

[root@LJW ~]# ls /mnt/cdrom/Packages/openssh-*
/mnt/cdrom/Packages/openssh-7.4p1-16.el7.x86_64.rpm		#核心文件
/mnt/cdrom/Packages/openssh-askpass-7.4p1-16.el7.x86_64.rpm		#支持对话窗口,显示x系统
/mnt/cdrom/Packages/openssh-clients-7.4p1-16.el7.x86_64.rpm	#客户端
/mnt/cdrom/Packages/openssh-keycat-7.4p1-16.el7.x86_64.rpm	#私钥、公钥相关
/mnt/cdrom/Packages/openssh-server-7.4p1-16.el7.x86_64.rpm	#服务器软件包

#查看服务状态
[root@LJW ~]# systemctl status sshd
.........

#安装相对应的组件
[root@LJW ~]# yum -y install openssh*

sshd服务的管理

  • systemctl enable sshd:设置开机自启
  • systemctl start sshd:启动sshd服务
  • systemctl restart sshd: 重启sshd服务
  • systemctl stop sshd:停止sshd服务
  • systemctl status sshd:查看sshd服务状态

sshd服务到的配置文件说明

  • sshd服务的默认配置文件是/etc/ssh/sshd_config ssh_config和sshd_config都是ssh服务器的配置文件,
  • 二者区别在于前者是针对客户端的配置文件,后者则是针对服务端的配置文件。
  • 服务名称:sshd
  • 服务端主程序:/usr/sbin/sshd
  • 服务端配置文件:/etc/ssh/sshd_config
  • 客户端配置文件:/etc/ssh/ssh_config

2.2、sshd服务的登陆

ssh 主机名@远程主机名或者IP地址 -p 端口号

ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port

  • -p:指定端口
  • -l:指定登录名
#创建一个用户-->用于ssh登录
[root@LJW ~]# useradd liangjiawei
[root@LJW ~]# echo 1 | passwd --stdin liangjiawei

#登录
[root@LJW ~]# ssh [email protected] -p 22
The authenticity of host '192.168.75.131 (192.168.75.131)' can't be established.
ECDSA key fingerprint is SHA256:Crx9dyaKjSYIokQ0bnJYaSkvyzcN9RiuGhkb58BnBrA.
ECDSA key fingerprint is MD5:b9:b5:b3:c4:51:31:3b:e1:1b:fd:42:5b:91:7a:c4:aa.
Are you sure you want to continue connecting (yes/no)? yes		#这里确认是登陆
[email protected]'s password: 

#查看登陆的人是谁
[liangjiawei@LJW ~]$ whoami
liangjiawei
[liangjiawei@LJW ~]$ pwd
/home/liangjiawei

如果一旦登陆成功了,信息将会记录在本服务器的.ssh/的目录下

#查看一下信息
[root@LJW ~]# ls .ssh/known_hosts 
.ssh/known_hosts

[root@LJW ~]# cat .ssh/known_hosts 
192.168.75.131 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFlDc1WbjEQ02MaMmDVx+iJIIeL5CBf2NgB2yPSNUuttnte3jxjFJaqhxzvSraZ8LwMBmV+PR+TmkXTVGHjtg9w=
	#格式就是:记录登陆的IP,和记录密码-->密码是经过算法进行的

#如果使用xshell登陆
[c:\~]$ ssh [email protected]
Connecting to 192.168.75.131:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Sat Jul 15 10:46:42 2023 from 192.168.75.131
[liangjiawei@LJW ~]$ 

#信息同样会记录到这个文件当中

2.3、ssh的配置文件讲解

ssh的配置文件路径:

  • /etc/ssh/ssh_config:这个是客户端登陆的配置文件
  • /etc/ssh/sshd_config:这个是服务器端的配置文件
#先启动ssh服务
[root@LJW ~]# systemctl start sshd
	#探测一下本机的网络情况
[root@LJW ~]# nmap  127.0.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2023-07-15 11:01 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000030s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
25/tcp open  smtp
Nmap done: 1 IP address (1 host up) scanned in 0.42 seconds

#最后再查看一下端口情况
[root@LJW ~]# netstat -antlup | grep sshd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      6346/sshd           
tcp        0      0 192.168.75.131:22       192.168.75.1:65187      ESTABLISHED 6662/sshd: liangjia 
tcp        0      0 192.168.75.131:22       192.168.75.1:54755      ESTABLISHED 6608/sshd: root@pts 
tcp6       0      0 :::22                   :::*                    LISTEN      6346/sshd   

修改配置文件就可以达到某些功能

  • ssh的默认端口号是22,如果想要修改就要修改配置文件
    • 这里修改了是不考虑防火墙和selinux的配置的,默认都是关闭的
  • 监听端口:设置sshd服务器绑定的IP地址,表示侦听所有的地方
    • 这个是默认的:一般不用修改
      • ListenAddress 0.0.0.0
#在操作配置文件前,建议最好是备份一个
[root@LJW ~]# cp -a /etc/ssh/sshd_config{,.bak}

#修改配置文件-->修改登录的端口号
[root@LJW ~]# vim /etc/ssh/sshd_config
........
	#在默认的端口号下面直接添加一个端口号
 17 #Port 22
 18 Port 2222
........

#然后保存退出-->重启服务
[root@LJW ~]# systemctl restart sshd
	#尝试使用2222号端口登录
[root@LJW ~]# ssh [email protected] -p 2222
[email protected]'s password: 
Last login: Sat Jul 15 10:55:34 2023 from 192.168.75.1
[liangjiawei@LJW ~]$ 
  • 指定sshd登录日志的位置
    • AUTHPRIV:这种日志格式就存放在/var/log/secure这个文件当中
#修改配置文件
[root@LJW ~]# vim /etc/ssh/sshd_config
..........
 32 SyslogFacility AUTHPRIV-->这里就是指定了日志类型

#而这个文件就定义了AUTHPRIV这种类型的日志存放在哪儿
[root@LJW ~]# vim /etc/rsyslog.conf 
...........
 57 authpriv.*                                              /var/log/secure

#因此sshd服务的日志文件就在/var/log/secure
[root@LJW ~]# tail -2 /var/log/secure 
Jul 15 11:27:02 LJW sshd[6727]: Disconnected from 192.168.75.131 port 37958
Jul 15 11:27:02 LJW sshd[6725]: pam_unix(sshd:session): session closed for user liangjiawei
  • root具有很大的权限:因此一般是不允许root直接登录
    • 都是使用普通用户登录,然后再切换至root用户,或者是提权操作
    • 把普通用户–>sudo–>变成root用户
  • 因此sshd服务也会进制root登录
    • PermitRootLogin yes–>控制是否进制root用户登录
#修改配置文件
[root@LJW ~]# vim /etc/ssh/sshd_config
..........
 38 PermitRootLogin yes		#把#取消,实现进制root远程登录
........
	#重启服务
[root@LJW ~]# systemctl restart sshd
	#然后到这里为止,你是没法使用root登录,只能通过普通用户登录;
[root@LJW ~]# ssh [email protected]
  • 如果ssh登陆的时候;会有提示显示
    • 这里就涉及一个文件?etc/motd文件
#把需要提醒的信息给到/etc/motd文件
[root@LJW ~]# echo "Your Operation is Recordls" > /etc/motd 

#然后重新登录
[root@LJW ~]# ssh [email protected]
[email protected]'s password: 
Last login: Sat Jul 15 11:08:11 2023 from 192.168.75.131
Your Operation is Recordls
  • 如果ssh链接的速度很慢
    • 配置文件中两个选项可以提速
      • UseDNS no
      • GSSAPIAuthentication no
#修改配置文件
[root@LJW ~]# vim /etc/ssh/sshd_config
..............
 79 GSSAPIAuthentication yes
...........
115 #UseDNS yes

2.4、ssh的两个文件

/etc/hosts.allow文件

  • 这个文件指向允许哪个IP进行登陆

/etc/hosts.deny文件

  • 这个文件是禁止访问

若果一个ip出现在两个文件当中,以允许的文件为基准

#书写规则
[root@LJW ~]# vim /etc/hosts.allow 
.....#在末行里边添加
sshd:192.168.75.1	#可以是网段也可以是具体的IP

[root@LJW ~]# vim /etc/hosts.deny 
.....#禁止整个网段
all:192.168.75

3、防止暴力破解

3.1、ssh的秘钥登陆

原理:ssh登陆使用秘钥文件进行登陆,结合PAM模块,实现双因子登陆

  • 密钥登陆:口令登陆(用户名+密码)
  • 密钥对-私钥+公钥–公钥可以在网络中传输;私钥不用–单向使用
    • ssh-keygen–服务端具备“公钥”–“锁头”
    • 客户端具备“私钥”–“钥匙”
    • 公钥传输:
      • ssh-copy-id IP -->把公钥传输到IP上
      • scp命令–基于ssh 复制传输 scp root@IP:/路径
    • Linux下的密钥文件–>600权限
    • 公钥传输后会改名
#去到75.131客户端上输入
[root@Node1 ~]# ssh-keygen 		#这个是生成公钥文件的命令
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):    		#这里就是指定密钥文件的默认路径      
Enter passphrase (empty for no passphrase): 						#这里的passphrase 密码是对生成的私匙文件(/root/.ssh/id_dsa)的保护口令,如果不设置可以回车。
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:
SHA256:IHLZssiRCKWPcqtT+P6xQ6Xp6giKoR1GWbB6PwXK+J4 root@Node1
The key's randomart image is:
+---[RSA 2048]----+
|..o              |
|.o + o           |
|o = B o          |
| B O =..         |
|=.@ .+. S        |
|o=.o+.           |
|oo=o+            |
|*B.oo+           |
|*+Eoo.           |
+----[SHA256]-----+
[root@Node1 ~]# 

#这里查看一下密钥文件
[root@Node1 ~]# ls .ssh/
id_rsa  id_rsa.pub  known_hosts

#使用命令把公钥文件给到服务器端
[root@Node1 ~]# ssh-copy-id -i 192.168.75.130
[email protected]'s password: 
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh '192.168.75.130'"
and check to make sure that only the key(s) you wanted were added.


#这里就能够完成依赖密钥登陆
[root@Node1 ~]# ssh 192.168.75.130
Last login: Wed Feb 16 20:31:54 2022 from node0
请注意你的操作
[root@node0 ~]# 


#那么如果端口号改变了应该如何指定端口号?
[root@Node1 ~]# ssh-copy-id -i "-p 222 [email protected]"

3.2、ssh防止暴力破解

  • 安全:确保服务器的密码是足够的复杂
    • 密码长度大于8位,最好大于20位
    • 密码的复杂程度要深:数字、字母大小写、特殊字符等
    • 固定的时间修改一次(半年修改一次)
      • 公司的公用账户密码:DEvOPS#%()2384等一个密码一个季度轮换
      • 个人密码:DEvOPS#%()2384等一个密码一个月度轮换一次
  • ssh服务的默认登陆端口号:从22改为1578等等;
    • 22端口号是默认的,谁都知道;改掉会比较安全
      • 同时要考虑好防火墙通行;
  • root权限比较大;因此不要直接以root身份登陆
    • 通常都是通过普通用户登录;
      • 通过su - 提权到root用户
      • 或者是通过sudo来对普通用户进行提权
  • 不允许用密码登陆–>只允许使用秘钥登陆

fail2ban软件的官方地址:http://www.fail2ban.org

服务器端准备好软件包

[root@node0 ~]# cd /usr/local/src/
[root@node0 src]# ls
fail2ban-0.8.14.tar.gz

#解压软件包
[root@node0 src]# tar -xf fail2ban-0.8.14.tar.gz 
[root@node0 src]# ls
fail2ban-0.8.14

#一个陌生的软件包如何安装,-->每个软件包的安装肯定会有readme这类型的文件;
[root@node0 src]# cd fail2ban-0.8.14/
[root@node0 fail2ban-0.8.14]# ls README.md 
README.md
[root@node0 fail2ban-0.8.14]# vim README.md 
.......................
To install, just do:

    tar xvfj fail2ban-0.8.12.tar.bz2
    cd fail2ban-0.8.12
    python setup.py install
...................

#从教程上面可以看到是用python来安装的,-->那么我们python的环境就需要大于2.4的版本
[root@node0 fail2ban-0.8.14]# python -V
Python 2.7.5

#这里就可以进行安装部署了
	#这里一定要注意路径,进入到fail2ban的目录文件里边操作
[root@node0 fail2ban-0.8.14]# python setup.py install
....
#安装好了就要查看一下有没有报错
[root@node0 fail2ban-0.8.14]# echo $?
0

安装好了fail2ban,查看一下配置文件

[root@node0 fail2ban-0.8.14]# ls /etc/fail2ban/
action.d  fail2ban.conf  fail2ban.d  filter.d  jail.conf  jail.d


#这里简单了解一下fail2ban的主要文件
[root@node0 fail2ban-0.8.14]# ll /etc/fail2ban/
总用量 32
drwxr-xr-x 2 root root  4096 216 23:15 action.d		#动作文件,默认的文件,设置iptables以及mail等动作的文件
-rw-rw-r-- 1 root root  1525 820 2014 fail2ban.conf		#这里定义了fail2ban的日志几倍、日志位置以及sock套接字文件
drwxr-xr-x 2 root root     6 216 23:15 fail2ban.d		#条件文件夹,内含默认文件。过滤日志关键内容设置
drwxr-xr-x 2 root root  4096 216 23:15 filter.d
-rw-rw-r-- 1 root root 19316 820 2014 jail.conf			#主要配置文件,模块化。主要设置启用ban动作的服务及动作阀值
drwxr-xr-x 2 root root     6 216 23:15 jail.d			#这里也可以生效的文件夹

安装好了fail2ban的软件,那么我们如何知道启动脚本是哪一个?

  • 源码安装好了之后–>它并没有给我们准备好启动的文件,因此我们需要从源码文件中提取启动的脚本
#在这么多的源码文件中,我们也不知道如何找到启动的脚本,因此有个知识点需要掌握;
#凡是启动的脚本都含有开机自动的指令,就会有chkconfig这类似的选项
[root@node0 fail2ban-0.8.14]# grep chkconfig ./* -R --color
./files/redhat-initd:# chkconfig: - 92 08

#这里能够查找出来,于是我们就可以把源码的启动脚本复制到/etc/init.d/的目录下
[root@node0 fail2ban-0.8.14]# cp ./files/redhat-initd  /etc/init.d/fail2ban
[root@node0 fail2ban-0.8.14]# ll /etc/init.d/fail2ban 
-rwxr-xr-x 1 root root 2141 216 23:25 /etc/init.d/fail2ban

#到这里就代表fail2ban基本完成安装

jail.conf的配置如下

#要养成良好的习惯,修改配置文件最好是备份
[root@node0 ~]# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.bak

#打开配置文件
[root@node0 ~]# vim /etc/fail2ban/jail.conf 
.............
 27 [DEFAULT]			#这里是全局配置
 32 ignoreip = 127.0.0.1/8		#这里是忽略的ip李彪,不受限制,指定本机环回地址不受限制
 41 bantime  = 600				#这里是屏蔽时间,默认是秒,600s=10分钟
 45 findtime  = 600				#这里代表的是这个时间段内,超过规定的次数就会被ban
 48 maxretry = 3				#这里指的是最多的连接次数
 61 backend = auto				#这里是日志修改的检测机制,有gamin、poling、auto三种
 ...........
 94 [ssh-iptables]				#这里开始就是单个服务的设置,我们要找到ssh这个服务-->或者自己写也行
 96 enabled  =true				#这里是是否激活选项
 97 filter   = sshd				#这里是锅炉规则的filter的名字,这里对应的是filter.d目录下的sshd.conf文件
 98 action   = iptables[name=SSH, port=ssh, protocol=tcp]
 99            sendmail-whois[name=SSH, dest=[email protected], sender=[email protected], sendername="Fail2 Ban"]

	#这里就是动作的设定相关参数,对应的文件也是action.d/iptables.conf文件
	#这里面包含,iptables的规则,针对的服务是ssh,端口也是ssh,也可以改为22端口,protocol协议是tcp
	#邮件设定:设置邮件、等参数


100 logpath  = /var/log/sshd.log		#这里是检测系统的登陆日志文件,fail2ban是监控日志而触发的报警,因此这里要写ssh的日志文件保存的位置/var/log/secure
101 maxretry = 5						#这个是最大的密码验证时效的次数
102 bantime = 3600						#禁止用户1小时访问主机
103 findtime = 300						#这里是5分钟内出现规定次数就开始ban 

#然后启动服务
[root@node0 ~]# /etc/init.d/fail2ban start
Starting fail2ban (via systemctl):                         [  确定  ]
[root@node0 ~]# 

#然后清空一下日志文件查看
[root@node0 ~]# > /var/log/secure 
	#最后使用75.131登陆查看-->
[root@Node1 ~]# 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).

#再次登陆就不能了
[root@Node1 ~]# ssh [email protected]
ssh: connect to host 192.168.75.130 port 22: Connection refused

#回到服务器端查看iptables的规则链
[root@node0 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
fail2ban-SSH  tcp  --  anywhere             anywhere             tcp dpt:ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain fail2ban-SSH (1 references)
target     prot opt source               destination         
REJECT     all  --  192.168.75.131       anywhere             reject-with icmp-port-unreachable
RETURN     all  --  anywhere             anywhere 

#还可以使用fail2ban的客户啊短来查看
	#查看规则链是否生效
[root@node0 ~]# fail2ban-client status
Status
|- Number of jail:	1
`- Jail list:		ssh-iptables

#这里就可以查看一下具体的一条规则链,然后如果看到ban的ip就证明实验成功
[root@node0 ~]# fail2ban-client status ssh-iptables
Status for the jail: ssh-iptables
|- filter
|  |- File list:	/var/log/secure 
|  |- Currently failed:	0
|  `- Total failed:	3
`- action
   |- Currently banned:	1
   |  `- IP list:	192.168.75.131 
   `- Total banned:	1

#最后查看一下fail2ban的日志文件
[root@node0 ~]# tail /var/log/fail2ban.log
........
2022-02-17 00:18:16,349 fail2ban.actions[7655]: WARNING [ssh-iptables] Ban 192.168.75.131

实验过程中需要注意的几个点

  • 注意别设置错了规则链–>指定是ssh-iptables
  • 如果iptables -F 是清空了规则链的话需要重启一下fail2ban服务
  • 如果是修改了端口号的话需要在action的port上指定端口号即可

猜你喜欢

转载自blog.csdn.net/Liang_GaRy/article/details/131284289
今日推荐