云计算百科
云计算领域专业知识百科平台

Linux运维:SELinux、DHCP、DNS 实战

SELinux、DHCP、DNS 实战

SELinux

SELinux 是传统rwx自主访问控制(DAC)之外,增加的强制访问控制MAC安全层。
DAC:由文件属主决定权限;MAC:系统策略强制管控,默认拒绝,只有策略显式允许才可以访问。
核心目标:防止被入侵的服务进程越权访问系统其他数据。

SELinux上下文(标签)

每个进程、文件、目录、端口都拥有SELinux上下文(安全标签)
格式:user:role:type:level

  • user:selinux用户
  • role:角色;文件/目录角色固定是object_r;进程是xxx_r
  • type(最重要,考试重点,以_t结尾):策略主要依靠type做访问控制
  • level:安全级别,MLS,RHCSA基本不考

示例

#进程上下文
system_u:system_r:sshd_t:s0‑s0:c0.c1023
#文件上下文
unconfined_u:object_r:user_home_dir_t:s0

重要理解:不是type相同才可以访问,看策略规则是否允许某进程type访问某文件type
例:httpd_t(apache进程),策略允许读取httpd_sys_content_t;拒绝读取tmp_t(/tmp目录),哪怕文件777也会拦截。

-Z 参数查看标签

ps -Z #查看进程selinux上下文
ls -Z #查看文件/目录selinux上下文
ll -Z #同时看普通权限+selinux标签

SELinux三种运行模式

模式行为
enforcing(强制) 加载策略,违反策略直接拒绝访问,记录AVC审计日志(生产推荐)
permissive(宽容) 加载策略,不拦截操作,只记录AVC日志,用于排错
disabled(完全关闭) 内核不加载SELinux策略;进程无selinux标签,ps -Z显示‑;磁盘上文件标签会保留,ls -Z依旧可以看到

getenforce #查看当前selinux模式
sestatus #完整selinux状态信息

setenforce 1 / setenforce Enforcing #临时切换强制模式
setenforce 0 / setenforce Permissive #临时切换宽容模式

⚠️setenforce限制:仅能在 enforcing ↔ permissive 之间切换;如果是disabled,setenforce命令直接报错:setenforce: SELinux is disabled

永久配置文件:/etc/selinux/config

SELINUX=enforcing # enforcing / permissive / disabled
SELINUXTYPE=targeted # 默认targeted策略,只管控网络服务

  • enforcing ↔ permissive:setenforce临时切换,不需要修改配置、不需要重启,重启会还原为配置文件定义的模式
  • disabled <‑‑> enforcing/permissive:必须修改配置文件 + 重启系统

注意:disabled切换到enforcing/permissive,重启系统会全盘自动重新打SELinux标签,开机时间变长,不可断电。

