首页 > 系统教程 > LINUX > 正文

如何在Linux下设置防火墙规则?使用iptables保护系统安全的完整指南

絕刀狂花
发布: 2025-09-06 11:52:01
原创
594人浏览过
答案:iptables是Linux防火墙核心工具,通过规则链控制数据包流动。首先清空旧规则,设置默认策略为拒绝入站、允许出站。接着允许本地回环和已建立连接,开放SSH、HTTP、HTTPS等必要端口,可屏蔽特定IP。规则需用netfilter-persistent或iptables-save保存以实现重启生效。相比firewalld等封装工具,iptables直接操作内核netfilter,提供更细粒度控制,支持连接限速、日志记录、SYN Flood防御、NAT转发等高级安全功能,是构建系统安全基石。

如何在linux下设置防火墙规则?使用iptables保护系统安全的完整指南

在Linux系统上设置防火墙规则,核心就是利用

iptables
登录后复制
这个强大的工具集。它允许我们精细地控制进出服务器的每一个数据包,通过定义一套规则链,决定哪些流量可以通过,哪些必须被拦截,从而为系统构建一道坚固的数字屏障。这东西用好了,能把你的服务器保护得滴水不漏,但用不好,也可能把自己锁在门外,所以理解它的工作原理和最佳实践至关重要。

解决方案

说实话,第一次接触

iptables
登录后复制
,你可能会觉得它有点像在玩乐高,只不过这些乐高积木是各种复杂的规则和参数。但一旦你掌握了它的基本逻辑,你会发现它提供的控制力是其他高级防火墙工具难以比拟的。我们来一步步构建一个基础且安全的防火墙配置

首先,为了避免旧规则的干扰,我们通常会先清空所有现有的

iptables
登录后复制
规则。这就像是把画板擦干净,准备重新创作。

sudo iptables -F # 清空所有规则链中的规则
sudo iptables -X # 删除所有用户自定义的链
sudo iptables -Z # 将所有链的计数器归零
登录后复制

接下来,我们得设定默认策略。这就像是给你的房子安上默认的门锁:对于所有未明确允许的连接,我们选择拒绝。这是一个“白名单”策略,安全性最高。

sudo iptables -P INPUT DROP    # 默认拒绝所有进入的连接
sudo iptables -P FORWARD DROP   # 默认拒绝所有转发的连接 (如果服务器不作路由器,这个很重要)
sudo iptables -P OUTPUT ACCEPT  # 默认允许所有发出的连接 (方便我们自己操作,可以根据需求收紧)
登录后复制

然后,我们需要允许一些基础且必要的流量通过。首先是本地回环接口,这玩意儿是系统内部通信的基础,不能断。

sudo iptables -A INPUT -i lo -j ACCEPT
登录后复制

再来就是允许已经建立的连接和相关连接。这非常关键,它确保了你发出的请求能收到回复,比如你访问一个网站,网站的响应数据包能顺利回来。

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
登录后复制

现在,我们可以开始开放一些必要的服务端口了。比如,如果你需要通过SSH远程管理服务器,那就得把22端口打开。

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
登录后复制

如果你的服务器提供Web服务,比如HTTP(80端口)和HTTPS(443端口),也得把它们放行。

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
登录后复制

有时候,你可能想阻止某个特定的IP地址访问你的服务器,这也很简单。

sudo iptables -A INPUT -s 192.168.1.100 -j DROP # 阻止来自192.168.1.100的所有连接
登录后复制

所有这些规则都配置好后,最重要的一步就是保存它们,否则系统一重启,你的辛辛苦苦设定的规则就全没了。在Debian/Ubuntu系中,我们通常使用

iptables-persistent
登录后复制
netfilter-persistent
登录后复制

# 安装 iptables-persistent (如果尚未安装)
sudo apt install iptables-persistent

# 保存当前规则
sudo netfilter-persistent save
登录后复制

对于RHEL/CentOS系,虽然也有类似的机制,但

netfilter-persistent
登录后复制
通常是更现代和推荐的做法。

# 安装 netfilter-persistent (如果尚未安装)
sudo yum install netfilter-persistent # 或者 dnf install netfilter-persistent
# 保存当前规则
sudo netfilter-persistent save
登录后复制

保存后,下次系统启动时,这些规则就会自动加载。

为什么在Linux下,iptables仍然是不可或缺的防火墙工具?

