iptables的实际用法以及场景举例

iptables的使用和基本原理

iptables的初识

首先,要使用 iptables,您需要以 root 用户身份登录系统。然后,您可以按照以下步骤进行操作:
查看 iptables 规则:使用命令 iptables -L 可以列出当前的 iptables 规则。
添加规则:使用命令 iptables -A 可以向指定的链中添加一条规则。其中, 是要添加规则的链的名称, 是要添加的规则。例如,要在 INPUT 链中添加一条允许来自 192.168.0.1 主机的所有流量通过的规则,可以使用命令 iptables -A INPUT -s 192.168.0.1 -j ACCEPT。
删除规则:使用命令 iptables -D 可以从指定的链中删除一条规则。其中, 是要删除规则的链的名称, 是要删除的规则的编号。例如,要删除 INPUT 链中的第一条规则,可以使用命令 iptables -D INPUT 1。
修改规则:使用命令 iptables -R 可以修改指定的链中的一条规则。其中, 是要修改规则的链的名称, 是要修改的规则的编号。例如,要修改 INPUT 链中的第一条规则,可以使用命令 iptables -R INPUT 1。
保存规则:使用命令 iptables-save > /etc/iptables/rules.v4 可以将当前的 iptables 规则保存到 /etc/iptables/rules.v4 文件中。
iptables 的基本原理是基于 Linux 内核的 netfilter 框架。netfilter 是一个强大的网络过滤框架,它允许用户在内核级别上对网络流量进行过滤、路由和其他操作。iptables 是 netfilter 的一个扩展工具,它提供了基于表格的防火墙规则管理方式,可以配置多个表格和多个链的规则。
iptables 的规则是基于 IP 地址、端口号、协议等条件进行匹配的。当一个数据包到达 Linux 系统时,它会根据一系列的规则进行检查。如果数据包符合某个规则的条件,那么就会执行该规则所定义的操作。否则,数据包将继续传递到下一个规则进行检查。
iptables 的规则可以定义在多个表格中,每个表格中可以包含多个链。常用的表格有 filter、nat、mangle、security 等,常用的链有 INPUT、OUTPUT、FORWARD 等。每个链都有自己的默认策略,例如允许所有流量通过或拒绝所有流量通过。用户可以在链中添加自定义的规则,以实现更细粒度的控制。
总之,iptables 是一个功能强大的 Linux 防火墙工具,它基于 netfilter 框架实现,可以配置多个表格和多个链的防火墙规则。通过使用 iptables,用户可以更好地保护 Linux 系统免受网络攻击和非法访问的威胁。

iptables场景举例

场景:公司内部网络,需要通过防火墙限制外部访问,仅允许特定 IP 地址访问公司内部服务器。
操作步骤:
1.登录到公司内部服务器的 Linux 系统中,并以 root 用户身份执行以下命令查看当前的 iptables 规则:

iptables -L

2.输入以下命令,允许来自特定 IP 地址(例如 192.168.0.1)的所有流量通过防火墙

iptables -A INPUT -s 192.168.0.1 -j ACCEPT

3.输入以下命令,拒绝来自其他所有 IP 地址的流量:

iptables -P INPUT DROP

4.输入以下命令,保存当前的 iptables 规则:

iptables-save > /etc/iptables/rules.v4

5.确认规则已经生效:

iptables -L -n -v

以上示例中,我们通过 iptables 添加了一条规则,允许来自特定 IP 地址的流量通过防火墙,并设置了默认策略为拒绝所有流量。然后保存了规则并确认生效。这样,只有来自特定 IP 地址的流量可以通过防火墙并访问公司内部服务器。

使用iptables 添加一些放行的端口

假设我们要添加两个端口,一个是 HTTP 端口 80,另一个是 HTTPS 端口 443。
1.登录到 Linux 服务器上,并以 root 用户身份执行以下命令,允许来自特定 IP 地址的所有流量通过防火墙:

iptables -A INPUT -s <IP地址> -j ACCEPT

将 <IP地址> 替换为允许访问的 IP 地址。
2.输入以下命令,添加规则以允许来自特定端口的流量通过防火墙:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT  
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

上述命令中,我们添加了两条规则,分别允许来自 TCP 端口 80 和 443 的流量通过防火墙。
3.如果需要添加其他端口,可以按照相同的格式添加相应的规则。例如,如果要添加 FTP 端口 21,可以使用以下命令:

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

4.输入以下命令,保存当前的 iptables 规则:

iptables-save > /etc/iptables/rules.v4

5.确认规则已经生效:

iptables -L -n -v

上述示例中,我们添加了三条规则,分别允许来自 HTTP、HTTPS 和 FTP 端口的流量通过防火墙。请根据实际需求修改规则中的 IP 地址和端口号.

iptables规则的修改

1.查看当前的 iptables 规则:

iptables -L

2.如果要修改特定链中的规则,可以使用以下命令:

iptables -R <chain> <rule-num>

其中, 是要修改规则的链的名称, 是要修改的规则的编号。例如,要修改 INPUT 链中的第一条规则,可以使用命令 iptables -R INPUT 1。

如果要删除特定链中的规则,可以使用以下命令:

iptables -D <chain> <rule-num>

