活动公告

系统通知
05-18 21:22
系统通知
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,资源失效请在帖子内回复要求补档,会尽快处理!
10-23 09:31

CentOS系统防火墙配置详解从基础到进阶教你安全开放80端口保障网站服务稳定运行提升用户体验

SunJu_FaceMall

3万

主题

2860

科技点

3万

积分

白金月票

碾压王

积分
32872

塔罗立华奏

<font color=白金月票" /> 发表于 2025-9-2 19:20:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
引言

在当今互联网时代,网站服务的稳定性和安全性对于企业和个人来说至关重要。CentOS作为一款广泛使用的企业级Linux发行版,其防火墙配置是保障服务器安全的第一道防线。特别是对于Web服务器而言,正确配置防火墙开放80端口(HTTP)和443端口(HTTPS)是确保网站可访问性的基础。本文将详细介绍CentOS系统防火墙的配置方法,从基础概念到高级技巧,帮助您安全地开放80端口,保障网站服务的稳定运行,同时提升用户体验。

CentOS防火墙基础知识

firewalld与iptables

CentOS 7及以后的版本默认使用firewalld作为防火墙管理工具,而CentOS 6及更早版本则使用iptables。了解这两种工具的区别对于正确配置防火墙至关重要。

firewalld是CentOS 7+的默认防火墙管理工具,它提供了动态管理的防火墙,支持网络区域(zones)定义,更加灵活和用户友好。firewalld使用区域和服务来管理规则,而不是直接使用iptables链。

iptables是传统的Linux防火墙工具,它基于内核的netfilter框架工作,通过规则链来处理网络数据包。虽然firewalld在CentOS 7+中成为默认选择,但许多系统管理员仍然习惯使用iptables,因为它提供了更直接的控制和更广泛的文档支持。

理解端口与服务

在配置防火墙之前,我们需要理解端口和服务的基本概念。端口是计算机网络中用于区分不同服务的逻辑标识,范围从0到65535。其中,80端口是HTTP服务的默认端口,用于Web服务器响应网页请求。

当用户通过浏览器访问网站时,默认会向服务器的80端口发送HTTP请求。如果防火墙没有正确开放此端口,用户将无法访问网站,导致服务不可用。

检查当前防火墙状态

在开始配置之前,首先需要检查当前防火墙的状态和已配置的规则。

检查firewalld状态

对于使用firewalld的系统(CentOS 7+):
  1. # 检查firewalld服务状态
  2. systemctl status firewalld
  3. # 如果firewalld正在运行,可以查看当前活动的区域
  4. firewall-cmd --get-active-zones
  5. # 查看默认区域
  6. firewall-cmd --get-default-zone
  7. # 查看当前区域已开放的服务和端口
  8. firewall-cmd --list-all
复制代码

检查iptables状态

对于使用iptables的系统(CentOS 6及更早版本,或者在CentOS 7+上安装了iptables):
  1. # 检查iptables服务状态
  2. service iptables status
  3. # 或者使用systemctl(如果适用)
  4. systemctl status iptables
  5. # 查看当前iptables规则
  6. iptables -L -n -v
复制代码

使用firewalld开放80端口(基础方法)

临时开放80端口

如果只需要临时开放80端口(重启后失效),可以使用以下命令:
  1. firewall-cmd --zone=public --add-port=80/tcp
复制代码

这条命令会在public区域中临时添加一条规则,允许TCP协议的80端口流量通过。

永久开放80端口

为了使规则在重启后仍然有效,需要使用--permanent选项:
  1. firewall-cmd --zone=public --add-port=80/tcp --permanent
复制代码

添加永久规则后,需要重新加载防火墙配置使规则生效:
  1. firewall-cmd --reload
复制代码

通过服务名称开放端口

firewalld支持通过预定义的服务名称来开放端口,这种方式更加直观和易于管理。对于HTTP服务,可以直接使用服务名称:
  1. # 临时开放HTTP服务
  2. firewall-cmd --zone=public --add-service=http
  3. # 永久开放HTTP服务
  4. firewall-cmd --zone=public --add-service=http --permanent
  5. # 重新加载防火墙配置
  6. firewall-cmd --reload
复制代码

验证端口是否已开放

