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

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

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

今天聊聊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

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

有问题评论区交流~

相关推荐
摇滚侠2 小时前
CentOS 7 Linux 离线安装 Docker:离线安装包、依赖文件、安装步骤
linux·docker·centos
小鸡脚来咯2 小时前
怎么配置主机名映射?
linux·windows·macos
Zzqqads2 小时前
vnc连接问题:Timed out waiting for a response from the computer
服务器
咖啡の猫2 小时前
TypeScript基本类型
linux·ubuntu·typescript
玖疯子2 小时前
JavaScript性能优化实战的技术文章大纲
服务器
DeeplyMind2 小时前
第4章:DebugFS 安全性和并发控制
linux·驱动开发·debugfs
CS Beginner2 小时前
【Linux】快速配置wifi和SSH服务
linux·运维·ssh
我也要当昏君2 小时前
第一节(代入排除法)
运维
become__better2 小时前
判断ceph osd 节点磁盘异常
linux·运维·ceph