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
上一次登录:三 8月 6 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 8月 6 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地址面临问题:
- 确保不要同时在多个系统上使用同一个地址。
- 部署新系统通常需要手动分配其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-servers和domain-search更新resolv.conf文件中的nameserver和search参数
验证 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.cloud是laoma.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:
ACL | Description |
---|---|
none | Matches no hosts. |
any | Matches all hosts. |
localhost | Matches all IP addresses of the DNS server. |
localnets | Matches 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 8月 6 19:28 10.1.8.zone
-rw-r-----. 1 root named 509 8月 6 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