开放端口后,应该验证配置是否正确:
  1. # 查看当前区域所有开放的端口和服务
  2. firewall-cmd --list-all
  3. # 或者专门查看开放的端口
  4. firewall-cmd --list-ports
  5. # 查看开放的服务
  6. firewall-cmd --list-services
复制代码

此外,可以使用netstat或ss命令检查80端口是否处于监听状态:
  1. # 使用netstat检查
  2. netstat -tuln | grep 80
  3. # 使用ss检查(推荐)
  4. ss -tuln | grep 80
复制代码

使用iptables开放80端口(替代方法)

虽然firewalld是CentOS 7+的默认防火墙工具,但许多管理员仍然习惯使用iptables。如果您更喜欢使用iptables,或者系统已经安装了iptables服务,可以按照以下步骤操作。

安装iptables服务

在CentOS 7+上,默认可能没有安装iptables服务,需要先安装:
  1. # 安装iptables服务
  2. yum install iptables-services
  3. # 启动iptables服务并设置开机自启
  4. systemctl start iptables
  5. systemctl enable iptables
  6. # 停止并禁用firewalld(如果需要)
  7. systemctl stop firewalld
  8. systemctl mask firewalld
复制代码

使用iptables命令开放80端口
  1. # 开放80端口(INPUT链)
  2. iptables -I INPUT -p tcp --dport 80 -j ACCEPT
  3. # 如果需要限制特定IP访问,可以使用-s参数
  4. # iptables -I INPUT -p tcp --dport 80 -s 192.168.1.0/24 -j ACCEPT
  5. # 保存iptables规则
  6. service iptables save
  7. # 或者使用iptables-save命令
  8. iptables-save > /etc/sysconfig/iptables
复制代码

验证iptables规则
  1. # 查看当前iptables规则
  2. iptables -L -n -v
  3. # 专门查看INPUT链的规则
  4. iptables -L INPUT -n -v
复制代码

高级配置:端口转发、IP限制等

配置端口转发

在某些情况下,您可能需要将80端口的流量转发到其他端口或其他服务器。firewalld提供了便捷的端口转发配置方法。
  1. # 将80端口的流量转发到本地8080端口
  2. firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
  3. # 将80端口的流量转发到另一台服务器的80端口
  4. firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.100 --permanent
  5. # 将80端口的流量转发到另一台服务器的8080端口
  6. firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.100:toport=8080 --permanent
  7. # 重新加载防火墙配置
  8. firewall-cmd --reload
复制代码

使用iptables配置端口转发:
  1. # 启用IP转发
  2. echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
  3. sysctl -p
  4. # 将80端口的流量转发到本地8080端口
  5. iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
  6. # 将80端口的流量转发到另一台服务器的80端口
  7. iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
  8. # 保存iptables规则
  9. service iptables save
复制代码

限制特定IP访问

为了增强安全性,您可能需要限制只有特定IP或IP范围才能访问80端口。

使用firewalld限制IP访问:
  1. # 允许特定IP访问80端口
  2. firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="80" accept' --permanent
  3. # 允许特定IP范围访问80端口
  4. firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="80" accept' --permanent
  5. # 拒绝特定IP访问80端口
  6. firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.200" port protocol="tcp" port="80" reject' --permanent
  7. # 重新加载防火墙配置
  8. firewall-cmd --reload
复制代码

使用iptables限制IP访问:
  1. # 允许特定IP访问80端口
  2. iptables -I INPUT -p tcp --dport 80 -s 192.168.1.100 -j ACCEPT
  3. # 允许特定IP范围访问80端口
  4. iptables -I INPUT -p tcp --dport 80 -s 192.168.1.0/24 -j ACCEPT
  5. # 拒绝特定IP访问80端口
  6. iptables -I INPUT -p tcp --dport 80 -s 192.168.1.200 -j DROP
  7. # 保存iptables规则
  8. service iptables save
复制代码

配置连接限制

为了防止DDoS攻击或过度使用服务器资源,可以配置连接限制。

使用firewalld配置连接限制:
  1. # 限制每个IP每分钟最多20个到80端口的连接
  2. firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" port protocol="tcp" port="80" accept' --permanent
  3. firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" port protocol="tcp" port="80" limit value="20/m" accept' --permanent
  4. # 重新加载防火墙配置
  5. firewall-cmd --reload
