IPFire远程SSL访问设置教程

本文摘要IPFire 防火墙 SSL 证书安装与远程访问本教程以设置 xxx.pfchina.org 域名访问为例,介绍在 IPFire 防火墙安装 SSL 证书并通过外网远程访问的方法。 前提条件: WAN 接口必须拥有公网 IP。修改默认端口IPFire 默认使用 444 端口,本教程改用 8443 端口,需要手动修改以下三个文件中的端口号:/etc/httpd/conf/vhosts.d/ipfir...

IPFire 防火墙 SSL 证书安装与远程访问

本教程以设置 xxx.pfchina.org 域名访问为例,介绍在 IPFire 防火墙安装 SSL 证书并通过外网远程访问的方法。
前提条件: WAN 接口必须拥有公网 IP。


修改默认端口

IPFire 默认使用 444 端口,本教程改用 8443 端口,需要手动修改以下三个文件中的端口号:

  • /etc/httpd/conf/vhosts.d/ipfire-interface.conf
  • /etc/httpd/conf/vhosts.d/ipfire-interface-ssl.conf
  • /etc/httpd/conf/listen.conf

将所有文件中的 444 替换为 8443,修改完成后重启 Apache:

/etc/init.d/apache restart

添加防火墙规则

在防火墙中添加一条允许外部访问 8443 端口的规则,配置如下:

  • 源:标准网络(RED)
  • 目标:firewall RED
  • 协议:TCP
  • 目标端口:8443

保存并应用更改。

防火墙规则配置

添加完成后效果如下:

规则添加完成


添加域名解析

登录 CloudFlare,添加一条 DNS 解析记录,将 xxx.pfchina.org 指向 IPFire 的 WAN 接口公网 IP。

CloudFlare DNS 解析记录


修改主机名与域名

进入 IPFire 的 shell 环境,执行 setup 命令修改防火墙主机名和域名:主机名改为 xxx,域名改为 pfchina.org

setup 修改主机名与域名


安装 acme.sh

运行以下命令安装 acme.sh,替换其中的邮箱地址:

curl https://get.acme.sh | sh -s you@example.com

导入 CloudFlare 账号和 API Key

由于运营商封锁了 80/443 端口,本教程使用 DNS-01 验证方式申请证书,需要先导入 CloudFlare 的账号和 API Key:

export CF_Email="you@example.com"
export CF_Key="your_cloudflare_api_key"

申请证书

运行以下命令申请证书(请将域名替换为实际使用的域名):

/root/.acme.sh/acme.sh --issue --dns dns_cf -d xxx.pfchina.org -d www.xxx.pfchina.org

申请成功后,终端会显示类似以下信息的证书路径:

[Sat Jun 29 03:42:22 PM CST 2024] Your cert is in: /root/.acme.sh/xxx.pfchina.org_ecc/xxx.pfchina.org.cer
[Sat Jun 29 03:42:22 PM CST 2024] Your cert key is in: /root/.acme.sh/xxx.pfchina.org_ecc/xxx.pfchina.org.key
[Sat Jun 29 03:42:22 PM CST 2024] The intermediate CA cert is in: /root/.acme.sh/xxx.pfchina.org_ecc/ca.cer
[Sat Jun 29 03:42:22 PM CST 2024] And the full chain certs is there: /root/.acme.sh/xxx.pfchina.org_ecc/fullchain.cer

查看已申请证书

/root/.acme.sh/acme.sh --list

手动续签证书

/root/.acme.sh/acme.sh --renew --dns dns_cf -d xxx.pfchina.org -d www.xxx.pfchina.org

设置自动更新

/root/.acme.sh/acme.sh --install-cronjob

也可以编写一个自动更新脚本,放置到 /etc/fcron.minutely/etc/fcron.daily 等目录(不同目录对应不同的执行频率)。脚本内容如下:

#!/bin/bash

/root/.acme.sh/acme.sh --cron >/dev/null 2>&1

exit 0

赋予脚本可执行权限。


修改 IPFire 默认证书

为了让浏览器正常挂锁,需要将防火墙的默认自签名证书替换为申请到的域名证书。

编辑 /etc/httpd/conf/vhosts.d/ipfire-interface-ssl.conf 文件,找到 SSLEngine on 所在行,修改证书和密钥路径,并删除原有的 server-ecdsa 相关配置。修改后示例:

SSLEngine on
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite AESGCM+EECDH:CHACHA20+EECDH:@STRENGTH:+aRSA
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off
SSLCertificateFile /root/.acme.sh/xxx.pfchina.org_ecc/xxx.pfchina.org.cer
SSLCertificateKeyFile /root/.acme.sh/xxx.pfchina.org_ecc/xxx.pfchina.org.key

修改完成后重启 Apache:

/etc/init.d/apache restart

浏览器访问 https://xxx.pfchina.org:8443,检查锁形图标是否正常显示。


一键修改脚本

为方便操作,可将以下脚本保存到 /root 目录,执行后即可自动完成端口和证书的替换。

#!/bin/sh
set -e
echo ""
echo ">>> SSL远程访问一键修改脚本..."
echo ""

# 文件路径
VHOST_CONF="/etc/httpd/conf/vhosts.d/ipfire-interface.conf"
SSL_CONF="/etc/httpd/conf/vhosts.d/ipfire-interface-ssl.conf"
LISTEN_CONF="/etc/httpd/conf/listen.conf"

# 新的证书路径(替换为自己的证书路径)
CERT_FILE="/root/.acme.sh/xxx.pfchina.org_ecc/xxx.pfchina.org.cer"
KEY_FILE="/root/.acme.sh/xxx.pfchina.org_ecc/xxx.pfchina.org.key"

echo ">>> 备份原始配置文件..."
cp "$VHOST_CONF" "$VHOST_CONF.bak"
cp "$SSL_CONF" "$SSL_CONF.bak"
cp "$LISTEN_CONF" "$LISTEN_CONF.bak"

# SSL访问端口(替换为开放的端口)
echo ">>> 替换端口 444 为 8443..."
sed -i 's/:444/:8443/g' "$VHOST_CONF"
sed -i 's/:444/:8443/g' "$SSL_CONF"
sed -i 's/Listen 444/Listen 8443/g' "$LISTEN_CONF"

echo ">>> 替换 SSL 证书路径..."
TAB=" "
sed -i "s|^[ \t]*SSLCertificateFile[ \t].*|${TAB}SSLCertificateFile $CERT_FILE|" "$SSL_CONF"
sed -i "s|^[ \t]*SSLCertificateKeyFile[ \t].*|${TAB}SSLCertificateKeyFile $KEY_FILE|" "$SSL_CONF"

echo ">>> 校验修改结果..."
CERT_OK=$(grep -E "^[[:blank:]]+SSLCertificateFile[[:blank:]]+$CERT_FILE" "$SSL_CONF" || true)
KEY_OK=$(grep -E "^[[:blank:]]+SSLCertificateKeyFile[[:blank:]]+$KEY_FILE" "$SSL_CONF" || true)

if [ -z "$CERT_OK" ] || [ -z "$KEY_OK" ]; then
echo "!!! 证书路径替换失败,请检查 $SSL_CONF 文件。"
exit 1
fi

echo ">>> 重启 httpd 服务..."
if /etc/init.d/apache restart; then
  echo ">>> httpd 重启成功!"
else
  echo "!!! httpd 重启失败,请手动检查服务状态。"
exit 2
fi

注意事项

升级 IPFire 核心后,需要重新设置默认端口和证书路径。


相关资源

觉得内容不错?我要

评论 暂无评论
暂无评论,快来抢沙发吧~