Linux防火墙-iptables


前言

最近为了布置实验环境,需要用到多个虚拟机,为了更好实现虚拟机之间的通信,我便开始学习防火墙的使用,常见的防火墙主要有Linux与Windows两个大类,而Linux中常见的有iptables、firewall、ufw这几种防火墙,这篇文章主要讲述 iptables ,这是笔者的一些学习笔记,可以一起参考交流。


一、防火墙是什么?

1、定义

一般防火墙工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默认情况下关闭所有的通过型访问,只开放允许访问的策略。(一般可以理解为数据包过滤器 )

2、Linux防火墙核心:netfilter

netfilter是Linux集成在内核的一个框架,它允许以自定义处理程序的形式实现各种与网络相关的操作(允许、丢弃或者修改数据包)。Netfilter提供了包过滤(packet filtering)、网络地址转换(NAT)和端口转换(port translation)等各种功能和操作,这些功能提供了在网络中重定向数据包和禁止数据包到达网络中的敏感位置所需的功能

注:这是Linux所有防火墙实现的核心,iptables、firewall、ufw底层都是netfilter,只是具体实现有差别

二、防火墙之iptables

1.简介

  • Iptables是个工作在用户空间的工具软件,其允许系统管理员配置由Linux内核防火墙(由多个netfilter内核模块实现)提供的表,表中存有多个链和规则。可以使用iptables编写规则,写好的规则被送往netfilter内核模块,告诉内核如何去处理信息包。
  • 适用范围(几乎所有基于Linux内核的发行版都可以使用iptables):
    • ubuntu
    • centos
    • Debian

2.四表五链与规则

  • iptables的使用主要围绕着四表五链,由这四表五链实现防火墙的配置与管理,而规则则是最小的单位,先了解概念,后面会有图解
  • 四表:
    • filter表(iptables默认表):负责数据包的过滤
    • nat表:全称network address translation(网络地址转换)表,负责网络地址转换,与数据包的转发、数据包的ip地址转换等有关
    • mangle表:负责拆解、修改、封装数据包
    • raw表:确定是否对该数据包进行状态跟踪,与nat表关系密切
  • 五链:
    • prerouting链:用处理数据包进入路由之前的数据包
    • input链:用于处理外部访问防火墙本机的数据包(由外向内)
    • output链:用于处理防火墙本机访问其他主机的数据包(由内向外)
    • forward链:负责数据包的转发
    • postrouting链:用于处理确认路由后的数据
  • 四表五链之间的关系
    • filter表(iptables默认表):包含input链、forward链、output链
    • nat表:包含prerouting链、postrouting链、output链
    • mangle表:包含全部的五条链
    • raw表:output链、prerouting链
  • 规则
    防火墙配置的最小单位,可以理解为最小的设置项

3、整体概念图

以上这一堆文字概念可能听不明白,没有感觉,那么直接上图
数据包通过流程图

我们可以看到,五链指的是数据包处理的五个阶段,而四表就是在各个阶段或者链中发挥作用。这些表中都是各种规则(rules),数据包经过表时会匹配表中的规则,表中的结构是这样的:
表的结构
举一个例子:
假设数据包经过input链中的filter表时,filter表有这么两个规则
1、允许所有的封包进入
2、拒绝所以封包进入
此时有一个数据包经过,若匹配(即符合规则要求)第一个规则而直接放行,不会理会后面的规则,若不匹配则继续匹配下一条规则。直到匹配到最后一条规则或者到最后一条规则都不行则采取预设的动作(就是指policy,这个依照设定不同,动作不同)。

3.具体应用

为了进一步理解iptables,现在笔者以centos7为例,简单介绍一下iptables的具体应用。
确保安装并启动iptables后

  1. 查看表中的规则等信息(信息格式化)
# -t -- 后面接需要查看的表,不指定就默认filter表
# -L -- 列出指定的表的规则
# -n -- 不进行 IP 与 HOSTNAME 的反查,显示讯息的速度会快很多
iptables -t filter -L -n 

结果如图:
在这里插入图片描述

  • target:代表进行的动作,ACCEPT 是放行,而 REJECT 则是拒绝,此外,尚有 DROP (丢弃);
  • prot:代表使用的封包协议,主要有 tcp, udp 及 icmp 三种封包格式;
  • opt:额外的选项说明
  • source :代表此规则是针对哪个『来源 IP』进行限制?
  • destination :代表此规则是针对哪个『目标 IP』进行限制?