复制代码

使用iptables配置连接限制:
  1. # 限制每个IP每分钟最多20个到80端口的连接
  2. iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j DROP
  3. # 限制每分钟最多100个到80端口的新连接
  4. iptables -I INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
  5. # 保存iptables规则
  6. service iptables save
复制代码

防火墙规则持久化

确保防火墙规则在系统重启后仍然生效是非常重要的。

firewalld规则持久化

firewalld的规则持久化主要通过--permanent选项实现,添加了此选项的规则会被保存到磁盘上,并在系统重启后自动加载。
  1. # 添加永久规则
  2. firewall-cmd --zone=public --add-service=http --permanent
  3. # 重新加载防火墙配置
  4. firewall-cmd --reload
  5. # 查看永久规则
  6. firewall-cmd --list-all --permanent
复制代码

iptables规则持久化

iptables规则需要手动保存才能在系统重启后保持有效:
  1. # 保存当前iptables规则
  2. service iptables save
  3. # 或者使用iptables-save命令
  4. iptables-save > /etc/sysconfig/iptables
  5. # 确保iptables服务开机自启
  6. systemctl enable iptables
复制代码

监控和日志分析

启用防火墙日志

启用防火墙日志可以帮助您监控和分析网络流量,及时发现潜在的安全问题。

使用firewalld启用日志:
  1. # 启用日志记录被拒绝的数据包
  2. firewall-cmd --set-log-denied=all --permanent
  3. # 重新加载防火墙配置
  4. firewall-cmd --reload
复制代码

使用iptables启用日志:
  1. # 记录被拒绝的80端口连接尝试
  2. iptables -I INPUT -p tcp --dport 80 -j LOG --log-prefix "HTTP_ACCESS_DENIED: "
  3. # 保存iptables规则
  4. service iptables save
复制代码

查看防火墙日志

防火墙日志通常记录在系统日志中,可以使用以下命令查看:
  1. # 查看系统日志中的防火墙相关信息
  2. tail -f /var/log/messages | grep -i "firewall\|http_access_denied"
  3. # 或者使用journalctl(CentOS 7+)
  4. journalctl -f | grep -i "firewall\|http_access_denied"
复制代码

使用其他监控工具

除了查看日志外,还可以使用其他工具监控防火墙状态和网络流量:
  1. # 使用netstat/ss监控网络连接
  2. ss -tuln | grep 80
  3. netstat -tuln | grep 80
  4. # 使用nmap扫描开放端口
  5. nmap -p 80 localhost
  6. # 使用tcpdump监控网络流量
  7. tcpdump -i any -n tcp port 80
复制代码

安全最佳实践

最小权限原则

只开放必要的端口和服务,避免开放不必要的访问权限。对于Web服务器,通常只需要开放80(HTTP)和443(HTTPS)端口。

定期审计规则

定期检查和审计防火墙规则,确保没有过时或不再需要的规则:
  1. # 查看firewalld规则
  2. firewall-cmd --list-all
  3. # 查看iptables规则
  4. iptables -L -n -v
复制代码

使用安全区域

firewalld支持不同的安全区域,可以根据需要将网络接口分配到不同的区域:
  1. # 查看可用区域
  2. firewall-cmd --get-zones
  3. # 查看特定区域的规则
  4. firewall-cmd --zone=public --list-all
  5. # 将网络接口分配到特定区域
  6. firewall-cmd --zone=public --change-interface=eth0 --permanent
  7. # 重新加载防火墙配置
  8. firewall-cmd --reload
复制代码

配置端口敲门

端口敲门(Port Knocking)是一种高级安全技朮,通过按顺序尝试连接一系列预定义的”关闭”端口来动态打开防火墙中的特定端口。
  1. # 安装端口敲门服务
  2. yum install knock-server
  3. # 配置端口敲门序列
  4. echo "[openHTTP]
  5.     sequence = 7000,8000,9000
  6.     seq_timeout = 15
  7.     command = /usr/bin/firewall-cmd --zone=public --add-port=80/tcp
  8.     tcpflags = syn" >> /etc/knockd.conf
  9. echo "[closeHTTP]
  10.     sequence = 9000,8000,7000
  11.     seq_timeout = 15
  12.     command = /usr/bin/firewall-cmd --zone=public --remove-port=80/tcp
  13.     tcpflags = syn" >> /etc/knockd.conf
  14. # 启动knockd服务
  15. systemctl start knockd
  16. systemctl enable knockd
