当前位置: 首页 > news >正文

Linux入门DAY18

Linux入门DAY18

SELinux 加固 Linux 安全

控制端口 SELinux 上下文

端口 SELinux 上下文

**SELinux还可以对端口标记。**当某个进程希望侦听端口时, SELinux将检查是否允许与该进程相关联的标签绑定该端口标签。 这可以阻止恶意服务控制本应由其他网络服务使用的端口

在 targeted 策略中:

  • 端口 22/TCP ,具有标签 ssh_port_t
  • 端口 80/TCP 和 443/TCP ,具有标签 http_port_t
#端口策略中个人理解为添加防火墙规则防止默认端口被恶意程序占用
#查看端口标记
[root@centos7 ~ 09:40:44]# semanage port -l | grep http_port_t
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988#添加端口标记
[root@centos7 ~ 09:44:14]# semanage port -a -t http_port_t -p tcp 18020
[root@centos7 ~ 09:44:42]# semanage port -l | grep 18020
http_port_t                    tcp      18020, 80, 81, 443, 488, 8008, 8009, 8443, 9000#修改网络端口标记
#-m --modify
#-t --type
[root@centos7 ~ 09:44:55]# semanage port -m -t ssh_port_t -p tcp 18020
[root@centos7 ~ 09:49:47]# semanage port -l | grep 18020
ssh_port_t                     tcp      18020, 22#删除端口标记
[root@centos7 ~ 09:49:48]# semanage port -d -t ssh_port_t -p tcp 18020
[root@centos7 ~ 09:49:54]# semanage port -l | grep 108020

实例 配置 web 站点监听端口

[root@server ~ 18:05:30]# vim /etc/httpd/conf/httpd.conf
# Listen 80 --> Listen 18020
Listen 18020#重启服务
[root@server ~ 18:30:09]# systemctl restart httpd# 配置端口
[root@server ~ 18:30:54]# semanage port -a -t http_port_t -p tcp 18020
[root@server ~ 18:31:04]# semanage port -l | grep 18020
http_port_t                    tcp      18020, 80, 81, 443, 488, 8008, 8009, 8443, 9000# 只查看改动标签
[root@server ~ 18:31:09]# semanage port -lC
SELinux 端口类型                   协议       端口号http_port_t                    tcp      18020# 重启服务并访问
[root@server ~ 18:31:14]# systemctl restart httpd# 访问验证
[root@server ~ 18:31:24]# curl http://server.phoenix1337.cloud:18020/
curl: (7) Failed connect to server.phoenix1337.cloud:18020; 拒绝连接
[root@server ~ 18:31:38]# curl localhost:18020
Hello World

控制SELinux布尔值

SELinux 布尔值

SELinux 布尔值是可更改SELinux策略行为的开关,可以启用和禁用

#查看SELinux布尔值
[root@centos7 ~ 09:50:34]# getsebool -a |grep httpd_enable_homedirs
httpd_enable_homedirs --> off
[root@centos7 ~ 10:21:11]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off#设置SELinux布尔值
[root@centos7 ~ 10:21:44]# setsebool 
Usage:  setsebool [ -NPV ] boolean value | bool1=val1 bool2=val2...
#启用value为1或者on或者true
#禁用value为0或者off或者false[root@centos7 ~ 10:22:08]# setsebool httpd_enable_homedirs =1
setsebool: illegal value =1 for boolean httpd_enable_homedirs
[root@centos7 ~ 10:22:22]# setsebool httpd_enable_homedirs =0
setsebool: illegal value =0 for boolean httpd_enable_homedirs#持久化设置布尔值,使用-P选项修改将写入SELinux数据库
[root@centos7 ~ 10:22:29]# setsebool -P httpd_enable_homedirs =1
setsebool: illegal value =1 for boolean httpd_enable_homedirs

semanage boolean 命令管理 SELinux 布尔值

