当前位置:   article > 正文

Linux 防火墙 iptables 详解_linux iptables

linux iptables

1. 什么是防火墙

防火墙是一种计算机网络安全设备,用于保护计算机和网络不受未经授权访问。它通过控制网络上进出数据流的流量,来控制通信的访问。当阻止外部网络访问或从内部网络到外部网络的访问时,防火墙就会发挥作用。

防火墙可分为软件防火墙和硬件防火墙两种类型。其中,软件防火墙是一种安装在操作系统上的防火墙,如 iptables、Firewalld 和 UFW 等,而硬件防火墙是一种独立于计算机和操作系统之外的设备,如 Cisco ASA 和 Juniper SRX。

2. iptables 概述

Iptables 是一个用户空间程序,可以用于设置和管理 Linux 操作系统的内核级防火墙。它通过表、链和规则组成,可以灵活地根据不同的需求进行配置。

iptables 具有以下特点:

  • Iptables 作为内核级别的防火墙,具有高效、稳定、安全等优点。
  • Iptables 的表、链、规则结构非常灵活,可适应各种不同的网络环境和应用场景。
  • Iptables 相对于其他防火墙工具而言比较容易学习和掌握,并且拓展性非常强。

3. iptables 的组成

Iptables 的核心是由表(table)、链(chain)和规则(rule)三部分组成的。

3.1 表(Table)

在 iptables 中,表是一个规则的集合,每个表都包含若干个链和一些相关的规则。常用的五种 table 如下:

  1. raw: iptables 默认被加载的是 raw 表,不做特殊处理。
  2. mangle:这个表主要对数据包进行更深入的处理,如标记包、TOS(服务类型)等。本表根据数据包的内容修改一些字段的值。
  3. nat:用于网络地址转换。
  4. filter:主要用来过滤、丢弃不符合规则的数据包。
  5. security:用于 MAC 安全模块与 iptables 链式结构的桥接。

3.2 链(Chain)

在 iptables 中,链是一个规则的集合,每个链都包含一些相关联的规则。Linux 防火墙中默认存在的 3 个链:INPUT、FORWARD 和 OUTPUT。

3.2.1 INPUT 链

Input 链主要对进入本机的网络数据包进行处理,如果不符合某些特定规则,则直接被丢弃。

3.2.2 FORWARD 链

Forward 链主要对不是发往本机,而是需要转发到其他网段的网络数据包进行处理。

3.2.3 OUTPUT 链

Output 链主要对本机发出去的网络数据包进行处理,同样的,如果不符合某些特定规则,则直接被丢弃。

3.3 规则(Rule)

在 iptables 中,规则是一个集合,通过它们来定义过滤器的行为,包括源地址、目标地址、端口号、协议等。每个规则由以下几个部分组成:

  1. 匹配条件:具体的过滤器规则,即匹配哪些流量。
  2. 操作代码:如果匹配成功,该执行哪些操作。
  3. 目标地址:当匹配成功后,将流量引导到哪个目标地址。

4. iptables 命令

iptables 是一种基于命令行的防火墙,用户可以通过命令行修改或临时屏蔽规则,在保证安全性的同时进行更精确和灵活的控制。下面是常用的 iptables 命令:

4.1 iptables-save 命令

保存已有配置文件,保存的方式是可以重定向到某个文件中,例如iptables-save > /etc/sysconfig/iptables

4.2 iptables-restore 命令

启动 iptables 服务后会默认读取 /etc/sysconfig/iptables 中的配置文件,用户可以通过此命令将已有规则重新装入 iptables。

4.3 iptables -L --line-numbers 命令

列出默认 filter 表中所有规则,并显示它们的行号,这对于添加和删除规则很有帮助。

4.4 iptables -A 命令

在指定的链 CHAIN 上创建一条新规则,以限制指定的端口(dport)上使用指定协议(protocol)的数据包流量。TARGET 可以是 ACCEPT、REJECT 或 DROP。例如:iptables -A INPUT -p tcp --dport 80 -j ACCEPT 表示当访问本机的 80 端口时,可以通过。

4.5 iptables -D 命令

从指定链 CHAIN 中删除一条现有规则,规则编号由 iptables -L 命令输出的行号指定。

4.6 iptables -N 命令

在 iptables 中创建一个新的用户自定义链。例如:iptables -N LOG_DROP 创建新链 LOG_DROP。

4.7 iptables -I 命令

插入一条规则到指定链(CHAIN)的特定位置(INDEX)处。此命令的其余部分与先前介绍的相同。

5. iptables 规则的语法格式

