iptables

  • 重温了一下网络,感觉大学时期等于白学(😂)
  • 从头来记录一下我们是怎么上网的吧

PPPoE

  • 家里办了宽带要上网,没有 ip 就没法上网,所以第一步就是 pppoe
  • pppoe是拨号获得IP,并且每次拨号后你的IP都会发生变化
  • 一般是运营商提供的光猫进行拨号
  • 一般获得ip的方式有如下几种
    • 拔号 :以账号和密码为依据,获得IP不固定
    • 静态 :设置好ip
    • 动态(DHCP):自动获取IP地址,只在局域网内才会用得到

DHCP

  • 家里路由器好了之后,电脑网线插入路由器,发现本机上没有任何 IP 数据设定,就会通过 DHCP 协议获取一个ip
  • 具体过程

ARP

  • 地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址。
  • 在网络通信中,主机和主机通信的数据包需要依据OSI模型从上到下进行数据封装,当数据封装完整后,再向外发出。所以在局域网的通信中,不仅需要源目IP地址的封装,也需要源目MAC的封装。
  • 当上层协议需要IP对IP通信时,请求主机需要构造数据包.但在此之前,请求主机还需要发送一个ARP请求包,向同一广播域中的所有主机请求被请求主机的MAC地址.随后,请求主机将数据包构造完成后发送给此广播域的二层设备,由它根据MAC地址决定此数据包的去向
  • 这个请求主机发送的ARP请求,基本上就是在问:”大家好,我的IP地址是XX.XX.XX.XX,MAC地址是XX.XX.XX.XX.XX.XX,我需要向IP地址为YY.YY.YY.YY的家伙发些东西,但我不知道它的硬件地址,你们谁有这个IP地址的,可否回复给我你的MAC地址?”
  • 请求主机发送的ARP数据包将被广播给同一广播域的所有设备.不是这个IP地址的设备将简单地丢弃这个数据包,而拥有这个IP地址的设备将发送一个ARP响应.就像是说:”你好,我就是你所找的那个拥有IP地址为YY.YY.YY.YY的,我的MAC地址为YY.YY.YY.YY.YY.YY.”
  • 这样就可以进行通信了
  • 具体过程

route表

  • 详情
  • 访问某个ip时候,就会去查路由表,如果路由表中有匹配该ip的路由,则从对应条目后面标记的网卡出去。
  • 如果没有匹配的项,则走网关(Flags 字段为 UG)
  • 例如我们自己在家中局域网访问百度,这个ip在局域网内部肯定是没有的,则会将流量发送给关(路由器),路由器一般会有两个网卡,将我们的流量通过另外一张连接到公网的网卡发送出去。
    • 路由器收到上述数据,会进行数据转发,这儿就需要提到一个liunx内核的一个参数 net.ipv4.ip_forward
      • 出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。
      • 这个参数指定了Linux系统当前对路由转发功能的支持情况;其值为0时表示禁止进行IP转发;如果是1,则说明IP转发功能已经打开。

NAT


  • 顺道讲一讲 iptables

  • 具体操作

  • iptables的原理主要是对数据包的控制,如下图:
    iptables流程

    1. 一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转发出去。
    2. 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经 过OUTPUT链,然后到达POSTROUTING链输出。
    3. 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过 FORWARD链,然后到达POSTROUTING链输出。

规则、表和链

规则(rules)

  • 规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

链(chains)

  • 链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。

表(tables)

  • 表(tables)提供特定的功能,iptables内置了4个表,即raw表、filter表、nat表和mangle表,分别用于实现包过滤,网络地址转换和包重构的功能。
    表

RAW表

  • 只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在 某个链上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了.

filter表

  • 主要用于过滤数据包,该表根据系统管理员预定义的一组规则过滤符合条件的数据包。对于防火墙而言,主要利用在filter表中指定的规则来实现对数据包的过滤。Filter表是默认的表,如果没有指定哪个表,iptables 就默认使用filter表来执行所有命令,filter表包含了INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)在filter表中只能允许对数据包进行接受,丢弃的操作,而无法对数据包进行更改

nat表

  • 主要用于网络地址转换NAT,该表可以实现一对一,一对多,多对多等NAT 工作,iptables就是使用该表实现共享上网的,NAT表包含了PREROUTING链(修改即将到来的数据包),POSTROUTING链(修改即将出去的数据包),OUTPUT链(修改路由之前本地生成的数据包)

mangle表

  • 主要用于对指定数据包进行更改,在内核版本2.4.18 后的linux版本中该表包含的链为:INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)POSTROUTING链(修改即将出去的数据包),PREROUTING链(修改即将到来的数据包)

  • 规则表之间的优先顺序:

    1
    Raw——mangle——nat——filter
  • 规则链之间的优先顺序(分三种情况):

第一种情况:入站数据流向

  • 从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包 的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通 过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。

第二冲情况:转发数据流向

  • 来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网 关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地 址等)进行处理。

第三种情况:出站数据流向

  • 防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。