[root@centos7 ~ 10:22:51]# semanage boolean 
Usage: semanage boolean [-h] [-n] [-N] [-S STORE] [  --extract  | --deleteall  | --list -C | --modify ( --on | --off ) boolean ]#查看布尔值
[root@centos7 ~ 10:25:21]# semanage boolean -l
#只查看非默认的布尔值
[root@centos7 ~ 10:25:24]# semanage boolean -l -C#设置布尔值
[root@centos7 ~ 10:25:28]# semanage boolean -m -1|--on 
[root@centos7 ~ 10:25:31]# semanage boolean -m -0|--off use_nfs_home_dirs#删除自定义布尔值
[root@centos7 ~ 10:25:35]# semanage boolean -D

实例 允许 httpd 访问用户家目录

#修改参数
[root@centos7 ~ 10:29:26]# vim /etc/httpd/conf.d/userdir.confUserDir enabled
UserDir public_html#重启服务
[root@centos7 ~ 10:30:02]# systemctl restart httpd#设置权限 切换phoenix用户
[root@server ~ 18:56:47]# su - phoenix
上一次登录:三 86 15:39:25 CST 2025:0 上
[phoenix@server ~ 18:57:09]$ mkdir public_html
[phoenix@server ~ 18:57:33]$ echo "Welcome to phoenix home" > public_html/index.html
[phoenix@server ~ 18:57:36]$ ll /home/
总用量 4
drwx-----x. 15 phoenix phoenix 4096 86 18:57 phoenix#测试
[root@server ~ 18:58:22]# curl http://server.phoenix1337.cloud:18020/~phoenix/
curl: (7) Failed connect to server.phoenix1337.cloud:18020; 拒绝连接#启用布尔值访问
[root@server ~ 18:58:35]# setsebool httpd_enable_homedirs=1#验证
[root@client ~ 18:59:22]# curl http://server.phoenix1337.cloud:18020/~phoenix/
Welcome to phoenix home

DHCP服务器

DHCP 服务介绍

在大型网络中,系统静态分配IP地址面临问题:

  1. 确保不要同时在多个系统上使用同一个地址。
  2. 部署新系统通常需要手动分配其IP地址。在云环境中,实例的网络是自动化配置的。

动态主机配置协议(DHCP-Dynamic Host Configuration Protocol)提供了一种自动配置网络参数的方法,例如IP地址,默认网关,DNS服务器和域或NTP服务器。在网络中部署DHCP服务器,您可以集中控制这些参数。

DHCP有两种协议:

  • 用于IPv4网络的 DHCPv4
  • 用于IPv6网络的 DHCPv6

部署DHCP服务器

安装DHCP软件

[root@centos7 ~ 11:22:01]# yum install -y dhcp#防火墙放行
[root@centos7 ~ 11:23:06]# systemctl start firewalld
[root@centos7 ~ 11:23:31]# firewall-cmd --add-service=dhcp
success
[root@centos7 ~ 11:23:34]# firewall-cmd --add-service=dhcp --permanent
success

配置DHCP服务器

dhcpd服务使用/etc/dhcp/dhcpd.conf配置文件。 dhcp软件包提供/usr/share/doc/dhcp-*/dhcpd.conf.example 配置文件示例

[root@centos7 ~ 11:23:38]# cp /usr/share/doc/dhcp-*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@centos7 ~ 11:23:38]# vim /etc/dhcp/dhcpd.conf

配置参数

# A slightly different configuration for an internal subnet.
subnet 10.1.8.0 netmask 255.255.255.0 {range 10.1.8.101 10.1.8.130;option domain-name-servers 223.5.5.5;option domain-name "phoenix.cloud";option routers 10.1.8.2;option broadcast-address 10.1.8.255;default-lease-time 600;max-lease-time 7200;
}
  • authoritative,指示服务器对其所管理的子网具有权威性
  • subnet,提供的子网详细信息
  • range,指定服务器在该范围内分配IP地址
  • option routers,指定服务器提供默认网关地址
  • option domain-name-servers,指定服务器提供DNS名称服务器
  • option domain-search,指定服务器提供DNS域搜索列表
  • default-lease-time,提供网络信息默认租期,如果客户端不要求任何特定的租期。单位秒
  • max-lease-time,指示服务器可以从客户端请求接受的最大租期。单位秒

