前提
由于常见都是把iptables防火墙关闭的,所以不是很多人对iptables有多少的了解,但是iptables对云计算虚拟化场景下作用还是很大的,所以有必要学习下,对于理解虚拟化网络通讯原理很有必要。(openstack、docker)

学习参考:点击访问

iptables 实现的功能是在内核中

iptables如何判断使用INPUT还是FORWARD iptables input和output_服务器


防火墙全景图,图片为学习参考网站

iptables如何判断使用INPUT还是FORWARD iptables input和output_配置文件_02


红色部分

5节点,实现防火墙规则载体,数据包传输必须经过他们才能正常传输

  • INPUT和OUTPUT控制用户空间和内核空间的进出节点
  • INPUT为外部访问服务器,比如我SSH访问服务器,服务器需要允许我通过
  • OUTPUT跟INPUT相反,是服务器访问外部
  • PREROUTING、FORWARD、POSTROUTING控制数据包的整个传输周期
  • 数据包从物理网卡进口–转发–出口

表现形式

  • 到本机某进程的报文:PREROUTING --> INPUT
  • 由本机转发的报文:PREROUTING --> FORWARD --> POSTROUTING
  • 由本机的某进程发出报文:OUTPUT --> POSTROUTING

黄色部分

4种表,表的作用就是为了制定规则,让数据包按照不同规则传输

  • filter表:负责过滤功能,最常用的表
  • nat表:网络地址转换功能,docker常用的表,作用就是使容器能联网
  • mangle表:拆解报文,做出修改,并重新封装 的功能,也就是策略路由和QOS功能,一般很少使用,由硬件实现会更好
  • raw表:关闭nat表上启用的链接追踪机制,为了提高性能(也就是NAT功能无法使用)

链接追踪机制

表链关系

链就是节点规则的集合,规则为顺序匹配,序号1开始匹配

表链就是节点的表集合,多个表都配置了规则,那么就需要分出高低优先级进行顺序匹配表规则

  • raw --> mangle --> nat --> filter(高到低优先级匹配)

规则的组成

匹配条件

  • 由网络五元组:源IP地址、目的IP地址、协议号、源端口、目的端口
  • 五元组可以随意组合符合需求的规则

处理动作

常用:

  • ACCEPT:允许数据包通过
  • DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应
  • REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息
  • SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题
  • DNAT:目标地址转换

不常用:

  • MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上
  • REDIRECT:在本机做端口映射
  • MIRROR :镜像数据包,也就是将来源 IP与目的地IP对调后,将数据包返回,进行完此处理动作后,将会中断过滤程序
  • QUEUE :中断过滤程序,将封包放入队列,交给其它程序处理
  • RETURN :结束在目前规则链中的过滤程序,返回主规则链继续过滤,如果把自订规则炼看成是一个子程序,那么这个动作,就相当于提早结束子程序并返回到主程序中
  • MARK:将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则

target也是可以自定义链

iptables如何判断使用INPUT还是FORWARD iptables input和output_服务器_03


Firewalld 新增动态功能

区域(zone)

  • 根据不同需求,而形成的默认策略,方便生产环境快速切换
  • firewalld默认出口是全放开的
  • /etc/firewalld # 用户配置文件,/usr/lib/firewalld #系统配置文件,预定义配置文件

iptables如何判断使用INPUT还是FORWARD iptables input和output_服务器_04

动静态更新技术:iptables每一个更改都需要先清除所有旧有的规则,然后重新加载所有的规则(包括新的和修改后的规则);而firewalld任何规则的变更都不需要对整个防火墙规则重新加载

服务(service)

  • 针对匹配条件增加了动态服务功能,也就是不限定于静态五元组,对于动态端口服务有很好的支持
  • /usr/lib/firewalld/services/ #服务配置文件,修改服务端口可以直接修改配置文件

firewall-cmd --reload所有操作都需要最后执行加载配置