1. 总结openssh服务安全加固
SSH是远程控制中广泛使用的数据传输工具,所有的Linux系统默认都会启用此服务,但是SSH默认的配置文件存在很多的安全隐患,需要将SSH服务的配置文件重新配置才能起到安全加固的作用,以下是需要安全加固需要修改的项目:
SSH默认的配置文件所在目录为/etc/ssh/sshd_config
- 禁用不安全的加密算法:在sshd_config文件中禁用不安全的加密算法,如DES和RC4等,建议只使用AES和ChaCha20等安全加密算法。
- 禁用root账号远程登录: 配置项为PermitRootLogin no
- 禁用空密码: 配置项为PermitEmptyPasswords no
- 限制用户登录:可以通过修改sshd_config文件中的AllowUsers或DenyUsers选项来限制哪些用户可以登录,也可以使用PAM模块限制用户登录。
- 限制身份最大尝试连接次数: 配置项为MaxAuthTries 3
- 使用强密码策略:可以通过修改sshd_config文件中的PasswordAuthentication选项来启用强密码策略,建议设置密码最小长度、密码复杂度等。
- 防止暴力破解:可以通过修改sshd_config文件中的MaxAuthTries选项来限制用户登录失败的次数,也可以使用Fail2ban等软件来防止暴力破解。
- 使用公钥认证:使用公钥认证可以减少密码泄露的风险,建议禁用密码认证并启用公钥认证。
- 修改SSH默认端口:将SSH默认端口修改为非常用端口,可以减少暴力破解的风险。
- 定期更新OpenSSH版本:及时更新OpenSSH版本可以修复安全漏洞和提升安全性能。
- 配置防火墙:使用防火墙可以限制SSH服务的访问范围,只允许必要的IP地址访问SSH服务端口。
- 显示最后一次登录的时间和日期。配置项为PrintLastLog yes
2. 总结sudo配置文件格式,总结相关示例。
sudo授权规则配置文件 /etc/sudoers
sudo授权的规则方式:
用户 登入主机=(代表用户) 命令
User host=(runas) command
授权root账号,可以任何人登录主机:
root ALL=(ALL) ALL
1.配置规则:
别名定义:大字母_下划线_数字_不能有小写字母
2.授权规则:必须按照格式输入
当授权众多比较复杂时的时候,可以选择在/etc/sudoers.d 所在的目录下创建文件,之后在里面输入相应的配置。
3. 总结PAM架构及工作原理
PAM(Pluggable Authentication Modules)即可插拔式认证模块,它是一种高效而且灵活便利的用户级别的认证方式,它也是当前Linux服务器普遍使用的认证方式。
- PAM构架:
- 1、应用程序:需要进行身份验证或授权的应用程序,如 SSH、sudo、login 等。
- 2、PAM 库:PAM 库是一个公共库,它提供了用于进行身份验证和授权的 API。应用程序使用这些 API 与 PAM 进行交互。
- 3、PAM 配置文件:PAM 配置文件位于 /etc/pam.d 目录中。每个应用程序都有一个对应的 PAM 配置文件,用于指定身份验证和授权流程。配置文件中包含一个或多个 PAM 模块,它们是用于完成特定任务的代码库。
- 4、PAM 模块:PAM 模块是用于执行身份验证和授权任务的代码库。模块可用于检查用户密码、检查用户是否在允许的 IP 范围内、检查用户帐户是否已过期等。PAM 模块可以使用已安装的身份验证技术(如密码、Kerberos、LDAP 等)进行身份验证。
- 5、身份验证源:身份验证源是用于进行身份验证的数据源,如本地用户数据库、LDAP 目录等。
- PAM工作原理:
- PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
- PAM 的工作原理是检查应用程序请求的认证任务,然后根据系统的配置文件和安装的 PAM 模块来决定如何执行该任务。PAM 模块可以按特定顺序组合,以便在完成认证之前检查用户是否存在于数据库中,并验证其凭证,以及检查用户是否已经过限
- 1.使用者执行/usr/bin/passwd 程序,并输入密码
- 2.passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个设置文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passwd此设置文件
- 3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证
- 4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)
4. 总结PAM配置文件格式,总结相关示例, nologin.so, limits,等模块的使用。
专用pam配置文件格式/etc/pam.d/
application:指服务名,如:telnet、login、ftp等,服务名字“OTHER”代表所有没有在该文件中明确配置的其它服务
type:指模块类型,即功能
control :PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现
module-path: 用来指明本模块对应的程序文件的路径名
Arguments: 用来传递给该模块的参数
type类型
Auth 账号的认证和授权
Account 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)
Password 用户修改密码时密码复杂度检查机制等功能
Session 用户会话期间的控制,如:最多打开的文件数,最多的进程数等
-type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用
control类型
required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕,再将失败结果返回给应用程序,即为必要条件
requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件
sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件,优先于前面的required和requisite
optional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略
include: 调用其他的配置文件中定义的配置信息
module-path
模块文件所在绝对路径:
模块文件所在相对路径:/lib64/security目录下的模块可使用相对路径,如:pam_shells.so、pam_limits.so
有些模块有自已的专有配置文件,在/etc/security/*.conf目录
Arguments
debug :该模块应当用syslog( )将调试信息写入到系统日志文件中
no_warn :表明该模块不应把警告信息发送给应用程序
use_first_pass :该模块不能提示用户输入密码,只能从前一个模块得到输入密码
try_first_pass :该模块首先用前一个模块从用户得到密码,如果该密码验证不通过,再提示用户输入新密码
use_mapped_pass 该模块不能提示用户输入密码,而是使用映射过的密码
expose_account 允许该模块显示用户的帐号名等信息,一般只能在安全的环境下使用,因为泄漏用户名会对安全造成一定程度的威胁
6. 总结DNS域名三级结构
- 根域
- 使用“.”表示,位于域命名空间层次结构的最高层;
- 目前分布于全世界的根服务器只有13台,全部由Internet网络信息中心(InterNIC)管理,在根域服务器中只保存了其下层的顶级域的DNS服务器名称和IP地址对应关系;
- 顶级域(TLD,Top Level Domain)
- 顶级域位于根域下层,可以分为两类:组织域(.com,.net,.org,.gov,.edu,.mil等)和国家域(.iq,.tw,.hk,.jp,.cn等);
- 二级域
- 二级域位于顶级域下层,是指为了在Internet上使用而注册到个人或企事业单位的域名;
- 子域
- 子域是根据具体情况从二级域中按部门或地理位置创建;
- 主机名
- 位于DNS域命名空间的最低层,主要指计算机的主机名;
- 注意:FQDN(Full Qualified Domain Name,完全合格域名)包括域名和主机名;
7. 总结DNS服务工作原理,涉及递归和迭代查询原理
- 1. 客户端向DNS服务器发送DNS请求:
- 当客户端在浏览器中输入网址时,浏览器会向DNS服务器发送一个请求,请求DNS服务器将域名转换为IP地址。并且反馈给客户端用户
- 2. DNS服务器查找本地缓存:
- DNS服务器收到DNS请求时,它首先查找本地缓存。如果DNS解析已经在最近的DNS记录,那么DNS服务器会直接返回缓存的结果。提供客户端使用。
- 3. DNS服务器向根域名服务器查询:
- 当本地缓存中没有找到相关的地址时,DNS服务器会向根域名服务器查询。 DNS服务器向根域名服务器发送一个请求,以获取指向该域名下的子服务器的地址。
- 4. DNS服务器向该域名下的DNS服务器查询:
- 一旦DNS服务器接收到根域名服务器的响应,并获取指向相关DNS服务器的IP地址,DNS服务器会将其请求转发给该域名下的DNS服务器。
- 5. DNS服务器返回结果:
- 当DNS服务器收到来自子服务器的响应时,它会将IP地址发送回给客户端。此时,客户端就可以打开网站了。
递归查询:如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户端的身份,向其他根域名服务器继续发出查询请求报文,即替主机继续查询,而不是让主机自己进行下一步查询。负责检查到底,并且反馈最终结果。
迭代查询:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP 地址,要么告诉本地服务器下一步应该找哪个域名服务器进行查询,然后让本地服务器进行后续的查询。只反馈当前的结果,找不到就会询问下一个服务器,不会反馈最终结果。
8. 实现私有DNS, 供本地网络主机作DNS递归查询。
1.首先打开bind的配置文件vim /etc/named.conf
options {
listen-on port 53 { any;};
allow-query { any; };
将里面的两项设置修改any这样,这样DNS服务服务器就可以提供任何人连接了
2.查看本机的网卡配置,DNS需要指向本机,这样本机就可以当作DNS服务器同时还可以当作客户端。
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=192.168.50.5
将DNS指向本机
之后重启网卡配置
nmcli connection reload
nmcli connection up eth0
3.将bind配置文件named.rfc1912.zones,添加上主服务器,正向解析反向解析的区域文件的记录
正向解析记录
zone "gehong.com" IN {
type master;
file "gehong.com.zone";
};
反向解析记录
zone "50.168.192.in-addr.arpa" IN {
type master;
file "192.168.50.zone";
};
4. cd /var/named/ 创建主区域文件gehong.com.zone 名称需要跟主记录名字一样,这样于区域文件的记录才能找到
另外需要将文件的权限设置成640
chmod 640 gehong.com.zone
将文件归到named的用户组里
Chgrp named gehong.com.zone
5.配置正向解析文件内容
$TTL 1D
@ IN SOA master admin.gehong.com (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
NS ns1
master A 192.168.50.5
ns1 A 192.168.50.4
www A 192.168.50.5
@ A 192.168.50.5
6.将正向解析文件复制,修改好名称之后配置反向解析内容
$TTL 1D
@ IN SOA master admin.gehong.com (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS www.gehong.com.
5 IN PTR www.gehong.com.
7.进行语法检查
named-checkconf
named-checkzone gehong.com gehong.com.zone
named-checkzone 50.168.192.in-addr.arpa 192.168.50.zone
8.重启服务
systemctl restart named
9.最终测试:
[root@localhost ~]# host www.gehong.com
www.gehong.com has address 192.168.50.5
[root@localhost ~]# host 192.168.50.5
5.50.168.192.in-addr.arpa domain name pointer www.gehong.com.
成功!