客户端系统上的NetworkManager使用domain-name-serversdomain-search更新resolv.conf文件中的nameserversearch参数

验证 DHCP 配置

[root@centos7 ~ 11:27:19]# dhcpd -t
Internet Systems Consortium DHCP Server 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file

启用并启动服务

[root@centos7 ~ 11:27:24]# systemctl enable dhcpd --now
[root@centos7 ~ 11:27:49]# systemctl status dhcpd

配置 DHCP 客户端

#client添加一块网卡 配置选择NAT
[root@centos7 ~ 11:17:24]# ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128 
ens32            UP             10.1.8.11/24 fe80::20c:29ff:fe14:6c68/64 
virbr0           DOWN           192.168.122.1/24 
virbr0-nic       DOWN           
ens34            UP             10.1.8.101/24 fe80::6f08:f2bb:8740:ec82/64 #自动获取到10.1.8.0网段dhcp分配地址
[root@centos7 ~ 11:17:39]# ip addr show ens34
5: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:14:6c:72 brd ff:ff:ff:ff:ff:ffinet 10.1.8.101/24 brd 10.1.8.255 scope global noprefixroute dynamic ens34valid_lft 561sec preferred_lft 561secinet6 fe80::6f08:f2bb:8740:ec82/64 scope link noprefixroute valid_lft forever preferred_lft forever
[root@centos7 ~ 11:17:56]# nmcli c
NAME        UUID                                  TYPE      DEVICE 
ens32       bfe99652-7db2-44eb-9781-1f21066c0791  ethernet  ens32  
有线连接 1  8f58e0f3-5bac-3f8e-9663-a1d11451e8e5  ethernet  ens34  
virbr0      ad937e41-5cf2-411e-bc20-17508f4c9634  bridge    virbr0 
dynamic     2bdc8c6f-2e81-4ab1-9c1d-2aa843fec17d  ethernet  --     
dynamic     26c4d11f-5868-4c25-8202-8787411dc121  ethernet  --

DNS服务器

DNS 服务介绍

DNS 服务介绍

DNS(Domain Name System,域名系统)服务是一种用于将域名转换为IP地址的分布式数据库服务。它是互联网的核心服务之一,使得用户能够通过易于记忆的域名来访问网站和其他网络服务,而无需记住复杂的IP地址。

DNS 也是一个存储网络主机和资源目录的分层命名系统。 目录中的信息将网络名称映射到不同资源记录。

  • 根域:DNS层次结构最顶层,使用独立的"."表示。
  • 顶级域:DNS层次结构第二层,例如**.com**,.net和**.org**等域。
  • 二级域:DNS层次结构第三层,例如**laoma.cloud **和 redhat.com等域。由各个组织使用。
  • 以此类推

在这里插入图片描述

Domain

domain 是 resource records 的集合,该集合以通⽤名结尾,表示 DNS 命名空间的整个⼦树,如 laoma.cloud。

top-level domain(TLD- 顶级域)由 Internet Assigned Numbers Authority(IANA-互联网号码分配机构)管理,并负责委派顶级域。

常见的TLD类型:

  • Generic TLDs(gTLD-通用顶级域名),最初是按主题组织的,包括.com,.edu和.net等
  • Country code TLDs(ccTLD-国家代码顶级域名),根据ISO 3166-1标准在国家范围上组织的,并包括.us,.uk,.cn和.ru之类的域
Subdomain

Subdomain 是另一个域的完整子树的域。 在讨论两个域之间的关系时使用此术语。 例如,lab.laoma.cloudlaoma.cloud的子域,而laoma.cloud是**.com的子域。 我们也可以将laoma.cloud称为第二级域,并将lab.laoma.cloud**称为第三级域

Zone

Zone是特定名称服务器直接负责的域。 它可能是整个域,也可能只是域的一部分。Zone可以将部分或全部子域都委派给另一个名称服务器或多个名称服务器。

例如,root名称服务器对root zone具有权威性,但它们将.com域的职责委派给其他名称服务器,这些名称服务器为.com区域提供权威性应答。 这些服务器还可以继续将责任委派给其他名称服务器

DNS 查询

