返回

如何在 Ubuntu 20.04 中使用 AppArmor 保护 Jail-Chrooted OpenVPN 服务?

Linux

使用 AppArmor 保护 Jail-Chrooted OpenVPN 服务

引言

虚拟专用网络 (VPN) 连接对于远程访问和数据保护至关重要。本文探讨在 Ubuntu 20.04 服务器上使用 AppArmor 为 Jail-Chrooted OpenVPN 服务配置,以解决常见的“Operation not permitted”错误。通过详细的分步指南,我们将深入了解 AppArmor 的工作原理,并创建一个安全且稳定的 OpenVPN 环境。

什么是 AppArmor?

AppArmor 是一种 Linux 内核安全模块,用于限制应用程序可以访问的资源。它通过定义称为“配置文件”的规则集来实现此目的。这些配置文件指定应用程序可以执行哪些操作,访问哪些文件和目录,以及与哪些其他进程通信。

创建 OpenVPN AppArmor 配置文件

要为 OpenVPN 创建 AppArmor 配置文件,请编辑 /etc/apparmor.d/openvpn 文件:

profile openvpn /usr/sbin/openvpn flags=(chroot_attach) {
  #include <abstractions/base>
  #include <abstractions/openssl>
  #include <abstractions/nameservice>
  #include <tunables/global>
  #include <tunables/chroot>
  
  capability net_admin,
  capability setuid,
  capability setgid,
  
  /etc/openvpn/client/*.conf                    r,
  /etc/openvpn/client/credentials/decrypted_credentials.txt r,
  @{VPNCHROOT}/etc/openvpn/client/*.conf    r,
  @{VPNCHROOT}/etc/openvpn/client/credentials/decrypted_credentials.txt    r,
  
  /dev/net/tun rw,
  
  @{PROC}/@{pid}/net/route r,
  
  /var/log/openvpn/openvpn-status.log           rw,
  /var/log/openvpn/openvpn.log                  rw,
  /var/log/openvpn/ipp.txt                      rw,
  /{,var/}run/openvpn/server.pid                rw,
  /{,var/}run/openvpn/client{,-*}.pid           rw,
  /{,var/}run/openvpn/client{,-*}.status        rw,
  
  /{,usr/}bin/ip Cx,
  profile ip /{,usr/}bin/ip {
    /{,usr/}bin/ip r,
    #include <abstractions/base>
    
    capability net_admin,
    
    /var/log/openvpn/openvpn.log w,
  }
}

理解配置文件

  • flags=(chroot_attach):允许 OpenVPN 附加到 chroot 环境。
  • capability net_admin, setuid, setgid:授予 OpenVPN 管理网络接口、更改用户 ID 和组 ID 的权限。
  • /etc/openvpn/client/*.conf:授予 OpenVPN 访问 OpenVPN 配置文件的权限。
  • @{VPNCHROOT}/etc/openvpn/client/*.conf:授予 OpenVPN 访问 chroot 环境中 OpenVPN 配置文件的权限。
  • @{PROC}/@{pid}/net/route:允许 OpenVPN 管理路由表。
  • /{,var/}log/openvpn/*:授予 OpenVPN 写入日志文件的权限。
  • /{,var/}run/openvpn/*:授予 OpenVPN 管理 PID 文件和状态文件的权限。
  • /{,usr/}bin/ip:授予 OpenVPN 访问 ip 命令的权限。

启用 AppArmor 配置文件

启用配置文件以应用规则:

sudo aa-enforce /etc/apparmor.d/openvpn

重启 OpenVPN 服务

重启 OpenVPN 服务以实施更改:

sudo systemctl restart openvpn@client

常见问题解答

1. 为什么需要使用 AppArmor?

AppArmor 限制应用程序对系统资源的访问,增强了 OpenVPN 环境的安全性。

2. “Operation not permitted”错误的含义是什么?

此错误表明 OpenVPN 无法访问它需要的资源,可能是由于 AppArmor 限制。

3. 如何解决“Operation not permitted”错误?

创建并启用一个 OpenVPN AppArmor 配置文件,授予 OpenVPN 必要的权限。

4. AppArmor 配置文件中的“capabilities”是什么?

Capabilities 授予应用程序特定权限,例如管理网络接口或更改用户 ID。

5. 如何定期审查 AppArmor 配置文件?

定期审查 AppArmor 配置文件以确保它们仍然与系统需求一致非常重要。

结论

使用 AppArmor 为 Jail-Chrooted OpenVPN 服务配置可以大大提高其安全性。通过遵循本文中的步骤,您可以解决“Operation not permitted”错误并创建一个安全且稳定的 OpenVPN 环境。