在LNMP(Linux, Nginx, MySQL/MariaDB, PHP)环境中配置防火墙通常涉及以下几个步骤。以下是一个基本的指南,适用于大多数Linux发行版,如CentOS或Ubuntu。
使用iptables配置防火墙
-
检查防火墙状态:
sudo iptables -L
-
设置默认策略:
sudo iptables -P INPUT DROP sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT ACCEPT
-
配置允许的入站规则:
-
允许HTTP(端口80)和HTTPS(端口443)流量:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
-
允许已建立的连接和相关连接:
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-
允许ICMP(如ping请求):
sudo iptables -A INPUT -p icmp -j ACCEPT
-
允许本地回环接口(lo)的流量:
sudo iptables -A INPUT -i lo -j ACCEPT
-
-
允许特定端口的流量(例如,Nginx的80和443端口,MySQL的3306端口):
sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-
保存规则:
sudo service iptables save
-
重启防火墙使配置生效:
sudo systemctl restart iptables
使用firewalld配置防火墙(适用于CentOS 7及以上版本)
-
停止并禁用firewalld:
sudo systemctl stop firewalld sudo systemctl disable firewalld
-
安装iptables(如果需要):
sudo yum install iptables
-
配置iptables规则:
编辑
/etc/sysconfig/iptables
文件,添加允许HTTP、HTTPS和MySQL端口的规则:vi /etc/sysconfig/iptables
添加以下内容:
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
-
重启防火墙:
sudo systemctl restart iptables
使用ngx_lua_waf配置应用防火墙
-
安装ngx_lua_waf:
wget https://github.com/loveshell/ngx_lua_waf/archive/master.zip unzip ngx_lua_waf.zip mv ngx_lua_waf-master /usr/local/nginx/conf/waf
-
配置nginx:
编辑
nginx.conf
文件,添加以下内容:http { lua_package_path "/usr/local/nginx/conf/waf/?.lua"; lua_shared_dict limit 10m; init_by_lua_file /usr/local/nginx/conf/waf/init.lua; access_by_lua_file /usr/local/nginx/conf/waf/waf.lua; server { listen 80; server_name your_domain_or_ip; location / { # 配置你的规则 } } }
-
重启nginx:
sudo service nginx reload