如何配置Ubuntu PHP服务器防火墙以加强网站安全性?

更新于
2026-09-30 17:45:22
2阅读来源:SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐
老实说,

你是否在搭建 Ubuntu PHP 网站时常常被各种安全问题困扰?按理说,

  • 不知道从哪里开始配置防火墙。怕误封了自己的服务,老实说,
  • 担心 PHP 程序以 root 身份运行导致安全隐患;
  • 想让网站在面临暴力、DDoS 等攻击时保持“稳如磐石”;老实说,
  • 希望能快速查看并管理防火墙规则。
下面将一步步帮你把这些痛点化解。不过,

1️⃣ 安装并启用 UFW

UFW 是 Ubuntu 自带的简易防火墙工具。使用它即可轻松管理网络访问。

如何配置Ubuntu PHP服务器防火墙以加强网站安全性?
# 安装
sudo apt-get update
sudo apt-get install ufw
# 启用
sudo ufw enable

⚠️ 小提示:首次启用会询问你是否继续,确认后按回车即可。

2️⃣ 设置默认策略:拒绝所有入站,允许所有出站

这样可以最大程度减少未授权的入站连接。

# 默认拒绝所有入站
sudo ufw default deny incoming
# 默认允许所有出站
sudo ufw default allow outgoing

💡 使用者痛点:怕忘记开启 SSH 导致失去远程管理?别担心,下文会先放行 SSH。

3️⃣ 放行必要服务:SSH、HTTP 与 HTTPS

先确保你能继续远程登录,接下来再开放 Web 服务端口。

# 放行 SSH
sudo ufw allow OpenSSH # 或者 sudo ufw allow ssh
# 放行 HTTP和 HTTPS
sudo ufw allow 'Nginx Full' # 如果使用 Nginx
# 或者 sudo ufw allow 'Apache Full' # 如果使用 Apache
# 或手动指定:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

❗ 小心:如果你使用自定义端口。请相应调整命令,例如 `sudo ufw allow 8080/tcp`。

4️⃣ 查看当前规则与状态

# 检查状态与已生效规则
sudo ufw status verbose

🔍 痛点解决:若不确定某端口是否被阻止,可随时执行此命令快速确认。

5️⃣ 重载 UFW 应用新规则

# 在修改规则后重载:
sudo ufw reload

🛠️ 常见误区:直接 `ufw reset` 会清空所有规则,务必备份后再操作。

6️⃣ 最小化文件与目录权限。让 PHP 程序只拥有必要权限

PHP 通常以 `www-data` 使用者运行,保持最小权限可减少风险。

