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。

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

安装 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 核心后,需要重新设置默认端口和证书路径。
相关资源
觉得内容不错?我要