如何配置Ubuntu PHP服务器防火墙以加强网站安全性?
- 内容介绍
- 文章标签
- 相关推荐
你是否在搭建 Ubuntu PHP 网站时常常被各种安全问题困扰?按理说,
- 不知道从哪里开始配置防火墙。怕误封了自己的服务,老实说,
- 担心 PHP 程序以 root 身份运行导致安全隐患;
- 想让网站在面临暴力、DDoS 等攻击时保持“稳如磐石”;老实说,
- 希望能快速查看并管理防火墙规则。
1️⃣ 安装并启用 UFW
UFW 是 Ubuntu 自带的简易防火墙工具。使用它即可轻松管理网络访问。
# 安装
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
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 PHP 网站时常常被各种安全问题困扰?按理说,
- 不知道从哪里开始配置防火墙。怕误封了自己的服务,老实说,
- 担心 PHP 程序以 root 身份运行导致安全隐患;
- 想让网站在面临暴力、DDoS 等攻击时保持“稳如磐石”;老实说,
- 希望能快速查看并管理防火墙规则。
1️⃣ 安装并启用 UFW
UFW 是 Ubuntu 自带的简易防火墙工具。使用它即可轻松管理网络访问。
# 安装
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
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 | 把暴力变成本消耗 |
| 日志监控 & 调试工具 | 随时了解安全态势并及时响应 |