主机的 DNS 查询主要有两种方式:递归查询迭代查询

DNS 查询时,DNS 请求报头部RD 字段决定了查询类型:

  • RD 为 1 => 递归查询默认查询方式
  • RD 为 0 => 迭代查询。

递归查询:以本地名称服务器为中心,DNS 客户端只是发出原始的域名查询请求报文,然后就一直处于等待状态,直到本地名称服务器发来了最终的查询结果。此时的本地名称服务器就相当于中介代理 的作用。

迭代查询:以DNS客户端自己为中心。所有查询工作全部是 DNS 客户端自己进行。DNS客户 会按照顺序向本地名称服务器 、一级名称服务器、二级名称服务器、权威名称服务器发出查询 DNS 的 请求查询报文,这个过程中每一级服务器就会返回一个能解答这个查询的下一个名称服务器列表 A,获取到下个查询列表信息 A 后 DNS 客户 会再向返回的列表 A 中发出请求,直到找到最终负责所查域名的名称服务器,从它得到最终结果。

有些DNS服务器,为了减轻自己的负载,则会配置禁止使用递归查询,则客户端只能使用递归查询。

两者主要区别:

  • 递归查询 以 本地名称服务器 为中心进行查询
  • 迭代查询DNS客户端自己 为中心查询

配置权威名称服务器

权威名称服务器架构

权威名称服务器存储 DNS 资源记录,并为其管理的区域提供权威答案

Linux中的Berkeley Internet Name Domain(BIND)软件可以实现权威的名称服务器。 BIND允许我们将权威服务器配置为区域的主要服务器或辅助服务器。区域中只有一台主服务器,但可具有多台辅助服务器。 辅助服务器通过请求区域传输,定期从主服务器下载区域信息的最新版本。 它们执行区域传输的频率以及如何知道其数据是否过时由区域的SOA资源记录控制

非所有权威服务器都必须是公共的。例如,使用primary服务器来管理区域文件,并将区域信息发布到权威的secondary服务器。primary服务器是私有的,而secondary服务器是面向公众的,从而为外部客户端提供权威性的答案,保护我们的primary**服务器免受攻击

外部客户端查找example

**查找过程:**客户的仅缓存名称服务器首先查询其中一个根名称服务器。 它定向到负责.com域的名称服务器池。 这些服务器之一使用example域的NS记录进行响应,因此仅缓存名称服务器会查询其中一个面向公众的辅助名称服务器

内部客户端查找example

在这里插入图片描述

更好的方法是提供内部slave权威服务器。 查询本地域的记录时,消除了外部查询,而且更加安全

在这里插入图片描述

安装 BIND

[root@server ~ 19:12:15]# yum install -y bind bind-utils
  • bind,服务器软件包
  • bind-utils,工具软件包

bind软件包默认将服务配置为基本的递归缓存名称服务器。 它被配置为localhost、相关域和地址的primary服务器,以减轻根名称服务器的负担。 此默认配置还限制了对本地主机上程序的访问。 它侦听IPv4和IPv6环回接口的端口53 UDP/TCP(127.0.0.1和:: 1)上的连接

配置 BIND

named主要配置文件是**/etc/named.conf**。 该文件控制BIND的基本操作,由root用户(named组)拥有,具有八进制权限0640,并且具有named_conf_t SELinux类型。

配置文件还指定了每个区域的配置文件位置,这些文件通常保存在**/var/named**中。

配置DNS服务器需要执行以下步骤:

  • 配置地址匹配列表
  • 配置named侦听的IP地址
  • 配置客户端的访问控制
  • 配置zone
  • 编写区域文件
定义地址匹配列表

在/etc/named.conf文件的开头,可以使用acl指令定义地址匹配列表。 acl指令不是用于控制客户端对服务器的访问,而是使用它们来定义IP地址和网络列表。

它们提供别名,可以与访问控制指令和其他配置选项一起使用,并使更新配置文件更加容易。

条目可以是完整的IP地址或网络,用尾点(10.1.8.)或CIDR表示法(192.168.0/24或2001:db8::/32)表示,也可以使用先前定义的地址匹配列表的名称。