# 给网站根目录赋予 www-data 所有权。并设置可读写执行权限
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
# 对敏感目录做更严格限制,例如:
# config -> only owner can read/write;group no access;
ors none.
chmod -R 750 /var/www/html/config
chmod -R 700 /var/www/html/cache
# 确认 php-fpm 配置中 user/group 为 www-data:
cat /etc/php/*/fpm/pool.d/www.conf | grep '^user\|^group'
# 如需修改:
sed -i 's/^user = .*/user = www-data/' /etc/php/*/fpm/pool.d/www.conf
sed -i 's/^group = .*/group = www-data/' /etc/php/*/fpm/pool.d/www.conf
systemctl restart php*-fpm.service # 重启对应版本的 php-fpm 服务

🚨 痛点提醒:若未正确设置文件权限。一旦服务器被攻击,攻击者可轻易获取敏感配置信息或上传恶意脚本。

7️⃣ 加固 Web 应用层:启用 mod_security 与 mod_evasive或 ngx_http_modsecurity_module & ngx_http_limit_req_module

A) Apache 示例:

# 安装模块
apt-get install libapache2-mod-security2 libapache2-mod-evasive

如何配置Ubuntu PHP服务器防火墙以加强网站安全性?

a2enmod securityevasive securityenablers modsecurity.cgi modsecuritycrs10_setup.conf systemctl restart apache2

echo "SecRuleEngine On">> /etc/apache2/mods-enabled/security.conf echo "SecRequestBodyAccess On">> /etc/apache2/mods-enabled/security.conf echo "SecResponseBodyAccess Off">> /etc/apache.com/...

apt-get install libapache-scripts-crs* ln -s /usr/share/apache-crs/crs-dontinstall.txt /usr/share/apache-crs/crs-core.rule

B) Nginx 示例:

bash apt-get install nginx-mod-security nginx-mod-http-limitreq

server { ... include snippets/enable-modsecurity.conf;limit_req zone=one burst=5 nodelay;}

说明 * mod_security 能检测并拦截 SQL 注入、XSS 等常见 Web 攻击。* mod_evasive 可限制单个 IP 的请求速率,抵御 DoS/DDoS。

🔧 使用者痛点对 Apache/Nginx 配置不熟悉时可通过官方文档或社区教程逐步完成。


8️⃣ 防止暴力密码:Fail ²ban 配置示例

`fail‑over` 会监控日志文件。对多次失败登录进行暂时封禁 IP,从而大幅降低暴力成功率。

# 安装 Fail²Ban
apt-get install faildban 

systemctl enable faildban && systemctl start faildban

failbantool status

vim /etc/faildban/jail.local

enabled = true

enabled = true # 针对 Apache auth failure maxretry = 5 # 登录失败次数阈值 bantime = 3600 # 封禁时间为一小时

💡 痛点若出现 “no matching log” 错误。需要检查对应日志方法,如 /var/log/auth.log 或 /var/log/apache/error.log。


9️⃣ 管理 UFW 规则——添加 & 删除 示例:

  • Add rule:
  • # 添加新的允许端口或服务:
    sudo ufw allow http # 简写为 port 80/tcp
    sudo ufw allow https # 简写为 port 443/tcp
    
  • Delete rule:
  • # 删除已存在的规则,例如关闭 HTTP:
    sudo ufw delete allow http
    # 删除特定 IP 地址访问某端口的例子:
    iptables -I INPUT -p tcp --dport 80 -j DROP # 临时屏蔽;请配合 iptables-save 保存。

🛑 注意删除规则前请先确认其作用,否则可能出现服务器不可访问。


🔍 日志监控建议:

  • `ufw status numbered`: 查看每条规则编号,用于精准删除。
  • `journalctl -u faildban`: 检查 Fail²Ban 的触发情况。
  • `tcpdump -i eth0 port 80`: 实时抓取 HTTP 流量,用于排查异常流量。
  • `wireshark`: GUI 分析工具,可视化网络包。bash tcpdump -i eth0 port {80|443}> http_traffic.log & wireshark &

🎯 最终效果 🚀

步骤 完成后效果
UFW 默认 deny 入站 + Allow 出站 限制未授权访问。仅保留必需通道
放行 SSH + HTTP/HTTPS 保持远程管理与正常网页访问
最小权限文件程序 防止泄露配置信息与上传恶意脚本
Web 层 WAF + DoS 防护 抗 SQL 注入、XSS 与流量洪峰
Fail²Ban 把暴力变成本消耗
日志监控 & 调试工具 随时了解安全态势并及时响应

🎉 一键实现安全加固,只需几条命令,你的 Ubuntu PHP 网站就能从此“稳如磐石”。祝你的网站永远平安无忧,

。

标签:Ubuntu
老实说,

你是否在搭建 Ubuntu PHP 网站时常常被各种安全问题困扰?按理说,

  • 不知道从哪里开始配置防火墙。怕误封了自己的服务,老实说,
  • 担心 PHP 程序以 root 身份运行导致安全隐患;
  • 想让网站在面临暴力、DDoS 等攻击时保持“稳如磐石”;老实说,
  • 希望能快速查看并管理防火墙规则。
下面将一步步帮你把这些痛点化解。不过,

1️⃣ 安装并启用 UFW

UFW 是 Ubuntu 自带的简易防火墙工具。使用它即可轻松管理网络访问。

如何配置Ubuntu PHP服务器防火墙以加强网站安全性?
# 安装
sudo apt-get update
sudo apt-get install ufw
# 启用
sudo ufw enable

⚠️ 小提示:首次启用会询问你是否继续,确认后按回车即可。

2️⃣ 设置默认策略:拒绝所有入站,允许所有出站

这样可以最大程度减少未授权的入站连接。

# 默认拒绝所有入站
sudo ufw default deny incoming
# 默认允许所有出站
sudo ufw default allow outgoing

💡 使用者痛点:怕忘记开启 SSH 导致失去远程管理?别担心,下文会先放行 SSH。

3️⃣ 放行必要服务:SSH、HTTP 与 HTTPS

先确保你能继续远程登录,接下来再开放 Web 服务端口。

# 放行 SSH
sudo ufw allow OpenSSH # 或者 sudo ufw allow ssh
# 放行 HTTP和 HTTPS
sudo ufw allow 'Nginx Full' # 如果使用 Nginx
# 或者 sudo ufw allow 'Apache Full' # 如果使用 Apache
# 或手动指定:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

❗ 小心:如果你使用自定义端口。请相应调整命令,例如 `sudo ufw allow 8080/tcp`。

4️⃣ 查看当前规则与状态

# 检查状态与已生效规则
sudo ufw status verbose

🔍 痛点解决:若不确定某端口是否被阻止,可随时执行此命令快速确认。

5️⃣ 重载 UFW 应用新规则

# 在修改规则后重载:
sudo ufw reload

🛠️ 常见误区:直接 `ufw reset` 会清空所有规则,务必备份后再操作。

6️⃣ 最小化文件与目录权限。让 PHP 程序只拥有必要权限

PHP 通常以 `www-data` 使用者运行,保持最小权限可减少风险。

# 给网站根目录赋予 www-data 所有权。并设置可读写执行权限
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
# 对敏感目录做更严格限制,例如:
# config -> only owner can read/write;group no access;
ors none.
chmod -R 750 /var/www/html/config
chmod -R 700 /var/www/html/cache
# 确认 php-fpm 配置中 user/group 为 www-data:
cat /etc/php/*/fpm/pool.d/www.conf | grep '^user\|^group'
# 如需修改:
sed -i 's/^user = .*/user = www-data/' /etc/php/*/fpm/pool.d/www.conf
sed -i 's/^group = .*/group = www-data/' /etc/php/*/fpm/pool.d/www.conf
systemctl restart php*-fpm.service # 重启对应版本的 php-fpm 服务

