安装基本服务

安装基本服务

本文档将指导你设置核心服务。它基于安装在虚拟服务器上的 AlmaLinux 9。服务器主机有防火墙,这使得 firewalld 成为多余,因此他们在安装时禁用了它。主机还禁用了 SELinux,因为它会导致问题。不过,我更喜欢同时使用这两个功能,所以这些说明重新启用了它们。

完成此设置后,您将拥有一个完全最新的系统:

  • 安装的 EPEL 软件源
  • 已安装 SELinux 并在许可模式下运行(不会破坏任何东西)。
  • 安装了 firewalld,并只允许使用指定的端口。
  • Letsencrypt 提供自动更新的有效 SSL 证书。
  • 驾驶舱已安装,并持有有效证书。
  • 安装了 Postix 和 dovecot 以提供电子邮件。
  • 已安装 Miriadb 数据库并确保其安全。
  • 已安装并配置 Apache。
  • WordPress 安装在一台虚拟主机上。
  • WordPress 基本加固到位

安装 EPEL 软件库并更新当前软件包

EPEL repo 添加了以后需要的其他软件包。-添加 Remi 和最新的 PHP

sudo dnf install epel-release -y
sudo dnf update -y

安装核心服务

SELinux

默认安装通常会启用 SELinux。然而,主机的安装却没有这样做。要启用 SELinux(许可模式),首先要检查 grub 中是否禁止 SELinux:

cat /proc/cmdline

查找 selinux=0 或 security=none。如果存在这两种情况,则无论 /etc/selinux/config 如何设置,SELinux 都将被禁用。如果是这种情况

sudo grubby --update-kernel=ALL --remove-args=selinux
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo dnf install selinux-policy-targeted

确保 /etc/selinux/config 具有:

SELINUX=permissive
SELINUXTYPE=targeted

然后重新启动。

现在重启

系统恢复后,请检查

强制

它应该返回 允许.

设置 SELinux 类型、权限等。

Cockpit 会提醒注意任何 SELinux 问题并提出解决方案。在实施之前,应对这些建议进行审查。不过,以下建议应能解决许多问题:

sudo setsebool -P httpd_unified 1
sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P httpd_can_network_relay 1
sudo setsebool -P httpd_graceful_shutdown 1
sudo setsebool -P nis_enabled 1

安装驾驶舱(管理网络服务器)。

sudo dnf install cockpit -y
sudo systemctl enable --now cockpit.socket

启用防火墙(如果尚未启用),并允许访问驾驶舱。

sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --zone=public --add-service=cockpit
sudo firewall-cmd --reload

安装 postfix(邮件服务器)、mariadb(mysql 数据库)、apache(网络服务器)、php 和核心模块以及 certbot

sudo dnf install postfix mariadb-server mariadb httpd php php-mysqlnd php-fpm php-cli -y
sudo dnf install php-common php-opcache php-mbstring php-gd php-xml php-intl php-soap -y
sudo dnf install php-zip php-pear php-devel ImageMagick ImageMagick-devel s-nail -y
sudo dnf certbot python3-certbot-apache cyrus-sasl cyrus-sasl-plain -y

启用并启动服务

sudo systemctl enable --now httpd mariadb php-fpm certbot-renew.timer

安全的 mysql

sudo mysql_secure_installation

按照提示操作

  • 设置 root 用户密码
  • 使用插座
  • 删除匿名用户
  • 禁止 root 远程登录
  • 删除测试数据库
  • 重载权限表

设置 Postfix

我们需要 rspamd 进行邮件签名和邮件验证,但标准软件仓库中没有。因此,我们可以添加官方回应软件仓库。

sudo tee /etc/yum.repos.d/rspamd.repo > /dev/null <<'EOF'
[rspamd]
name=Rspamd for Centos 9 x86_64
baseurl=https://rspamd.com/rpm/centos-9/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://rspamd.com/rpm/gpg.key
EOF

清除并刷新 dnf 元数据,安装并启用 rspamd 和 dovecot

sudo dnf clean all
sudo dnf makecache
sudo dnf install rspamd dovecot -y
sudo systemctl enable --now postfix dovecot rspamd

创建 Postfix 基本配置

保存安装文件以供参考

sudo mv /etc/postfix/main.cf{,.inst}

创建一个新的 /etc/postfix/main.cf 文件,其中包含

# ===========================
# Postfix 基本配置
# ===========================

# 确保现代 Postfix 行为
compatibility_level = 2

# 路径(AlmaLinux 上的默认路径,为清晰起见或打包而保留)
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix

# 可选文档路径
html_directory = 无
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix/samples
readme_directory = /usr/share/doc/postfix/README_FILES
meta_directory = /etc/postfix
shlib_directory = /usr/lib64/postfix

# 安全相关设置
setgid_group = postdrop
mail_owner = postfix

# ===========================
# 主机和域设置
# ===========================

# 全称主机名
myhostname = alma.adpca.org

# 本地域名
mydomain = adpca.org

# 确定外发本地邮件中使用的域名
# "user@alma.adpca.org "使用 $myhostname,"user@adpca.org "使用 $mydomain
myorigin = $myhostname

# 域被视为本地域 - 发往这些域的邮件将在本地投递
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

# 接受所有接口上的连接并使用 IPv4 + IPv6
inet_interfaces = 所有
inet_protocols = all

# 仅信任本地机器转发邮件
mynetworks = 127.0.0.0/8

# 以硬错误拒绝未知用户的邮件
unknown_local_recipient_reject_code = 550

# ===========================
# 别名映射
# ===========================

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

# 修改 /etc/aliases 后运行 `newaliases

# ===========================
# MailerSend 中继设置
# ===========================

# 外部 SMTP 中继 (MailerSend)
relayhost = [smtp.mailersend.net]:587

# 为出站连接启用 TLS
smtp_use_tls = yes
smtp_tls_security_level = 加密
smtp_tls_note_starttls_offer = yes

# 可信 CA 证书(全系统)
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt
smtp_tls_CApath = /etc/pki/tls/certs

# 要求使用现代加密技术
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtp_tls_mandatory_ciphers = medium

# 性能:缓存 TLS 会话
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# ===========================
# 用于 MailerSend 的 SMTP AUTH
# ===========================

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous

# ===========================
# 入站 TLS(可选)
# 仅在通过 TLS 接受入站邮件时需要
# ===========================

smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem
smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
smtpd_tls_security_level = may # 如果支持,则允许 STARTTLS

# ===========================
# 调试(可选)
# 用于 SMTP 调试会话
# ===========================

#debug_peer_level = 2
#debugger_command =
# PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
# ddd $daemon_directory/$process_name $process_id & sleep 5

配置 Dovecot(邮件发送和 IMAP/POP3)

编辑 /etc/dovecot/conf.d/10

mail_location = maildir:~/Maildir
#I 如果使用虚拟邮件用户,则应改为
#mail_location = maildir:/var/mail/vhosts/%d/%n/Maildir

# 为提高性能和清晰度,可选项
mail_privileged_group = mail

编辑/etc/dovecot/conf.d/10-auth.conf,使其包含该文件:

disable_plaintext_auth = 是
auth_mechanisms = 普通登录
包含 auth-system.conf.ext

为每个用户创建一个邮件目录:

mkdir -p /home/username/Maildir
chown -R username:username /home/username/Maildir

启用协议

编辑 /etc/dovecot/conf.d/10-master.conf 以包含

#E 启用 IMAP 和授权套接字,以便 Postfix 在需要时使用:

服务 imap-login {
  inet_listener imap {
    端口 = 143
  }
  inet_listener imaps {
    端口 = 993
    ssl = yes
  }
}

服务 auth {
  unix_listener /var/spool/postfix/private/auth {
    模式 = 0666
    user = postfix
    组 = postfix
  }
}
# auth socket 允许 Postfix 使用 Dovecot 进行身份验证,如果你以这种方式配置 SASL
# 验证。如果直接通过 sasl_passwd 进行 SMTP 验证,则可选。

服务 lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    模式 = 0600
    user = postfix
    group = postfix
  }
}

打开端口

sudo firewall-cmd --ad-port=110/tcp --permanent
sudo firewall-cmd --ad-port=143/tcp --permanent
sudo firewall-cmd --ad-port=993/tcp --permanent
sudo firewall-cmd --ad-port=995/tcp --permanent

您可能还需要在主机中打开它们。

添加证书

ssl = 必需
ssl_cert = </etc/letsencrypt/live/alma.adpca.org/fullchain.pem
ssl_key = </etc/letsencrypt/live/alma.adpca.org/privkey.pem
ssl_cipher_list = PROFILE=SYSTEM
ssl_min_protocol = TLSv1.2
ssl_prefer_server_ciphers = yes

为 certbot 自动更新添加钩子,以设置所需权限

创建一个可以访问证书的组,并将 dovecot 添加到该组。设置初始权限。

sudo groupadd ssl-cert
sudo usermod -aG ssl-cert dovecot
chmod 750 /etc/letsencrypt/ /etc/letsencrypt/live/ /etc/letsencrypt/archive/
chgrp ssl-cert /etc/letsencrypt/ /etc/letsencrypt/live/ /etc/letsencrypt/archive

在 /usr/local/sbin/fix-cert-permissions.s 中添加以下一行

deploy-hook = /usr/local/sbin/fix-cert-permissions.sh

然后创建脚本 /usr/local/sbin/fix-cert-permissions.sh

#!/bin/bash

# 变量
DOMAIN="alma.adpca.org"
SSL_GROUP="ssl-cert"

# 路径
# LIVE_DIR="/etc/letsencrypt/live/$DOMAIN"
# ARCHIVE_DIR="/etc/letsencrypt/archive/$DOMAIN"
COCKPIT_DIR=/etc/cockpit/ws-certs.d
LIVE_DIR="/etc/letsencrypt/live"
ARCHIVE_DIR="/etc/letsencrypt/archive"

# 修复 live 目录及其内容的权限
chgrp -R "$SSL_GROUP" "$LIVE_DIR"
chmod -R 640 "$LIVE_DIR"/*/*.pem
find "$LIVE_DIR" -type d -exec chmod 750 {}\;

# 修复存档目录及其内容的权限
chgrp -R "$SSL_GROUP" "$ARCHIVE_DIR"
chmod -R 640 "$ARCHIVE_DIR"/*/*.pem
find "$ARCHIVE_DIR" -type d -exec chmod 750 {}\;

# 重构驾驶舱证书
sudo cp $LIVE_DIR/$DOMAIN/fullchain.pem $COCKPIT_DIR/99-letsencrypt.cert
sudo cp $LIVE_DIR/$DOMAIN/privkey.pem $COCKPIT_DIR/99-letsencrypt.key
chmod 600 $COCKPIT_DIR/99-letsencrypt.cert

# 重启 Cockpit 以获取新证书
systemctl restart cockpit

echo 证书权限已修复,Cockpit 证书已创建。

该脚本还可创建驾驶舱证书。运行脚本设置所需的权限并创建驾驶舱密钥。

告诉 Postfix 使用 Dovecot LMTP

在 /etc/postfix/main.cf 中添加以下内容:

virtual_transport = lmtp:unix:private/dovecot-lmtp

生成 DKIM 密钥并发布 DNS 记录

生成和保护密钥

sudo mkdir -p /etc/rspamd/dkim/adpca.org
sudo rspamadm dkim_keygen -b 2048 -s default -d adpca.org -k \
/etc/rspamd/dkim/adpca.org/default.key
sudo chown -R _rspamd:_rspamd /etc/rspamd/dkim/adpca.org
sudo chmod 600 /etc/rspamd/dkim/adpca.org/default.key

输出结果如下

default._domainkey IN TXT ( "v=DKIM1; k=rsa; "
	"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtLlz8vwzSFZonIyLQDBiXynxUyDNuyt6eBAcNNb5Fyh9wEKCCy6W9Bs633Y6kFwWKVHCz+0l7pS0Tt2tU0Hxxh0XZjEtQAOJCCSkMmByCDAYYubAicQR+QKZEGh2H1dldHmj0i3xHwrUZ4yDB9YZ74uj5PgYAYwerPmrwkwd82wowzY/QMHpVOgPkQpe6IIqxs3ohZEuWhDXZniM2"
	"sw0Kzewd6K+7U3jY5m19Qm/dlDlu1xwYknI277mxdNlHvpGEWiJIziOgQ9Eue5wSeKhmmCdsNj5LoYG2dRXa9pcrHH08JjLnFN+j1DVjbgUs7IWEvx3QXOg3LZI5/ko7jt+wIDAQAB"
) ;

公钥是 TXT 记录中 p= 参数的值 这里,公钥(粗体显示)是 p= 之后、括号之前的整个大 base64 字符串。它的格式应该是一行,没有换行符,就像这样:

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtLlz8vwzSFZonIyLQDBiXynxUyDNuyt6eBAcNNb5Fyh9wEKCCy6W9Bs633Y6kFwWKVHCz+0l7pS0Tt2tU0Hxxh0XZjEtQAOJCCSkMmByCDAYYubAicQR+QKZEGh2H1dldHmj0i3xHwrUZ4yDB9YZ74uj5PgYAYwerPmrwkwd82wowzY/QMHpVOgPkQpe6IIqxs3ohZEuWhDXZniM2sw0Kzewd6K+7U3jY5m19Qm/dlDlu1xwYknI277mxdNlHvwpGEWiJIziOgQ9Eue5wSeKhmmCdsNj5LoYG2dRXa9pcrHH08JjLnFN+j1DVjbgUs7IWEvx3QXOg3LZI5/ko7jt+wIDAQAB

向 DNS 服务器添加 TXT 记录。记录名称应为 :default._domainkey.adpca.org: ,值为
"v=DKIM1; k=rsa; p=public_key_here“.

