首页 帮助中心 如何使用iptables设置Linux服务器高级防火墙规则?
如何使用iptables设置Linux服务器高级防火墙规则?
时间 : 2025-07-04 15:45:10 编辑 : 华纳云 阅读量 : 6

服务器所面临的攻击愈发复杂和频繁,为确保系统安全,仅依赖应用层防护已经远远不够,底层的网络访问控制尤为关键。iptables作为Linux系统中强大而灵活的防火墙工具,可以通过自定义规则有效限制非法访问、封锁恶意端口、限制IP连接频率,从而提升服务器整体防御能力。接下来,我们将系统性介绍如何使用iptables设置Linux服务器的高级防火墙规则。

iptables的基本原理

iptables是Linux内核中Netfilter框架的用户空间工具,它通过设置一系列链与规则控制数据包的进出行为。iptables工作在网络层,能在数据达到应用程序之前做出拦截、放行或修改。

常见的链包括:

  • INPUT:控制进入本地的流量。
  • OUTPUT:控制从本地发出的流量。
  • FORWARD:控制从一个接口转发到另一个接口的数据。
  • PREROUTING/POSTROUTING:用于NAT操作。

iptables 使用"表"来组织链,不同的表用于不同功能:

  • filter:默认表,处理包的过滤(最常用)
  • nat:用于网络地址转换
  • mangle:用于修改数据包的字段
  • raw:用于决定数据包是否参与连接跟踪

在配置防火墙前,理解这些基本概念能帮助你更精准地制定防护策略。

查看当前规则

在操作前,务必查看现有的防火墙规则,避免误操作影响服务:

iptables -L -n -v

参数说明:

-L:列出规则

-n:不进行DNS反查,显示IP地址

-v:显示详细信息,如匹配的数据包和字节数

设置默认策略:拒绝一切,允许特定

一条最基本的防护策略是“默认拒绝,按需放行”,设置如下:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

说明:

INPUT 和 FORWARD 链默认丢弃所有进入的数据包;

OUTPUT 允许服务器对外发起连接;

后续规则将允许特定端口或IP访问。

放行本地回环接口

防止本地服务通讯被阻断:

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

放行已有连接或相关连接

保持连接跟踪允许返回包通过:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

这条规则能识别已建立连接的数据流,并允许其返回数据通过,提高服务的可用性和安全性。

开放常用端口

根据业务需求放行必要的端口,例如SSH、HTTP、HTTPS等:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT      # SSH远程连接
iptables -A INPUT -p tcp --dport 80 -j ACCEPT      # HTTP服务
iptables -A INPUT -p tcp --dport 443 -j ACCEPT     # HTTPS服务

需要注意的是,如果服务监听的是其他端口(如MySQL默认3306、Redis默认6379等),需根据实际情况决定是否暴露,建议仅绑定到本地或使用白名单控制。

限制某个端口的连接频率

防止暴力破解SSH端口,可以加上访问频率限制:

iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 6 -j DROP

解释:

每分钟同一IP尝试连接SSH端口超过6次就拒绝其访问;

适用于防范暴力破解的基本场景。

基于IP白名单策略

只允许特定IP访问指定服务,例如企业固定IP访问SSH:

iptables -A INPUT -p tcp --dport 22 -s 203.0.113.1 -j ACCEPT

在这种策略下,其余IP访问22端口将被默认DROP,有效控制暴露面。

拒绝恶意IP访问

可手动封禁异常流量来源IP:

iptables -A INPUT -s 198.51.100.100 -j DROP

此方式适合临时阻止扫描器、暴力攻击者等非法连接。

保存防火墙规则

iptables 规则是临时的,系统重启后会失效,需手动保存。

在 Debian/Ubuntu 系统中:

apt install iptables-persistent
netfilter-persistent save

在 CentOS/RHEL 系统中:

service iptables save

也可以使用脚本在系统启动时自动加载规则。

清空所有规则

在调试或重设防火墙时,可以执行以下命令:

iptables -F
iptables -X
iptables -Z

含义分别是清空规则、删除自定义链、清空计数器。建议使用前备份已有规则。

注意事项与常见错误

规则顺序敏感:iptables 的匹配按顺序执行,放行规则应在DROP前,否则不会生效。

不慎封掉SSH端口可能导致远程断联:修改防火墙前建议设置 at 定时重置规则,防止误封。

不建议使用INPUT链的ACCEPT ALL规则:容易造成所有端口暴露,失去防护意义。

大量规则时建议使用ipset:提高性能,减少规则重复。

iptables 是 Linux 系统中不可或缺的安全组件,通过合理配置,可以将服务器暴露在公网的风险降到最低。无论是限制端口访问、阻断异常IP、还是控制连接速率,iptables 都提供了灵活而高效的解决方案。掌握其使用,不仅是系统管理员的必备技能,也是保障服务器安全运行的第一道防线。通过实践与不断优化防火墙规则,能够有效抵御各类网络攻击,为Web服务和应用系统提供强大的基础保护。

华纳云 推荐文章
Linux服务器如何查看端口连接数 如何进行Linux服务器镜像的加密处理? 在Linux服务器上优化镜像的大小的方法和步骤 linux服务器jvm内存监控全解析 盘点Linux服务器系统中的权限常见误区与安全建议 Linux服务器上怎么配置虚拟IP?原理与操作全面解析 在Linux服务器中将python卸载的操作指南 Linux服务器IO性能监控全解:从原理到实战 如何解决Linux服务器镜像启动失败的问题 简单教你使用rsync命令备份Linux服务器镜像
活动
客服咨询
7*24小时技术支持
技术支持
渠道支持