acl语句定义的地址集可以被多个指令引用。

named中内置了四个预定义的ACL:

ACLDescription
noneMatches no hosts.
anyMatches all hosts.
localhostMatches all IP addresses of the DNS server.
localnetsMatches all hosts from the DNS server’s local subnets.
配置 named 侦听的IP地址
#options 修改参数
#监听53端口
options {listen-on port 53 { 10.1.8.10; };............
};
配置客户端的访问控制
#options 修改参数 允许此网段查询
#allow-query { any; };
#允许互联网托管者从他们那里获取信息
options {............allow-query     { 10.1.8.0/24; };
};
配置 zone
[root@server ~ 19:23:20]# vim /etc/named.conf#在最后添加参数zone "phoenix1337.cloud" IN {type master;file "phoenix1337.cloud.zone";
};zone "8.1.10.in-addr.arpa" IN{type master;file "10.1.8.zone";
};
  • type,指定服务器角色
  • file,指定相对路径名。 相对路径由 options 块中的 directory 指令设置

创建区域文件

辅助区域文件应保存在/var/named/slaves中。辅助服务器启动时,会将其缓存的区域版本与主服务器上的当前版本进行比较:如果区域文件版本是最新的,则使用该区域文件; 如果区域文件版本不是最新的或文件不存在,则named执行区域传输并将结果缓存在该文件中

BIND 应该能够读取这些区域文件,但不能写入它们。 这些文件应归root用户和named组所有,以便守护程序在某种程度上受到损害时不能更改它们

[root@server ~ 19:28:00]# touch /var/named/phoenix1337.cloud.zone /var/named/10.1.8.zone
[root@server ~ 19:28:01]# chmod 640 /var/named/*.zone
[root@server ~ 19:28:11]# chown root:named /var/named/*.zone[root@server named 19:29:23]# ll phoenix1337.cloud.zone 10.1.8.zone
-rw-r-----. 1 root named 540 86 19:28 10.1.8.zone
-rw-r-----. 1 root named 509 86 19:28 phoenix1337.cloud.zone

编辑区域文件格式

区域文件可以以**$TTL**指令开头,该指令为任何未列出的资源记录设置默认的TTL。 这使我们可以一次为许多资源记录调整TTL。 无需编辑整个文件。 如果TTL是数字,则以秒为单位

$TTL 3600

在数字后面可以跟单个字母指定其他时间单位

  • M表示分钟(1M为60)
  • H小时(1H是3600)
  • D天(1D为86400)
  • W数周(1W是604800)

每个区域文件仅包含一个SOA(授权开始)资源记录

添加记录

正向记录,将名称映射到IP地址和其他记录。该区域文件必须具有

  • SOA记录
  • 每个公用名称服务器的NS记录
  • 该区域的其他A,AAAA,CNAME,MX,SRV和TXT记录
[root@server ~ 19:35:19]# vim /var/named/phoenix1337.cloud.zone $TTL 3600
@ IN SOA dns.phoenix1337.cloud. root.phoenix1337.cloud. (42 ; serial3H ; secondary refresh15M ; secondary retry1W ; secondary timeout15M ; minimum cache TTL for negative answers
)IN NS dns.phoenix1337.cloud.
dns            IN A 10.1.8.10
server         IN A 10.1.8.10
student        IN CNAME client.phoenix1337.cloud.
client         IN A 10.1.8.11
www         30 IN A 10.1.8.200
@              IN MX 10 mail.phoenix1337.cloud.
mail           IN A 10.1.8.253                                 

反向记录,将IP地址映射到主机名。该区域文件必须具有

  • SOA记录
  • NS记录
  • PTR记录
[root@server ~ 19:35:51]# vim /var/named/10.1.8.zone$TTL 3600
@ IN SOA dns.phoenix1337.cloud. root.phoenix1337.cloud. (42 ; serial3H ; secondary refresh15M ; secondary retry1W ; secondary timeout15M ; minimum cache TTL for negative answers
)IN NS dns.phoenix1337.cloud.
10             IN PTR server.phoenix1337.cloud.
10             IN PTR dns.phoenix1337.cloud.
11             IN PTR client.phoenix1337.cloud.
11             IN PTR student.phoenix1337.cloud.
200            IN PTR www.phoenix1337.cloud.
253            IN PTR mail.phoenix1337.cloud.  