在这种情况下,数值将是

v=DKIM1; k=rsa;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtLlz8vwzSFZonIyLQDBiXynxUyDNuyt6eBAcNNb5Fyh9wEKCCy6W9Bs633Y6kFwWKVHCz+0l7pS0Tt2tU0Hxxh0XZjEtQAOJCCSkMmByCDAYYubAicQR+QKZEGh2H1dldHmj0i3xHwrUZ4yDB9YZ74uj5PgYAYwerPmrwkwd82wowzY/QMHpVOgPkQpe6IIqxs3ohZEuWhDXZniM2sw0Kzewd6K+7U3jY5m19Qm/dlDlu1xwYknI277mxdNlHvwpGEWiJIziOgQ9Eue5wSeKhmmCdsNj5LoYG2dRXa9pcrHH08JjLnFN+j1DVjbgUs7IWEvx3QXOg3LZI5/ko7jt+wIDAQAB

重要:添加记录时,确保值是一个连续的字符串,没有换行符。

为 adpca.org 和子域创建 DNS 记录

类型名称价值/内容说明
Amail.adpca.org您的邮件服务器 IP邮件服务主机
MXadpca.orgmail.adpca.org(优先级 10)接收域名邮件
MX*.adpca.orgmail.adpca.org(优先级 10)接收子域的邮件
TXTadpca.org"v=spf1 mx ip4:\ -all"SPF 记录
TXTdefault._domainkey.adpca.orgDKIM 公钥如上用于 DKIM 验证
TXT_dmarc.adpca.org"v=DMARC1; p=quarantine; rua=mailto\:postmaster\@adpca.org"DMARC 政策

最后步骤

重新启动服务

sudo systemctl restart postfix dovecot rspamd

测试邮件收发。

检查邮件日志是否有错误:

sudo journalctl -u postfix
sudo journalctl -u dovecot
sudo journalctl -u rspamd

设置 Apache 和安装 WordPress

我们选择使用以下路径配置 apache (httpd) 虚拟主机:

文件根目录/var/www/example.com网站文件在这里
HTTP 配置/etc/httpd/conf.d/example.com.conf基本网站配置
HTTPS 配置/etc/httpd/conf.d/example.com-le-ssl.conf由 certbot 创建
访问日志/var/log/httpd/example.com_access.log
错误日志/var/log/httpd/example.com_error.log

创建虚拟主机

创建 HTTP 配置文件,其中至少应包含

服务器名称 example.com
    文档根目录 /var/www/example.com

    
        允许覆盖全部
    <目录

    错误日志 /var/log/httpd/example.com_error.log
    自定义日志 /var/log/httpd/example.com_access.log 合并
 虚拟主机

重新加载 Apache 以启用网站

sudo systemctl reload httpd

创建文档根目录

在这种情况下,我们将下载 WordPress 并重命名提取的文件,以创建文档根目录。

cd ~ # 切换到您的主目录
curl -O https://wordpress.org/latest.tar.gz
sudo tar -xvzf latest.tar.gz
sudo mv wordpress /var/www/example.com
sudo chown -R apache:apache /var/www/example.com
sudo chmod -R 755 /var/www/example.com
rm latest.tar.gz

如果您使用的不是 WordPress,那么:

sudo mkdir /var/www/example.com
sudo chown -R apache:apache /var/www/example.com
sudo chmod -R 755 /var/www/example.com

然后将文件添加到 /var/www/example.com 中

获取 SSL 证书并安装

Certbot 将为您解决这一问题。

sudo certbot --apache -d example.com

按照提示操作,让 Certbot 更新虚拟主机。

如果您不使用 WordPress,可以跳过其余说明。将文件放入文档根目录,并检查是否可以访问它们。

创建 WordPress 数据库

sudo mysql -u root -p
创建数据库 wordpress;
创建用户 'wpuser'@'localhost' IDENTIFIED BY 'strongpassword';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
清除权限;
退出;

将数据库名称 (wordpress)、用户 (wpuser) 和密码替换为您的唯一值。不要更改"@'localhost"。

配置 WordPress

访问 https://example.com 并按照提示配置 WordPress

安全的 WordPress

设置文件权限

sudo find /var/www/example.com/ -type d -exec chmod 755 {}\;
sudo find /var/www/example.com/ -type f -exec chmod 644 {}\;
sudo chmod 600 /var/www/example.com/wp-config.php

更改安全密钥

转到 https://api.wordpress.org/secret-key/1.1/salt/ 创建随机 "盐 "值,然后用新值替换 WordPress 配置中的值。

sudo nano /var/www/example.com/wp-config.php
The Person-Centered Journal - All volumes online