iptables和netfilter

关于二者的关系:

凤凰架构–干预网络通信

(iptables)常被称为是 Linux 系统“自带的防火墙”,然而 iptables 实际能做的事情已远远超出防火墙的范畴,严谨地讲,比较贴切的定位应是能够代替 Netfilter 多数常规功能的 IP 包过滤工具。iptables 的设计意图是因为 Netfilter 的钩子回调虽然很强大,但毕竟要通过程序编码才能够使用,并不适合系统管理员用来日常运维,而它的价值便是以配置去实现原本用 Netfilter 编码才能做到的事情。iptables 先把用户常用的管理意图总结成具体的行为预先准备好,然后在满足条件时自动激活行为

iptables 不仅仅是 Linux 系统自带的一个网络工具,它在容器间通信中扮演相当重要的角色,譬如 Kubernetes 用来管理 Service 的 Endpoints 的核心组件 kube-proxy,就依赖 iptables 来完成 ClusterIP 到 Pod 的通信(也可以采用 IPVS,IPVS 同样是基于 Netfilter 的),这种通信的本质就是一种 NAT 访问。对于 Linux 用户,以上都是相当基础的网络常识,但如果你平常较少在 Linux 系统下工作,就可能需要一些用 iptables 充当防火墙过滤数据、充当作路由器转发数据、充当作网关做 NAT 转换的实际例子来帮助理解,由于这些操作在网上很容易就能找到,笔者便不专门去举例说明了。

https://mp.weixin.qq.com/s/3jpwL1qRWK_9Y0THJ86DMQ

https://mp.weixin.qq.com/s/mmrap1gZY77Bx_Q3PtjzGA

https://mp.weixin.qq.com/s/9hlFZ73liZBsne4SiH9PrA

Iptables四表&五链

https://zhuanlan.zhihu.com/p/575512138

iptables 是 Linux 系统下的一个命令行防火墙,它允许系统管理员配置 Linux 内核防火墙的规则。iptables 中的表(tables)和链(chains)是它的两个基本概念。

iptables 中,有四个预定义的表:

  1. 过滤表(Filter Table):这是 iptables 的默认表。它包含了三个预定义的链:INPUTOUTPUTFORWARD。这个表主要用于包过滤;即,决定这些数据包是否允许通过你的系统。

  2. NAT 表(NAT Table):这个表用于网络地址转换(Network Address Translation,NAT)。它包含了三个预定义的链:PREROUTINGPOSTROUTINGOUTPUT

  3. Mangle 表(Mangle Table):这个表用于特殊的数据包转换,比如修改数据包的服务类型字段。它包含了五个预定义的链:PREROUTINGPOSTROUTINGINPUTOUTPUTFORWARD

  4. Raw 表(Raw Table):这个表用于配置 exemptions from connection tracking。它包含了两个预定义的链:PREROUTINGOUTPUT

以上每个表中的链都有特定的用途:

  1. INPUT 链:处理进入系统的数据包。

  2. OUTPUT 链:处理从系统发出的数据包。

  3. FORWARD 链:处理通过系统转发的数据包。

  4. PREROUTING 链:用于在路由选择之前处理数据包。

  5. POSTROUTING 链:在路由选择之后处理数据包。

iptables 中,规则被添加到链中,每个规则定义了对特定数据包的操作(比如允许、拒绝或重定向数据包)。数据包将按照它们首次匹配的规则被处理。


iptables基础教程

确实,我的回复并未涵盖原文中的所有细节和操作步骤。让我提供一个更全面的概述:

iptables是Linux中广为人知的防火墙工具,它实际上是一个用户空间的工具,用于配置内核空间的netfilter。通过本视频的四个案例,我们旨在帮助大家学习iptables的基础知识。请谅解视频中可能的错误,并欢迎指正。

首先,我们通过一个实际案例来禁止访问百度。iptables不直接作为防火墙,而是用户通过它来配置netfilter。数据包在Linux内核中的流向包括多个处理链,例如output链、post-routing链、pre-routing链、input链和forward链。在本案例中,我们不需要使用forward链。

iptables由四个主要的表组成,分别为raw, mangle, nat, 和filter。其中,mangle表负责修改数据包的一些属性,filter表则用于过滤数据包。为了禁止访问百度,我们主要操作filter表,通过在input和output链中添加规则来实现。

接下来,我们使用三台服务器进行演示。我们首先固定百度的IP地址,然后在服务器A上修改hosts文件,以确保百度域名解析到我们指定的IP。我们通过查看和修改iptables规则,来禁止服务器A访问百度。具体操作包括添加、查看、插入和删除规则。我们演示了如何使用-A(追加规则到链末尾)、-I(插入规则到指定位置)、-D(删除指定规则)等选项来管理iptables规则。

通过实际操作,我们展示了如何使用iptables阻止对百度的访问,以及如何将请求重定向到其他服务(如NGINX)。这涉及到地址和端口的修改,需要使用nat表。

我们还讨论了如何禁止服务器B访问服务器A,展示了如何在filter表的input链上添加规则来实现。我们比较了reject和drop选项的不同行为:reject会向请求方发送一个拒绝连接的响应,而drop则默默地丢弃请求,不发出任何响应。

最后,我们介绍了如何配置服务器A允许服务器C通过它连接到外网,演示了如何在filter表的forward链上添加规则,以及如何开启IP转发功能。

通过这些案例,我们希望大家能更深入地了解iptables的使用方法和配置技巧,以及它在网络安全和数据包过滤中的重要作用。

文章目录