什么是iptables(1)

什么是iptables

iptables是用于监控进/出服务器流量的一个工具,iptables使用一个叫做table的结构,而这些tables包含了一系列规则(set of rules),我们称这些规则为chain,chain会过滤进/出服务器的数据包(data packets)。

当一个数据包与一个chain相匹配时,会被赋予一个target,而这个target可能是另一个chain,或者可能是以下几种特殊值:

  • ACCEPT:允许数据包通过
  • DROP:不允许数据包通过
  • RETURN:停止数据包在chain链中传输,并告知返回至前一个chain

而在iptables中有一个默认的table,我们称之为filter,它包含了以下3个chain:

  • INPUT:控制发送至服务器的数据包
  • FORWARD:过滤发送至服务器的数据包,用于转发至其他地方
  • OUTPUT:过滤由服务器发出去的数据包

安装iptables

注意:iptables执行时均在root用户下进行。

一般来说,iptables是默认安装在linux系统中的,当然也可以手动安装:

# sudo apt-get update
# sudo apt-get install iptables

检查iptables的版本:

# sudo iptables -V
iptables v1.4.21

查看当前iptables的信息:

# sudo iptables -L -v

在这里,-L用于列出所有的规则,而-v用于显示详细的信息。

如何自定义iptables规则

自定义一个新的规则,相当于是向其中添加一个chain,为此,我们需要使用-A这个选项(其表示append)。此外,还有一些其他选项参数,介绍如下:

  • -i:interface,后面添加想要过滤的网卡名称,比如eth0lodocker0等等;
  • -p:protocol,后面添加想要过滤的网络协议名称,比如tcpudpicmp等等,此外还可以使用关键词all表示选择所有的协议;
  • -s:source,表示数据流量的源地址,可以在其后面hostname或ip地址;
  • -dport:destination port,目标地址的端口号,比如https对应的是443等;
  • -j:target,后面跟着target的名字(即ACCEPT, DROP, RETURN);

因此,添加一条新的规则,使用如下命令:

# sudo iptables -A <chain> -i <interface> -p <protocol(tcp/udp)> -s <source> --dport <port>  -j <target>

比如说,我们想要阻挡指定ip地址的访问,则可以通过如下命令简历规则:

# sudo iptables -A INPUT -s 192.168.1.3 -j DROP

设置后,由IP地址为192.168.1.3发送过来的数据包就会被丢弃掉。

此外,我们还可以指定一个IP地址范围,比如,对于192.168.1.100-192.168.1.200这个范围内的IP地址,我们都要将其过滤掉,则可以使用如下命令进行创建:

# sudo iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP

注意,这里必须指定-m选项以及iprange模式,并使用--src-range参数,后面跟着IP地址范围,并且两个IP地址间必须用-连着。

如果想要删除一条规则呢?

首先,我们需要查看当前可用的规则,命令如下:

# sudo iptables -L --line-numbers

然后,我们将会看到:

接着,就可以执行删除操作了。为了删除一个规则,需要指定对应的chain和标号(即num),比如,我们要删除INPUT链的第3条规则,则可以执行如下命令:

# sudo iptables -D INPUT 3

持久化自定义的iptables规则

新建的iptables规则是保留在内存中的,重新启动机器后数据就消失了,因此,我们要对其进行持久化。只要执行如下命令即可:

# sudo /sbin/iptables-save

这一命令会将当前的规则保存至系统的配置文件中,当机器重启时,会去读取这份配置文件来还原iptables。

iptables进阶介绍

前面经过一些简单的操作,已经对iptables有了具象的了解。但事实上,iptables远比想象的复杂的多。前面的例子中,我们只简单介绍了Filter Table这一种table,接下来,我们会进一步深入的介绍iptables。

我们重新认识一下iptables,这到底是个什么玩意儿呢?

简单的说,iptables是构筑Linux系统的防火墙的基础,我们可以自定义设置一些规则,用于数据包的过滤。但是,其功能可不只是过滤,事实上,iptables可以理解为:

Tables which has Chains and the Chains which contains Rules.

即Tables --> Chains --> Rules,而rules用于控制数据包的input/output。

首先,iptables包含3种table,分别是: Filter TableNAT tableMangle table

  • Filter table:filter是iptables默认的table,就如我们上面演示的,我们在对filter table进行操作时,不需要指定table的名称。如果对NAT table或Mangle table进行操作,则必须要指定(通过-t选项)。前面执行过的命令iptables -L ,相当于iptables -t filter -L
    • INPUT chain
    • FORWARD chain
    • OUTPUT chain
  • NAT table:NAT即Network address translation,网络地址转换。如果想要操作NAT table,则必须要指定名字,比如iptables -t nat -L
    • PREROUTING chain:在数据包被路由之前
    • POSTROUTING chain:在数据包被路由之后
    • OUTPUT chain
  • Mangle table:
    • PREROUTING chain
    • OUTPUT chain
    • FORWARD chain
    • INPUT chain
    • POSTROUTING chain

iptables总结如下:


参考:

  1. https://www.hostinger.in/tutorials/iptables-tutorial#What-is-Iptables-and-How-Does-It-Work
  2. https://www.crybit.com/what-is-iptables-in-linux/
posted @ 2020-08-15 19:37  kkbill  阅读(1389)  评论(0编辑  收藏  举报