iptables防火墙

268 阅读6分钟

防火墙的分类

  • 硬件防火墙:性能强、功能多、操作简单、不会占用服务器的资源

  • 软件防护墙: 主要iptables和firewalld两大类

iptables概述

Linux 的防火墙体系主要工作在网络层,针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。Linux 系统的防火墙体系基于内核编码实现, 具有非常稳定的性能和高效率,也因此获得广泛的应用。它实际上由两个组件netfilter和iptables组成。

netfilter和iptables的区别

  •  netfilter:指的是 Linux 内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于“内核态”(Kernel Space,又称为内核空间)的防火墙功能体系。

  • iptables:指的是用来管理 Linux 防火墙的命令程序,通常位于/sbin/iptables 目录下, 属于“用户态”(User Space,又称为用户空间)的防火墙管理体系。

iptables是基于内核的防火墙,其中内置了raw、mangle、nat和filter四个规则表,表中所有的规则配置后,立即生效,不需要重启电脑

四个规则表、五个规则链

  • 规则表的作用:容纳各种规则链
  • 规则链的作用:容纳各种防火墙规则
  • 总结:表里有链、链里由规则

image.png

四个规则表

为了从规则集的功能上有所区别,iptables 管理着四个不同的规则表,其功能分别由独立的内核模块实现

  •  filter 表:filter 表用来对数据包进行过滤,根据具体的规则要求决定如何处理一个数据包。filter 表对应的内核模块为 iptable_filter,表内包含三个链,即 INPUT、FORWARD、OUTPUT。
  •  nat 表:nat(Network Address Translation,网络地址转换)表主要用来修改数据包的IP 地址、端口号等信息。nat 表对应的内核模块为 iptable_nat,表内包含三个链,即PREROUTING、POSTROUTING、OUTPUT。
  •  mangle 表:mangle 表用来修改数据包的 TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期),或者为数据包设置 Mark 标记,以实现流量整形、策略路由等高级应用。mangle 表对应的内核模块为 iptable_mangle , 表内包含五个链, 即PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD。
  •  raw 表:raw 表是自 1.2.9 以后版本的 iptables 新增的表,主要用来决定是否对数据包进行状态跟踪。raw 表对应的内核模块为 iptable_raw,表内包含两个链,即 OUTPUT、PREROUTING。

五个规则链

在处理各种数据包时,根据防火墙规则的不同介入时机,iptables 默认划分为五种不同的规则链

  •  INPUT 链:当收到访问防火墙本机地址的数据包(入站)时,应用此链中的规则。

  •  OUTPUT 链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则。

  •  FORWARD 链:当接收到需要通过防火墙中转发送给其他地址的数据包(转发)时, 应用此链中的规则。

  •  PREROUTING 链:在对数据包做路由选择之前,应用此链中的规则。

  •  POSTROUTING 链:在对数据包做路由选择之后,应用此链中的规则。

数据包过滤的匹配流程

image.png

规则表之间的顺序

raw>mangle>nat>filter

规则链中的顺序

入站

入站数据包从A网络发到B网络,首先发到防火墙,先后顺序经过有PREROUTING链的三个表(raw、mangle、nat),如果都是放通状态的会经过路由选择,然后根据目的地址一层一层往上送,经过有INPUT的两个表(mangle、filter),一直送到应用程序。

转发

目的地不是本机,数据包先从A网络过滤,经过PREROUTING链,看是否是自己的目的地址,如果是外网到内网需要用nat转换成内网IP,找到内网用户,经过FORWARD链进行过滤,允许放通的到达POSTROUING链,再把内网地址转换成公网,这样数据包才能回去;如果是内网往外网发顺序就是反过来。

出站

从本机的应用程序发出来, 经过路由选择,让路由知道从哪里发,先后顺序经过有OUTPUT链的四个表(raw、mangle、nat、filter),都放通后到达POSTROUING链的两个表(mangle、nat),如果没有什么转换地址,就出站。

iptables防火墙配置

Centos 7默认使用firewalld防火墙,没有安装iptables, 若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装iptables

微信截图_20220925170410.png

iptables命令

命令格式

iptables  [-t 表名]  管理选项  [链名] [匹配条件] [-j 控制类型]

微信截图_20220925170628.png

常用管理选项

微信截图_20220925170724.png

常用控制类型

微信截图_20220925170802.png

匹配条件

微信截图_20220925170834.png

  • 不指定表名时,默认指filter表
  • 不指定链名时,默认指表内的所有链
  • 除非设置链的默认策略,否则必须指定匹配条件控制类型使用大写字母,其余均为小写

实操

添加新的规则

微信截图_20220925171426.png -A:在filter表中的INPUT链末行添加拒绝icmp的规则 -I:不指定行,在指定链首行插入规则(允许tcp 22端口) -I:不同上,指定行,是在指定的行上插入规则

查看规则

微信截图_20220925172123.png

微信截图_20220925172301.png

微信截图_20220925172422.png

微信截图_20220925172638.png

删除规则

微信截图_20220925173429.png

  • 若规则列表中期多条相同的规则时,按内容匹配只删除的序号最小的一条
  • 按号码匹配删除时,确保规则号码小于等于已有规则数,否则报错
  • 按内容匹配删数时,确保规则存在,否则报错

修改规则

-R:修改已有的规则

命令:iptables -t filter -R INPUT 1 -p icmp -j ACCEPT

-P 修改默认策略(修改为丢弃转发数据包)

命令:iptables -P FORWARD DROP

规则的匹配

微信截图_20220925174219.png

微信截图_20220925174548.png

协议端口匹配

--sport 和 --dsport 必须配合 -p 指定协议使用  

微信截图_20220925174809.png

微信截图_20220925175213.png

tcp标记匹配

  --tcp-flags        配合 -p tcp 使用,指定tcp标记(SYN、ACK、RST、URG、PSH、FIN)
  

微信截图_20220925195157.png

  • SYN,RST,ACK SYN 前面指定包范围,空格后再指定
  • 表明前面指定的里面,除了这空格后面的SYN,其他都放行

ICMP类型匹配

 --icmp-type        配合 -p icmp 使用        指定icmp类型(字符串或数字代码)
 

icmp类型可用iptables -p icmp -h 查看帮助信息

微信截图_20220925195533.png

显示匹配

要求以 -m (扩展模块)的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件

多端口匹配

  • -m multiport --sport   源端口列表

  • -m multiport --dport   目的端口列表

微信截图_20220925200012.png

ip范围匹配

  • -m iprange --src-range 源IP范围
  • -m iprange --dst-range 目的IP范围

微信截图_20220925200611.png

状态匹配

  • -m state --state  连接状态

常见的连接状态

微信截图_20220925200907.png

微信截图_20220925201922.png