🚨 痛点提醒:若未正确设置文件权限。一旦服务器被攻击,攻击者可轻易获取敏感配置信息或上传恶意脚本。

7️⃣ 加固 Web 应用层:启用 mod_security 与 mod_evasive或 ngx_http_modsecurity_module & ngx_http_limit_req_module

A) Apache 示例:

# 安装模块
apt-get install libapache2-mod-security2 libapache2-mod-evasive

如何配置Ubuntu PHP服务器防火墙以加强网站安全性?

a2enmod securityevasive securityenablers modsecurity.cgi modsecuritycrs10_setup.conf systemctl restart apache2

echo "SecRuleEngine On">> /etc/apache2/mods-enabled/security.conf echo "SecRequestBodyAccess On">> /etc/apache2/mods-enabled/security.conf echo "SecResponseBodyAccess Off">> /etc/apache.com/...

apt-get install libapache-scripts-crs* ln -s /usr/share/apache-crs/crs-dontinstall.txt /usr/share/apache-crs/crs-core.rule

B) Nginx 示例:

bash apt-get install nginx-mod-security nginx-mod-http-limitreq

server { ... include snippets/enable-modsecurity.conf;limit_req zone=one burst=5 nodelay;}

说明 * mod_security 能检测并拦截 SQL 注入、XSS 等常见 Web 攻击。* mod_evasive 可限制单个 IP 的请求速率,抵御 DoS/DDoS。

🔧 使用者痛点对 Apache/Nginx 配置不熟悉时可通过官方文档或社区教程逐步完成。


8️⃣ 防止暴力密码:Fail ²ban 配置示例

`fail‑over` 会监控日志文件。对多次失败登录进行暂时封禁 IP,从而大幅降低暴力成功率。

# 安装 Fail²Ban
apt-get install faildban 

systemctl enable faildban && systemctl start faildban

failbantool status

vim /etc/faildban/jail.local

enabled = true

enabled = true # 针对 Apache auth failure maxretry = 5 # 登录失败次数阈值 bantime = 3600 # 封禁时间为一小时

💡 痛点若出现 “no matching log” 错误。需要检查对应日志方法,如 /var/log/auth.log 或 /var/log/apache/error.log。


9️⃣ 管理 UFW 规则——添加 & 删除 示例:

  • Add rule:
  • # 添加新的允许端口或服务:
    sudo ufw allow http # 简写为 port 80/tcp
    sudo ufw allow https # 简写为 port 443/tcp
    
  • Delete rule:
  • # 删除已存在的规则,例如关闭 HTTP:
    sudo ufw delete allow http
    # 删除特定 IP 地址访问某端口的例子:
    iptables -I INPUT -p tcp --dport 80 -j DROP # 临时屏蔽;请配合 iptables-save 保存。

🛑 注意删除规则前请先确认其作用,否则可能出现服务器不可访问。


🔍 日志监控建议:

  • `ufw status numbered`: 查看每条规则编号,用于精准删除。
  • `journalctl -u faildban`: 检查 Fail²Ban 的触发情况。
  • `tcpdump -i eth0 port 80`: 实时抓取 HTTP 流量,用于排查异常流量。
  • `wireshark`: GUI 分析工具,可视化网络包。bash tcpdump -i eth0 port {80|443}> http_traffic.log & wireshark &

🎯 最终效果 🚀

步骤 完成后效果
UFW 默认 deny 入站 + Allow 出站 限制未授权访问。仅保留必需通道
放行 SSH + HTTP/HTTPS 保持远程管理与正常网页访问
最小权限文件程序 防止泄露配置信息与上传恶意脚本
Web 层 WAF + DoS 防护 抗 SQL 注入、XSS 与流量洪峰
Fail²Ban 把暴力变成本消耗
日志监控 & 调试工具 随时了解安全态势并及时响应

🎉 一键实现安全加固,只需几条命令,你的 Ubuntu PHP 网站就能从此“稳如磐石”。祝你的网站永远平安无忧,

。

标签:Ubuntu