iptables防火墙工具的应用

iptables简介

netfilter/iptables(以下简称iptables)是Unix/Linux自带的一款优秀的且开源的完全自由的基于数据包过滤的防火墙工具,它的功能十分强大,使用起来非常灵活,可以针对流入和流出服务器的数据包进行很精细的控制。netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。从Centos7开始系统自带的防火墙是 firewalld,但是也同样支持 iptables。

iptables的四表五链

在这里插入图片描述

  • 四张表(table)
    filter表:真正负责主机防火墙功能(过滤流入流出主机的数据包)。
    nat表:负责网络地址转换,即来源IP地址与目标IP地址和port的转换。一般用于局域网共享上网或者特殊的端口和IP的转换。
    mangle表:主要应用在修改数据包内容上,用来做流量整形,给数据包打标识。
    raw表:用于处理异常, 一般使用不到,raw 在整个防
    火墙体系优先级最高,如果启动用 raw 表,数据将会跳过 conntrack(连接跟踪机制)。
  • 五个链(chain)
    INPUT链::负责过滤所有目标地址是本机地址的数据包。即过滤进入主机的数据包。
    FORWARD链:负责转发流经主机的数据包。起转发的作用,和nat关系很大。
    OUTPUT链:处理所有源地址是本机地址的数据包。即处理从本机发出去的数据包。
    PREROUTING链:在数据包到达防火墙时进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口等。
    POSTROUTING链:数据包离开防火墙时进行路由判断之后执行的规则,作用是改变数据包的源地址、源端口等。一般应用在共享上网(前提是网关要有公网IP,否则要做路由zebra)

iptables工作流程

  1. 当一个数据包进入网卡时,它首先进入 PREROUTING 链,内核根据数据包目的 IP 判断是否需要转送出去。
  2. 如果数据包就是进入本机的,它就会沿着图向上移动,到达 INPUT 链。数据包到了 INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过 OUTPUT 链,然后到达 POSTROUTING 链输出。
  3. 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过 FORWARD链,然后到达 POSTROUTING 链输出。
    在这里插入图片描述
    防火墙是从上往下、从前往后按照配置的规则一层层过滤的,如果匹配上规则,就不再往下进行匹配,如果所有规则中没有明确表明是阻止还是通过,则按链的默认策略进行处理。规则的次序非常关键,谁的规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查的。

iptables使用方法

语法格式:
iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
注意:
不指定表名时,默认表示 filter 表
不指定链名时,默认表示该表内所有链
除非设置规则链的缺省策略,否则需要指定匹配条件
在这里插入图片描述
iptables常用命令解释:
-A:添加规则(放在最后)
-I:插入为第一条规则
-I num:指定插入为第几条规则
-D num:删除指定的第几条规则
-P:设置默认策略(设置了DROP后一定要小心,设置之前最好配置每隔一段时间清空规则的任务计划,否则容易把自己 drop 掉,链接不上远程主机。)
-F:清空规则
-L:列出规则
-n:以数字格式显示 ip 和 port,需要配合-L 选项使用(-Ln是无效的)
-v :以详细信息显示
-t:表名(不指定默认为filter表)
-j:目标动作或跳转
-Z:将封包计数器归零
-i:流入接口
-o:流出接口
-s:源地址
-d:目的地址
-p:协议类型
–sport:源端口
–dport:目的端口
注意: --sport、–dport 必须联合 -p 使用
SNAT:(nat 表的 POSTROUTING 链)源地址转换,SNAT 支持转换为单 IP,也支持转换到 IP 地址池(一组连续的IP地址)
例如: iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
DNAT:(nat 表的 PREROUTING 链)目的地址转换,DNAT支持转换为单 IP,也支持转换到IP地址池。
例如:
表达方式 1:把从 eth0 进来的要访问 TCP/80 的数据包目的地址改为 192.168.0.1

iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80 -j DNAT --to 192.168.0.1

表达方式 2:

iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 81 -j DNAT --to 192.168.0.1:81

表达方式 3:把从 eth0 进来的要访问 TCP/80 的数据包目的地址改为 192.168.0.1-192.169.1.10

iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80 -j DNAT --to 192.168.0.1-192.169.0.10

MASQUERADE: 伪装。动态源地址转换(动态 IP 的情况下使用)
例如:

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ens33 -j MASQUERADE

注意: 配置完规则后执行service iptables save使规则永久生效

猜你喜欢

转载自blog.csdn.net/nmb_jiang/article/details/105259270
今日推荐