其中, 是要删除规则的链的名称, 是要删除的规则的编号。例如,要删除 INPUT 链中的第一条规则,可以使用命令 iptables -D INPUT 1。
如果要清空所有 iptables 规则,可以使用以下命令:

iptables -F  
iptables -X  
iptables -Z  
iptables -t nat -F  
iptables -t nat -X  
iptables -t nat -Z  
iptables -t mangle -F  
iptables -t mangle -X  
iptables -t mangle -Z
参数详解:
iptables -F:清空所有过滤表中的规则。过滤表是 iptables 中用于定义网络流量过滤规则的数据结构。
iptables -X:删除所有非默认的链(chain)。链是 iptables 中用于组织和执行规则的数据结构。
iptables -Z:清空所有过滤表中的计数器和日志。计数器用于记录匹配规则的网络流量数量,日志用于记录匹配规则的网络流量信息。
iptables -t nat -F:清空所有网络地址转换(NAT)表中的规则。NAT 表用于定义网络地址转换规则,例如端口转发和网络地址转换。
iptables -t nat -X:删除所有非默认的 NAT 链(chain)。
iptables -t nat -Z:清空所有 NAT 表中的计数器和日志。
iptables -t mangle -F:清空所有修改数据包(mangle)表中的规则。mangle 表用于修改网络数据包的头部信息,例如更改 IP 地址或端口号。
iptables -t mangle -X:删除所有非默认的 mangle 链(chain)。
iptables -t mangle -Z:清空所有 mangle 表中的计数器和日志。

上述命令将清空所有的 iptables 规则、计数器、日志等。请谨慎使用该命令。

iptables端口的转发场景举例

iptables 端口转发是一种网络流量过滤技术,它可以将网络流量从一种协议和端口号转发到另一种协议和端口号。以下是一个简单的 iptables 端口转发场景示例:
假设有一台服务器运行着 HTTP 服务,监听在 192.168.10.194 的 80 端口。现在需要将来自外部网络(例如互联网)的 HTTP 流量转发到该服务器的 10.1.1.2 的 8080 端口上。也就是说,外部网络请求访问 192.168.10.194:80 时,需要将其转发到 192.168.10.194:10.1.1.2:8080。
以下是实现该转发场景的 iptables 命令:
1.在 PREROUTING 链中,将目标地址为 192.168.10.194 的流量转发到 10.1.1.2 的 8080 端口

iptables -t nat -A PREROUTING -d 192.168.10.194 -p tcp --dport 80 -j DNAT --to-destination 10.1.1.2:8080

2.在 POSTROUTING 链中,将源地址为 10.1.1.2 的流量目标地址改为 192.168.10.194:

iptables -t nat -A POSTROUTING -s 10.1.1.2 -d 192.168.10.194 -p tcp --dport 80 -j SNAT --to-source <公网IP地址>

其中 <公网IP地址> 是服务器的公网 IP 地址。
通过以上两条 iptables 命令,就实现了将来自外部网络的 HTTP 流量转发到服务器的 10.1.1.2 的 8080 端口上。

iptables 的OUTPUT

iptables 的 OUTPUT 链表用于处理从本机发出的数据包。以下是一个 OUTPUT 链表的示例场景:
假设有一台服务器运行着 Web 应用程序,同时也有一个 SSH 服务器。当用户通过浏览器访问该服务器的 Web 应用程序时,浏览器会向服务器的 80 端口发送 HTTP 请求。此时,OUTPUT 链表可以用于限制只有来自本机的请求才能访问服务器的 80 端口,而其他外部请求则被拒绝。
以下是实现该场景的 iptables 命令:
1.在 OUTPUT 链表中,允许本机发送的所有流量通过:

iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT

2.在 INPUT 链表中,拒绝所有目标地址不是本机的流量:

iptables -A INPUT -p tcp ! --dhost <服务器IP地址> -j DROP

通过以上两条 iptables 命令,就实现了只有来自本机的请求才能访问服务器的 80 端口的限制。其中 <服务器IP地址> 是服务器的 IP 地址。

iptables的链表

iptables 有以下四个主要的链表:
INPUT:处理进入接口的数据包。
OUTPUT:处理从本机发出的数据包。
FORWARD:处理被路由转发过的数据包。
POSTROUTING:在数据包被路由之后进行修改。
此外,iptables 还有两个内置的链:
PREROUTING:在数据包进入接口之前进行修改。
POSTROUTING:在数据包被路由之后进行修改。
这些链表可以用来构建复杂的防火墙规则,以实现网络流量的控制和安全防护。

iptables链表功能

iptables 链表用于构建 iptables 防火墙规则,具有以下功能:
数据包过滤:链表可以过滤进入或离开接口的数据包,根据数据包的源地址、目标地址、协议类型等因素决定是否允许数据包通过。
数据包转发:链表可以实现数据包转发,将数据包从一个接口转发到另一个接口,或者将数据包从一个网络转发到另一个网络。
网络地址转换(NAT):链表可以实现网络地址转换,例如将私有 IP 地址转换为公网 IP 地址,或者将公网 IP 地址转换为私有 IP 地址。
数据包修改:链表可以对数据包进行修改,例如修改数据包的源地址、目标地址、端口号等。
数据包追踪:链表可以追踪数据包的传输过程,例如记录数据包是否已经通过防火墙、是否已经被修改等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT技术伪专家

你的认可是对我最大的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值