修改SELinux文件上下文标签

  • chcon:临时修改标签;移动文件、restorecon执行后标签会复原,重启不保存
  • chcon -t httpd_sys_content_t /web/index.html

  • semanage fcontext:写入selinux数据库,永久定义默认标签,写完必须执行restorecon生效
  • semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
    restorecon -Rv /web

    restorecon:读取semanage数据库,恢复目录/文件的默认selinux标签。

    复制移动文件小考点

    • cp复制文件:新文件继承目标目录的selinux标签
    • mv移动文件:保留文件原来的selinux标签,不会继承目标目录

    SELinux布尔值 boolean

    布尔值是策略开关,on/off,快速放开限制,不用写复杂策略。

    getsebool -a | grep http
    setsebool -P httpd_can_network_connect on

    -P代表permanent永久;不加‑P,修改临时生效,重启失效。

    SELinux端口标签

    SELinux限制服务监听端口,例如http默认只允许http_port_t类型端口。

    semanage port -l | grep http #查看端口标签
    semanage port -a -t http_port_t -p tcp 8080 #添加端口标签
    semanage port -d -t http_port_t -p tcp 8080 #删除端口标签

    SELinux排错

    ausearch -m AVC -ts recent #查看avc拒绝日志
    sealert -a /var/log/audit/audit.log #分析selinux问题报告

    排错思路:访问被拦截 → setenforce 0测试;恢复正常说明是SELinux问题,排查标签/布尔/端口。

    DAC与MAC检查顺序:先检查传统rwx(DAC),DAC拒绝直接拦截;DAC放行后才检查SELinux(MAC)


    DHCP

    DHCP(Dynamic Host Configuration Protocol)动态主机配置协议。自动给客户端下发IP、子网掩码、网关、DNS、域名搜索域。

    • 端口:服务器UDP 67,客户端UDP 68
    • 广播报文,路由器默认不转发DHCP广播;跨网段需要DHCP中继dhcrelay。

    DORA 四步工作流程

  • Discover 发现:客户端无IP,广播DHCPDISCOVER,全网寻找DHCP服务器
  • Offer 提供:DHCP服务器回复DHCPOFFER,携带空闲IP、租期、网络参数,广播发给客户端
  • Request 请求:客户端广播DHCPREQUEST,正式申请某个服务器提供的IP;网络多台DHCP服务器时,客户端只选用其中一台。
  • Ack 确认:DHCP服务器回复DHCPACK,确认租约,下发完整网络参数。
  • 租约机制

  • 租期到达 50%:客户端单播向原DHCP服务器续租
  • 租期到达 87.5%:续租失败,全网广播,向任意DHCP服务器申请地址
  • 租约到期未续约,IP释放。
  • 客户端获取不到DHCP地址,自动分配APIPA地址 169.254.0.0/16。

    DHCP服务器部署(ISC dhcpd)

    安装

    yum install -y dhcp

    配置文件

    主配置文件:/etc/dhcp/dhcpd.conf,默认是空,复制示例模板

    cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf

    基础配置示例

    authoritative; #权威DHCP服务器
    subnet 10.1.8.0 netmask 255.255.255.0 {
    range 10.1.8.101 10.1.8.130; #动态分配IP地址池
    option domain-name-servers 223.5.5.5; #下发DNS服务器
    option domain-name "laoma.cloud"; #域名后缀
    option routers 10.1.8.2; #默认网关
    option broadcast-address 10.1.8.255; #广播地址
    default-lease-time 600; #默认租约,单位秒
    max-lease-time 7200; #客户端可请求最大租约,单位秒
    }
    #MAC地址绑定固定IP(保留地址)
    host client {
    hardware ethernet 00:0c:29:26:13:b5;
    fixed-address 10.1.8.30;
    }

    注意:每一行末尾必须分号;,缺少分号dhcpd启动失败。
    fixed‑address保留IP:可以不在range地址池内,但必须属于本子网网段。

    语法校验、启动、防火墙

    dhcpd -t #校验dhcp配置语法
    systemctl enable –now dhcpd
    firewall‑cmd –add‑service=dhcp –permanent
    firewall‑cmd –reload

    租约数据库,记录已经分配出去的IP、MAC、租期

    cat /var/lib/dhcpd/dhcpd.leases

    DHCP客户端

    网卡设置BOOTPROTO=dhcp自动获取IP

    dhclient -r ens35 #释放IP
    dhclient -v ens35 #重新向dhcp服务器申请IP

    #nmcli设置dhcp获取
    nmcli connection modify ens35 ipv4.method auto
    nmcli connection up ens35

    DHCP中继 dhcrelay

    客户端与DHCP服务器不在同一个网段,路由器不转发DHCP广播,需要中继代理转发报文。

    yum install -y dhcp
    dhcrelay 10.1.8.10 #指向DHCP服务器IP
    systemctl enable –now dhcrelay

    DHCP高频考点坑

  • dhcpd服务只会监听本机和subnet同网段网卡;服务器网卡必须拥有该网段IP,否则dhcpd启动失败。
  • authoritative;权威服务器;非权威服务器收到未知客户端请求会忽略。
  • 客户端拿到169.254.x.x:客户端无法收到DHCP服务器回复(防火墙、网络不通、dhcpd未启动、配置错误)。

  • DNS(BIND named服务)

    DNS:域名系统,域名和IP相互映射的分布式数据库。
    软件包:

    • bind:dns服务程序,后台进程named
    • bind‑utils:测试工具,dig、host
      端口:UDP/TCP 53

    DNS查询模式

  • 递归查询:客户端把查询丢给本地DNS服务器,DNS服务器替客户端完成全部查询,返回最终结果;客户端全程等待。普通客户端默认使用递归。
  • 迭代查询:客户端自己逐级向根、顶级域、权威服务器查询;dig +trace模拟迭代查询全过程。
  • 权威服务器最佳实践:关闭递归 recursion no;,防止DNS放大攻击。

    DNS资源记录速查表

    记录全称作用示例
    A 地址记录 域名→IPv4地址 www IN A 10.1.8.10
    AAAA 地址记录 域名→IPv6地址 www IN AAAA ::1
    CNAME 别名记录 域名指向另一个域名,不能直接写IP web IN CNAME www
    MX 邮件交换记录 邮件服务器,数字越小优先级越高 @ IN MX 10 mail1.laoma.cloud.
    NS 域名服务器记录 声明本域的权威DNS服务器 IN NS dns.laoma.cloud.
    PTR 指针记录 IP反向解析为域名,用于反向zone 10 IN PTR dns.laoma.cloud.
    SOA 起始授权记录 zone文件开头,定义域同步参数serial/refresh/retry/expire/minimum @ IN SOA dns.laoma.cloud. admin.laoma.cloud. (…)
    TXT 文本记录 存放文本信息,域名所有权验证、SPF @ IN TXT "v=spf1 …"

    zone文件语法重点:

  • @:代表当前zone定义的域名;由zone "xxx"定义;zone文件内部@ = xxx.
  • 域名末尾带.代表完整FQDN,不带.自动追加当前zone域名。
  • 记录行前面为空,继承上一行的owner(域名)。
  • BIND配置文件

  • 主配置文件 /etc/named.conf
  • zone定义文件:可以include外部文件
  • 区域数据库文件存放目录:/var/named/
  • zone文件权限:root:named 640;selinux标签 named_zone_t;复制zone模板务必使用‑a参数,保留权限和标签。

    /etc/named.conf options{}全局段

    options {
    listen‑on port 53 {127.0.0.1;10.1.8.10;}; #监听本机哪些IP的53端口
    allow‑query {any;}; #允许哪些主机查询dns
    recursion no; #权威服务器关闭递归
    allow‑transfer {none;}; #禁止区域传输,防止泄露全部记录
    dnssec‑enable no;
    };
    include "/etc/named.laoma.cloud.zone"; #引入外部zone定义配置

    zone定义(/etc/named.laoma.cloud.zone)

    #正向zone,管理laoma.cloud
    zone "laoma.cloud" IN {
    type master; #master主服务器;slave从服务器
    file "named.laoma.cloud"; #zone数据库文件名,位于/var/named
    allow‑update { none; }; #关闭动态更新,禁止客户端远程修改记录
    };
    #反向zone,网段10.1.8.0/24,网段倒写.in‑addr.arpa
    zone "8.1.10.in‑addr.arpa" IN {
    type master;
    file "named.10.1.8";
    allow‑update { none; };
    };

    正向zone数据库示例 /var/named/named.laoma.cloud

    $TTL 1D
    @ IN SOA dns.laoma.cloud. admin.laoma.cloud. (
    0 ;serial序列号:**修改zone记录必须手动+1,从服务器根据此字段同步更新**
    1D ;refresh:从服务器多久来主服务器拉取更新
    1H ;retry:同步失败重试间隔
    1W ;expire:从服务器连不上主服务器多久停止提供解析
    3H ) ;minimum:不存在域名(NXDOMAIN)负响应缓存时间

    IN NS dns.laoma.cloud. #本域DNS服务器
    IN MX 10 mail1 #优先级10,主邮件服务器
    IN MX 20 mail2 #优先级20,备用邮件服务器

    dns IN A 10.1.8.10
    web IN CNAME www
    www IN A 10.1.8.10
    mail1 IN A 10.1.8.101
    mail2 IN A 10.1.8.102
    client IN A 10.1.8.11

    IN NS dns.laoma.cloud.、IN MX 10 mail1行首为空,继承@也就是laoma.cloud.。

    反向zone数据库示例 /var/named/named.10.1.8

    $TTL 1D
    @ IN SOA dns.laoma.cloud. admin.laoma.cloud. (
    0 1D 1H 1W 3H )

    IN NS dns.laoma.cloud.
    10 IN PTR dns.laoma.cloud.
    10 IN PTR www.laoma.cloud.
    11 IN PTR client.laoma.cloud.
    101 IN PTR mail1.laoma.cloud.
    102 IN PTR mail2.laoma.cloud.

    反向zone中左边只写IP最后一段,10等价10.1.8.10;PTR后面域名必须写完整FQDN,末尾带.,不能写http网址。

    校验配置语法

    named‑checkconf #校验主配置/etc/named.conf
    named‑checkzone laoma.cloud /var/named/named.laoma.cloud #校验正向zone
    named‑checkzone 8.1.10.in‑addr.arpa /var/named/named.10.1.8 #校验反向zone

    启动服务、防火墙

    systemctl enable –now named
    firewall‑cmd –add‑service=dns –permanent
    firewall‑cmd –reload

    journalctl -u named #查看named运行日志,排错优先看日志

    客户端测试命令

    dig @10.1.8.10 www.laoma.cloud #指定dns服务器查询A记录
    dig @10.1.8.10 laoma.cloud MX #查询MX邮件记录
    dig @10.1.8.10 -x 10.1.8.101 #‑x反向PTR查询,IP查域名
    dig +trace www.baidu.com #迭代追踪完整查询过程

    host 域名
    getent hosts 域名

    DNS高频坑

  • zone数据库域名末尾缺少.,会自动拼接本域域名,解析出错。
  • 修改zone记录后,serial序列号忘记加1,slave从服务器不会同步更新。
  • 复制zone文件不使用‑a,丢失权限、SELinux标签,named无法读取zone文件。
  • 权威服务器没有设置recursion no,存在安全风险。
  • allow‑transfer没有设置为none,攻击者可以执行dig axfr获取全部域名记录。
  • PTR记录只允许填写域名,不能填写http链接url。
  • zone "8.1.10.in‑addr.arpa"反向区域网段需要倒序书写。
  • 主从DNS补充:type slave,从服务器,通过区域传输AXFR从master主服务器获取zone数据。master需要allow‑transfer允许从服务器IP。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Linux运维:SELinux、DHCP、DNS 实战
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!