详解Linux iptables 命令

详解Linux iptables 命令

Iptables是Linux管理员用来设置IPv4包过滤条件和NAT的命令行工具。本文详细介绍了Linux的iptables命令,很不错,有一定的参考价值。有需要的请参考。

Iptables是Linux管理员用来设置IPv4包过滤条件和NAT的命令行工具。Iptables工具运行在用户模式,主要是设置各种规则。而netfilter运行在内核状态,执行那些设置好的规则。

查看 iptables 的链和规则

查看规则的命令格式为:

iptables [-t表] [-L] [-nv]

-t:后跟表,如nat或filter。如果省略此项,将使用默认过滤器。

-L:列出某个表的所有链或者某个链的规则。

-n:直接显示IP会快很多。

-v:列出更多信息,包括通过此规则的数据包总数、相关网络接口等。

列出过滤表输入链的规则:

$ sudo iptables -L输入

列出nat表的三个链的规则:

$ sudo iptables -t nat -L -n

列出过滤表的三个链的规则:

$ sudo iptables -L

红框中的内容是链的名称及其默认策略。过滤器表中所有链的默认策略是接受。红框下面的线代表什么?

目标:表示采取的行动。接受意味着释放,拒绝意味着拒绝,丢弃意味着丢弃数据包。

端口:代表使用的协议,主要包括tcp、udp、icmp。

Opt:附加选项说明。

Source:规则指向的源IP。

目标:规则的目标IP。

因为默认情况下没有添加自定义规则,所以上图中的所有行下面都是空的。

清除本机防火墙规则

清除规则的命令格式如下:

iptables [-t tables] [-FXZ]

-F:清除所有已建立的规则。

-X:删除所有用户定义链(表)

-Z:将所有链计数和流量统计清除为零。

如果我们想要制定一套防火墙规则,我们通常会先清除现有的规则,然后从头开始创建新的规则。让我们清除本机过滤器表中的所有规则:

$ sudo iptables -F

$ sudo iptables -X

$ sudo iptables -Z

定义默认策略(policy)

如果数据包与链中的任何规则都不匹配,将为该数据包实施链的默认策略,默认策略可以是ACCEPT或DROP。

链中默认策略的存在允许我们在设计防火墙时有两种选择:

将默认策略设置为丢弃所有数据包,然后添加一个规则来接受来自可信IP地址的数据包,或来自我们的服务侦听的端口(如bittorrent、FTP服务器、Web服务器、Samba文件服务器等)的数据包。

将默认策略设置为接受所有数据包,然后添加一个丢弃特定数据包的规则。比如来自一些恶意IP的数据包,或者访问一些我们不提供公共服务的端口的数据包。

通常,上面的第一个选项用于输入链,因为我们想要控制访问资源。而第二个选项经常用在输出链中,因为我们通常信任离开机器的数据包(数据包来自机器)。

设置默认策略的命令格式如下:

iptables[-t table]-P[输入,输出,转发][接受,丢弃]

P选项用于定义默认策略。注意这是大写字母p,ACCEPT表示接受数据包,DROP表示丢弃数据包。

一般来说,我们会把过滤表的输入链的默认策略做得更严格一些,比如设置为DROP。而转发和输出可以放松并设置为接受。例如,我们可以通过以下命令将过滤器表的输入链的默认策略设置为DROP:

$ sudo iptables -P输入下降

添加规则

我们可以通过规则匹配数据包,具体匹配条件包括IP、网段、网络接口、传输协议(tcp、udp等。).

添加规则的命令格式如下:

iptables[-ai chain][-io interface][-p协议] [-s源IP] [-d目标IP]-j[接受、丢弃、拒绝、记录]

-A:为一个规则链添加一个规则,新添加的规则排在已有规则之后。

-I:为一个规则链插入一个规则,可以指定链中新插入的规则的序号。如果不指定序号,新规则将成为第一个规则。

-i:指定数据包进入的网络接口,如eth0、lo等。需要和输入链配合使用。

-o:指定传出数据包的网络接口,它需要与输出链一起使用。

-p:指定此规则适用于哪个网络协议(常用的协议有tcp、udp、icmp和适用于所有协议的所有手段)。

-s:指定数据包的源IP/网段。您可以指定一个IP,如192.168.1.100,也可以指定一个网段,如192.168.1.0/24。还是可以通过的!表示没有,比如!192.168.1.0/24表示192.168.1.0/24以外的数据包。

-d:指定数据包的目的IP/网段,其他同-s选项。

-j:指定匹配成功后的行为,主要包括接受、丢弃、拒绝和日志。

