在LNMP(Linux, Nginx, MySQL/MariaDB, PHP)环境中配置防火墙通常涉及以下几个步骤。以下是一个基本的指南,适用于大多数Linux发行版,如CentOS或Ubuntu。
检查防火墙状态:
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:
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:
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