1、总结openssh服务安全加固和总结openssh免密认证原理,及免密认证实现过程。
1.1、openssh服务安全加固
- 更新系统包信息并升级所有安全的包
- 安装Fail2Ban,这是一个用来防止DDoS攻击的工具
- 启动Fail2Ban服务并设置为开机自启
- 修改SSH配置以提高安全性
- 重新加载SSH服务配置以应用更改
- 设置防火墙规则来仅允许从特定IP访问SSH端口
1.2、openssh免密认证原理
SSH免密认证主要是通过公钥和私钥的方式实现,用户需要生成一对公私钥,将公钥放到远程服务器上,然后在本地客户端使用私钥进行认证。使用ssh-keygen -t rsa命令生成公钥,将生成的公钥(默认为~/.ssh/id_rsa.pub
)复制到远程服务器的用户家目录下的.ssh/authorized_keys
文件中。在复制公钥到远端后,SSH客户端就可以无密码登录远程服务器了。
1.3、免密认证实现过程
- 在客户端生成一对密钥(公钥和私钥)。
- 将公钥复制到服务器的指定位置。
- 配置SSH服务器以启用公钥认证。
- 客户端尝试连接到服务器时,服务器会使用客户端提供的公钥与服务器上的私钥进行配对。
2、总结sudo配置文件格式,总结相关示例。
2.1、sudo配置文件格式
用户 登入主机=(代表用户) 命令
user host=(runas) command
说明:user: 运行命令者的身份 ;host: 通过哪些主机; (runas):以哪个用户的身份 ;command: 运行哪些命令。
2.2、示例
student ALL=(root) /sbin/pidof,/sbin/ifconfig
%wheel ALL=(ALL) NOPASSWD: ALL
3、总结PAM架构及工作原理
3.1、PAM架构
3.2、工作原理
- 使用者执行/usr/bin/passwd 程序,并输入密码
- passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个设置文件一般是 在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passwd此设置文件
- 经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证
- 将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入 密码或者通过验证)
4、总结PAM配置文件格式,总结相关示例, nologin.so, limits,等模块的使用。
4.1、PAM配置文件格式
- 通用配置文件/etc/pam.conf格式:application type control module-path arguments
- 专用配置文件/etc/pam.d/ 格式 :type control module-path arguments
4.2、常用模块
- pam_nologin.so 模块 如果/etc/nologin文件存在,将导致非root用户不能登陆,当该用户登陆时,会显示/etc/nologin文 件内容,并拒绝登陆
- pam_limits.so 模块 在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间
5、实现私有时间服务器
- 安装
chrony
- 配置
chrony
(编辑/etc/chrony/chrony.conf
) - 重启
chrony
服务 - 确保
chrony
服务开机启动 - 验证
chrony
是否正常工作
6、总结DNS域名三级结构
- 根域: 全球根服务器节点只有13个,10个在美国,1个荷兰,1个瑞典,1个日本
- 一级域名:Top Level Domain: tld
- 三类:组织域、国家域(.cn, .ca, .hk, .tw)、反向域
- com, edu, mil, gov, net, org, int,arpa
- 二级域名:wang.org
- 三级域名:study.wang.org
- 最多可达到127级域名
7、总结DNS服务工作原理,涉及递归和迭代查询原理
7.1、DNS服务工作原理
7.2、递归查询
- 指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果DNS服务器 本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结构提交给用户。
- 一般客户机和本地DNS服务器之间属于递归查询,即当客户机向DNS服务器发出请求后,若DNS服 务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到最终的肯定或否定的结果后转交 给客户机。此查询的源和目标保持不变,为了查询结果只需要发起一次查询。
7.3、迭代查询
- 指DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS服务器的 地址,用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果。
- 一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询,如:若对方不能返回 权威的结果,则它会向下一个DNS服务器(参考前一个DNS服务器返回的结果)再次发起进行查询,直到返回查询的结果为止。此查询的源不变,但查询的目标不断变化,为查询结果一般需要发起多次查询。
8、实现私有DNS, 供本地网络主机作DNS递归查询。
1、安装bind
yum -y install bind bind-utils
2、修改bind配置文件
vim /etc/named.conf
//listen-on port 53 { localhost; };
//allow-query { localhost; };
vim /etc/named.rfc1912.zones
zone "xie.org" IN {
type master;
file "xie.org.zone";
};
3、配置DNS区域数据库文件
cp -p /var/named/named.localhost /var/named/xie.org.zone
vim /var/named/xie.org.zone
4、检查配置文件
named-checkconf
named-checkzone xie.org /var/named/xie.org.zone
5、重启DNS服务
systemctl restart named
6、Client端配置
vim /etc/resolv.conf
nameserver 10.0.0.155
9. 总结DNS服务器类型,解析答案,正反解析域,资源记录定义。
9.1DNS服务器类型
- 主DNS服务器:管理和维护所负责解析的域内解析库的服务器
- 从DNS服务器:从主服务器或从服务器"复制"(区域传输)解析库副本
- 缓存DNS服务器(转发器)
9.2解析答案
- 肯定答案:存在对应的查询结果
- 否定答案:请求的条目不存在等原因导致无法返回结果
- 权威答案:直接由存有此查询结果的DNS服务器(权威服务器)返回的答案
- 非权威答案:由其它非权威服务器返回的查询答案
9.3正反解析域
负责本地域名的正向和反向解析库:正向区域、反向区域。
解析形式:
正向: FQDN(Full Qualifiled Domain Name)-->IP
反向:IP-->FQDN
9.4资源记录定义
格式:name [TTL] IN rr_type value
说明:
- TTL可从全局继承。
- 使用 "@" 符号可用于引用当前区域的域名。
- 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应。
- 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机。
10. 实现DNS主从同步
主DNS服务器配置
1、在DNS服务器上安装bind
yum install bind bind-utils -y
2、修改bind 配置文件
vim /etc/named.conf
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
vim /etc/named.rfc1912.zones
#加上下面内容
zone "xie.org" IN {
type master;
file "xie.org.zone";
};
3、DNS区域数据库文件
cp -p /var/named/named.localhost /var/named/xie.org.zone
#如果没有加-p选项,需要修改所有者或权限。chgrp named xie.org.zone
vim /var/named/xie.org.zone
$TTL 1D
@ IN SOA master admin.xie.org. (
2019042210 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.155
www A 10.0.0.151
4、检查配置文件和数据库文件格式,并启动服务
named-checkconf
named-checkzone xie.org /var/named/xie.org.zone
systemctl start named #第一次启动服务
rndc reload #不是第一次启动服务
从DNS服务器配置
yum install bind -y
vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
#不允许其它主机进行区域传输
allow-transfer { none;};
vim /etc/named.rfc1912.zones
zone "xie.org" {
type slave;
masters { 主服务器IP;};
file "slaves/xie.org.slave";
};
systemctl start named #第一次启动服务
rndc reload #不是第一次启动服务
ls /var/named/slaves/xie.org.slave #查看区域数据库文件是否生成
11. 实现DNS子域授权
.com. IN NS ns1.com.
.com. IN NS ns2.com.
ns1.com. IN A 2.2.2.1
ns2.com. IN A 2.2.2.2
#xie.org. 在.com的名称服务器上,解析库中添加资源记录
xie.org. IN NS ns1.xie.org.
xie.org. IN NS ns2.xie.org.
xie.org. IN NS ns3.xie.org.
ns1.xie.org. IN A 3.3.3.1
ns2.xie.org. IN A 3.3.3.2
ns3.xie.org. IN A 3.3.3.3
12. 基于acl实现智能DNS
12.1 前提准备
- 关闭SElinux
- 关闭防火墙
- 时间同步
12.2 DNS服务器的网卡配置
- 配置两个IP地址
- eth0:10.0.0.8/24
- eth1: 172.16.0.8/16
12.3主DNS服务端配置文件实现 view
yum install bind -y
vim /etc/named.conf
#在文件最前面加下面行
acl beijingnet {
10.0.0.0/24;
};
acl shanghainet {
172.16.0.0/16;
};
acl othernet {
any;
};
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
#其它略
# 创建view
view beijingview {
match-clients { beijingnet;};
include "/etc/named.rfc1912.zones.bj";
};
view shanghaiview {
match-clients { shanghainet;};
include "/etc/named.rfc1912.zones.sh";
};
view otherview {
match-clients { othernet;};
include "/etc/named.rfc1912.zones.other";
};
include "/etc/named.root.key";
12.4实现区域配置文件
vim /etc/named.rfc1912.zones.bj
zone "." IN {
type hint;
file "named.ca";
};
zone "wang.org" {
type master;
file "wang.org.zone.bj";
};
vim /etc/named.rfc1912.zones.sh
zone "." IN {
type hint;
file "named.ca";
};
zone "wang.org" {
type master;
file "wang.org.zone.sh";
};
vim /etc/named.rfc1912.zones.other
zone "." IN {
type hint;
file "named.ca";
};
zone "xie.org" {
type master;
file "xie.org.zone.other";
};
chgrp named /etc/named.rfc1912.zones.bj
chgrp named /etc/named.rfc1912.zones.sh
chgrp named /etc/named.rfc1912.zones.other
12.5创建区域数据库文件
vim /var/named/xie.org.zone.bj
$TTL 1D
@ IN SOA master admin.xie. (
2019042214 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
websrv A 10.0.0.7
www CNAME websrv
vim /var/named/xie.org.zone.sh
$TTL 1D
@ IN SOA master admin.xie.org. (
2019042214 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
websrv A 172.16.0.7
www CNAME websrv
vim /var/named/xie.org.zone.other
$TTL 1D
@ IN SOA master admin.xie.org. (
2019042214 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
websrv A 127.0.0.1
www CNAME websrv
chgrp named /var/named/xie.org.zone.bj
chgrp named /var/named/xie.org.zone.sh
chgrp named /var/named/xie.org.zone.other
systemctl start named #第一次启动服务
rndc reload #不是第一次启动服务
12.6实现位于不同区域的三个WEB服务器
#分别在三台主机上安装http服务
#在web服务器1:10.0.0.8/24实现
yum install httpd
echo www.xie.org in Other > /var/www/html/index.html
systemctl start httpd
#在web服务器2:10.0.0.7/16
echo www.xie.org in Beijing > /var/www/html/index.html
systemctl start httpd
#在web服务器3:172.16.0.7/16
yum install httpd
echo www.xie.org in Shanghai > /var/www/html/index.html
systemctl start httpd
13. 总结防火墙分类
13.1 按保护范围划分:
- 主机防火墙:服务范围为当前一台主机
- 网络防火墙:服务范围为防火墙一侧的局域网
13.2 按实现方式划分:
- 硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,如:华为, 山石hillstone,天融信,启明星辰,绿盟,深信服, PaloAlto , fortinet飞塔, Cisco, Checkpoint, NetScreen(2004年被 Juniper 用40亿美元收购)等
- 软件防火墙:运行于通用硬件平台之上的防火墙的应用软件,Windows 防火墙 ISA --> Forefront TMG
13.3按网络协议划分:
- 网络层防火墙:OSI模型下四层,又称为包过滤防火墙
- 应用层防火墙/代理服务器:proxy 代理网关,OSI模型七层
14. 总结iptable 5表5链, 基本使用,扩展模块。
- 内置链:每个内置链对应于一个钩子函数(五个内置链:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING)
- 自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有Hook钩子调 用自定义链时,才生效.
- filter:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表
- nat:network address translation 地址转换规则表
- mangle:修改数据标记位规则表
- raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度
- security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现
命令格式:
iptables [-t table] SUBCOMMAND chain [-m matchname [per-match-options]]
#指定多个源端口
[!] --source-ports,--sports port[,port|,port:port]...
# 指定多个目标端口
[!] --destination-ports,--dports port[,port|,port:port]...
#多个源或目标端
[!] --ports port[,port|,port:port]...
[!] --src-range from[-to] 源IP地址范围
[!] --dst-range from[-to] 目标IP地址范围
3、mac扩展:mac 模块可以指明源MAC地址,,适用于:PREROUTING, FORWARD,INPUT chains
[!] --mac-source XX:XX:XX:XX:XX:XX
4、string扩展:对报文中的应用层数据做字符串模式匹配检测
--algo {bm|kmp} 字符串匹配检测算法
bm:Boyer-Moore
kmp:Knuth-Pratt-Morris
--from offset 开始偏移
--to offset 结束偏移
[!] --string pattern 要检测的字符串模式
[!] --hex-string pattern 要检测字符串模式,16进制格式
5、connlimit扩展 :根据每客户端IP做并发连接数数量匹配 ,可防止Dos(Denial of Service,拒绝服务)攻击
--connlimit-upto N #连接的数量小于等于N时匹配
--connlimit-above N #连接的数量大于N时匹配
6、limit扩展 :基于收发报文的速率做匹配 , 令牌桶过滤器
--limit-burst number #前多少个包不限制
--limit #[/second|/minute|/hour|/day]
15. 总结iptables规则优化实践,规则保存和恢复。
15.1 iptables规则优化实践
- 安全放行所有入站和出站的状态为ESTABLISHED状态连接,建议放在第一条,效率更高。
- 谨慎放行入站的新请求。
- 有特殊目的限制访问功能,要在放行规则之前加以拒绝。
- 同类规则(访问同一应用,比如:http ),匹配范围小的放在前面,用于特殊处理。
- 不同类的规则(访问不同应用,一个是http,另一个是mysql ),匹配范围大的放在前面,效率更高。
-
应该将那些可由一条规则能够描述的多个规则合并为一条 , 减少规则数量 , 提高检查效率
-
设置默认策略,建议白名单(只放行特定连接)
15.2 规则保存
- 持久保存规则:iptables-save > /PATH/TO/SOME_RULES_FILE
- 加载规则 :iptables-restore < /PATH/FROM/SOME_RULES_FILE
- 开机自动重载规则:
- 用脚本保存各个iptables命令;让此脚本开机后自动运行
- /etc/rc.d/rc.local文件中添加脚本路径 /PATH/TO/SOME_SCRIPT_FILE
- 用规则文件保存各个规则,开机时自动载入此规则文件中的规则
- 在/etc/rc.d/rc.local文件添加iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
- 定义Unit File, CentOS 7,8 可以安装 iptables-services 实现iptables.service
15.3规则恢复
iptables -F
iptables-save > /etc/sysconfig/iptables
16. 总结NAT转换原理, DNAT/SDNAT原理,并自行设计架构实现DNAT/SNAT。
16.1 NAT
16.2 DNAT
16.3 SDNAT
17. 使用REDIRECT将90端口重定向80,并可以访问到80端口的服务
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 90 -j REDIRECT --to-port 80
18. firewalld常见区域总结。
zone
名
称
|
默认配置
|
trusted
|
允许所有流量
|
home
|
拒绝除和传出流量相关的,以及
ssh,mdsn,ipp-client,samba-client,dhcpv6-client
预定义服务之外其它所有传入流量
|
internal
|
和
home
相同
|
work
|
拒绝除和传出流量相关的,以及
ssh,ipp-client,dhcpv6-client
预定义服务之外的其它所有传入流量
|
public
|
拒绝除和传出流量相关的,以及
ssh,dhcpv6-client
预定义服务之外的其它所有传入流量,新加的网卡默认属于public zone
|
external
|
拒绝除和传出流量相关的,以及
ssh
预定义服务之外的其它所有传入流量,属于external zone的传出
ipv4
流量的源地址将被伪装为传出网卡的地址。
|
dmz
|
拒绝除和传出流量相关的,以及
ssh
预定义服务之外的其它所有传入流量
|
block
|
拒绝除和传出流量相关的所有传入流量
|
drop
|
拒绝除和传出流量相关的所有传入流量(甚至不以
ICMP
错误进行回应)
|
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