目录
4.总结PAM配置文件格式,总结相关示例,nologin.so,limits,等模块的使用
5.2配置客户端(作用是连接服务器端)(已ubuntu为例)
9.总结DNS服务器类型,解析答案,正反解析域,资源记录定义
12.1Access Control Lists:访问控制列表
12.2 view Block Definition and Usage:查看块定义和用法
16.总结NAT转换原理,DNAT/SDNAT原理,并自行设计架构实现DNAT/SNAT。
17.使用REDIRECT将90端口重定向80 ,并可以访问80端口的服务
19.通过nft来实现暴露本机80/443/ssh服务端口给指定网络访问
20.总结关系型数据库相关概念,关系,行,列,主键,唯一键,域。
21.总结关联类型,1对1,1对多,多对多关系。可以自行设计表进行解释
23.总结mysql多种安装方式,及安全加固,并总结mysql配置文件
1.总结openssh服务安全加固
ssh 服务最佳实践
1.使用非默认22端口
2.限制可登录用户
Allow user1.. Deny user1..Allow Group g1 g2...Deny Group g1 g2....
3.设定空闲会话超时时长
clientAliveInterval 60
clientAliveCountmax 0
4.利用防火墙设置ssh访问策略
5.仅监听特定的IP地址
6.基于口令认证时,使用强密码策略
7.基于秘钥的认证
8.禁止使用空密码
9.禁止root用户直接登录
10.限制ssh的访问频度和并发在线数
11.经常分析日志
lastb命令
[root@Rocky8 ~]#find /etc/ssh -name "*_config"
/etc/ssh/ssh_config #客户端配置文件
/etc/ssh/sshd_config #服务器端配置文件
#修改服务器端配置文件
[root@Rocky8 ~]#vim /etc/ssh/sshd_config
#Port 22 #基于安全考虑,端口号需要更改一下,更改完成以后,重启sshd服务
#AddressFamily any #监听协议,Ipv4 Ipv6都支持
#ListenAddress 0.0.0.0 #监听的Ip地址,默认22端口是监听在哪个Ip上。0.0.0.0是绑定机器上的所有Ip
PermitRootLogin yes #允许远程登录
PasswordAuthentication yes #密码身份验证
GSSAPIAuthentication no #更改成no可提高速度
2.总结sudo配置文件格式,总结相关示例
2.1总结配置文件:
sudoers 授权规则格式:
用户 登录主机=(代表用户)命令
user host=(runas)command (command要写绝对路径)
user:运行命令者身份
host:通过哪些主机
runas:以哪个用户身份
command:运行哪些命令
2.2总结相关示例:
#修改授权规则配置文件 [root@Rocky8 ~]#vim /etc/sudoers zhang 10.0.0.128=(root) /usr/bin/cat /var/log/messages* #转为普通用户,不仅可以查看日志文件。还可以查看密码文件是很危险的。 #转为普通用户,可以查看日志文件 [zhang@Rocky8 /var/log]$sudo cat /var/log/messages Dec 8 09:39:20 Rocky8 NetworkManager[906]: <info> [1670463560.6137] dhcp4 (eth0): state changed new lease, address=10.0.0.128 Dec 8 09:45:02 Rocky8 rsyslogd[970]: [origin software="rsyslogd" swVersion="8.2102.0-7.el8" x-pid="970" x-info="https://www.rsyslog.com"] rsyslogd was HUPed Dec 8 09:49:40 Rocky8 systemd-logind[1035]: New session 3 of user root. Dec 8 09:49:40 Rocky8 systemd[1]: Started Session 3 of user root. Dec 8 09:54:20 Rocky8 NetworkManager[906]: <info> [1670464460.6147] dhcp4 (eth0): state changed new lease, address=10.0.0.128 #不仅是可以查看日志文件,还可看密码文件。是很危险的。 [zhang@Rocky8 /var/log]$sudo cat /var/log/messages /etc/shadow root:$6$QtmgPq1WhGPos60M$PigPx5OVsvaNmfZO2Zk7NWIGH6qv8Nk5mEznTxsU6H0/d4iO9DiVGMve731EqhWJp2mXqyaHwFPORyEd7cjpk0::0:99999:7::: bin:*:18700:0:99999:7::: daemon:*:18700:0:99999:7::: adm:*:18700:0:99999:7::: lp:*:18700:0:99999:7::: sync:*:18700:0:99999:7::: shutdown:*:18700:0:99999:7::: halt:*:18700:0:99999:7::: mail:*:18700:0:99999:7::: #解决办法如下: 加"!"代表不执行以下命令 [root@Rocky8 ~]#vim /etc/sudoers zhang 10.0.0.128=(root) /usr/bin/cat /var/log/messages*,!/usr/bin/cat /var/log/messages * #已实现限制 [zhang@Rocky8 /var/log]$sudo cat /var/log/messages Dec 8 09:39:20 Rocky8 NetworkManager[906]: <info> [1670463560.6137] dhcp4 (eth0): state changed new lease, address=10.0.0.128 Dec 8 09:45:02 Rocky8 rsyslogd[970]: [origin software="rsyslogd" swVersion="8.2102.0-7.el8" x-pid="970" x-info="https://www.rsyslog.com"] rsyslogd was HUPed Dec 8 09:49:40 Rocky8 systemd-logind[1035]: New session 3 of user root. Dec 8 09:49:40 Rocky8 systemd[1]: Started Session 3 of user root. Dec 8 09:54:20 Rocky8 NetworkManager[906]: <info> [1670464460.6147] dhcp4 (eth0): state changed new lease, address=10.0.0.128 [zhang@Rocky8 /var/log]$sudo cat /var/log/messages /etc/passwd Sorry, user zhang is not allowed to execute '/bin/cat /var/log/messages /etc/passwd' as root on Rocky8.zhang.stu.
3.总结PAM架构及工作原理
3.1PAM架构:
模块文件目录:/lib64/security/*.so (库)
特定模块相关的配置文件:/etc/security
每种应用模块专用的配置文件:/etc/pam.d/App_name
3.2工作原理 :
service(服务)>>>PAM(配置文件)>>>pam_*.so
PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d 下),最后调用认证文件(位于/lib64/security下)进行安全认证
4.总结PAM配置文件格式,总结相关示例,nologin.so,limits,等模块的使用
4.1总结PAM配置文件格式:
专用配置文件/etc/pam.d/格式
type control module-path arguments
4.2总结nologin.so,limits等模块使用
官方对于pam_nologin的说明:http://www.linux-pam.org/(pam_nologin.8.xml)
"pam_nologin is a PAM module that prevents users from logging in to the system when<filename>/var/run/nologin</filename> or <filename>/etc/nologin</filename> exists. The contents of the file are displayed to the user. The pam_nologin module has no effect on the root user's ability to log in.
官方对于pam_limits的说明:http://www.linux-pam.org/(pam_limits.8.xml)and (limits.conf.5.xml)and (limits.conf)
The pam_limits PAM module sets limits on the system resources that can be obtained in a user-session. Users of <emphasis>uid=0</emphasis> are affected by this limits, too.
By default limits are taken from the <filename>/etc/security/limits.conf</filename>config file.
The <emphasis>pam_limits.so</emphasis> module applies ulimit limits
This file sets the resource limits for the users logged in via PAM
It does not affect resource limits of the system services。(对于系统服务,资源限制不起作用)
#新建并编辑nologin文件
[root@Rocky8 ~]#vim /etc/nologin
please login in to system for root #写一句话“请以root身份登录”
# *代表:所有人;-代表:soft和hard二者兼具。
#core:限制核心文件大小
#nproc:最大进程数
#nofile:打开文件描述符的最大值
#memlock: 可加锁的内存地址空间最大值
#msgqueue:POSIX消息队列使用的最大内存
[root@Rocky8 ~]#vim /etc/security/limits.conf
* - core unlimited
* - nproc 1000000
* - nofile 1000000
* - memlock 32000
* - msgqueue 8192000
对于系统级的服务该怎么进行资源限制?解决办法如下:以sshd服务为例
#显示sshd属性,并查看limitnproc选项(以修改NPROC参数为例)
[root@Rocky8 ~]#systemctl show sshd|grep -i "limitnproc"
LimitNPROC=6984
#修改ssh服务的配置文件
[root@Rocky8 ~]#vim /usr/lib/systemd/system/sshd.service
[Service]
Type=notify
EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
LimitNPROC=8888 #增加limitnproc的数值
#已完成资源限制
[root@Rocky8 ~]#systemctl daemon-reload #重新加载systemd的管理器配置
[root@Rocky8 ~]#systemctl restart sshd #重新启动sshd服务
[root@Rocky8 ~]#systemctl show sshd|grep -i "limitnproc" #查看更改后的数据
LimitNPROC=8888
5.实现私有时间服务器搭建
5.1配置服务器端(对外连接互联网,对内连接其他客户端)
#安装chrony软件包 [root@Rocky8 ~]#yum -y install chrony #查找chrony配置文件 [root@Rocky8 ~]#rpm -ql chrony|grep -i ".conf$" /etc/chrony.conf #修改配置文件(3部分需要修改) [root@Rocky8 ~]#vim /etc/chrony.conf # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). #pool 2.rocky.pool.ntp.org iburst server ntp1.aliyun.com iburst #添加阿里云时间源服务器 server ntp2.aliyun.com iburst #添加阿里云时间源服务器 server ntp.ntsc.ac.cn iburst #添加中国国家授时中心服务器 # Allow NTP client access from local network. #allow 192.168.0.0/16 allow 10.0.0.131/24 #允许指定客户端访问本地网络 #allow 0.0.0.0/0 #允许任何客户端访问本地网络 # Serve time even if not synchronized to a time source. local stratum 10 #该层表示我们距离带有附加参考时钟的计算机有多少跳。 #重新启动chrony服务 [root@Rocky8 ~]#systemctl restart chronyd #查看时间是否实现了同步 #命令含义:sources [-v] #This command displays information about the current time sources that chronyd is #accessing.(这个命令可以显示chronyd正在访问的当前时间源信息) #The -v option enables a verbose output. In this case, #extra caption lines are shown as a reminder of the meanings of the columns. #(-v选项启用详细输出。在这种情况下,显示额外的标题行来提示列的含义。) [root@Rocky8 ~]#chronyc sources -v .-- Source mode '^' = server, '=' = peer, '#' = local clock. / .- Source state '*' = current best, '+' = combined, '-' = not combined, | / 'x' = may be in error, '~' = too variable, '?' = unusable. || .- xxxx [ yyyy ] +/- zzzz || Reachability register (octal) -. | xxxx = adjusted offset, || Log2(Polling interval) --. | | yyyy = measured offset, || \ | | zzzz = estimated error. || | | \ MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* 120.25.115.20 2 6 17 44 +349us[-3441us] +/- 22ms ^+ 203.107.6.88 2 6 17 45 -1281us[-5071us] +/- 20ms ^- 114.118.7.163 2 6 243 36 +716us[ +716us] +/- 72ms
5.2配置客户端(作用是连接服务器端)(已ubuntu为例)
[19:59:43 root@ubuntu2204 ~]#dpkg -L chrony|grep -i ".conf.d$" /etc/chrony/conf.d #修改配置文件(只改1项) [20:00:43 root@ubuntu2204 ~]#vim /etc/chrony/conf.d # See http://www.pool.ntp.org/join.html for more information. server 10.0.0.128 iburst #添加服务器端IP #重启chrony服务 [20:12:19 root@ubuntu2204 ~]#systemctl restart chronyd #查看是否和服务器端时间同步 [20:16:45 root@ubuntu2204 ~]#chronyc sources -v .-- Source mode '^' = server, '=' = peer, '#' = local clock. / .- Source state '*' = current best, '+' = combined, '-' = not combined, | / 'x' = may be in error, '~' = too variable, '?' = unusable. || .- xxxx [ yyyy ] +/- zzzz || Reachability register (octal) -. | xxxx = adjusted offset, || Log2(Polling interval) --. | | yyyy = measured offset, || \ | | zzzz = estimated error. || | | \ MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* 10.0.0.128 3 6 7 2 -378ns[ -13ms] +/- 24ms
6.总结DNS域名三级结构
(1)根域: 全球根服务器节点只有13个。
(2)顶级域:组织域(com, edu, mil, gov, net, org, int,)、国家域(.cn, .ca, .hk, .tw)、反向域
(3)二级域名:magedu.com
(4)三级域名:study.magedu.com
最多可达到127级域名
7.总结DNS服务的工作原理,涉及递归和迭代查询原理
文字总结DNS服务工作原理:(以访问www.magedu.org为例)
递归查询:用户访问www.magedu.org,DNS代理解析服务器收到用户的递归查询后,如果答案在其缓存中,则立即响应,或者访问DNS层次结构以获得答案。
迭代查询:DNS代理解析服务器总是从根服务器开始,并发送一个迭代查询。如果响应是一个答案或一个错误,它们将立即返回给用户(并缓存以备将来使用)。如果响应是引用则表示被查询的服务器不知道答案,但它将DNS代理解析服务器引用到权威名称服务器,因此,如果问题是针对域名www.magedu.org,发送迭代查询的根服务器将在权威部分中添加.com权威名称服务器的列表。DNS代理解析服务器从权威部分中选择一个服务器,并向其发送迭代查询。类似地,.org权威名称服务器会发送一个包含magedu.com权威名称服务器列表的推荐。这个过程沿着DNS层次继续下去,直到收到一个答案或一个错误,此时用户的原始递归查询将被发送一个响应。
DNS缓存:DNS缓存就是为了减少递归查询过程,让用户更快的获取请求结果。解析数据存储在靠近发起请求的客户端的位置,也可以说DNS数据是可以缓存在任意位置。
8.实现私有DNS,供本地网络主机作DNS递归查询
dig :DNS 查找工具
dig是一个用于查询DNS名称服务器的灵活工具。它执行DNS查找并显示从所查询的名称服务器返回的答案。大多数DNS管理员使用dig来解决DNS问题,因为它具有灵活性、易用性和清晰的输出。其他查找工具的功能往往不如dig。
dig [@server] [-b address] [-c class] [-f filename] [-k filename] [-m] [-p port#] [-q name] [-t type] [-v] [-x addr] [-y [hmac:]name:key] [ [-4] | [-6] ] [name] [type] [class] [queryopt…]
dig [-h]
dig [global-queryopt…] [query…]
dig的典型调用如下所示:
dig @server name type
sever:
要查询的名称服务器的名称或IP地址。它可以是带点的十进制形式的IPv4地址,也可以是冒号分隔形式的IPv6地址。当提供的server参数是主机名时,dig会在查询该名称服务器之前解析该名称。
如果没有提供server参数,dig会查询/etc/resolv.conf;如果在那里找到一个地址,它就查询该地址的名称服务器。如果使用了-4或-6选项,则只尝试对应传输的地址。如果没有找到可用的地址,dig将查询发送到本地主机。将显示来自响应的名称服务器的应答。
name:
要查找的Resource record(资源记录)中的名字
-x addr:
这个选项简化了映射IP地址到名称的反向查询,这个addr是一个带点的十进制的IPV4格式,后者是以冒号分隔的IPV6地址。当使用-x选项是,不需要提供name, class, and type 参数,Dig会自动查找类似94.0.192 .in-addr这样的名称。并将查询类型和类别分别设置为PTR和IN。在IP6下使用nibble格式查找IPv6地址。
-t type:
这个选项表明要查询的资源记录类型,它可以是任意有效的询问类型。如果它是在bind9里提供的资源记录类型,它可以通过类型助记符来给定(例如NS或AAAA),默认询问的类型是A,除非提供了-x来表示要反向查询。通过指定type=AXFR来请求传输一个专区(zone)数据。当请求传输增量专区数据时 ,设置type中的ixfr=N(序列号)。增量的zone(专区)包含从自专区SOA记录是N开始做出的所有改变。
host:DNS查找工具
语法:
host [-aACdlnrsTUwv] [-c class] [-N ndots] [-p port] [-R number] [-t type] [-W wait] [-m flag] [ [-4] | [-6] ] [-v] [-V] {name} [server]
描述:
host是一个执行DNS查询的简单实用程序,它通常用于将名称转换为IP地址,反之亦然。如果没有给出参数或选项,host会打印出命令行参数和选项的简短摘要。
name是要查找的域名。它也可以是一个带点的十进制的IPv4地址或冒号分隔的IPv6地址,在这种情况下,主机默认对该地址执行反向查找。server是一个可选参数,它是主机应该查询的名称服务器的名称或IP地址,而不是/etc/resolv.conf中列出的服务器。
named-checkconf : 名称配置文件的语法检查工具
语法:
named-checkconf [-chjlvz] [-p [-x ]] [-t directory] {filename}
描述:
检查名称配置文件中的语法,而不是语义。这个文件连带着它包含的其他文件都可以进行解析和语法检查。如果没有指定文件,默认读取/etc/name.conf文件
注意:
在独立的解析环境读取的名称文件,比如rndc.key和bind.keys文件,不会自动通过named-checkconf工具检查这些文件中可能导致named服务不能正常运行的配置错误,即使named-checonf显示的是没问题。
named-checkzone :专区(zone)文件准许工具
语法:
named-checkzone [-d] [-h] [-j] [-q] [-v] [-c class] [-C mode] [-f format] [-F format] [-J filename] [-i mode] [-k mode] [-m mode] [-M mode] [-n mode] [-l ttl] [-L serial] [-o filename] [-r mode] [-s style] [-S mode] [-t directory] [-T mode] [-w directory] [-D] [-W mode] {zonename} {filename}
描述:
named-checkzone 检查专区(zone)文件的语法和完整性。当加载专区(zone)时,它执行和named一样的检查。在专区(zone)文件配置到名称服务器之前,用named-checkzone是很有用的。
rndc :名称服务器控制程序
语法:
rndc [-b source-address] [-c config-file] [-k key-file] [-s server] [-p port] [-q] [-r] [-V] [-y server_key] [[-4] | [-6]] {command}
描述:
rndc控制操作名称服务器 如果调用rndc命令时后面没有选项或者参数,它将打印可支持的命令和有用的选项和它们的参数.
命令:
flush:
清除服务器缓存
reload:
加载配置文件和专区(zone)
正向解析:rocky作为名称解析服务器,ubuntu作为客户端,另一台rocky提供hppt服务(让windos通过名称解析服务器获取另一台rocky的IP地址进而登录网页)
#安装bind相关软件包
[root@Rocky8 ~]#yum -y install bind bind-utils bind-libs
#查询bind软件包清单
[root@Rocky8 ~]#rpm -ql bind
/etc/named.conf #配置文件
/etc/named.rfc1912.zones #专区配置文件
/usr/lib/systemd/system/named.service #服务文件
/var/named #相关数据存放目录
/var/named/named.ca #根域数据文件
#查看一下服务文件
[root@Rocky8 ~]#cat /usr/lib/systemd/system/named.service
ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS #用户名字:named
#设置开机自启并立即启动
[root@Rocky8 ~]#systemctl enable --now named
Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service.
#查看named服务开的监听端口
[root@Rocky8 ~]#ss -ntulp
Netid Local Address:Port Process
udp 127.0.0.1:53 users:(("named",pid=27949,fd=512)) #专门负责地址解析
tcp 127.0.0.1:53 users:(("named",pid=27949,fd=21))
tcp 127.0.0.1:953 users:(("named",pid=27949,fd=23))
#修改rocky网卡配置文件。
[root@Rocky8 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=10.0.0.128
PREFIX=24
GATEWAY=10.0.0.2
DNS1=127.0.0.1 #添加DNS指向自己
#重新加载网卡信息及启动网卡
[root@Rocky8 ~]#nmcli connection reload
[root@Rocky8 ~]#nmcli connection up eth0
#查看NDS
[root@Rocky8 ~]#cat /etc/resolv.conf
# Generated by NetworkManager
search zhang.stu
nameserver 127.0.0.1
#本机目前已可以借助自己的DNS完成解析
[root@Rocky8 ~]#ping www.baidu.com
PING www.a.shifen.com (220.181.38.150) 56(84) bytes of data.
64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=1 ttl=128 time=17.2 ms
64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=2 ttl=128 time=12.0 ms
64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=3 ttl=128 time=14.1 ms
#修改named服务配置文件(修改2项)是为了让远程客户端能通过本主机DNS解析
[root@Rocky8 ~]#vim /etc/named.conf
listen-on port 53 { any; }; #也可以用//注销此行
allow-query { any; }; #也可以用//注销此行
#检查修改配置文件以后的语法问题
[root@Rocky8 ~]#named-checkconf
#搭建解析数据库:
#创建zone(专区)文件及加640权限和加named组
[root@Rocky8 ~]#cd /var/named
[root@Rocky8 /var/named]#touch zhangyongbiao.com.zone
[root@Rocky8 /var/named]#chmod 640 zhangyongbiao.com.zone
[root@Rocky8 /var/named]#chgrp named zhangyongbiao.com.zone
[root@Rocky8 /var/named]#ll zhangyongbiao.com.zone
-rw-r----- 1 root named 0 Dec 14 15:16 zhangyongbiao.com.zone
#编辑zone(专区)文件
[root@Rocky8 /var/named]#vim zhangyongbiao.com.zone
$TTL 1D
@ IN SOA master hostmaster ( 1214 3h 10m 1d 6h )
NS master
master A 10.0.0.128
www A 10.0.0.135
joe A 192.168.1.0
db A 192.168.100.0
#检查zone(专区)的完整性和语法
[root@Rocky8 /var/named]#named-checkzone zhangyongbiao.com /var/named/zhangyongbiao.com.zone
zone zhangyongbiao.com/IN: loaded serial 1214
OK
#编辑zone(专区)配置文件
[root@Rocky8 /var/named]#vim /etc/named.rfc1912.zones
zone "zhangyongbiao.com" IN {
type master;
file "zhangyongbiao.com.zone";
};
#检查配置文件的语法是否有问题
[root@Rocky8 /var/named]#named-checkconf /etc/named.rfc1912.zones
#加载配置文件和zone(专区)
[root@Rocky8 /var/named]#rndc reload
server reload successful
#ubuntu先安装bind9-utils(需要用到里面的dig或host命令)
[16:22:19 root@ubuntu2204 ~]#apt -y install bind9-utils
#修改ubuntu的网卡配置(ubuntu作为远程客户端)
[16:12:21 root@ubuntu2204 ~]#vim /etc/netplan
network:
ethernets:
eth0:
# dhcp4: true
addresses: [10.0.0.131/24]
nameservers:
addresses: [10.0.0.128] #DNS地址指向主服务器的IP
version: 2
#ubuntu网卡生效
[16:18:31 root@ubuntu2204 ~]#netplan apply
#ubuntu查看网关
[16:19:27 root@ubuntu2204 ~]#resolvectl status
Global
Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
Link 2 (eth0)
Current Scopes: DNS
Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 10.0.0.128
DNS Servers: 10.0.0.128
#ubuntu客户端能够通过DNS解析服务器(rocky)去解析了。
#解析www.zhangyongbiao.com
[15:55:07 root@ubuntu2204 ~]#host www.zhangyongbiao.com
www.zhangyongbiao.com has address 10.0.0.135
#解析joe.zhangyongbiao.com
[15:55:26 root@ubuntu2204 ~]#host joe.zhangyongbiao.com
joe.zhangyongbiao.com has address 192.168.1.0
#解析db.zhangyongbiao.com
[15:57:02 root@ubuntu2204 ~]#host db.zhangyongbiao.com
db.zhangyongbiao.com has address 192.168.100.0
[16:24:21 root@ubuntu2204 ~]#host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 220.181.38.149
www.a.shifen.com has address 220.181.38.150
#配置另一台rocky,能让windos通过解析服务登录网页
#安装httpd软件
[root@Rocky8 ~]#yum -y install httpd
#写入信息
[root@Rocky8 ~]#echo "welcome to Baoding" > /var/www/html/index.html
9.总结DNS服务器类型,解析答案,正反解析域,资源记录定义
了解example.com base zone file(域名基本专区文件):
以下是域example.com的完整专区文件,它说明了许多常见的特征。在文件的合适位置对这些特征进行了解释。专区文件由RR(资源记录)组成。RR(资源记录)面试了专区的特征或属性。
owner name
RR所创建的域
The @ (at-sign):
当在标签或名称字段使用时,@符号表示当前的源。在专区文件的开始,就是域名再加上点(.)。
每一行的开始都给出了RR的所有者,如果以空行开头,意思就是和先前的RR所有者一样。为了可读性,通常包含空行。
TTL:
RR的生存时间。该字段是一个32位整数,以秒为单位,在解析器缓存RRs时主要使用。TTL描述了一个RR在失效之前可以缓存多长时间。
The $TTL Directive:
这将为后续未定义的TTL设置默认的生存时间(Time-To-Live, TTL)。有效的ttl值的范围是0 ~ 2147483647秒。
IN:The Internet. The only widely class used today.
互联网。今天唯一广泛使用的类别。SOA:marks the start of a zone of authority
标志权威专区的开始A:a host address
主机地址NS:an authoritative name server
权威名称服务器CNAME:the canonical name for an alias
别名的标准名称
MX:mail exchange
邮件交换
@ IN SOA ns1.example.com. hostmaster.example.com. ( 6 2003080800 ; serial number 7 12h ; refresh 8 15m ; update retry 9 3w ; expiry 10 2h ; minimum 11 )
serial number:
备用名称服务器定期读取(3和4)SOA RR。时间间隔由开始授权(SOA) RR的刷新参数定义。
备用名称服务器将从主名称服务器接收到的SOA RR的序列号参数与当前区域数据的SOA RR中的序列号进行比较。
如果接收到的序列号在算术上比当前序列号大,则从服务器使用AXFR或IXFR(取决于主服务器和从服务器的配置)发起区域传输(5),使用TCP在端口53(6)上。
refresh:
专区中备用服务器读取或轮询主服务器的时间间隔。SOA RR最为推荐的专区刷新时间是整小时的倍数,以减少流量负载。
update retry:
重试更新:备用名称服务器再次同步主名称服务器的时间
expiry:
到期:指定服务器在正常过期后保留记录的最长时间,以便将它们作为过期记录返回。默认为1天。允许的最小值是1秒。
minimum:
SOA中最后一个字段是“解析域名失败”的缓存生存时间。控制从本服务器上响应其他服务器上缓存的错误域名的时间 。这个时间最大为3小时(3h)。
反向解析:rocky作为名称解析服务器,ubuntu作为客户端
#在名称解析服务器上创建一个10网段的专区文件
[root@Rocky8 /var/named]#vim 10.0.0.zone
$TTL 1D
@ IN SOA master hostmaster ( 1214 3H 10M 1D 3H )
NS master
master IN A 10.0.0.128
200 IN PTR www.zhangyongbiao.com.
30 IN PTR db.zhangyongbiao.com.
150 IN PTR joe.zhangyongbiao.com.
#检查专区语法和完整性
[root@Rocky8 /var/named]#named-checkzone 10.0.0 /var/named/10.0.0.zone
zone 10.0.0/IN: loaded serial 1214
OK
#编辑专区配置文件
[root@Rocky8 /var/named]#vim /etc/named.rfc1912.zones
zone "0.0.10.in-addr.arpa" IN {
type master;
file "10.0.0.zone";
};
#检查配置文件的语法是否正确
[root@Rocky8 /var/named]#named-checkconf
#ubuntu客户端反向解析ipv4
[17:13:43 root@ubuntu2204 ~]#host 10.0.0.200
200.0.0.10.in-addr.arpa domain name pointer www.zhangyongbiao.com.
[17:13:52 root@ubuntu2204 ~]#host 10.0.0.30
30.0.0.10.in-addr.arpa domain name pointer db.zhangyongbiao.com.
[18:22:46 root@ubuntu2204 ~]#host 10.0.0.150
150.0.0.10.in-addr.arpa domain name pointer joe.zhangyongbiao.com.
10.实现DNS主从同步
#主从同步:在加一台centos作为从节点DNS服务器 #修改从节点NDS服务器配置文件 [root@CentOS ~]#vim /etc/named.conf // listen-on port 53 { any; }; #注销 // allow-query { any; }; #注销 #修改从节点服务器centos的zone(专区)文件 [root@CentOS ~]#vim /etc/named.rfc1912.zones zone "zhangyongbiao.com" IN { type slave; masters { 10.0.0.128; }; #注意,这是masters(末尾加s) file "slaves/zhangyongbiao.com.zone.slave"; }; #存储从主服务器过来的数据目录 #检查语法 [root@CentOS ~]#named-checkconf #启动服务并立即启动 [root@CentOS ~]#systemctl enable --now named #修改主节点服务器rocky的配置文件 [root@Rocky8 /var/named]#vim zhangyongbiao.com.zone $TTL 1D @ IN SOA master hostmaster ( 1215 3H 10M 1D 3H ) #序列号要加1 NS master NS slave #添加从节点服务器名称 master IN A 10.0.0.128 slave IN A 10.0.0.130 #指向所在的IP地址 www IN A 10.0.0.100 joe IN A 1.1.1.1 db IN A 192.168.1.0 jok IN A 2.2.2.2 #重启主节点服务器rocky [root@Rocky8 /var/named]#systemctl restart named #从ubuntu客户端添加从节点服务器的IP [21:22:47 root@ubuntu2204 ~]#vim /etc/netplan # This is the network config written by 'subiquity' network: ethernets: eth0: # dhcp4: true addresses: [10.0.0.131/24] nameservers: addresses: [10.0.0.128] #主节点DNS服务器IP addresses: [10.0.0.130] #从节点DNS服务器IP version: 2 #ubuntu网卡生效 [21:27:08 root@ubuntu2204 ~]#netplan apply #从节点服务器完成解析域名 [21:51:55 root@ubuntu2204 ~]#dig joe.zhangyongbiao.com @10.0.0.130 ;; ANSWER SECTION: www.zhangyongbiao.com. 86400 IN A 10.0.0.100 ;; AUTHORITY SECTION: zhangyongbiao.com. 86400 IN NS master.zhangyongbiao.com. ;; ADDITIONAL SECTION: master.zhangyongbiao.com. 86400 IN A 10.0.0.128 ;; Query time: 0 msec ;; SERVER: 10.0.0.130#53(10.0.0.130) (UDP) ;; WHEN: Thu Dec 15 21:58:23 CST 2022 ;; MSG SIZE rcvd: 131
10.1加强安全性:虽然实现了主从DNS服务器数据同步,但是安全性还是不能保证。因为从其他客户端可以通过用dig -t AXFR命令来获取主或从DNS服务器上的数据;以下是举例:ubuntu还是客户端,它直接从主服务器或从从服务器传输zone(专区)数据
#ubuntu作为客户端。不用通过主或从服务器解析,而是把主服务器上的数据全部传输过来 [10:48:12 root@ubuntu2204 ~]#dig -t AXFR zhangyongbiao.com @10.0.0.128 ; <<>> DiG 9.18.1-1ubuntu1.2-Ubuntu <<>> -t AXFR zhangyongbiao.com @10.0.0.128 ;; global options: +cmd zhangyongbiao.com. 86400 IN SOA master.zhangyongbiao.com. hostmaster.zhangyongbiao.com. 1215 10800 600 86400 10800 zhangyongbiao.com. 86400 IN NS master.zhangyongbiao.com. zhangyongbiao.com. 86400 IN NS slave.zhangyongbiao.com. db.zhangyongbiao.com. 86400 IN A 192.168.1.0 joe.zhangyongbiao.com. 86400 IN A 1.1.1.1 jok.zhangyongbiao.com. 86400 IN A 2.2.2.2 master.zhangyongbiao.com. 86400 IN A 10.0.0.128 slave.zhangyongbiao.com. 86400 IN A 10.0.0.130 www.zhangyongbiao.com. 86400 IN A 10.0.0.100 #也可以从从节点服务器上传输专区数据 [10:49:30 root@ubuntu2204 ~]#dig -t AXFR zhangyongbiao.com @10.0.0.130 ; <<>> DiG 9.18.1-1ubuntu1.2-Ubuntu <<>> -t AXFR zhangyongbiao.com @10.0.0.130 ;; global options: +cmd zhangyongbiao.com. 86400 IN SOA master.zhangyongbiao.com. hostmaster.zhangyongbiao.com. 1215 10800 600 86400 10800 zhangyongbiao.com. 86400 IN NS master.zhangyongbiao.com. zhangyongbiao.com. 86400 IN NS slave.zhangyongbiao.com. db.zhangyongbiao.com. 86400 IN A 192.168.1.0 joe.zhangyongbiao.com. 86400 IN A 1.1.1.1 jok.zhangyongbiao.com. 86400 IN A 2.2.2.2 master.zhangyongbiao.com. 86400 IN A 10.0.0.128 slave.zhangyongbiao.com. 86400 IN A 10.0.0.130 www.zhangyongbiao.com. 86400 IN A 10.0.0.100 zhangyongbiao.com. 86400 IN SOA master.zhangyongbiao.com. hostmaster.zhangyongbiao.com. 1215 10800 600 86400 10800
10.2解决办法:在主和从DNS服务器的专区(zone)文件或配置文件的option中指定allow-transfer。
#修改主DNS服务器配置文件 [root@Rocky8 /var/named]#vim /etc/named.conf options { listen-on port 53 { any; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; secroots-file "/var/named/data/named.secroots"; recursing-file "/var/named/data/named.recursing"; allow-query { any; }; allow-transfer { 10.0.0.130; }; #加入只允许从节点传输数据的权限 #修改从NDS服务器配置文件 [root@CentOS /var/named]#vim /etc/named.conf options { listen-on port 53 { any; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; secroots-file "/var/named/data/named.secroots"; recursing-file "/var/named/data/named.recursing"; allow-query { any; }; allow-transfer { none; }; #添加不允许传输的权限 #已经不能直接从主从DNS服务器传输数据了 [10:51:11 root@ubuntu2204 ~]#dig -t AXFR zhangyongbiao.com @10.0.0.128 ; <<>> DiG 9.18.1-1ubuntu1.2-Ubuntu <<>> -t AXFR zhangyongbiao.com @10.0.0.128 ;; global options: +cmd ; Transfer failed. [11:14:22 root@ubuntu2204 ~]#dig -t AXFR zhangyongbiao.com @10.0.0.130 ; <<>> DiG 9.18.1-1ubuntu1.2-Ubuntu <<>> -t AXFR zhangyongbiao.com @10.0.0.130 ;; global options: +cmd ; Transfer failed.
11.泛域名和子域应用
#在主NDS服务器上编辑zone的RR(资源记录)文件 [root@Rocky8 /var/named]#vim zhangyongbiao.com.zone $TTL 1D @ IN SOA domain1 hostmaster ( 1219 3H 10M 1D 3H ) NS master sz NS ns1 #设置sz子域名的名称服务器 master IN A 10.0.0.128 ns1 IN A 10.0.0.135 #指定名称服务器的IP www IN A 10.0.0.245 * IN A 8.8.8.8 #域名名称的通配符 @ IN A 6.6.8.8 #直接搜索域名就可以 #创建sz子域文件 [root@Rocky8 /var/named]#touch sz.zhangyongbiao.com.zone #建立RR(资源记录文件) [root@Rocky8 /var/named]#chmod 640 sz.zhangyongbiao.com.zone #改权限 [root@Rocky8 /var/named]#chgrp named sz.zhangyongbiao.com.zone #改所属组 #编辑sz子域文件 [root@Rocky8 /var/named]#vim /var/sz.zhangyongbiao.com.zone $TTL 1D @ IN SOA stubdomain hostmaster ( 1 3H 10M 1D 3H ) IN NS master master IN A 10.0.0.135 www IN A 6.6.6.8 #www.sz.zhangyongbiao.com对应的IP地址 #改sz子域的相关配置文件 [root@Rocky8 /var/named]#vim /etc/named.conf options { listen-on port 53 { any; }; #修改项 allow-query { any; }; #修改项 #修改sz子域的专区文件 [root@Rocky8 /var/named]#vim /etc/named.rfc1912.zones zone "sz.zhangyongbiao.com" IN { type master; file "sz.zhangyongbiao.com.zone"; }; #启动sz子域DNS服务器 [root@Rocky8 /var/named]#systemctl enable --now named #测试泛域名 [19:16:42 root@ubuntu2204 ~]#host 1233.zhangyongbiao.com 1233.zhangyongbiao.com has address 8.8.8.8 #测试泛域名 [19:50:03 root@ubuntu2204 ~]#host zhangyongbiao.com zhangyongbiao.com has address 6.6.8.8 #测试sz子域 [19:51:51 root@ubuntu2204 ~]#host www.sz.zhangyongbiao.com www.sz.zhangyongbiao.com has address 6.6.6.8
11.1配置转发DNS服务器 :rocky作为转发服务器,centos作为主NDS名称服务器,ubuntu作为客户端
#先配置NDS转发服务器 #修改配置文件(改4项) [root@Rocky8 /var/named]#vim /etc/named.conf options { #first表示先转到主DNS,没结果在转到根服务器。 forward only; #only表示只转发到主DNS服务器。而不去根服务器 forwarders {10.0.0.130;}; #主DNS服务器IP地址 dnssec-enable no; #这项都改成NO dnssec-validation no; #这项也改成NO #重新加载文件 [root@Rocky8 /var/named]#rndc reload #或者systemctl restart named #配置主DNS名称服务器 #创建,修改权限和组 [root@CentOS /var/named]#touch zhangyongbiao.local.zone [root@CentOS /var/named]#chmod 640 zhangyongbiao.local.zone [root@CentOS /var/named]#chgrp named zhangyongbiao.local.zone #编辑专区RR(资源记录)文件 [root@CentOS /var/named]#vim zhangyongbiao.local.zone $TTL 1D @ IN SOA domain hostmaster ( 17 3H 10M 1D 3H ) IN NS master master IN A 10.0.0.130 www IN A 8.8.6.6 #最后解析www.zhangyongbiao.local的ip为8.8.6.6 #编辑专区文件 [root@CentOS /var/named]#vim /etc/named.rfc1912.zones zone "zhangyongbiao.local" IN { type master; file "zhangyongbiao.local.zone"; }; #重新加载文件 [root@Rocky8 /var/named]#rndc reload #或者systemctl restart named #ubuntu客户端进行测试,通过rocky转发服务器到主DNS名称服务器在解析www.zhangyongbiao.local的IP [root@ubuntu2204 ~]#dig www.zhangyongbiao.local @10.0.0.128 #IP是rocky转发服务器的 ;; ANSWER SECTION: www.zhangyongbiao.local. 84936 IN A 8.8.6.6 ;; AUTHORITY SECTION: zhangyongbiao.local. 84936 IN NS master.zhangyongbiao.local. ;; ADDITIONAL SECTION: master.zhangyongbiao.local. 84936 IN A 10.0.0.130 ;; Query time: 0 msec ;; SERVER: 10.0.0.128#53(10.0.0.128) (UDP) ;; WHEN: Sat Dec 17 22:23:52 CST 2022 ;; MSG SIZE rcvd: 133
12.基于acl实现智能DNS
12.1Access Control Lists:访问控制列表
1.访问控制列表是可以被设置昵称的地址匹配列表,以便在以后应用 allow-notify, allow-query, allow-query-on, allow-recursion, blackhole, allow-transfer, match-clients这些功能。
2.ACL可以给与那些访问名称服务器的用户更好的控制,避免大量的IP地址列表去搞乱配置文件。
12.2 view Block Definition and Usage:查看块定义和用法
view语句是BIND9里面一个强大的功能。它可以让名称服务器去依据请求者的不同去回答NDS查询。它对于实现DNS拆分设置是非常好用的,而不用去运行很多的服务器
在视图语句中定义的区域只能被与视图匹配的客户端访问。通过在多个视图中定义相同名称的区域,可以将不同的区域数据赋予不同的客户端
如果配置文件中没有view语句,则会在in类中自动创建一个与任何客户端匹配的默认视图。
在配置文件顶层指定的任何zone语句都被认为是这个默认视图的一部分,options语句应用于默认视图。如果清晰地提供了view语句,则所有的zone语句都必须发生在view语句中。
12.3范例:
rocky是DNS服务器,centos是客户端
#修改配置文件(增加acl和view语句) [root@Rocky8 /var/named]#vim /etc/named.conf acl beijingnet { 10.0.0.0/24; }; #只允许北京的10.0.0.0网段去访问DNS名称服务器,也可以在添加其他网段 acl shanghainet { 192.168.10.0/24; }; #只允许上海的192.168.10.0网段去访问DNS名称服务器,也可添加其他网段 options { listen-on port 53 { any; }; #也可以用"//"注销 allow-query { any; }; #也可以用"//"注销 view beijingview { match-clients { beijingnet; }; #调用acl include "/etc/named.rfc1912.zones.bj"; }; #增加beijingview语句 view shanghaiview { match-clients { shanghainet; }; #调用acl include "/etc/named.rfc1912.zones.sh"; }; #增加shanghaiview语句 #先把原/etc/named.conf中单独的"."域专区剪切到/etc/named.frc1912.zones中来。(因为view语句不允许有单独的zone存在)。在"cp -p"为.bj和.sh文件。进行内容添加。 #修改北京区域文件 [root@Rocky8 /var/named]#vim /etc/named.rfc1912.zones.bj zone "." IN { type hint; file "named.ca"; }; zone "zhangyongbiao.com" IN { type master; file "zhangyongbiao.com.zone.bj"; #添加域名文件 }; #然后再修改上海区域文件 [root@Rocky8 /var/named]#vim /etc/named.rfc1912.zones.sh zone "." IN { type hint; file "named.ca"; }; zone "zhangyongbiao.com" IN { type master; file "zhangyongbiao.com.zone.sh"; #添加域名文件 }; #编辑北京地区的zone文件 [root@Rocky8 /var/named]#vim zhangyongbiao.com.zone.bj $TTL 1D @ IN SOA secdomain hostmaster ( 1220 3H 10M 1D 3H ) IN NS master master IN A 10.0.0.10 www IN A 6.6.6.6 #北京区域10.0.0.0网段用户访问DNS,得到的地址是6.6.6.6 #编辑上海地区的zone文件 [root@Rocky8 /var/named]#vim zhangyongbiao.com.zone.sh $TTL 1D @ IN SOA secdomain hostmaster ( 1220 3H 10M 1D 3H ) IN NS master master IN A 10.0.0.10 www IN A 8.8.8.8 #上海区域192.168.10.0网段用户访问DNS,得到的地址是8.8.8.8
服务器端和客户端都要添加网卡“仅主机”模式,为了测试192.168.10.0网段的用户请求DNS
[root@CentOS ~]#dig www.zhangyongbiao.com @10.0.0.10
;; ANSWER SECTION:
www.zhangyongbiao.com. 86400 IN A 6.6.6.6 #完成
;; AUTHORITY SECTION:
zhangyongbiao.com. 86400 IN NS master.zhangyongbiao.com.
;; ADDITIONAL SECTION:
master.zhangyongbiao.com. 86400 IN A 10.0.0.10
;; Query time: 0 msec
;; SERVER: 10.0.0.10#53(10.0.0.10)
;; WHEN: Tue Dec 20 15:19:25 CST 2022
;; MSG SIZE rcvd: 131
[root@CentOS ~]#dig www.zhangyongbiao.com @192.168.10.130
;; ANSWER SECTION:
www.zhangyongbiao.com. 86400 IN A 8.8.8.8 #完成
;; AUTHORITY SECTION:
zhangyongbiao.com. 86400 IN NS master.zhangyongbiao.com.
;; ADDITIONAL SECTION:
master.zhangyongbiao.com. 86400 IN A 10.0.0.10
;; Query time: 0 msec
;; SERVER: 192.168.10.130#53(192.168.10.130)
;; WHEN: Tue Dec 20 15:20:39 CST 2022
;; MSG SIZE rcvd: 131
13.总结防火墙分类
1.按保护范围划分:
主机防火墙:服务范围为当前一台主机
网络防火墙:服务范围为防火墙一侧的局域网 按实现方式划分:
2.按实现方式划分:
硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,
软件防火墙:运行于通用硬件平台之上的防火墙的应用软件,Windows 防火墙 ISA --> Forefront TMG
3.按网络协议划分:
网络层防火墙:OSI模型下四层,又称为包过滤防火墙
应用层防火墙/代理服务器:proxy 代理网关,OSI模型七层
14.总结iptable 5表5链,基本使用,扩展模块
14.1总结iptable 5表5链
5表:
(1)filter:过滤规则表,根据预定义的规则过滤符合条件的数据包,也是默认表
(2)nat:network address translation 地址转换
(3)mangle:修改数据标记位规则表
(4)raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度
(5)security:用于强制访问控制(MAC)网络规则,由Linux安全模块
5链:
PREROUTING INPUT FORWARD OUTPUT POSTROUTING
14.2 基本使用
iptables -vnL:查看详细的规则列表
iptables -vnL --line-number:显示规则列表中的序号
iptables -S:查看已选链中的规则
iptables -I:在选定的链中插入规则同时给定序号
iptables -D:删除选定链中的规则
-s:源IP地址
-d:目标IP地址
-p:指定协议
-i:报文流入接口
-o:报文流出接口
14.3扩展模块(用-m来指定扩展模块)
隐式扩展:tcp协议扩展+udp协议扩展+icmp协议扩展(用-p就可以,不需要-m)
显示扩展:
(1)multiport扩展模块:以离散方式定义多端口匹配,最多指定15端口
(2)iprange扩展模块:指明连续的(不是整个网络)ip地址范围
(3)mac扩展模块:指定源mac地址
(4)string扩展模块:对报文中的应用层数据做字符串模式匹配检测
(5)time扩展模块:根据将报文到达的时间与指定的时间范围进行匹配
(6)connlimit扩展模块:根据每客户端IP并发连接数数量匹配
(7)limit扩展模块:基于收发报文的速度做匹配,令牌桶过滤器
(8)connlimit扩展模块:根据客户端IP 并发连接数量匹配
(9)limit扩展模块:基于收发报文的速度做匹配。令牌桶过滤器
(10)state扩展模块:可以根据“链接跟踪机制”去检查连接的状态。有5种状态:NEW ;ESTABLISHED;RELATED;INVALID;UNTRACKED
15.总结iptables规则优化实践,规则保存和恢复
15.1规则优化实践
(1)安全放行所有入站和出站状态为ESTABLISHED状态连接,建议放在第一条,效率最高
(2)谨慎放行入站的新请求
(3)有特殊目的的限制访问功能,要在放行规则之前加以拒绝
(4)同类规则(访问同一应用,比如:http),匹配范围小的放在前面,用于特殊处理
(5)不同类规则(访问不同应用)匹配范围大的放在前面,效率最高
(6)应该将那些可由一条规则能够描述的多个规则合并为一条,减少规则数量
(7)设置默认策略,建议白名单(只放行特定连接)
15.2规则保存和恢复
第一种方法:
规则写好以后,用iptables-save > /data/iptables-rules(自定义文件夹)
设置开机自启:vim /etc/rc.local
iptables-restore < /data/iptables-rules
加执行权限: chmod +x rc.local
第二种方法:
安装iptables服务:yum -y install iptables.services
规则写好以后,用iptables-save > /etc/sysconfig/iptables保存到配置文件。 (前提是把原配置文件中的规则都删除)
设置开机自启:systemctl enable --now iptables
16.总结NAT转换原理,DNAT/SDNAT原理,并自行设计架构实现DNAT/SNAT。
16.1总结DNAT/SNAT转换原理:
SNAT:源地址转换,用于私网访问公网
DNAT:目标地址转换,用于公网访问私网
16.2自行设计架构范例:
模拟ubuntu作为外部公网端(仅主机模式,eth0的ip为192.168.10.8);
模拟rocky作为防火墙(NAT模式,eth0的ip为10.0.0.10;仅主机模式,eth1的ip为 192.168.10.130);
模拟centos作为内部私网端(NAT模式,eth0的ip为10.0.0.110)
#在ubuntu上安装nginx(做测试用) [20:29:35 root@ubuntu2204 ~]# apt -y install nginx [20:29:35 root@ubuntu2204 ~]# echo website > /var/www/html/index.html #在centos上安装httpd(做测试用) [root@CentOS ~]# yum -y install httpd [root@CentOS ~]# echo welcome lan > /var/www/html/index.html #ubuntu的网卡配置(不加网关,因为是直连网段) [20:29:35 root@ubuntu2204 ~]#vim /etc/netplan/00-installer-config.yaml network: ethernets: eth0: # dhcp4: true addresses: [192.168.10.8/24] routes: - to: 10.0.0.0/24 # via: 192.168.10.130 #rocky的网卡配置(两块网卡) [root@Rocky8 ~]#ip a 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:2a:77:de brd ff:ff:ff:ff:ff:ff inet 10.0.0.10/24 brd 10.0.0.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:2a:77:e8 brd ff:ff:ff:ff:ff:ff inet 192.168.10.130/24 brd 192.168.10.255 scope global dynamic noprefixroute eth1 valid_lft 956sec preferred_lft 956sec inet6 fe80::6d5c:ccda:f913:485/64 scope link noprefixroute valid_lft forever preferred_lft forever #centos的网卡配置(修改IP地址和加网关) [root@CentOS ~]#nmcli con mod eth0 ipv4.method manual ipv4.addr 10.0.0.110/24 ipv4.gateway 10.0.0.10 [root@CentOS ~]#nmcli con reload [root@CentOS ~]#nmcli con up eth0 #实现SNAT命令(私网访问公网) [root@Rocky8 ~]#iptables -t nat -A POSTROUTING -s 10.0.0.0/24 ! -d 10.0.0.0/24 -j MASQUERADE #实现DNAT命令(公网访问私网) [root@Rocky8 ~]#iptables -t nat -A PREROUTING -d 192.168.10.130 -p tcp --dport 80 -j DNAT --to 10.0.0.110:80 #查看规则 [root@Rocky8 ~]#iptables -t nat -vnL Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 3 180 DNAT tcp -- * * 0.0.0.0/0 192.168.10.130 tcp dpt:80 to:10.0.0.110:80 Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 197 14786 MASQUERADE all -- * * 10.0.0.0/24 !10.0.0.0/24 Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination #从私网访问公网 [root@CentOS ~]#curl 192.168.10.8 welcome to website #完成 #从公网访问私网 [21:51:33 root@ubuntu2204 ~]#curl 192.168.10.130 welcome lan #完成
17.使用REDIRECT将90端口重定向80 ,并可以访问80端口的服务
#在rocky(firewall)中先修改映射端口到centos(私网端)90端口 [root@Rocky8 ~]#iptables -t nat -R PREROUTING 1 -d 192.168.10.130 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.110:90 #在centos(私网端)用REDIRECT重定向90端口到80端口 [root@CentOS ~]#iptables -t nat -R PREROUTING 1 -d 10.0.0.110 -p tcp --dport 90 -j REDIRECT --to-ports 80 #在ubuntu(公网端)去访问rocky(firefall)端,能正常实现centos(私网端)服务 [10:28:11 root@ubuntu2204 ~]#curl 192.168.10.130 welcome lan #完成
18.firewalld常见区域总结
19.通过nft来实现暴露本机80/443/ssh服务端口给指定网络访问
#创建mytable表(自定义) [root@Rocky8 ~]#nft add table inet mytable #创建mytable下的mychain链 [root@Rocky8 ~]#nft add chain inet mytable mychain { type filter hook input priority 0\; } #增加规则限制 [root@Rocky8 ~]#nft add rule inet mytable mychain ip saddr { 10.0.0.131,10.0.0.20 } tcp dport { 80,443,ssh } accept #查看规则集 [root@Rocky8 ~]#nft -a list ruleset table inet mytable { # handle 1 chain mychain { # handle 1 type filter hook input priority filter; policy accept; ip saddr { 10.0.0.20, 10.0.0.131 } tcp dport { 22, 80, 443 } accept # handle 7 } } #10.0.0.131可以正常访问 [21:46:14 root@ubuntu2204 ~]#curl 10.0.0.10 welcome website #10.0.0.20可以正常访问 [root@Rocky8 ~]#curl 10.0.0.10 welcome website #删除规则 [root@Rocky8 ~]#nft delete rule inet mytable mychain handle 7 #插入规则 [root@Rocky8 ~]#nft insert rule inet mytable mychain handle 7 tcp dport xx accept
20.总结关系型数据库相关概念,关系,行,列,主键,唯一键,域。
(1)关系relational:关系就是二维表,其中:表中的行,列次序并不重要
(2)行row:表中每一行,又称为一条记录record
(3)列column:表中的每一列。称为属性,字段或域
(4)主键primary key:一个或多个字段的组合,用于唯一确定一个记录的字段,一张表只有一个主键,主键字段不能为空NULL
(5)唯一键unique key:一个或多个字段的组合,用于唯一确定一个记录的字段,一张表可以有多个唯一键,而且唯一键字段可以为空NULL
(6)域domain:属性的取值范围,如:年龄
21.总结关联类型,1对1,1对多,多对多关系。可以自行设计表进行解释
(1)一对一联系:在表A中创建的字段,存储着另一个表的主键值。举例:表A中记录的是个人信息(包含身份证信息),另一个表就是身份证信息表。
(2)一对多联系:外键。举例:部门和员工,每个员工都属于某个特定部门,为了避免在某个员工上面出现不存在部门编号,则用外键来解决。
(3)多对多联系:增加第三张表。举例:学生表和课程表。每个学生可以报多门课,每门课也包括多名学生,为了更好的表示其对应关系,把学生ID和课程ID拿出来,利用主外键关系来创建第三张表。这样可以避免数据的冗余度,不过查询速度会慢一些,因为增加了查询的复杂度。
22.总结mysql设计规范
提示:根据生产环境要求,可以适当不遵守第二第三范式规则。
(1)第一范式:1NF
无重复的列,每一列都是不可分割的基本数据项,每一列中不能有多个值。即实体中的某个属性不能有多个值或者不能有重复的属性,确保每一列的独特性。除去同类型的字段,就是无重复的列
说明:第一范式是对关系模式的基本要求,不满足第一范式的数据库不是关系数据库
(2)第二范式:2NF
第二范式必须先满足第一范式,属性完全依赖于主键,非主键字段需要与整个主键有直接相关性,即非主键字段不能依赖于部分主键
(3)第三范式:3NF
第三范式必须先满足第二范式,非主键属性不依赖其他非主键属性,非主键字段间不能有从属关系
23.总结mysql多种安装方式,及安全加固,并总结mysql配置文件
23.1多种安装方式:
(1)程序包安装:
#安装mysql服务 [root@Rocky8 ~]# yum -y install mysql-server #启动mysql服务 [root@Rocky8 ~]# systemctl enable --now mysqld #查看mysql监听端口3306 [root@Rocky8 ~]# ss -ntlp LISTEN 0 128 *:3306 *:* users:(("mysqld",pid=2586,fd=25)) #查看mysql的单进程,多线程 [root@Rocky8 ~]# pstree -p
(2)二进制文件安装:
#下载二进制压缩文件 [root@Rocky8 ~]# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz #解压缩文件到指定文件夹 [root@Rocky8 ~]# tar xf mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz -C /usr/local #转到/usr/local目录 [root@Rocky8 ~]# cd /usr/local #创建软链接 [root@Rocky8 ~]# ln -s mysql-8.0.31-linux-glibc2.12-x86_64/ mysql #设置环境变量 [root@Rocky8 ~]# echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh #编辑配置文件 [root@Rocky8 ~]# vim /etc/my.cnf [mysqld] datadir=/data/mysql skip_name_resolve=1 socket=/data/mysql/mysql.sock log-error=/data/mysql/mysql.log pid-file=/data/mysql/mysql.pid [client] socket=/data/mysql/mysql.sock #初始化数据库并生成空密码 [root@Rocky8 ~]# mkdir -pv /data/mysql [root@Rocky8 ~]# mysqld --initialize-insecure --user=mysql --datadir=/data/mysql #准备服务脚本和启动服务 [root@Rocky8 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql [root@Rocky8 ~]# chkconfig --add mysqld [root@Rocky8 ~]# systemctl enable --now mysqld
23.2安全加固及总结mysql配置文件
安全加固:改密码+删匿名账户(CentOS7)+删测试数据库(CentOS7)
#CentOS7中查看匿名用户 [root@Centos7 ~]#mysql MariaDB [(none)]> select user,host from mysql.user; +------+-------------------+ | user | host | +------+-------------------+ | root | 127.0.0.1 | | root | ::1 | | | centos7.zhang.stu | | root | centos7.zhang.stu | | | localhost | | root | localhost | +------+-------------------+ 6 rows in set (0.00 sec) #CentOS7查看测试数据库 [root@Centos7 ~]#mysql MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec) #交互式删除匿名用户和测试数据库及设置密码 [root@Centos7 ~]#mysql_secure_installation
#Rocky8中只修改密码就好了 [root@Rocky8 ~]#mysqladmin password 123456
服务器端配置文件:
/etc/my.cnf #Global选项
/etc/mysql/my.cnf #Global选项
~/.my.cnf #User-specific 选项
配置文件中修改提示符:
[root@Rocky8 ~]#vim /etc/my.cnf [mysql] prompt=(\\u@\\h) [\\d]>\\_
配置文件中关闭mysql的远程网络连接:
[root@Rocky8 ~]#vim /etc/my.cnf [mysqld] skip-networking=1
配置文件格式:
[mysqld]
[mysqld_safe]
[mysqld_multi]
[mysql]
[mysqladmin]
[mysqldump]
[server]
[client]
格式:
parameter = value
说明:
_和- 相同
1,ON,TRUE意义相同, 0,OFF,FALSE意义相同,无区分大小