我们来看几个例子。

打开本地接口lo:

$ sudo iptables -A输入-i lo -j接受

上述命令假设l0接口是一个可信设备,所有进出该接口的数据包都将被接受。

请注意,在上面的命令中没有设置-s和-d等参数。事实上,没有指定的参数表明可以接受该参数的任何值。

完全释放一个接口。

类似于lo接口,如果您完全信任一个接口,您可以像设置lo一样设置它:

$ sudo iptables -A输入-i eth1 -j接受

仅接受来自内部网网段的数据包:

$ sudo iptables -A输入-i eth2 -s 192.168.10.0/24 -j接受

接受/丢弃来自指定IP的数据包:

$ sudo iptables -A输入-i eth3 -s 192.168.100.5 -j接受

$ sudo iptables-A INPUT-I eth 3-s 192 . 168 . 100 . 6-j DROP

然后看看过滤表的规则:

$ sudo iptables -L -v

Iptables-save命令提供了另一种风格的输出:

$ sudo iptables-保存

在规则中使用端口号。

在我们添加的规则中,经常需要指定网络协议(tcp,udp等。)和相关的端口号。基本命令格式如下:

iptables[-ai chain][-io interface][-p TCP,UDP] [-s源IP] [ - sport端口范围] [-d目标IP][-d端口范围]-j[接受,丢弃,拒绝]

- sport:受限源的端口号,可以是单个端口,也可以是一个范围,比如1024:1050。

- dport:受限目标的端口号。

注意,因为只有 tcp 协议和 udp 协议使用了端口号,所以在使用 --sport 和 --dport 时,一定要指定协议的类型(-p tcp 或 -p udp)。

这里有几个例子。

丢弃所有通过tcp协议访问本机端口21的数据包:

$ sudo iptables-A INPUT-I eth 0-p TCP-dport 21-j DROP

从访问本地ssh端口的192.168.1.0/24的端口1024:65535丢弃数据包:

$ sudo iptables-A INPUT-I eth 0-p TCP-s 192 . 168 . 1 . 0/24-sport 1024:65535-d port ssh-j DROP

通用插件模块

在linux内核2.2之前,使用ipchains管理防火墙时,需要控制数据包的进出方向。

例如,当连接到远程主机的端口22时,必须设置两条规则:

本地端口1024:65535到远程端口22必须释放(输出链);

远程主机端口22到本地端口1024:65535必须释放(输入链);

这个很麻烦。例如,如果您想要连接10台远程主机的22个端口,即使您的本地输出设置为ACCEPT,

您仍然需要添加10个输入接受规则,以接受来自这10台远程主机的22端口数据包(输入的默认策略是DROP)。

Iptables解决了这个问题,它会通过一个状态模块对其进行分析:这个数据包是您想要输入的对您发送的请求的响应吗?如果判断是对自己请求的响应,就释放这个包。

使用状态模块的基本命令格式如下:

iptables-输入[-m状态] [ -状态无效、已建立、新、相关]

-m:指定iptables的插件模块。通用模块包括:

状态:状态模块

Mac:处理网卡硬件地址的模块。

- state:指定数据包的状态。常见的状态有:

无效:无效的数据包状态

已建立:成功连接的数据包状态。

NEW:要为其建立新连接的数据包的状态。

相关:这是最常用的一个。意味着该数据包与我们的主机发送的数据包相关。

这里有几个例子。

只要连接已经建立或相关数据包被接受:

$ sudo iptables -A输入-m状态-状态相关,ESTABLISHED -j接受

只要是非法数据包,就将其丢弃:

$ sudo iptables-A INPUT-m state-state无效-j DROP

保存iptables的配置

请注意,我们通过iptables命令设置的规则存储在内存中,这意味着当系统重新启动时,所有配置都将丢失。

我们可以通过iptables-save命令将iptables的配置保存到一个文件中:

$ sudo touch /etc/iptables.conf

$ sudo chmod 666/etc/iptables . conf

$ sudo iptables-save/etc/iptables . conf

必要时,通过iptables-restore命令导入文件中的配置信息:

$ sudo iptables-restore/etc/iptables . conf

总结

Iptables是一个复杂的命令,本文只介绍一些基本用法。接下来,我们将介绍如何通过iptables构建基本的防火墙配置和NAT服务器。

参考:

netfilter/iptables文档

iptables手册页

Ubuntu IptablesHowTo

Iptables教程

总结

以上是边肖为您介绍的Linux iptables命令。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!

详解Linux iptables 命令