验证配置

在重新加载或重新启动named之前,应该验证/etc/named.conf文件和区域文件的语法。

  • named-checkconf,验证 /etc/named.conf
[root@server ~ 19:38:19]# named-checkconf#配置文件不在默认位置 运行命令
[root@server ~ 19:40:06]# named-checkconf /media/backups/named.conf
  • named-checkzone zone zone-file**,通过zone-file验证***zone
[root@server ~ 19:41:16]# named-checkzone phoenix1337.cloud /var/named/phoenix1337.cloud.zone
zone phoenix1337.cloud/IN: loaded serial 42
OK

启动服务器时,应监视系统日志中是否有错误。 单个错误也可能会导致整个区域无法加载,但是无法加载区域不会阻止后台驻留程序启动。因此除非我们在启动过程中监视系统日志,否则很难弄清楚哪里错了

#查看与named.service单位文件有关的systemd的日志输出
[root@server ~ 19:41:34]# journalctl -f _SYSTEMD_UNIT=named.service

运行 BIND

#启用并启动服务
[root@server ~ 19:45:10]# systemctl enable named --now
[root@server ~ 19:45:23]# systemctl status named#防火墙放行
[root@server ~ 19:45:32]# firewall-cmd --add-service=dns
[root@server ~ 19:46:31]# firewall-cmd --add-service=dns --permanent

客户端测试

# 配置客户端 dns
[root@client ~ 19:46:50]# nmcli connection modify ens32 ipv4.dns 10.1.8.10
[root@client ~ 19:47:03]# nmcli connection up ens32#测试
[root@client ~ 19:50:48]# ping student.phoenix1337.cloud

dig工具

[root@server ~ 19:48:48]# yum install -y bind-utils#查询A记录
[root@server ~ 19:50:22]# dig @10.1.8.10 student.phoenix1337.cloud
http://www.lryc.cn/news/611563.html

相关文章:

  • MCU控制ADAU1701,用System Workbench for STM32导入工程
  • SSL/TLS协议深度解析
  • react 流式布局(图片宽高都不固定)的方案及思路
  • 【Create my OS】8 文件系统
  • 机器学习第六课之贝叶斯算法
  • 《第五篇》基于RapidOCR的图片和PDF文档加载器实现详解
  • 新能源汽车热管理系统核心零部件及工作原理详解
  • apache-tomcat-11.0.9安装及环境变量配置
  • 【算法训练营Day21】回溯算法part3
  • Redis的分布式序列号生成器原理
  • 【C++详解】STL-set和map的介绍和使用样例、pair类型介绍、序列式容器和关联式容器
  • 部署 Zabbix 企业级分布式监控笔记
  • 无人机开发分享——基于行为树的无人机集群机载自主决策算法框架搭建及开发
  • 分布式微服务--GateWay(1)
  • 3479. 水果成篮 III
  • Minio 高性能分布式对象存储
  • 分布式光伏气象站:安装与维护
  • 【论文分析】【Agent】SEW: Self-Evolving Agentic Workflows for Automated Code Generatio
  • 支持多网络协议的测试工具(postman被无视版)
  • 【概念学习】早期神经网络
  • ORACLE 19C建库时卡在46%、36%
  • Godot ------ 初级人物血条制作01
  • OpenAI开源大模型gpt-oss系列深度解析:从120B生产级到20B桌面级应用指南
  • Unity3D中的Controller:深入解析动画控制器的核心概念与应用
  • 【数据库】Oracle学习笔记整理之一:ORACLE的核心组成部分
  • 【YOLOv8改进 - C2f融合】C2f融合DBlock(Decoder Block):解码器块,去模糊和提升图像清晰度
  • 微信小程序最大层级跳转问题
  • [Oracle] SIGN()函数
  • RabbitMQ 全面指南:从基础概念到高级特性实现
  • Unix/Linux 系统编程中用于管理信号处理行为的核心概念或模型