本教程以设置xxx.pfchina.org域名访问为例,介绍在IPFire防火墙安装ssl证书,通过外网远程访问IPFire防火墙的方法。
前提条件:WAN接口必须是公网IP。
修改默认端口
使用默认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
添加防火墙规则
在防火墙上,添加一条规则,放开WAN接口8443端口的访问。
- 源:标准网络(红色)
- 目标:firewall RED
- 协议:tcp,
- 目标端口:8443
保存并应用更改。
添加完成后下图所示:
使用https://wan ip:8443测试,检查是否能正常远程访问IPFire防火墙。
添加域名解析
登录CloudFlare,添加一条DNS解析记录。将xxx.pfchina.org指向IPFire的WAN接口IP。
修改主机名、域名
进入IPFire的shell环境下,运行setup命令修改防火墙的主机名和域名,主机名修改为xxx,域名修改为pfchina.org。

安装ACEM
运行以下命令,安装acme.sh。
curl https://get.acme.sh | sh -s [email protected]
导入CF帐号和KEY
运营商封掉了443和80端口,ACME挑战类型可以使用DNS-01方式,申请证书需要导入CloudFlare的帐号和KEY。
export CF_Email="[email protected]" export CF_Key="f586ab52047a8d9594ffb23a3ac642c84af51"
申请证书
运行以下命令,申请证书:
/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、fcron.weekly、fcron.daily、fcron.weekly、fcron.monthly目录,不同的目录分别代表不同的更新频率。脚本内容如下:
#!/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,检查是否挂锁成功。
为方便操作,提供一键修改ssl端口和证书的脚本,放在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
注意事项
在升级核心后,需要重新设置默认端口和默认证书位置。
其他修改
1.修改IPFire徽标对应的链接
/srv/web/ipfire/html/themes/ipfire/include/functions.pl
搜索:https://www.ipfire.org 替换即可。
2.去除赞助提示
/srv/web/ipfire/html/themes/ipfire/include/functions.pl
在216、217行,删除有ipfire链接的两行即可。
3.修改菜单内容
/var/ipfire/menu.d目录对应了各级菜单的显示内容。
其他文章: