防火墙配置入门:保护你的服务器

防火墙配置入门:保护你的服务器

服务器暴露在公网上,不设防火墙就是裸奔。

今天聊聊Linux防火墙的基本配置。

两种主流工具

  • firewalld:CentOS 7+默认,管理简单
  • iptables:经典工具,所有Linux通用

新手推荐用firewalld,更直观。

firewalld基础

查看状态:

bash 复制代码
systemctl status firewalld

启动/停止:

bash 复制代码
systemctl start firewalld
systemctl stop firewalld
systemctl enable firewalld  # 开机自启

查看已开放的端口:

bash 复制代码
firewall-cmd --list-ports

查看所有规则:

bash 复制代码
firewall-cmd --list-all

开放端口

临时开放(重启后失效):

bash 复制代码
firewall-cmd --add-port=8080/tcp

永久开放(推荐):

bash 复制代码
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload  # 重载生效

开放多个端口:

bash 复制代码
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload

开放端口范围:

bash 复制代码
firewall-cmd --add-port=8000-8100/tcp --permanent
firewall-cmd --reload

关闭端口

bash 复制代码
firewall-cmd --remove-port=8080/tcp --permanent
firewall-cmd --reload

开放服务

除了端口号,也可以用服务名:

bash 复制代码
# 查看支持的服务
firewall-cmd --get-services

# 开放http和https服务
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

限制IP访问

只允许特定IP访问某端口:

bash 复制代码
# 先开放端口
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="3306" protocol="tcp" accept' --permanent
firewall-cmd --reload

禁止某个IP:

bash 复制代码
firewall-cmd --add-rich-rule='rule family="ipv4" source address="1.2.3.4" reject' --permanent
firewall-cmd --reload

iptables基础

如果你的系统用iptables:

查看规则:

bash 复制代码
iptables -L -n

开放端口:

bash 复制代码
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

保存规则:

bash 复制代码
# CentOS
service iptables save

# Ubuntu
iptables-save > /etc/iptables.rules

删除规则:

bash 复制代码
# 先查看规则编号
iptables -L -n --line-numbers

# 删除第N条
iptables -D INPUT N

实战场景

场景1:Web服务器

bash 复制代码
# 只开放必要端口
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --reload

场景2:数据库服务器

bash 复制代码
# 只允许应用服务器访问MySQL
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.10" port port="3306" protocol="tcp" accept' --permanent
firewall-cmd --reload

场景3:临时测试

bash 复制代码
# 临时关闭防火墙测试
systemctl stop firewalld

# 测试完记得开回来
systemctl start firewalld

常见问题

Q:端口开了还是访问不了?

  1. 检查服务是否启动:ss -tlnp | grep 端口
  2. 检查防火墙规则:firewall-cmd --list-ports
  3. 检查云服务器的安全组

Q:怎么知道被攻击了?

bash 复制代码
# 查看连接数最多的IP
netstat -ant | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10

安全建议

  1. 只开必要端口:用不上的端口别开
  2. SSH换端口:把22换成其他端口
  3. 限制访问来源:数据库端口限制IP
  4. 定期检查:看看有没有异常端口

远程管理

我管理多台服务器的防火墙,用星空组网连起来后统一操作:

bash 复制代码
# 批量查看开放端口
for ip in 10.26.1.{10..15}; do
    echo "=== $ip ==="
    ssh root@$ip "firewall-cmd --list-ports"
done

不用记每台服务器的公网IP,直接用虚拟IP连。

速查表

操作 命令
查看状态 systemctl status firewalld
查看端口 firewall-cmd --list-ports
开放端口 firewall-cmd --add-port=端口/tcp --permanent
关闭端口 firewall-cmd --remove-port=端口/tcp --permanent
重载规则 firewall-cmd --reload

小结

防火墙配置核心:

  1. 只开放必要的端口
  2. 敏感端口限制IP访问
  3. --permanent保存规则
  4. 改完记得--reload

服务器安全第一,别裸奔。

有问题评论区交流~

相关推荐
jarreyer5 小时前
【AI Agent】大模型自动化载体
运维·自动化
xixingzhe25 小时前
SpringBoot + Nginx 免鉴权接口安全防护方案
运维·nginx·安全
翼龙云_cloud6 小时前
阿里云国际代理商:阿里云 ECS 全维度监控配置教程
运维·阿里云·云计算·监控
笑锝没心没肺6 小时前
fail2ban工具安装配置及使用
linux·运维·服务器
zt1985q8 小时前
本地部署开源智能家居集成平台 ioBroker 并实现外部访问( Windows 版本)
运维·服务器·智能家居
大卡片8 小时前
linux内核驱动开发
linux·运维·驱动开发
心心喵9 小时前
[linux] nohup和pm2的区别 进程保活
linux·运维·服务器
NGINX开源社区10 小时前
F5 NGINX Ingress Controller 5.3.0 新增功能
运维
醉熏的石头10 小时前
Ubuntu 中的编程语言(中)
linux·ubuntu·scala
SelectDB12 小时前
Apache Doris 在 AgentLogsBench 中领先,支撑 Agent 可观测性生产负载
运维·数据库·agent