你可能会想,现在都有

firewalld
登录后复制
ufw
登录后复制
这些更“人性化”的防火墙管理工具了,为什么还要折腾
iptables
登录后复制
这种看起来有些原始的命令行工具呢?说实话,我个人觉得,
iptables
登录后复制
之所以不可或缺,恰恰在于它的“原始”和直接。它不是一个抽象层,而是直接与Linux内核的
netfilter
登录后复制
框架交互,这意味着它提供了无与伦比的粒度控制和灵活性。

firewalld
登录后复制
ufw
登录后复制
固然方便,它们本质上都是
iptables
登录后复制
nftables
登录后复制
iptables
登录后复制
的下一代,但
iptables
登录后复制
仍然广泛使用)的封装。它们把复杂的
iptables
登录后复制
命令包装成更易读的区域(zones)、服务(services)和应用配置文件,这对于日常管理来说确实大大降低了门槛。但当你需要处理一些非常规的、复杂的网络场景时,比如精细的NAT转发、特定的数据包修改(mangle)、或者深入到数据包的每个字节进行匹配时,
firewalld
登录后复制
ufw
登录后复制
的抽象层反而可能成为限制。

美图设计室
美图设计室

5分钟在线高效完成平面设计,AI帮你做设计

美图设计室 29
查看详情 美图设计室

iptables
登录后复制
的强大在于它直接暴露了
netfilter
登录后复制
的四个表(filter, nat, mangle, raw)和五个链(PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING)的全部能力。这使得高级用户可以编写出任何他们能想象到的规则,从简单的端口开放到复杂的负载均衡、流量整形,甚至是最底层的包头篡改。它就像一把瑞士军刀,虽然用起来需要一点技巧,但功能全面,能应对各种复杂情况。理解
iptables
登录后复制
,就像是理解了防火墙的“母语”,这对于任何想要深入掌握Linux网络安全的工程师来说,都是一块绕不开的基石。

如何确保iptables规则在系统重启后依然有效?持久化配置的几种策略

这是一个非常实际的问题,毕竟谁也不想每次服务器重启后都得手动敲一遍防火墙规则。我遇到过不少新手就是因为没做持久化,结果重启后系统门户大开,或者把自己锁在了外面。幸运的是,Linux社区提供了几种成熟的策略来解决这个问题。

最现代和推荐的方法,尤其是在主流的Debian/Ubuntu和RHEL/CentOS发行版上,是使用专门的持久化服务:

  1. iptables-persistent
    登录后复制
    (Debian/Ubuntu): 这个包会安装一个服务,在系统启动时自动加载保存的
    iptables
    登录后复制
    规则,并在关机时保存当前规则。安装过程非常简单:

    sudo apt install iptables-persistent
    登录后复制

    安装过程中会提示你是否保存当前的IPv4和IPv6规则。选择“是”即可。 如果你之后修改了规则,需要手动保存:

    sudo netfilter-persistent save
    登录后复制

    这个命令会将当前内存中的

    iptables
    登录后复制
    规则写入到
    /etc/iptables/rules.v4
    登录后复制
    /etc/iptables/rules.v6
    登录后复制
    这两个文件中。系统启动时,
    netfilter-persistent
    登录后复制
    服务就会读取这些文件并应用规则。

  2. netfilter-persistent
    登录后复制
    (RHEL/CentOS及其他使用systemd的发行版): 虽然名字相似,但其工作原理和文件位置可能略有不同。在RHEL/CentOS上,你可以这样安装和使用:

    # RHEL/CentOS 7/8
    sudo yum install netfilter-persistent # 或者 dnf install netfilter-persistent
    sudo systemctl enable netfilter-persistent.service
    sudo systemctl start netfilter-persistent.service
    登录后复制

    保存规则的命令也是:

    sudo netfilter-persistent save
    登录后复制

    规则通常保存在

    /etc/sysconfig/iptables
    登录后复制
    /etc/sysconfig/ip6tables
    登录后复制

  3. 使用

    iptables-save
    登录后复制
    iptables-restore
    登录后复制
    脚本(传统方法)
    : 这是一种更通用的方法,不依赖于特定的持久化服务包。你可以手动将当前规则导出到一个文件,并在系统启动时通过自定义脚本导入。 保存规则:

    sudo iptables-save > /etc/iptables/rules.v4
    sudo ip6tables-save > /etc/iptables/rules.v6
    登录后复制

    然后,你需要创建一个

    systemd
    登录后复制
    服务单元或者在
    /etc/rc.local
    登录后复制
    (如果存在且被启用)中添加命令,在系统启动时执行:

    sudo iptables-restore < /etc/iptables/rules.v4
    sudo ip6tables-restore < /etc/iptables/rules.v6
    登录后复制

    虽然这种方法更“手工”,但它提供了最大的灵活性,尤其是在一些非主流或定制化的Linux环境中。不过,我个人更倾向于使用

    iptables-persistent
    登录后复制
    netfilter-persistent
    登录后复制
    ,因为它们是官方推荐且经过良好测试的解决方案,减少了出错的可能。

