zoukankan      html  css  js  c++  java
  • 什么是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/
  • 相关阅读:
    1300 · 巴什博弈
    1 · A + B 问题
    37 · 反转一个3位整数
    145 · 大小写转换
    Spring-Boot整合freemarker引入静态资源css、js等
    Monkey API学习与脚本编写小记
    Mac终端快速启动uiautomatorviewer
    Mac解决使用uiautomatorviewer会报错:./uiautomatorviewer 03:56:07 E/Screenshot: Unsupported protocol: 2
    charles抓包https乱码问题解决-转载
    mac解决adb devices命令找不到真机设备
  • 原文地址:https://www.cnblogs.com/kkbill/p/13510035.html
Copyright © 2011-2022 走看看