在使用 iptables 时,需要遵循一定的规则语法。iptables 规则主要由以下几个部分构成:

  • 匹配条件:必须符合匹配条件才能被命中。
  • 操作选项:当匹配成功时执行的动作,比如 ACCEPT、DROP 和 REJECT 等等。
  • 目标地址:当匹配成功后,将流量引导到哪个目标地址。

下面是 iptables 规则的语法格式:

iptables [-t table] [-A chain] [-I chain [rulenum]] [-D chain rulenum] [-R chain rulenum] [-j target] [match-expression]
  • 1

其中:

  • -t, --table 表示指定要操作哪个表。iptables 默认使用 filter 表,如果没有明确指定,则会被当作 filter 表来处理。
  • -A, --append 是添加规则,向指定链中增加一条新规则,默认放在链尾。
  • -I, --insert 是插入规则,可以将规则插入到链的任意位置。
  • -D, --delete 是删除规则,可以删除指定链中的规则。
  • -R, --replace 是替换规则,可以直接替换当前规则。
  • -j, --jump 是动作选项,表示需要执行的操作,比如 ACCEPT、DROP 或 REJECT 等。

iptables 规则的匹配条件 match-expression 由多个关键字组成,各个关键字的含义如下:

  • -p 指定协议,可以是 all、tcp、udp、icmp 等。
  • –sport 和 --dport 分别指定源端口和目的端口。
  • -s 和 -d 分别指定源地址和目的地址。
  • -i 和 -o 分别指定数据包的输入接口和输出接口。
  • –state 状态匹配条件,可以是 NEW、ESTABLISHED 或 RELATED。
  • -m 按照数据包的类型进行匹配,如 tcp、udp、icmp 等。

6. iptables 配置实例

下面我们来举一个 iptables 配置实例,以实现一个简单的安全策略:允许 SSH 和 HTTP/HTTPS 流量通过 iptables,并禁止其他所有流量。

6.1 设置默认策略

首先,我们需要设置默认的策略。iptables 共有三个默认策略:DROP、REJECT 和 ACCEPT。DROP 表示直接拒绝,不回应,相当于向黑洞中丢弃;REJECT 表示直接拒绝,并返回一个 ICMP 错误信息,相当于明确地告诉对方该端口不可用;ACCEPT 表示直接接受数据包。

我们需要设置默认策略为 DROP,这样任何不符合规则的流量都将被丢弃。

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
  • 1
  • 2
  • 3
  • -P 选项表示设置默认策略,后面跟着需要设置的链名。
  • INPUT 链指向来自外部的包、传入本地机器的包以及因为非法转发被丢弃的包。
  • FORWARD 链指向转发包。
  • OUTPUT 链指向离开本地机器的包。

6.2 允许 SSH 连接

SSH 端口默认为 22。我们需要允许来自指定 IP 地址的流量通过 iptables。假设您希望允许 IP 地址为 192.168.1.100 的机器访问 SSH 端口。

iptables -A INPUT -p tcp -s 192.168.1.100/32 --dport 22 -j ACCEPT
  • 1

上述命令中,-A 选项表示添加规则,-p tcp 表示协议为 TCP,-s 192.168.1.100/32 表示源地址为 IP 地址为 192.168.1.100,--dport 22 表示目的端口为 22。最后的 -j 将匹配的流量引导到 ACCEPT 规则。

6.3 允许 HTTP/HTTPS 连接

HTTP 端口默认为 80,HTTPS 端口默认为 443。我们需要允许来自任何 IP 地址的流量访问 HTTP 和 HTTPS 端口。

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
  • 1
  • 2

上述命令中,-A 选项表示添加规则,-p tcp 表示协议为 TCP,--dport 80--dport 443 分别表示目的端口为 80 和 443。最后的 -j 将匹配的流量引导到 ACCEPT 规则。

6.4 其他流量禁止通过

我们已经设置了需要允许通过的 SSH、HTTP 和 HTTPS 流量。现在,我们需要禁止所有其他流量通过 iptables。

iptables -A INPUT -j DROP
iptables -A FORWARD -j DROP
iptables -A OUTPUT -j DROP
  • 1
  • 2
  • 3

上述命令中,最后的 -j DROP 表示将匹配的流量引导到 DROP 规则。

7. 总结

Iptables 是 Linux 下的一款内核级防火墙软件,由表、链和规则三部分组成,具有高效、稳定、安全等优点。iptables 可以根据不同的需求进行配置,支持多种协议、条件和动作选项,可以灵活地根据不同的需求进行配置。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/631797
推荐阅读
相关标签
  

闽ICP备14008679号