如何在Linux中使用iptables命令

  介绍

这篇文章将为大家详细讲解有关如何在Linux中使用iptables命令,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

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

<强>查看iptables的链和规则

查看规则的命令格式为:

<代码> iptables [- t表][- l] (nv)

- t:后面接表,例如NAT或过滤器,若省略此项目,则使用默认的过滤器
- l:列出某个表的所有链或某个链的规则
- n:直接显示IP,速度会快很多
- v:列出更多的信息,包括通过该规则的数据包总位数,相关的网络接口等

列出滤波器输入链表的规则:

<代码> $ sudo iptables - l输入

列出NAT表三条链的规则:

<代码> $ sudo iptables - t NAT - l - n

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

<代码> $ sudo iptables - l

如何在Linux中使用iptables命令

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

目标:代表进行的动作,接受是放行,拒绝是拒绝,下降则是丢弃数据包。
端口:代表使用的协议,主要有tcp、udp和icmp三种。
选择:额外的选项说明。
来源:规则针对的来源IP。
目的地:规则针对的目标IP。

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

<强>清除本机防火墙规则

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

<代码> iptables [- t表][-FXZ]

- f:清除所有已制定的规则
- x:删除所有使用者自定义的链(其是表)
- z:将所有的链的计数与流量统计都清零

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

,美元sudo  iptables  - f   美元,sudo  iptables  - x   $ sudo iptables -Z

定义默认策略(policy)

如果一个数据包没有匹配到一个链中的任何一个规则,那么将对该数据包执行这个链的默认策略(default policy),默认策略可以是 ACCEPT 或 DROP。
链中默认策略的存在使得我们在设计防火墙时可以有两种选择:

设置默认策略 DROP 所有的数据包,然后添加规则接受(ACCEPT)来自可信 IP 地址的数据包,或访问我们的服务监听的端口的数据包,比如 bittorrent、FTP 服务器、Web 服务器、Samba 文件服务器等等。

设置默认策略 ACCEPT 所有的数据包,然后添加规则丢弃(DROP)特定的数据包。比如来自一些恶意 IP 的数据包,或访问某些端口的数据包,在这些端口上我们并没有提供公开的服务。

一般情况下,上面的第一个选项用于 INPUT 链,因为我们希望对访问的资源进行权限控制。而第二个选项常用于 OUTPUT 链,因为我们通常信任离开机器的数据包(该数据包来自本机)。

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

iptables [-t table] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]

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

一般情况下,我们会把 filter 表的 INPUT 链的默认策略制订的严格一些,比如设为 DROP。而 FORWARD 和 OUTPUT 可以宽松些,设为 ACCEPT。比如我们可以通过下面的命令把 filter 表的 INPUT 链的默认策略设置为 DROP:

$ sudo iptables -P INPUT DROP

如何在Linux中使用iptables命令

添加规则

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

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

iptables [-AI chain] [-io interface] [-p 协议] [-s 来源 IP] [-d 目标 IP] -j [ACCEPT,DROP,REJECT,LOG]
-A:针对某个规则链添加一条规则,新添加的规则排在现有规则的后面。
-I:针对某个规则链插入一条规则,可以为新插入的规则指定在链中的序号。如果不指定序号,则新的规则会变成第一条规则。
-i:指定数据包进入的那个网络接口,比如 eth0、lo 等,需要与 INPUT 链配合使用。

如何在Linux中使用iptables命令