1. 总结openssh服务安全加固和总结openssh免密认证原理,及免认证实现过程。
openssh服务安全加固:
1.使用强密码策略
2.使用公钥认证
3.修改SSH默认端口
openssh免密认证原理:
1. 客户端发起ssh请求,服务器会把自己的公钥发送给用户
2. 用户会根据服务器发来的公钥对密码进行加密
3. 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功
免认证实现过程:
1. 首先在客户端生成一对密钥(ssh-keygen)
2. 并将客户端的公钥ssh-copy-id 拷贝到服务端
3. 当客户端再次发送一个连接请求,包括ip、用户名
4. 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:magedu
5. 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
6. 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
7. 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
2. 总结sudo配置文件格式,总结相关示例。
授权规则配置文件:
/etc/sudoers
/etc/sudoers.d
安全编辑授权规则文件和语法检查工具
/usr/sbin/visudo
sudoers授权规则格式:
用户 登入主机=(代表用户)命令
user host=(runas) command
范例:
[root@rocky8 ~]# vim /etc/sudoers
root ALL=(ALL) ALL
3. 总结PAM架构及工作原理
PAM架构:
PAM提供了对所有服务进行认证的中央机制,适用于本地登录,远程登录,如:telnet,rlogin,fsh,ftp,点对点协议PPP,su等应用程序中,系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略;应用程序开发者通过在服务程序中使用PAM API(pam_xxxx( ))来实现对认证方法的调用;而PAM服务模块的开发者则利用PAM SPI来编写模块(主要调用函数pam_sm_xxxx( )供PAM接口库调用,将不同的认证机制加入到系统中;PAM接口库(libpam)则读取配置文件,将应用程序和相应的PAM服务模块联系起来
PAM工作原理:
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证
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/格式
type:指模块类型,即功能
control :PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现
module-path: 用来指明本模块对应的程序文件的路径名
Arguments: 用来传递给该模块的参数
总结相关示例:
5. 实现私有时间服务器
服务端配置:
[root@rocky8 ~]# yum -y install chrony
[root@rocky8 ~]# vim /etc/chrony.conf
[root@rocky8 ~]# systemctl restart chronyd.service
客户端配置
[root@rocky8-1 ~]# vim /etc/chrony.conf
[root@rocky8-1 ~]# systemctl restart chronyd.service
6. 总结DNS域名三级结构
1、顶级域名(Top-Level Domain,TLD):顶级域名是一个域名的最高层次,通常表示一个国家、地区或组织类型。例如,.com表示商业组织,.org表示非赢利组织,.edu表示教育机构,.cn表示中国等。顶级域名还可以分为两种类型:国家顶级域名(Country-Code Top-Level Domain,ccTLD)和通用顶级域名(Generic Top-Level Domain,gTLD)。
2、二级域名(Second-Level Domain,SLD):二级域名是紧接在顶级域名后面的域名部分,用于区分不同的组织或实体。例如,在“.com”顶级域名下,“baidu”就是一个二级域名,“baidu.com”就是一个完整的域名。
3、三级域名(Third-Level Domain):三级域名是紧接在二级域名后面的域名部分,通常用于进一步区分不同的部门、区域或主机名。例如,在“baidu.com”二级域名下,“www”可以是一个三级域名,“www.baidu.com”就是一个完整的域名。
7. 总结DNS服务工作原理,涉及递归和迭代查询原理
1、用户在浏览器中输入域名,如www.baidu.com。
2、浏览器向本地DNS服务器发送DNS查询请求。
3、如果本地DNS服务器已经缓存了该域名对应的IP地址,则直接返回给浏览器。
4、如果本地DNS服务器没有缓存该域名对应的IP地址,则向根域名服务器发送递归查询请求。
5、根域名服务器返回给本地DNS服务器该域名对应的顶级域名服务器的IP地址。
6、本地DNS服务器向顶级域名服务器发送迭代查询请求。
7、顶级域名服务器返回给本地DNS服务器该域名对应的二级域名服务器的IP地址。
8、本地DNS服务器向二级域名服务器发送迭代查询请求。
9、二级域名服务器返回给本地DNS服务器该域名对应的主机名的IP地址。
10、本地DNS服务器将IP地址返回给浏览器,并将该域名和IP地址缓存起来。
递归查询 指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果
迭代查询 不直接回复查询结果,而是告诉另一台DNS服务器地址,用户这样依次反复查询
8. 实现私有DNS, 供本地网络主机作DNS递归查询。
[root@rocky8 ~]# yum -y install bind
[root@rocky8 ~]# systemctl enable --now named
[root@rocky8 ~]# vim /etc/named.conf
[root@rocky8 ~]# rndc reload
用另一台服务器做客户端,填DNS:10.0.0.8验证结果
[root@rocky8-1 ~]# yum -y install bind-utils
[root@rocky8-1 ~]# dig www.baidu.com
9. 总结DNS服务器类型,解析答案,正反解析域,资源记录定义。
DNS服务器类型:
主DNS服务器
从DNS服务器
缓存DNS服务器(转发器)
解析答案:
肯定答案:存在对应的查询结果
否定答案:请求的条目不存在等原因导致无法返回结果
权威答案:直接由存有此查询结果的DNS服务器(权威服务器)返回的答案
非权威答案:由其它非权威服务器返回的查询答案
正反解析域:
正向:FQDN-->IP
反向:IP-->FQDN
资源记录定义:
name [TTL] IN rr_type value
注意:
1.TTL可从全局继承
2.使用“@”符号可用于引用当前区域的域名
3.同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
4.同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义,此仅表示通过多个不同的名字可以找到同一个主机
10. 实现DNS主从同步
主DNS服务器配置:
[root@rocky8 ~]# yum -y install bind
[root@rocky8 ~]# vim /etc/named.conf
[root@rocky8 ~]# vim /etc/named.rfc1912.zones
[root@rocky8 ~]# vim /var/named/wang.org.zone
[root@rocky8 ~]# chmod 640 /var/named/wang.org.zone
[root@rocky8 ~]# chgrp named /var/named/wang.org.zone
[root@rocky8 ~]# ll /var/named/wang.org.zone
-rw-r----- 1 root named 152 Jul 14 07:43 /var/named/wang.org.zone
[root@rocky8 named]# yum -y install bind-utils
[root@rocky8 ~]# cd /var/named/
[root@rocky8 named]# named-checkzone wang.org wang.org.zone
[root@rocky8 named]# rndc reload
从服务器配置:
[root@rocky8-1 ~]# yum -y install bind bind-utils
[root@rocky8-1 ~]# vim /etc/named.conf
[root@rocky8-1 ~]# named-checkconf
[root@rocky8-1 ~]# vim /etc/named.rfc1912.zones
从服务器会自动从主服务器上把/var/named/wang.org.zone拷贝到从服务器上/var/named/slaves/wang.org.slave.zone上,以下是操作
[root@rocky8 named]# systemctl start named 主服务器启动服务
[root@rocky8-1 ~]# systemctl enable --now named 从服务器上启动服务
[root@rocky8 ~]# vim /var/named/wang.org.zone
[root@rocky8 ~]# rndc reload
11. 实现DNS子域授权
主域DNS服务器:
[root@rocky8 ~]# yum -y install bind bind-utils
[root@rocky8 ~]# vim /etc/named.conf
[root@rocky8 ~]# vim /etc/named.rfc1912.zones
[root@rocky8 ~]# vim /var/named/wang.org.zone
[root@rocky8 ~]# chgrp named /var/named/wang.org.zone
[root@rocky8 ~]# systemctl start named
[root@rocky8 ~]# named-checkzone wang.org /var/named/wang.org.zone
实现子域DNS服务器:
[root@rocky8-1 ~]# yum -y install bind bind-utils
[root@rocky8-1 ~]# vim /etc/named.conf
[root@rocky8-1 ~]# vim /etc/named.rfc1912.zones
[root@rocky8-1 ~]# cp -p /var/named/named.localhost /var/named/shanghai.wang.org.zone
[root@rocky8-1 ~]# systemctl start named
客户端进行测试:
[root@rocky8-2 ~]# yum -y install bind-utils
12. 基于acl实现智能DNS
[root@zhao ~]# yum install bind -y
[root@zhao ~]# vim /etc/named.conf
[root@zhao ~]# vim /etc/named.rfc1912.zones.bj
[root@zhao ~]# vim /etc/named.rfc1912.zones.sh
[root@zhao ~]# vim /etc/named.rfc1912.zones.other
[root@zhao ~]# chgrp named /etc/named.rfc1912.zones.bj
[root@zhao ~]# chgrp named /etc/named.rfc1912.zones.sh
[root@zhao ~]# chgrp named /etc/named.rfc1912.zones.other
[root@zhao ~]# vim /var/named/wang.org.zone.bj
[root@zhao ~]# vim /var/named/wang.org.zone.sh
[root@zhao ~]# vim /var/named/wang.org.zone.other
[root@zhao ~]# chgrp named /var/named/wang.org.zone.bj
[root@zhao ~]# chgrp named /var/named/wang.org.zone.sh
[root@zhao ~]# chgrp named /var/named/wang.org.zone.other
systemctl start named #第一次启动服务
rndc reload #不是第一次启动服务
#在web服务器1:10.0.0.8/24实现
yum install httpd
echo www.magedu.org in Other > /var/www/html/index.html
systemctl start httpd
#在web服务器2:10.0.0.7/16
echo www.magedu.org in Beijing > /var/www/html/index.html
systemctl start httpd
#在web服务器3:172.16.0.7/16
yum install httpd
echo www.magedu.org in Shanghai > /var/www/html/index.html
systemctl start httpd
客户端测试
#分别在三台主机上访问
#DNS客户端1:10.0.0.6/24 实现,确保DNS指向10.0.0.8
curl www.magedu.org
www.magedu.org in Beijing
#DNS客户端2:172.16.0.6/16 实现,确保DNS指向172.16.0.8
curl www.magedu.org
www.magedu.org in Shanghai
#DNS客户端3:10.0.0.8 实现,,确保DNS指向127.0.0.1
curl www.magedu.org
www.magedu.org in Other
13. 总结防火墙分类
按保护范围划分:
主机防火墙:服务范围为当前一台主机
网络防火墙:服务范围为防火墙一侧的局域网
按实现方式划分:
硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,如:华为,山石hillstone,天融信,启明星辰,绿盟,深信服, PaloAlto , fortinet飞塔, Cisco, Checkpoint,NetScreen(2004年被 Juniper 用40亿美元收购)等
软件防火墙:运行于通用硬件平台之上的防火墙的应用软件,Windows 防火墙 ISA --> Forefront TMG
按网络协议划分:
网络层防火墙:OSI模型下四层,又称为包过滤防火墙
应用层防火墙/代理服务器:proxy 代理网关,OSI模型七层
14. 总结iptable 5表5链, 基本使用,扩展模块。
iptables的五表五链是Linux防火墙管理的重要概念,它允许用户根据不同的需求定制防火墙规则。这五张表和五条链分别是:
五表:
raw表:确定是否对该数据包进行状态跟踪。
mangle表:修改IP数据包头(如TTL值),同时也用于为数据包设置标记。
nat表:处理网络地址转换,以及修改数据包中的源、目标IP地址或端口等。
filter表:过滤数据,确定是否放行该数据包。
security表:需要和SELinux结合使用,内置规则比较复杂,通常都会被关闭。
五链:
INPUT链:处理入站数据包。
OUTPUT链:处理出站数据包。
FORWARD链:处理转发数据包。
PREROUTING链:在进行路由选择前处理数据包。
POSTROUTING链:在进行路由选择后处理数据包。
规则表与规则链的关系:规则链位于规则表中,规则表是规则链的集合。默认情况下,有四个规则表和五种规则链。规则表间的优先顺序依次为raw、mangle、nat、filter。规则链间的匹配顺序遵循入站数据(PREROUTING、INPUT)、出站数据(OUTPUT、POSTROUTING)、转发数据(PREROUTING、FORWARD、POSTROUTING)的顺序。
filter表主要涉及INPUT、FORWARD、OUTPUT三条链,是iptables命令默认操纵的表,用于数据包过滤功能。
nat表主要涉及PREROUTING、OUTPUT、POSTROUTING三条链,用于地址转换功能,如NAT转换。
mangle表允许在每条链上进行修改操作,如修改报文元数据或为数据包设置防火墙标记等。
raw表提供快速通道功能,优先级最高,符合raw表规则的数据包会跳过一些检查。
security表需要与SELinux结合使用,通常都会被关闭,除非有特定的安全需求。
通过iptables的这些功能,可以灵活地控制网络流量,实现访问控制、端口转发、地址转换等多种网络安全策略
[root@rocky8 ~]# iptables -t nat -vnL -t接表
iptables [-t table] {-A|-C|-D} chain rule-specification -A接链
扩展模块分为隐式扩展和显示扩展
隐式扩展:
iptables 在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块
tcp 协议的扩展选项
REJECT:--reject-with:icmp-port-unreachable默认
RETURN:返回调用链
REDIRECT:端口重定向
LOG:记录日志,dmesg
MARK:做防火墙标记
DNAT:目标地址转换
SNAT:源地址转换
MASQUERADE:地址伪装
显示扩展:
显示扩展即必须使用-m选项指明要调用的扩展模块名称,需要手动加载扩展模块
[-m matchname [per-match-options]]
范例:[root@rocky8 ~]# iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp -m multiport --dports 22,80 -j ACCEPT
[root@rocky8 ~]# iptables -F 清楚规则(默认清楚filter表规则)
15. 总结iptables规则优化实践,规则保存和恢复。
iptables规则优化实践
1. 安全放行所有入站和出站的状态为ESTABLISHED状态连接,建议放在第一条,效率更高
2. 谨慎放行入站的新请求
3. 有特殊目的限制访问功能,要在放行规则之前加以拒绝
4. 同类规则(访问同一应用,比如:http ),匹配范围小的放在前面,用于特殊处理
5. 不同类的规则(访问不同应用,一个是http,另一个是mysql ),匹配范围大的放在前面,效率更高
6. 应该将那些可由一条规则能够描述的多个规则合并为一条,减少规则数量,提高检查效率
7. 设置默认策略,建议白名单(只放行特定连接)
iptables -P,不建议,容易出现“自杀现象”
规则的最后定义规则做为默认策略,推荐使用,放在最后一条
规则保存:
[root@rocky8 ~]# mkdir /data/backup
[root@rocky8 ~]# iptables-save > /data/backup/rules.bak
规则恢复:
[root@rocky8 ~]# iptables-restore < /data/backup/rules.bak
16. 总结NAT转换原理, DNAT/SDNAT原理,并自行设计架构实现DNAT/SNAT。
NAT、DNAT、SNAT转换原理:
NAT: network address translation,支持PREROUTING,INPUT,OUTPUT,POSTROUTING四个链
请求报文:修改源/目标IP,由定义如何修改
响应报文:修改源/目标IP,根据跟踪机制自动实现
NAT的实现分为下面类型:
SNAT:source NAT ,支持POSTROUTING, INPUT,让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装,请求报文:修改源IP
DNAT:destination NAT 支持PREROUTING , OUTPUT,把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP,请求报文:修改目标IP
PNAT: port nat,端口和IP都进行修改
自行设计架构实现SNAT:
启用路由转发功能:
[root@rocky8 ~]# sysctl -a |grep ip_forward
net.ipv4.ip_forward = 0
[root@rocky8 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@rocky8 ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@rocky8 ~]# hostname -I
10.0.0.8 192.168.10.131
[root@lan-host ~]# hostname -I
192.168.10.132
[root@rocky8 ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 10.0.0.8
自行设计架构实现DNAT:
[root@lan-host ~]# yum -y install httpd
[root@lan-host ~]# systemctl enable --now httpd
[root@lan-host ~]# hostname -I > /var/www/html/index.html
[root@rocky8 ~]# iptables -t nat -A PREROUTING -d 10.0.0.8 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.132:80
17. 使用REDIRECT将90端口重定向80,并可以访问到80端口的服务
[root@rocky8 ~]# yum -y install httpd
[root@rocky8 ~]# systemctl enable --now httpd
[root@rocky8 ~]# hostname -I > /var/www/html/index.html
[root@rocky8 ~]# iptables -t nat -A PREROUTING -d 10.0.0.8 -p tcp --dport 90 -j REDIRECT --to-ports 80
18. firewalld常见区域总结。
drop区域:任何进入此区域的包都会被直接丢弃,没有任何回应。
block区域:任何进入此区域的流量都会被拒绝,并返回一个ICMP错误消息。
public区域:用于公共区域,仅接受那些被选择的连接。
external区域:专门用于路由器等具有独立外部网络的设备。
dmz区域:用于放置受限的内部网络区域,如企业的非安全区域。
work区域:用于工作区,可以接受选定的传入连接。
home区域:用于家庭网络,可以接受选定的传入连接。
internal区域:用于内部网络,可以接受选定的传入连接。
trusted区域:所有进入此区域的包都会被接受,没有任何限制。