1、创建私有CA并进行证书申请
实验环境:私有CA:centos7.9,用户服务器OS:centos8.1;
- 通过命令创建
[root@c7 CA]
[root@c7 CA]
[root@c7 CA]
-rw-------. 1 root root 1708 Nov 4 19:41 private/cakey.pem
[root@c7 CA]
[root@c7 CA]
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
be:52:93:e0:b3:0f:70:84
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, ST=Sichuan, L=Chengdu, O=example, OU=test, CN=ca.testtest.cn
Validity
Not Before: Nov 4 23:36:00 2021 GMT
Not After : Nov 2 23:36:00 2031 GMT
Subject: C=CN, ST=Sichuan, L=Chengdu, O=example, OU=test, CN=ca.testtest.cn
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:a1:28:9f:b6:f3:21:5e:68:ad:01:19:39:b3:df:
......
......
15:0d
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
77:39:6F:B5:10:21:0E:73:30:53:CF:C9:07:01:9B:61:F4:A0:5F:E6
X509v3 Authority Key Identifier:
keyid:77:39:6F:B5:10:21:0E:73:30:53:CF:C9:07:01:9B:61:F4:A0:5F:E6
......
......
- 通过配置文件创建
[root@c7 CA]
1 [ req ]
2 default_bits = 2048
3 distinguished_name = req_distinguished_name
4 utf8 = yes
5 encrypt_key = no
6 prompt = no
7 x509_extensions = v3_ca
8
9 dirstring_type = nobmp
10
11 [ req_distinguished_name ]
12 C = CN
13 ST = Sichuan
14 L = Chengdu
15 O = example
16 OU = test
17 CN = www.testtest.cn
18 emailAddress = text@test.com
19
20
21 [ v3_ca ]
22
23 subjectKeyIdentifier=hash
24 authorityKeyIdentifier=keyid:always,issuer:always
25 basicConstraints = CA:true
[root@c7 CA]
Generating a 2048 bit RSA private key
.....................+++
............................................................+++
writing new private key to 'private/cakey2.pem'
-----
[root@c7 CA]
[root@c7 CA]
total 8
-rw-------. 1 root root 1704 Nov 4 19:49 cakey2.pem
[root@c7 CA]
[root@c7 CA]
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
ac:dc:a5:67:35:2d:4f:77
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, ST=Sichuan, L=Chengdu, O=example, OU=test, CN=www.testtest.cn/emailAddress=test@test.com
Validity
Not Before: Nov 4 23:49:57 2021 GMT
Not After : Nov 4 23:49:57 2031 GMT
Subject: C=CN, ST=Sichuan, L=Chengdu, O=example, OU=test, CN=www.testtest.cn/emailAddress=test@test.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:9e:0b:8c:fa:ca:a1:bd:9d:73:83:e8:da:26:7a:
......
......
- 通过Makefile文件进行配置
Makefile文件路径:/etc/pki/tls/certs/Makefile。可根据Makefile文件内容自行选择执行相关选项即可。
14 usage:
15 @echo "This makefile allows you to create:"
16 @echo " o public/private key pairs"
17 @echo " o SSL certificate signing requests (CSRs)"
18 @echo " o self-signed SSL test certificates"
19 @echo
20 @echo "To create a key pair, run \"make SOMETHING.key\"."
21 @echo "To create a CSR, run \"make SOMETHING.csr\"."
22 @echo "To create a test certificate, run \"make SOMETHING.crt\"."
23 @echo "To create a key and a test certificate in one file, run \"make SOMETHING.pem\"."
24 @echo
25 @echo "To create a key for use with Apache, run \"make genkey\"."
26 @echo "To create a CSR for use with Apache, run \"make certreq\"."
27 @echo "To create a test certificate for use with Apache, run \"make testcert\"."
28 @echo
29 @echo "To create a test certificate with serial number other than random, add SERIAL=num"
30 @echo "You can also specify key length with KEYLEN=n and expiration in days with DAYS=n"
31 @echo "Any additional options can be passed to openssl req via EXTRA_FLAGS"
32 @echo
33 @echo Examples:
34 @echo " make server.key"
35 @echo " make server.csr"
36 @echo " make server.crt"
37 @echo " make stunnel.pem"
38 @echo " make genkey"
39 @echo " make certreq"
40 @echo " make testcert"
41 @echo " make server.crt SERIAL=1"
42 @echo " make stunnel.pem EXTRA_FLAGS=-sha384"
43 @echo " make testcert DAYS=600"
44
[root@r8 .private]
[root@r8 .private]
[root@r7 CA]
[root@r7 CA]
[root@c7 CA]
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Nov 15 03:55:03 2021 GMT
Not After : Nov 15 03:55:03 2022 GMT
Subject:
countryName = CN
stateOrProvinceName = Sichuan
organizationName = example
organizationalUnitName = test
commonName = www.testtest.cn
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
56:3A:77:48:40:9C:E3:75:12:23:D6:BF:AA:DD:E8:23:3A:BE:6B:52
X509v3 Authority Key Identifier:
keyid:8F:1D:59:FD:AE:10:DE:23:36:B2:BD:42:27:13:02:D9:4D:E6:20:17
Certificate is to be certified until Nov 15 03:55:03 2022 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@c7 certs]
[root@c7 CA]
[root@c7 CA]
Using configuration from /etc/pki/tls/openssl.cnf
01=Revoked (R)
[root@c7 CA]
R 221115035503Z 211115040617Z 01 unknown /C=CN/ST=Sichuan/O=example/OU=test/CN=www.testtest.cn
[root@c7 CA]
[root@centos8 ~]
[root@centos8 ~]
2、总结ssh常用参数、用法
实验环境介绍: OS: centos7.9 ip = 10.48.4.7;Redhat8.1 ip = 10.48.4.8;ubuntu18.04 ip = 10.48.4.18
- Port
指定默认连接服务端的哪个端口,默认一般为22。当服务端sshd侦听的不是默认端口时,可以修改此项值来永久设置默认连接端口。 可以通过-p 选项临时指定连接的服务端端口。 - StrictHostKeyChecking
如果此标志设置为 yes ,ssh 将永远不会自动将主机密钥添加到 ~/.ssh/known_hosts 文件,并拒绝连接到主机密钥已更改的主机。 这提供了对特洛伊木马攻击的最大保护,但当 /etc/ssh/ssh_known_hosts 文件维护不善或频繁连接到新主机时可能会很烦人。 此选项强制用户手动添加所有新主机。 如果此标志设置为 no ,ssh 将自动将新的主机密钥添加到用户已知的主机文件中。 如果这个标志设置为 ask (默认),只有在用户确认这是他们真正想要做的事情后,新的主机密钥才会被添加到用户已知的主机文件中,并且 ssh 将拒绝连接到其主机密钥的主机 已经改变。 在所有情况下都会自动验证已知主机的主机密钥。 也可通过 -o 临时选项指定参数
[root@c7 ~]
StrictHostKeyChecking yes
[root@c7 ~]
[root@c7 ~]
total 4
drwx------. 2 root root 6 Oct 31 19:25 .
dr-xr-xrw-. 4 root root 4096 Oct 31 19:25 ..
[root@c7 ~]
[root@c7 ~]
No ECDSA host key is known for 10.48.4.8 and you have requested strict checking.
Host key verification failed.
[root@c7 ~]
[root@r8 .ssh]
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAWqzR1HlQgRVvHh1HN8xARbJcqh7nAf0UcZHGCSNGHviiCshR3+vl5bDPxETd9tTzN6bELN0/PTWLHbzZsiv5E=
[root@c7 .ssh]
10.48.4.8 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAWqzR1HlQgRVvHh1HN8xARbJcqh7nAf0UcZHGCSNGHviiCshR3+vl5bDPxETd9tTzN6bELN0/PTWLHbzZsiv5E=
[root@c7 .ssh]
[root@c7 .ssh]
root@10.48.4.8\'s password:
Last login: Mon Nov 1 22:39:47 2021 from 10.48.4.7
[root@r8 ~]
[root@r8 .ssh]
[root@r8 .ssh]
HostKey /root/.ssh/id_rsa
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
[root@r8 .ssh]
[root@c7 .ssh]
10.48.4.8 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCVt68VuEYo5Ft7Bg8qujjIcKhSjFg3rsWEshfeQ2cMIhOvXInXTvdmLewh47d9m4cedpG55Ie0kbiZSCEQYNB8cRgy3D58rAFVewQB3k3jplq1L4y5MagbKjyyzfJyyLVeKp7ljl4FIwI+kg5/rCZlNW+OqRkbgzDfzfxdW46hCZyelIFIui6uU6udSlOrR3BYBOLvnfMBfJ1LoFyprrNLQf5n7649QtxgxflDCbPmhLbypljHgFsW65CrmvFFWUe6Ssbb9+bvOhXqVD+ITExYDAU/Xi3qAwQyZC2NtqBoVdEQ58sx3iTdpcOMAnd1wUJvAGTfNAj53fRDI2pP+rVyxsWTSC8w/0ddYIkw2/lNCpYEQ57yrUwVDoaDiWlzQ93zzxAVi0IRrFJwWhZCXZhZUXhlWpsatlKeJg3EEXBAFBQp2RUtitKmCJJvAteagAtfPuj0ogYbTIQBO4gd8u07TmYCN0YSKMaOFtIGSSF/WIl0V24FcjWm5Y9JE8n8l3U=
[root@c7 .ssh]
root@10.48.4.8\'s password:
Last login: Mon Nov 1 23:00:35 2021 from 10.48.4.7
- -t 选项
强制伪tty分配。这可用于在远程机器上执行任意基于屏幕的程序,这非常有用,例如 在实现菜单服务时。 多个 -t 选项强制 tty 分配,即使 ssh 没有本地 tty。 root@r8 ~]
root@10.48.4.7's password:
root@10.48.4.18's password:
root@10.48.4.8's password:
Last login: Fri May 22 09:10:28 2020 from 10.48.4.18
[root@r8 ~]
3、总结sshd服务常用参数
sshd 服务参数在/etc/ssh/sshd_config 配置文件中定义,可通过执行man 5 sshd_config 命令查看配置文件各参数说明。 实验环境介绍: 客户端主机(r8)ip=10.48.4.8 服务端主机(c7)ip=10.48.4.7
常用的参数如下:
-
port 指定sshd 守护进程侦听的端口号,默认为 22 ,这种类型的多个选项是允许的。 -
ListenAddress 指定sshd守护进程应该监听的本地地址。使用格式如下: ListenAddress host | IPv4_addr | IPv6_addr ListenAddress host | IPv4_addr:port ListenAddress [ host | IPv6_addr ]:port 如果 port 没有被指定,sshd 将侦听指定的地址和所有端口选项。默认情况下侦听所有的本地地址,允许多个ListenAddress 选项设置。 -
LoginGraceTime 在LoginGraceTime 指定的时间内,如果用户没有成功登录,则服务器断开连接。如果该参数的值为0 ,则表示没有时间限制。该参数数默认值为120s 。其值不指定单位,默认以s 为单位。 配置举例:LoginGraceTime 2m -
PermitRootLogin 指定root 用户是否能够通过ssh 登录。 参数值必须是:yes 、prohibit-password 、without-password 、forced-commands-only 以及no 之一。 (Centos系统默认是:yes ,Ubuntu系统默认是:prohibit-password )
如果该参数被设置为:prohibit-password 或 without-password ,则对root 用户禁用密码和键盘交互身份验证 ;
如果该参数被设置为:forced-commands-only ,将允许使用公钥身份验证的root 登录,但前提是已指定命令选项。该参数对于只允许远程用户执行少数命令(如 远程备份)的场景很有用。
[root@c7 ~]
PermitRootLogin forced-commands-only
[root@c7 ~]
from="10.48.4.8",command="/usr/bin/who" ssh-rsa AAAAB3NzaC1yc2EAAA......
[root@c7 ~]
[root@r8 ~]
Enter passphrase for key '/root/.ssh/id_rsa':
root pts/0 2021-10-31 05:14 (10.48.0.1)
root pts/1 2021-10-31 06:26 (10.48.4.8)
Connection to 10.48.4.7 closed.
[root@r8 ~]
如果该参数被设置为:no ,root 用户不被允许登录。
-
StrictModes 该参数一般用于免密登录,指定sshd 守护进程是否应该在接受登录之前检查文件访问权限以及用户文件和家目录的所有权。 这通常是可取的,因为新手有时会意外地将他们的目录或文件设为全局可写。 默认为yes 。 请注意,这不适用于 ChrootDirectory ,其权限和所有权是无条件检查的。 该参数会检查:.ssh/authorized_keys 、.ssh 目录以及$HOME 目录的访问权限和所有权。如果不严格满足规定的要求,就不允许免密登录。
[root@c7 ~]
StrictModes yes
[root@c7 ~]
[root@c7 ~]
[root@c7 ~]
drwx---rw-. 2 root root 80 Oct 31 08:01 .ssh
[root@c7 ~]
[root@c7 ~]
[root@c7 ~]
[root@r8 ~]
root@10.48.4.7: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
[root@r8 ~]
[root@c7 ~]
StrictModes no
[root@c7 ~]
[root@r8 ~]
Enter passphrase for key '/root/.ssh/id_rsa':
Last login: Sun Oct 31 08:04:27 2021 from 10.48.4.8
[root@c7 ~]
-
MaxAuthTries 指定每个连接允许的最大身份验证尝试次数。 一旦失败次数达到此值的一半,就会记录额外的失败。 默认值是6。 -
MaxSessions 指定每个网络连接允许的最大打开 shell、登录或子系统(例如 sftp)会话数。 支持连接多路复用的客户端可以建立多个会话。将 MaxSessions 设置为 1 将有效禁用会话多路复用,而将其设置为 0 将阻止所有 shell、登录和子系统会话,同时仍允许转发。 默认值是10。 -
PubkeyAuthentication 指定是否允许公钥认证。 默认是yes。 -
PermitEmptyPasswords 当开启密码认证时,指定服务器是否允许使用空密码字符串登录。默认是“no”。 -
PasswordAuthentication 指定是否允许密码认证,默认是 “yes” -
GatewayPorts 指定是否允许远程主机连接到为客户端转发的端口。 默认情况下,ssh(8) 将远程端口转发绑定到环回地址。 这可以防止其他远程主机连接到转发端口。 GatewayPorts 可用于指定 sshd 应允许远程端口转发绑定到非环回地址,从而允许其他主机连接。 参数可能是 no 强制远程端口转发仅对本地主机可用,yes 强制远程端口转发绑定到通配符地址,或 client 指定以允许客户端选择转发绑定到的地址。默认值是“no” -
ClientAliveInterval 设置一个以秒为单位的超时间隔,如果没有从客户端接收到数据,sshd(8) 将通过加密通道发送消息以请求客户端的响应。 默认为 0,表示这些消息不会发送到客户端。 -
ClientAliveCountMax 设置客户端活动消息的数量,这些消息可以在 sshd(8) 没有从客户端接收任何消息的情况下发送。 如果在发送客户端活动消息时达到此阈值,sshd 将断开客户端连接,终止会话。 需要注意的是,客户端活动消息的使用与 TCPKeepAlive 非常不同。 客户端活动消息通过加密通道发送,因此不会被欺骗。 TCPKeepAlive 启用的 TCP keepalive 选项是可欺骗的。 当客户端或服务器依赖于知道连接何时变为非活动状态时,客户端活动机制很有价值。 -
UseDNS 指定 sshd(8) 是否应该查找远程主机名,并检查远程 IP 地址的解析主机名是否映射回完全相同的 IP 地址。 默认值为“yes”。 -
GSSAPIAuthentication 指定是否允许基于 GSSAPI 的用户身份验证。 默认为否。 -
MaxStartups 指定到 SSH 守护程序的最大并发未经身份验证连接数。 其他连接将被丢弃,直到身份验证成功或连接的 LoginGraceTime 到期。 默认值为 10:30:100。 或者,可以通过指定三个冒号分隔的值 start:rate:full(例如“10:30:60”)来启用随机提前丢弃。 如果当前有启动 (10) 个未经身份验证的连接,sshd(8) 将以 rate/100 (30%) 的概率拒绝连接尝试。 如果未经身份验证的连接数已满 (60),则概率会线性增加,并且所有连接尝试都会被拒绝。 -
Banner 在允许身份验证之前,指定文件的内容将发送给远程用户。 如果参数为 none,则不显示横幅。 默认情况下,不显示横幅。 -
AllowUsers 它的关键字后面可以跟一个用户名模式列表,用空格分隔。 如果指定,则仅允许与其中一种模式匹配的用户名登录。 只有用户名有效; 无法识别数字用户 ID。 默认情况下,允许所有用户登录。 如果模式采用 USER@HOST 的形式,则分别检查 USER 和 HOST,将登录限制为来自特定主机的特定用户。 HOST 标准可能还包含要以 CIDR 地址/掩码格式匹配的地址。 允许/拒绝指令按以下顺序处理:DenyUsers、AllowUsers、DenyGroups,最后是 AllowGroups。 在允许用户登录之前,所有指定的用户和组测试必须成功。 -
DenyUsers 此关键字后面可以跟一个用户名模式列表,以空格分隔。 与其中一种模式匹配的用户名不允许登录。 只有用户名有效; 无法识别数字用户 ID。 默认情况下,允许所有用户登录。 如果模式采用 USER@HOST 的形式,则分别检查 USER 和 HOST,将登录限制为来自特定主机的特定用户。 HOST 标准可能还包含要以 CIDR 地址/掩码格式匹配的地址。 允许/拒绝指令按以下顺序处理:DenyUsers、AllowUsers、DenyGroups,最后是 AllowGroups。 在允许用户登录之前,所有指定的用户和组测试必须成功。 -
AllowGroups 此关键字后面可以跟一个组名模式列表,以空格分隔。 如果指定,则仅允许主要组或补充组列表与其中一种模式匹配的用户登录。 只有组名有效; 无法识别数字组 ID。 默认情况下,所有组都允许登录。 允许/拒绝指令按以下顺序处理:DenyUsers、AllowUsers、DenyGroups,最后是 AllowGroups。 在允许用户登录之前,所有指定的用户和组测试必须成功。 -
DenyGroups 此关键字后面可以跟一个组名模式列表,以空格分隔。 对于主要组或补充组列表与其中一种模式匹配的用户,不允许登录。 只有组名有效; 无法识别数字组 ID。 默认情况下,所有组都允许登录。 允许/拒绝指令按以下顺序处理:DenyUsers、AllowUsers、DenyGroups,最后是 AllowGroups。 在允许用户登录之前,所有指定的用户和组测试必须成功。
4、搭建dhcp服务,实现ip地址申请分发
4.1 安装dhcp服务
[root@hosta ~]
[root@r8 ~]
root@ut:~
4.2 修改配置文件
[root@centos8 ~]
option domain-name "example.org";
option domain-name-servers ns1.example.org,114.114.114.114;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 10.48.0.0 netmask 255.240.0.0 {
range 10.48.4.100 10.48.4.199;
option routers 10.48.0.1;
}
...
host hostA {
hardware ethernet 00:0c:29:33:b4:1a;
fixed-address 10.48.4.119;
default-lease-time 86400;
max-lease-time 864000;
option routers 10.48.0.1;
option domain-name-servers 114.114.114.114,8.8.8.8;
option domain-name "example.com";
}
...
4.3 启动dhcp服务
[root@c7 ~]
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.
[root@c7 ~]
root@ut:/etc/systemd/system
Synchronizing state of isc-dhcp-server.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable isc-dhcp-server
root@ut:/etc/systemd/system
root@ut:
参考链接
|