注意看,图中的第二行 Chain INPUT (policy ACCEPT),这是下面的就是filter表在input链中,数据包需要匹配的规则。比如第一条规则的意思是对来源为0.0.0.0/0,目的地为0.0.0.0/0的所有协议的数据包,并且状态为RELATED,ESTABLISHED,采取放行的动作。
另外,policy ACCEPT指当所有规则都不匹配时,就采取ACCRPT(放行)动作,这个可以指定在不同的表的同一个链使用不同的动作,详情可以看后面

  1. 查看表中的信息(非格式化)
 -t -- 指定某一个表,不写则输出所有的表的信息
iptables-save -t filter

在这里插入图片描述
我先找到filter表,可以看到表相关联的链与每个链采取的默认策略(policy),以下就是filter表中的规则,不过是命令行的格式。

  1. 清除规则
 -F :清除所有的已订定的规则;
 -X :杀掉所有使用者 "自定义" 的 chain (应该说的是 tables )啰;
 -Z :将所有的 chain 的计数与流量统计都归零
iptables -?
  1. 定义预设策略(policy)
 -P :定义政策( Policy )。注意,这个 P 为大写啊!
 -t : 指定某一个表,如果不指定,默认为filter表
 ACCEPT :该封包可接受
 DROP   :该封包直接丢弃,不会让 client 端知道为何被丢弃。
iptables -t nat -P INPUT DROP # 指定nat表修改其input链策略为DROP
  1. 规则设定
1) iptables [-AI 链名] [-io 网络接口] [-p 协议]  [-s 来源IP/网域] [-d 目标IP/网域] -j [ACCEPT|DROP|REJECT|LOG]
-AI 链名:针对某的链进行规则的 "插入""累加"
    -A :新增加一条规则,该规则增加在原本规则的最后面。例如原本已经有四条规则,
         使用 -A 就可以加上第五条规则!
    -I :插入一条规则。如果没有指定此规则的顺序,默认是插入变成第一条规则。
         例如原本有四条规则,使用 -I 则该规则变成第一条,而原本四条变成 2~5 号
    链 :有 INPUT, OUTPUT, FORWARD 等,此链名称又与 -io 有关,请看底下。
    
-io 网络接口:设定封包进出的接口规范
    -i :封包所进入的那个网络接口,例如 eth0, lo 等接口。需与 INPUT 链配合;
    -o :封包所传出的那个网络接口,需与 OUTPUT 链配合;
    
-p 协定:设定此规则适用于哪种封包格式
   主要的封包格式有: tcp, udp, icmp 及 all 。
   
-s 来源 IP/网域:设定此规则之封包的来源项目,可指定单纯的 IP 或包括网域,例如:
   IP  :192.168.0.100
   网域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。
   若规范为『不许』时,则加上 ! 即可,例如:
   -s ! 192.168.100.0/24 表示不许 192.168.100.0/24 之封包来源;
   
-d 目标 IP/网域:同 -s ,只不过这里指的是目标的 IP 或网域。

-j :后面接动作,主要的动作有接受(ACCEPT)、丢弃(DROP)、拒绝(REJECT)及记录(LOG)

2) 当协议为tcp/udp时,最为常见,故单独列举一下,其他的详细设定请参靠其他资料
iptables [-AI 链] [-io 网络接口] [-p tcp,udp] [-s 来源IP/网域] [--sport 埠口范围] [-d 目标IP/网域] [--dport 埠口范围] -j [ACCEPT|DROP|REJECT]

选项与参数:

--sport 埠口范围:限制来源的端口号码,端口号码可以是连续的,例如 1024:65535

--dport 埠口范围:限制目标的端口号码。

  1. iptables两个特殊模块:mac与state
iptables -A INPUT [-m state] [--state 状态]
选项与参数:
-m :一些 iptables 的外挂模块,主要常见的有:
     state :状态模块
     mac   :网络卡硬件地址 (hardware address)

--state :一些封包的状态,主要有:
     INVALID    :无效的封包,例如数据破损的封包状态
     ESTABLISHED:已经联机成功的联机状态;
     NEW        :想要新建立联机的封包状态;
     RELATED    :这个最常用!表示这个封包是与我们主机发送出去的封包有关

# state,一般用于判断这个想要进入的封包是否为刚刚我发出去的响应,依据封包的状态来决定封包的去留
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# mac,通过网卡的mac地址来建立规则
iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT

总结

以上就是笔者整理的关于iptables内容,本文仅仅简单介绍了iptables的基本概念使用,并以filter表为例,演示了几条常用的命令。iptables完整配置是非常复杂的,如若需要更加详细的信息请参考其他的资料,以下是iptables的官网:https://www.netfilter.org

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值