• Linux操作文档——seliunx、iptables、firewalld


    seliunx、iptables、firewalld


    一、seliunx

    1、作用

    最大限度地减小系统中服务进程可访问的资源(最小权限原则)

    2、context上下文
    [root@localhost ~]# ls -Z
    -rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
    -rw-r--r--. root root system_u:object_r:admin_home_t:s0 initial-setup-ks.cfg
    drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 公共
    drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 模板
    drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 视频
    drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 图片
    drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 文档
    drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 下载
    drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 音乐
    drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 桌面
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    u:user;r:规则;t:type类型。

    [root@localhost ~]# pstree -Z
    systemd(`system_u:system_r:init_t:s0')
     ├─ModemManager(`system_u:system_r:modemmanager_t:s0')
     │  └─2*[{ModemManager}(`system_u:system_r:modemmanager_t:s0')]
     ├─NetworkManager(`system_u:system_r:NetworkManager_t:s0')
     │  └─2*[{NetworkManager}(`system_u:system_r:NetworkManager_t:s0')]
     ├─VGAuthService(`system_u:system_r:vmtools_t:s0')
     ├─abrt-dbus(`system_u:system_r:abrt_t:s0-s0:c0.c1023')
     │  └─2*[{abrt-dbus}(`system_u:system_r:abrt_t:s0-s0:c0.c1023')]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    字段说明含义
    u身份识别unconfined:不受限制的用户防止本地以外的人的访问
    system_u系统用户只有系统有权限
    r规则boject_r文件或者目录的资源
    system_r系统资源,注意普通用户创建的也属于system_r
    t类型访问策略
    3、配置文件

    1、配置文件分析

    [root@localhost ~]# vim /etc/selinux/config
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #     enforcing - SELinux security policy is enforced.
    #     permissive - SELinux prints warnings instead of enforcing.
    #     disabled - No SELinux policy is loaded.
    SELINUX=enforcing
    # SELINUXTYPE= can take one of three values:
    #     targeted - Targeted processes are protected,               //目标进程收到保护
    #     minimum - Modification of targeted policy. Only selected processes are protected.                //修改有针对性的政策。只有选定的进程受到保护。
    #     mls - Multi Level Security protection.               //多层安全保护
    SELINUXTYPE=targeted
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2、工作模式

    工作模式说明
    enforcing强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。
    permissive宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。
    disabled关闭 SELinux。
    3、SELinux 日志的记录
    [root@localhost ~]# systemctl status auditd.service 
    ● auditd.service - Security Auditing Service
       Loaded: loaded (/usr/lib/systemd/system/auditd.service; enabled; vendor preset: enabled)
       Active: active (running) since 六 2020-05-23 12:14:40 CST; 1 weeks 3 days ago
         Docs: man:auditd(8)
               https://github.com/linux-audit/audit-documentation
      Process: 682 ExecStartPost=/sbin/augenrules --load (code=exited, status=0/SUCCESS)
      Process: 669 ExecStart=/sbin/auditd (code=exited, status=0/SUCCESS)
     Main PID: 673 (auditd)
        Tasks: 5
       CGroup: /system.slice/auditd.service
               ├─673 /sbin/auditd
               ├─675 /sbin/audispd
               └─677 /usr/sbin/sedispatch
    ......
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    4、修改上下文

    [root@localhost html]# ll -Z test.html 
    -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 test.html
    [root@localhost html]# setenforce 0               //关闭selinux
    [root@localhost html]# chcon -t admin_host_t test.html                //更改安全标签
    [root@localhost html]# ll -Z test.html 
    -rw-r--r--. root root unconfined_u:object_r:admin_host_t:s0 test.html
    [root@localhost html]# setenforce 1               //打开selinux
    [root@localhost html]# restorecon test.html                //恢复其默认标签
    [root@localhost html]# ll -Z test.html 
    -rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 test.html
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    或者使用setroubleshoot工具

    [root@localhost ~]# yum install setroubleshoot
    [root@localhost ~]# tailf /var/log/messages 
    Jun  2 22:40:42 localhost setroubleshoot: failed to retrieve rpm info for /var/www/html/test.html
    Jun  2 22:40:43 localhost setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/test.html. For complete SELinux messages run: sealert -l 1a3bed1b-1cae-4183-afd6-e2f662bc0bf9
    ......
    [root@localhost ~]# sealert -l 1a3bed1b-1cae-4183-afd6-e2f662bc0bf9                //根据提供的方案解决问题
    ......
    然后执行:
    restorecon -v '/var/www/html/test.html'
    ......
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    二、iptables

    1、策略与规则链

    1、操作顺序:从上倒下,如没有匹配则执行默认(放行或阻止)
    2、规则链

    规则链说明
    filter表过滤数据包
    Nat表用于网络地址转换(IP、端口)
    Mangle表修改数据包的服务类型、TTL、并且可以配置路由实现QOS
    Raw表决定数据包是否被状态跟踪机制处理
    INPUT链进来的数据包应用此规则链中的策略
    OUTPUT链外出的数据包应用此规则链中的策略
    FORWARD链转发数据包时应用此规则链中的策略
    PREROUTING链对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
    POSTROUTING链对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)
    2、基本的命令参数
    参数作用参数作用
    -P设置默认策略-F清空规则链
    -L查看规则链-A在规则链的末尾加入新规则
    -I num在规则链的头部加入新规则-D num删除某一条规则
    -s匹配来源地址IP/MASK,加叹号“!”表示除这个IP外-d匹配目标地址
    -i网卡名称 匹配从这块网卡流入的数据-o网卡名称 匹配从这块网卡流出的数据
    -p匹配协议–dport num匹配目标端口号
    –sport num匹配来源端口号
    1、查看已有的防火墙规则链
    [root@localhost ~]# iptables -L
    
    • 1

    2、清空已有的防火墙规则链

    [root@localhost ~]# iptables -F
    
    • 1

    3、把INPUT规则链的默认策略设置为丢弃

    [root@localhost ~]# iptables -P INPUT DROP                //设置后xshell等连接工具就连不上虚拟机
    
    • 1

    4、拒绝ping使不可达

    [root@localhost ~]# iptables -I INPUT -p icmp -j REJECT
    
    • 1

    5、丢弃ping使超时

    [root@localhost ~]# iptables -I INPUT -p icmp -j DROP
    
    • 1

    6、查看添加的规则

    [root@localhost ~]# iptables-save                //添加了3条针对ICMP的规则
    # Generated by iptables-save v1.4.21 on Tue Jun  2 23:14:23 2020
    *security
    *filter
    :INPUT ACCEPT [28:1588]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [22:1752]
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -p icmp -j DROP
    -A INPUT -p icmp -j REJECT --reject-with icmp-port-
    unreachable
    COMMIT
    # Completed on Tue Jun  2 23:14:23 2020
    ......
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    7、删除添加的规则

    [root@localhost ~]# iptables -D INPUT 3
    
    • 1

    8、只允许指定网段的主机访问本机的22端口,拒绝来自其他所有主机的流量

    [root@localhost ~]# iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
    [root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j REJECT
    [root@localhost ~]# iptables-save
    # Generated by iptables-save v1.4.21 on Tue Jun  2 23:18:26 2020
    *filter
    :INPUT ACCEPT [1:40]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [12:1136]
    -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 22 -j
    ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 22 -j REJECT --reject-with
    icmp-port-unreachable
    COMMIT
    # Completed on Tue Jun  2 23:18:26 2020
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    三、firewalld

    1、firewalld的预定义区域说明
    区域说明
    trusted(信任区域)可接收所有的网络连接
    public(公共区域)允许指定的进入链接
    work(工作区域)允许受信任的计算机被限制的进入链接
    home(家庭区域)同work,如果流量和ssh,dhcpv6-client等服务相关,则允许
    internal(内部区域)同work,范围针对所有互联网用户
    external(外部区域)同public,处理伪装的进入链接,一般用于路由转发
    dmz(隔离区域也称为军事区域)允许受限制的进入链接
    block(限制区域)拒绝所有外部发起的链接,允许内部发起的链接
    drop(丢弃区域)丢弃所有进入的包,而不给出任何回应
    2、firewall的状态
    [root@localhost ~]# firewall-cmd --state                //查看防火墙的状态
    [root@localhost ~]# firewall-cmd --reload                //重新加载防火墙,中断用户的连接,将临时配置清掉,加载配置文件中的永久配置
    [root@localhost ~]# firewall-cmd --complete-reload                //重新加载防火墙,不中断用户的连接(防火墙出严重故障时使用)
    [root@localhost ~]# firewall-cmd --panic-on                //紧急模式,强制关闭所有网络连接,--panic-off是关闭紧急模式
    
    • 1
    • 2
    • 3
    • 4
    3、firewall命令

    1、基本命令
    查看firewalld服务当前所使用的区域

    [root@localhost ~]# firewall-cmd --get-default-zone 
    public
    
    • 1
    • 2

    显示默认区域的所有规则

    [root@localhost ~]# firewall-cmd --list-all
    public (active)
      target: default
      icmp-block-inversion: no
      interfaces: ens33
      sources: 
      services: dhcpv6-client https ssh
      ports: 8080-8081/tcp
      protocols: 
      masquerade: no
      forward-ports: 
      source-ports: 
      icmp-blocks: 
      rich rules: 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    查询ens33网卡在firewalld服务中的区域

    [root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33 
    public
    
    • 1
    • 2

    将网络接口ens33对应区域更改为internal区域

    [root@localhost ~]# firewall-cmd --zone=public --change-interface=ens33
    success
    [root@localhost ~]# firewall-cmd --zone=internal --list-interfaces
    
    [root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
    public
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    显示所有激活区域

    [root@localhost ~]# firewall-cmd --get-active-zones
    public
      interfaces: ens33
    
    • 1
    • 2
    • 3

    2、服务管理
    显示默认区域内允许访问的所有服务

    [root@localhost ~]# firewall-cmd --list-services
    dhcpv6-client ssh
    
    • 1
    • 2

    设置默认区域允许访问http服务

    [root@localhost ~]# firewall-cmd --add-service=http
    success
    
    • 1
    • 2

    查询public区域是否允许请求SSH和HTTPS协议的流量

    [root@localhost ~]# firewall-cmd --zone=public --query-service=ssh
    yes
    [root@localhost ~]# firewall-cmd --zone=public --query-service=https
    no
    
    • 1
    • 2
    • 3
    • 4

    把firewalld服务中请求HTTPS协议的流量设置为永久允许,并立即生效

    [root@localhost ~]# firewall-cmd --zone=public --add-service=https
    success
    [root@localhost ~]# firewall-cmd --zone=public --add-service=https --permanent 
    success
    [root@localhost ~]# firewall-cmd --list-all --zone=public 
    public (active)
      target: default
      icmp-block-inversion: no
      interfaces: ens33
      sources: 
      services: dhcpv6-client http https ssh
      ports: 
      protocols: 
      masquerade: no
      forward-ports: 
      source-ports: 
      icmp-blocks: 
      rich rules: 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    禁止ping

    [root@localhost ~]# firewall-cmd --add-icmp-block=echo-request --zone=dmz --permanent
    success
    
    • 1
    • 2

    3、端口管理
    在internal区域打开443/TCP 端口

    [root@localhost ~]# firewall-cmd --zone=internal --add-port=443/tcp
    success
    
    • 1
    • 2

    把在firewalld服务中访问8080和8081端口的流量策略设置为允许,但仅限当前生效

    [root@localhost ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
    success
    [root@localhost ~]# firewall-cmd --zone=public --list-ports 
    8080-8081/tcp
    
    • 1
    • 2
    • 3
    • 4

    把原本访问本机888端口的流量转发到22端口,要且求长期有效且立即生效

    [root@localhost ~]# firewall-cmd --zone=public --add-forward-port=port=888:proto=tcp:toport=22 --permanent 
    success
    
    • 1
    • 2
    4、富规则
    rule [family=""]
    [ source address="
    " [invert="True"] ] [ destination address="
    " [invert="True"] ] [ <element> ] [ log [prefix=""] [level=""] [limit value="rate/ duration"] ] [ audit ] [ accept|reject|drop ]
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    参数解释
    source限制源IP地址,源地址可以是—个IPv4,IPv6地址或者一个网络地址段
    destination限制目标地址,目标地址使用跟源地址相同的语法
    log注册有内核曰志的连接请求到规则中。如系统曰志
    audit审核,审核类型可以是accept, reject或drop中的一种
    accept reject drop指定accept时所有新的连接请求都将被允许。指定reject时连接将被拒绝,发起端将接到—个拒绝信息。指定drop时所有数据包会被丢弃并且不会向发起端发送任何信息
    element要素
    service服务名称。命令格式为service name = service_name
    port端口。命令格式为port port = number _or _range protocoI = protocoI
    protocol协议。命令格式为 protocol value = protocol_name_or _ID
    icmp-block阻断—个或多个 ICMP类型。命令格式为icmp-block name = icmptype_name
    masquerade规则里的IP伪装。
    forward-port将指定的TCP或UDP协议的数据包转发到本机的其他端口。
  • 相关阅读:
    JAVA多线程(MultiThread)的各种用法
    DGIOT基本功能介绍——组态编辑配置
    PCB设计干货:器件引脚的方槽、方孔如何避坑?荐读!
    R语言计算data.table分组变量下每个分组的计数
    oracle报错,XML节点值超过varchar(4000)截取方法。ORA-06502,ORA-06512,ORA-01706
    Linux 深入理解Linux文件系统与日志分析
    javascript实现白平衡树 --- AVL 树
    Spring整合Junit单元测试
    进程的调度算法
    java.lang.Enum类下name()方法起什么作用呢?
  • 原文地址:https://blog.csdn.net/g950904/article/details/106506509