除了基本端口开放,iptables还能如何增强系统安全性?

仅仅开放几个端口,虽然能让服务跑起来,但离真正的“安全”还有一段距离。

iptables
登录后复制
的强大之处在于它能做的远不止这些。在我看来,它更像是一个多功能的安保系统,除了开门关门,还能监控、限制、甚至迷惑潜在的入侵者。

  1. 限制连接速率,防御DDoS/暴力破解: 这是非常实用的功能。比如,我们可以限制某个IP地址在短时间内尝试SSH连接的次数,有效防御SSH暴力破解。

    # 允许每个IP每分钟最多进行3次新的SSH连接尝试
    sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH_ATTACK
    sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSH_ATTACK -j DROP
    登录后复制

    这套组合拳能有效地筛选掉那些恶意扫描和暴力破解行为。

  2. 状态检测(Stateful Packet Inspection)的精细化运用: 我们之前用了

    ESTABLISHED,RELATED
    登录后复制
    来允许已建立的连接。但你还可以更进一步,比如只允许内部网络发起的连接,而不允许外部网络主动发起某些特定类型的连接。这对于构建DMZ(非军事区)或内部服务特别有用。

  3. 日志记录可疑流量: 当

    iptables
    登录后复制
    拒绝一个数据包时,它可以同时将其记录到系统日志中。这对于监控潜在的攻击行为和事后分析非常重要。

    # 记录所有被丢弃的输入包,并加上前缀“IPTABLES_DROP:”
    sudo iptables -A INPUT -j LOG --log-prefix "IPTABLES_DROP:" --log-level info
    sudo iptables -A INPUT -j DROP
    登录后复制

    这样,你就可以通过查看

    /var/log/syslog
    登录后复制
    journalctl
    登录后复制
    来发现异常。

  4. 阻止特定IP范围或国家: 如果你知道某些攻击源通常来自特定的IP段,或者你压根不需要与某个国家或地区的IP进行通信,可以直接将其整个IP段屏蔽掉。这通常需要一个IP地址列表,然后通过脚本动态生成

    iptables
    登录后复制
    规则。虽然操作起来有点复杂,但对于提升特定场景下的安全性非常有效。

  5. SYN Flood攻击防御(基础层面): SYN Flood是一种常见的DDoS攻击,通过发送大量SYN请求但不完成三次握手来耗尽服务器资源。

    iptables
    登录后复制
    可以提供一些基础的防御措施,比如限制SYN请求的速率。

    # 限制每秒钟最多接受25个新的SYN连接请求
    sudo iptables -A INPUT -p tcp --syn -m limit --limit 25/sec --limit-burst 100 -j ACCEPT
    sudo iptables -A INPUT -p tcp --syn -j DROP
    登录后复制

    这只是一个简单的例子,更高级的防御通常需要专门的硬件或软件解决方案。

  6. 端口转发和NAT(网络地址转换): 虽然这更多是路由器的功能,但

    iptables
    登录后复制
    nat
    登录后复制
    表可以实现非常灵活的端口转发(DNAT)和源地址转换(SNAT)。比如,你可以将外部请求的80端口转发到内部服务器的8080端口,或者让内网的多台服务器通过同一个公网IP访问外部网络。

通过这些高级功能,

iptables
登录后复制
不仅仅是一个简单的门卫,它更像是一个智能安保系统,能够根据你的指令,对各种网络行为进行精细化的识别、判断和处置,从而为你的Linux系统提供一个更加健壮和安全的运行环境。

以上就是如何在Linux下设置防火墙规则?使用iptables保护系统安全的完整指南的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号