复制代码

使用fail2ban防止暴力破解

fail2ban是一款入侵防御软件,可以监控日志文件并根据预设规则自动禁止恶意IP:
  1. # 安装fail2ban
  2. yum install fail2ban
  3. # 创建jail.local配置文件
  4. cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  5. # 编辑jail.local,添加对HTTP服务的保护
  6. echo "[apache-auth]
  7. enabled = true
  8. port = http,https
  9. filter = apache-auth
  10. logpath = /var/log/httpd/error_log
  11. maxretry = 3
  12. bantime = 3600" >> /etc/fail2ban/jail.local
  13. # 启动fail2ban服务
  14. systemctl start fail2ban
  15. systemctl enable fail2ban
复制代码

常见问题与解决方案

问题1:开放80端口后仍无法访问网站

可能原因:

• SELinux阻止了HTTP服务
• Web服务器未正确配置或未运行
• 网络问题或其他防火墙设备阻止了访问

解决方案:
  1. # 检查SELinux状态
  2. getenforce
  3. # 临时禁用SELinux进行测试
  4. setenforce 0
  5. # 如果确定是SELinux问题,可以设置适当的SELinux布尔值
  6. setsebool -P httpd_can_network_connect 1
  7. # 检查Web服务器状态
  8. systemctl status httpd
  9. systemctl start httpd
  10. # 检查Web服务器是否在监听80端口
  11. ss -tuln | grep 80
  12. # 检查本地是否可以访问
  13. curl http://localhost
复制代码

问题2:防火墙规则不生效

可能原因:

• 规则未正确保存或重新加载
• 其他规则优先级更高
• 防火墙服务未运行

解决方案:
  1. # 检查防火墙服务状态
  2. systemctl status firewalld
  3. systemctl status iptables
  4. # 重新加载防火墙配置
  5. firewall-cmd --reload
  6. service iptables restart
  7. # 检查规则优先级
  8. iptables -L -n -v --line-numbers
  9. # 确保规则在正确的位置
  10. iptables -I INPUT 5 -p tcp --dport 80 -j ACCEPT
复制代码

问题3:如何同时开放HTTP和HTTPS端口

解决方案:
  1. # 使用firewalld同时开放HTTP和HTTPS
  2. firewall-cmd --zone=public --add-service=http --permanent
  3. firewall-cmd --zone=public --add-service=https --permanent
  4. firewall-cmd --reload
  5. # 使用iptables同时开放HTTP和HTTPS
  6. iptables -I INPUT -p tcp --dport 80 -j ACCEPT
  7. iptables -I INPUT -p tcp --dport 443 -j ACCEPT
  8. service iptables save
复制代码

问题4:如何限制特定国家或地区的IP访问

解决方案:
可以使用GeoIP数据库结合iptables或firewalld的富规则来实现:
  1. # 安装GeoIP数据库
  2. yum install geoipupdate
  3. # 更新GeoIP数据库
  4. geoipupdate
  5. # 使用xtables-addons添加geoip匹配
  6. yum install xtables-addons
  7. # 使用iptables限制特定国家的IP访问
  8. iptables -I INPUT -m geoip --src-cc CN -p tcp --dport 80 -j DROP
  9. # 保存iptables规则
  10. service iptables save
复制代码

总结

正确配置CentOS系统防火墙并安全开放80端口是保障网站服务稳定运行的关键步骤。本文详细介绍了使用firewalld和iptables两种工具开放80端口的方法,从基础配置到高级技巧,包括端口转发、IP限制、连接限制等内容。同时,我们还讨论了防火墙规则持久化、监控和日志分析、安全最佳实践以及常见问题的解决方案。

通过合理配置防火墙,不仅可以保障网站服务的可用性,还能提高服务器的安全性,防止未授权访问和各种网络攻击。希望本文能帮助您更好地理解和配置CentOS系统防火墙,为您的网站服务提供稳定、安全的运行环境,从而提升用户体验。
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则