菜鸟科技网

nginx防火墙命令有哪些常用操作?

在Linux服务器管理中,Nginx作为高性能的Web服务器和反向代理,其安全性至关重要,防火墙作为系统安全的第一道防线,正确配置防火墙规则可以有效保护Nginx服务免受未授权访问和恶意攻击,以下将详细介绍与Nginx相关的防火墙命令,涵盖不同防火墙工具(如iptables、firewalld、ufw)的使用方法,以及常见的安全配置场景。

nginx防火墙命令有哪些常用操作?-图1
(图片来源网络,侵删)

iptables防火墙与Nginx配置

iptables是Linux系统中传统的防火墙工具,基于内核的netfilter框架,通过规则链控制数据包的流动,在CentOS 7之前的版本或自定义内核环境中,iptables是主流选择。

查看当前iptables规则

sudo iptables -L -n -v
  • -L:列出所有规则链
  • -n:以数字形式显示IP和端口,避免DNS解析延迟
  • -v:显示详细信息,如数据包和字节数

允许Nginx相关端口

Nginx默认使用80(HTTP)和443(HTTPS)端口,需明确放行:

# 允许HTTP端口
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许HTTPS端口
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
  • -A INPUT:追加规则到INPUT链(入站规则)
  • -p tcp:指定TCP协议
  • --dport:目标端口
  • -j ACCEPT:接受数据包

限制特定IP访问

仅允许信任的IP访问Nginx服务:

sudo iptables -A INPUT -p tcp --dport 80 -s 192.168.1.100 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -s 192.168.1.100 -j ACCEPT
  • -s:指定源IP地址

拒绝其他未授权访问

在放行必要端口后,默认拒绝其他对80和443端口的访问:

nginx防火墙命令有哪些常用操作?-图2
(图片来源网络,侵删)
sudo iptables -A INPUT -p tcp --dport 80 -j DROP
sudo iptables -A INPUT -p tcp --dport 443 -j DROP

保存iptables规则

不同Linux发行版的保存命令不同:

  • CentOS 6/7:sudo service iptables save
  • Debian/Ubuntu:sudo iptables-save > /etc/iptables/rules.v4

iptables规则示例表格

命令 功能说明
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT 允许HTTP流量
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT 允许HTTPS流量
sudo iptables -A INPUT -p tcp --dport 80 -s 192.168.1.0/24 -j ACCEPT 允许特定网段访问HTTP
sudo iptables -A INPUT -p tcp --dport 443 -j DROP 拒绝其他HTTPS访问

firewalld防火墙与Nginx配置

firewalld是CentOS 7/RHEL 7及之后版本默认的动态防火墙管理工具,支持区域(Zone)和运行时/永久规则配置。

启动并启用firewalld

sudo systemctl start firewalld
sudo systemctl enable firewalld

查看firewalld状态和区域

sudo firewall-cmd --state
sudo firewall-cmd --get-active-zones

放行Nginx端口

# 永久放行HTTP端口
sudo firewall-cmd --permanent --add-service=http
# 永久放行HTTPS端口
sudo firewall-cmd --permanent --add-service=https
# 重新加载防火墙使规则生效
sudo firewall-cmd --reload
  • --permanent:表示规则永久生效,需重载后生效
  • --add-service:通过预定义的服务名称添加规则(http对应80端口,https对应443端口)

限制IP访问

# 添加信任IP到public区域
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="http" accept'
sudo firewall-cmd --reload

查看已添加的服务

sudo firewall-cmd --permanent --list-services

firewalld常用命令表格

命令 功能说明
sudo firewall-cmd --permanent --add-service=http 永久放行HTTP服务
sudo firewall-cmd --reload 重载防火墙规则
sudo firewall-cmd --remove-service=http 移除HTTP服务规则
sudo firewall-cmd --get-services 查看所有预定义服务

ufw防火墙与Nginx配置

ufw(Uncomplicated Firewall)是Ubuntu/Debian系统中简单易用的防火墙工具,通过ufw命令管理规则。

启用ufw

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

放行Nginx端口

# 允许HTTP端口
sudo ufw allow 80/tcp
# 允许HTTPS端口
sudo ufw allow 443/tcp
# 或通过服务名称放行
sudo ufw allow 'Nginx HTTP'
sudo ufw allow 'Nginx HTTPS'

限制IP访问

sudo ufw allow from 192.168.1.100 to any port 80 proto tcp
sudo ufw allow from 192.168.1.100 to any port 443 proto tcp

查看ufw规则

sudo ufw status verbose

ufw规则示例表格

命令 功能说明
sudo ufw allow 80/tcp 允许HTTP流量
sudo ufw allow 'Nginx Full' 同时放行HTTP和HTTPS
sudo ufw deny from 192.168.1.0/24 拒绝特定网段访问
sudo ufw delete allow 80/tcp 删除HTTP放行规则

高级安全配置建议

  1. 限制访问频率:结合fail2ban工具,对频繁访问Nginx的IP进行封禁。
  2. 隐藏Nginx版本:在nginx.conf中配置server_tokens off;,避免泄露版本信息。
  3. 使用SSL/TLS:强制HTTPS访问,配置Let's Encrypt免费证书。
  4. 定期更新:保持Nginx和系统防火墙工具的版本更新,修复安全漏洞。

相关问答FAQs

问题1:如何检查防火墙是否正确放行了Nginx端口?
解答:可以通过以下命令验证:

nginx防火墙命令有哪些常用操作?-图3
(图片来源网络,侵删)
  • 使用telnetnc测试端口连通性:telnet your_server_ip 80nc -zv your_server_ip 443
  • 查看防火墙日志:sudo iptables -L -v -n(iptables)或sudo journalctl -u firewalld(firewalld)。
  • 使用ss命令检查端口监听状态:sudo ss -tulnp | grep nginx

问题2:修改防火墙规则后,如何确保规则永久生效?
解答:不同防火墙工具的持久化方式不同:

  • iptables:需手动保存规则,如CentOS中使用service iptables save,Debian中通过iptables-save > /etc/iptables/rules.v4
  • firewalld:添加规则时使用--permanent选项,并通过firewall-cmd --reload重载。
  • ufw:规则默认永久生效,启用ufw后无需额外操作,若需修改规则,直接使用ufw allow/delete命令并重启ufwsudo ufw disable && sudo ufw enable)确保更新。
分享:
扫描分享到社交APP
上一篇
下一篇