1. 总结openssh服务安全加固和总结openssh免密认证原理,及免认证实现过程。
ssh服务的安全加固:
1.使用非默认端口
2.限制可登录用户
3.利用防火墙设置ssh访问策略
4.使用强密码策略
5.禁止空密码登录
6.禁止root用户直接登录
7.限制ssh的访问频率和并发在线数
8.经常分析日志
openssh免密认证的原理:共用一个公钥私钥对和授权公钥
实现过程:一台主机使用命令ssh-keygen创建公钥私钥对,使用ssh-copy-id给自己复制授权公钥,然后将使公钥私钥对和授权公钥复制给所有的主机,大家都共用一个公钥私钥对和授权公钥,即可实现无需输入密码验证的互连互通
2. 总结sudo配置文件格式,总结相关示例。
sudo配置文件:/etc/sudoers
授权规则格式:用户 登入主机=(代表用户) 完整的路径命令
user host=(runas) command
示例:simon 10.0.0.8=(root) NOPASSWD: /usr/bin/mount
3. 总结PAM架构及工作原理
应用程序 ---> PAM接口调用 [ 配置文件] ---> PAM服务模块
PAM工作原理:认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证
4. 总结PAM配置文件格式,总结相关示例, nologin.so, limits,等模块的使用。
PAM配置文件/etc/pam.d格式:type control module-path arguments
type:指模块类型
control :PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现
module-path: 用来指明本模块对应的程序文件的路径名
Arguments: 用来传递给该模块的参数
nilogin.so模块使用:创建/etc/nologin文件,将导致普通用户不能登录,登录时会显示/etc/nologin文件里的内容,并拒绝登录。
pam_limits.so模块使用:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间。
配置文件:/etc/security/limit.conf
5. 实现私有时间服务器
时间同步原理结构:
6. 总结DNS域名三级结构
根域名 (.) ---> 一级域名 (com,net,cn.top,...) ---> 二级域名 (本地域名配置文件对应的IP地址)
从上到下依次做迭代查询,不可逆转
7. 总结DNS服务工作原理,涉及递归和迭代查询原理
DNS服务工作原理:用户访问域名向本地dns解析做递归查询,如果不能直接回复查询结果,则本地dns代理解析服务器会向根域名服务器,com一级域名服务器,二级域名服务器依次向下做迭代查询。直到查询到完整地址解析对应IP后返回本地dns代理解析,由本地dns代理解析向用户返回域名对应的ip地址,并做缓存,用户端收到返回的域名对应ip后即可正常访问。
递归查询:是指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。
迭代查询:是指DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS服务器的地址,用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果。
8. 实现私有DNS, 供本地网络主机作DNS递归查询。
完成后配置后,将客户端网卡配置文件DNS指向DNS服务器IP地址
9. 总结DNS服务器类型,解析答案,正反解析域,资源记录定义。
DNS服务器类型:主DNS服务器,从DNS服务器,缓存DNS服务器
肯定答案:存在对应的查询结果
否定答案:请求的条目不存在等原因导致无法返回结果
权威答案:直接由存有此查询结果的DNS服务器(权威服务器)返回的结果
非权威答案:由其它非权威服务器返回的查询结果
正向解析:从FQDN(域名)----> IP
反向解析:从IP -----> FQDN(域名)
SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有个SOA记录,必须位于解析库的第一条记录
A:internet Address,作用,FQDN --> IP
AAAA:FQDN --> IPv6
PTR:PoinTeR,IP --> FQDN
NS:Name Server,专用于标明当前区域的DNS服务器
CNAME : Canonical Name,别名记录
MX:Mail eXchanger,邮件交换器
TXT:对域名进行标识和说明的一种方式,一般做验证记录时会使用此项,如:SPF(反垃圾邮件)记录,https验证等
10. 实现DNS主从同步
应该为一台独立的名称服务器
主服务器的区域解析库文件中必须有一条NS记录指向从服务器
从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中
主服务器得允许从服务器作区域传送
主从服务器时间应该同步,可通过ntp进行
11. 实现DNS子域授权
12. 基于acl实现智能DNS
13. 总结防火墙分类
按保护范围划分:
主机防火墙:服务范围为当前一台主机
网络防火墙:服务范围为防火墙一侧的局域网
按实现方式划分:
硬件防火墙:在专用硬件级别实现部分功能的防火墙
软件防火墙:运行于通用硬件平台之上的防火墙的应用软件
按网络协议划分:
网络层防火墙:OSI模型下四层,又称为包过滤防火墙
应用层防火墙/代理服务器:proxy 代理网关,OSI模型七层
14. 总结iptable 5表5链, 基本使用,扩展模块。
五表:filter、nat、raw、mangle、security
filter:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表
nat:network address translation 地址转换规则表
mangle:修改数据标记位规则表
raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度
security:用于强制访问控制网络规则,由Linux安全模块实现
五链:PREROUTING、INPUT、OUTPUT、FOREARD、POSTROUTING
流入本机:PREROUTING --> INPUT-->用户空间进程
流出本机:用户空间进程 -->OUTPUT--> POSTROUTING
转发(穿过):PREROUTING --> FORWARD --> POSTROUTING
拓展模块:
multiport扩展 :以离散方式定义多端口匹配,最多指定15个端口
[root@centos8 ~]# iptables -A INPUT -s 10.0.0.6 -p tcp -m multiport --dports 445,139 -j REJECT
iprange扩展:指明连续的(但一般不是整个网络)ip地址范围
[root@centos8 ~]# iptables -A INPUT -d 172.16.1.100 -p tcp --dport 80 -m iprange --src-range 172.16.1.5-172.16.1.10 -j DROP
connlimit扩展:根据每客户端IP做并发连接数数量匹配,可防止Dos(拒绝服务)攻击
[root@centos8 ~]# iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 2 -j REJECT
limit扩展:基于收发报文的速率做匹配 , 令牌桶过滤器(限流)
[root@centos8 ~]# iptables -I INPUT -d 172.16.100.10 -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
state扩展:可以根据”连接追踪机制“去检查连接的状态,较耗资源
15. 总结iptables规则优化实践,规则保存和恢复。
1.安全放行所有入站和出站的状态为ESTABLISHED状态连接,建议放在第一条,效率更高
2.谨慎放行入站的新请求
3.有特殊目的限制访问功能,要在放行规则之前加以拒绝
4.同类规则(访问同一应用,比如:http ),匹配范围小的放在前面,用于特殊处理
5.不同类的规则(访问不同应用,一个是http,另一个是mysql ),匹配范围大的放在前面,效率更高
6.应该将那些可由一条规则能够描述的多个规则合并为一条,减少规则数量,提高检查效率
7.设置默认策略,建议白名单(只放行特定连接)
8.iptables -P,不建议,容易出现“自杀现象”
9.规则的最后定义规则做为默认策略,推荐使用,放在最后一条
规则保存和恢复
方法一:
保存现有的规则到文件中:iptables-save > /PATH/TO/SOME_SCRIPT_FILE
用规则文件保存各个规则,开机时自动载入此规则文件中的规则
在/etc/rc.d/rc.local文件添加:iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
方法二:
用脚本保存各个iptables命令;/PATH/TO/SOME_SCRIPT_FILE.sh 让此脚本开机后自动运行
给脚本添加执行权限:chmod +x
/etc/rc.d/rc.local文件中添加脚本路径 /PATH/TO/SOME_SCRIPT_FILE.sh
16. 总结NAT转换原理, DNAT/SDNAT原理,并自行设计架构实现DNAT/SNAT。
SNAT:请求报文,将源地址替换为公网地址。私网访问公网
DNAT:请求报文,将目的地址替换为私网地址。私网主机可以被公网访问
NAT实验:
测试:
17. 使用REDIRECT将90端口重定向80,并可以访问到80端口的服务
iptables -t nat -A PREROUTING -p tcp -d <本机内网IP> -p tcp --dport 90 -j REDIRECT --to-ports 80
18. firewalld常见区域总结。
drop:任何进入的网络数据包都会被直接丢弃,没有任何回应,常用于防火墙外的区域。
block:进入的网络数据包会被拒绝,会回复一个icmp-host-prohibited消息,常用于防火墙外的区域。
public:针对公共区域进行优化,允许某些入站流量,主要是SSH、ipp-client、mdns等。
work:用于工作区,通常允许更多的服务和端口。
home:用于家庭网络,允许类似于SSH、HTTP、HTTPS等常见的服务。
internal:用于内部网络,允许所有的服务和端口,是最安全开放的区域。
trusted:信任所有的网络连接,这个区域应当小心使用,因为它会关闭所有的防火墙保护。
19. 通过ntftable来实现暴露本机80/443/ssh服务端口给指定网络访问"
# 允许指定网段访问本机80端口
iptables -t nat -A PREROUTING -p tcp -d <本机公网IP> --dport 80 -j DNAT --to-destination <本机内网IP>:80
iptables -t nat -A POSTROUTING -p tcp -s <本机内网IP> --sport 80 -j MASQUERADE
# 允许指定网段访问本机443端口
iptables -t nat -A PREROUTING -p tcp -d <本机公网IP> --dport 443 -j DNAT --to-destination <本机内网IP>:443
iptables -t nat -A POSTROUTING -p tcp -s <本机内网IP> --sport 443 -j MASQUERADE
# 允许指定网段访问本机SSH端口22
iptables -t nat -A PREROUTING -p tcp -d <本机公网IP> --dport 22 -j DNAT --to-destination <本机内网IP>:22
iptables -t nat -A POSTROUTING -p tcp -s <本机内网IP> --sport 22 -j MASQUERADE