Linux 中 iptables 介绍,用途和示例

iptables是 Linux 系统中用于设置、维护和检查网络数据包过滤规则的工具。它在网络安全和流量管理方面起着重要作用。

iptables是 Linux 系统中用于设置、维护和检查网络数据包过滤规则的工具。它在网络安全和流量管理方面起着重要作用。

主要用途

网络安全

  • 防火墙功能:可以根据各种条件(如源 IP 地址、目标 IP 地址、端口号、协议等)过滤网络数据包,阻止或允许特定的流量进入或离开系统。例如,可以阻止来自特定 IP 地址或 IP 地址范围的恶意流量,或者只允许特定端口的流量通过,以保护系统免受网络攻击。

  • 网络访问控制:可以限制特定用户或用户组对网络资源的访问,增强系统的安全性。

网络地址转换(NAT)

  • SNAT(Source Network Address Translation):修改从本地网络发出的数据包的源 IP 地址,通常用于让内部网络中的多个主机共享一个公网 IP 地址访问外部网络。

  • DNAT(Destination Network Address Translation):修改传入数据包的目标 IP 地址和(可选)目标端口,用于将外部网络的请求转发到内部网络中的特定服务器。

流量整形和限速

可以通过设置规则来限制特定类型的流量的带宽使用,确保关键业务的网络资源得到优先保障,同时防止某些应用程序占用过多的带宽。

基本概念

表(Tables)

iptables有多个表,每个表用于不同的目的:

  • filter表:主要用于数据包过滤,是最常用的表,决定是否允许数据包通过或丢弃。

  • nat表:用于网络地址转换。

  • mangle表:用于修改数据包的 IP 头信息,可用于实现一些特殊的网络需求。

链(Chains)

每个表包含多个链,链是一系列规则的集合:

  • INPUT链:用于处理进入系统的数据包。

  • OUTPUT链:用于处理由系统生成的数据包。

  • FORWARD链:用于处理经过系统但不是由系统生成或发往系统的数据包。

  • PREROUTING链(在nat表中):在数据包进行路由决策之前处理数据包,常用于 DNAT。

  • POSTROUTING链(在nat表中):在数据包离开系统进行路由之后处理数据包,常用于 SNAT。

示例

阻止特定 IP 地址的访问

以下命令将阻止来自 IP 地址192.168.1.100的所有流量:

sudo iptables -A INPUT -s 192.168.1.100 -j DROP

允许特定端口的访问

允许外部网络对本地系统的端口80(HTTP)的访问:

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

实现 SNAT

假设内部网络使用192.168.1.0/24网段,通过公网 IP 地址X.X.X.X访问外部网络:

sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source X.X.X.X

实现 DNAT

将外部网络对公网 IP 地址X.X.X.X的端口8080的访问转发到内部网络中 IP 地址为192.168.1.100的服务器的端口80:

sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80

注意事项

  • 规则顺序很重要:iptables 按照规则的顺序依次处理数据包,所以规则的顺序会影响最终的结果。确保将更具体的规则放在更通用的规则之前。

  • 持久化规则:默认情况下,iptables 规则在系统重启后会丢失。可以使用工具如 iptables-persistent 来使规则在系统启动时自动加载。

  • 谨慎使用:在配置 iptables 规则时要小心,错误的配置可能会导致网络连接中断或安全漏洞。在进行重要的配置更改之前,最好先测试规则的效果。


睡眠和休息丧失了时间,却取得了明天工作的精力。 —— 毛泽东
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号