首页 > 系统相关 >iptables使用详解

iptables使用详解

时间:2023-06-10 22:32:33浏览次数:83  
标签:iptables -- 报文 使用 192.168 详解 规则 数据包

一、iptables简介

iptables是linux自带的一款防火墙工具,它能帮助我们基于规则完成数据包过滤、数据包重定向和网络地址转换功能。
      严格的说,iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”中,这个”安全框架”才是真正的防火墙,这个框架的名字叫netfilter。
      Netfilter 组件也称为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
      iptables 组件是一种工具,也称为用户空间,它使插入、修改和除去信息包过滤表中的规则变得容易。我们使用iptables工具去操作真正的安全框架。

二、iptables的相关概念

2.1 规则

比如,来自某个IP地址的访问,就要将其拒绝,这就是一条规则。规则存储在内核空间的数据包过滤表中,这些规则分别指定了源地址、目的地址,传输协议(TCP、UDP、ICMP)和服务类型(HTTP、FTP)等。

2.2 链

安全策略的定义往往不只有一条规则,甚至还会有多个互斥的规则。这么多规则,执行的顺序是什么?哪个规则先执行?这就涉及到链这个概念。简单来讲,链就是将多个规则从上大小串起来的一个集合单位,规则按从上到下依次进行匹配。

iptables使用详解_iptables四表五链

2.3 表

链可以有多个。将多个链再规整在一起的集合,叫做表。

iptables使用详解_iptables四表五链_02

三、iptables四表五链介绍

iptables具有Filter, NAT, Mangle, Raw四种内建表,不同的表含有的链也不同,具体见下图。

iptables使用详解_iptables四表五链_03

3.1 filter表

filter是iptables的默认表,主要负责过滤功能。这里面的链条、规则,可以决定一个数据包是否可以到达目标进程端口。包含以下内建链:

  • INPUT:对路由策略分派过来的包到达目标进程端口之前进行匹配并处理(数据包入口)。用来过滤目的地址是本机的连接。
  • FORWARD:对路由策略分派过来的包进行路由转发。用来过滤目的地址和源地址都不是本机的连接。
  • OUTPUT:判断,从本地的目标进程端口处理好的包如何返回/要不要返回给请求方(数据包出口)。用来过滤源地址是本机的连接。

3.2 nat表

nat表主要负责网络地址转换功能,这里面的链条、规则,可以修改源和目标的ip地址,从而进行包路由。

nat 的原理,简单的说就是当内网主机访问外网时,当内网主机的数据包要通过路由器时,路由器将数据包中的源内网 IP 地址改为路由器上的公网 IP 地址(SNAT),同时记录下该数据包的消息;外网服务器响应这次由内而外发出的请求或数据交换时,当外网服务器发出的数据包经过路由器时,目标地址原本是路由器上的公网 IP 地址被路由器改为内网 IP(DNAT)。

nat表包含以下内建链:

(1)PREROUTING:处理刚到达本机并在路由转发前的数据包(路由前)。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。注意:所有的数据包进来的时侯都先由这个链处理。

(2)POSTROUTING:处理即将离开本机的数据包(路由后)。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。注意:所有的数据包出来的时侯都要经由这个链处理。

(3)OUTPUT:处理本机产生的数据包。

3.3 mangle表

mangle表可以对数据包进行重新封装,这里面的链条,规则,可以修改数据包的内容。包含以下内建链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD。作用与其它表的同名链相同。

3.2 raw表

raw表用于控制nat表中连接追踪机制的启用状况,包含以下内建链:PREROUTING、OUTPUT。作用与其它表的同名链相同。

这四个表的优先级由高到低的顺序为raw->mangle->nat->filter。

注意:如果想要linux主机支持转发,则需要开启内核的ip_forward功能:

echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf && sysctl -p

四、对iptables的进一步理解

当客户端访问服务器的web服务时,客户端发送报文到网卡,而tcp/ip协议栈是属于内核的一部分,所以,客户端的信息会通过内核的TCP协议传输到用户空间中的web服务中,而客户端报文的目标终点为web服务所监听的套接字(IP:Port)上,当web服务需要响应客户端请求时,web服务发出的响应报文的目标终点则为客户端,这个时候,web服务所监听的IP与端口反而变成了原点。我们说过,netfilter才是真正的防火墙,它是内核的一部分,所以,如果我们想要防火墙能够达到”防火”的目的,则需要在内核中设置关卡,所有进出的报文都要通过这些关卡,经过检查后,符合放行条件的才能放行,符合阻拦条件的则需要被阻止,于是,就出现了INPUT关卡和OUTPUT关卡,而这些关卡在iptables中不被称为”关卡”,而被称为”链”。

iptables使用详解_iptables四表五链_04

如果客户端发到本机的报文中包含的服务器地址并不是本机,而是其他服务器,此时本机就应该能够进行转发,那么这个转发就是本机内核所支持的IP_FORWARD功能,此时我们的主机类似路由器功能,所以我们会看到在iptables中,所谓的关口并只有上面所提到的INPUT及OUTPUT这两个,应该还有“路由前”,“转发”,“路由后”,它们所对应的英文名称分别为“PREROUTING”,“FORWARD”,“POSTROUTING”,这就是我们说到的5链。

由上图可以看到,当我们在本地启动了防火墙功能时,数据报文需要经过以上关口,根据各报文情况,各报文经过的“链”可能不同,如果报文目标地址是本机,则会经常INPUT链发往本机用户空间,如果报文目标不是本机,则会直接在内核空间中经由FORWARD链和POSTROUTING链转发出去。

所以,我们能够想象出某些常用场景中,报文的流向。但无论如何,数据包都会先经过PREROUTING链。报文流向介绍如下:

  • 到本机某进程的报文:PREROUTING --> INPUT
  • 由本机转发的报文:PREROUTING --> FORWARD --> POSTROUTING
  • 由本机的某进程发出报文(通常为响应报文):OUTPUT --> POSTROUTING

数据包经由iptables的流程见下图:

iptables使用详解_iptables四表五链_05

五、iptables命令的语法规则

5.1 基本语法格式

      iptables的基本语法格式如下:

iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]

说明:

  • 表名、链名用于指定 iptables命令所操作的表和链
  • 命令选项用于指定管理iptables规则的方式(比如:插入、增加、删除、查看等;条件匹配用于指定对符合什么样条件的数据包进行处理;
  • 目标动作或跳转用于指定数据包的处理方式(比如允许通过、拒绝、丢弃、跳转给其它链处理。

5.2 管理控制选项

iptables命令的管理控制选项如下:

  • -A:在指定链的末尾添加一条新的规则
  • -D:删除指定链中的某一条规则,可以按规则序号和内容删除
  • -I:在指定链中插入一条新的规则,默认在第一行添加
  • -R:修改、替换指定链中的某一条规则,可以按规则序号和内容替换
  • -L:列出指定链中所有的规则进行查看
  • -E:重命名用户定义的链,不改变链本身
  • -F:清空链中的所有规则
  • -N:新建一条用户自己定义的规则链
  • -X:删除指定表中用户自定义的规则链
  • -P:设置指定链的默认策略
  • -Z:清空链中使用的规则
  • -p:指定协议,可以是tcp、udp、icmp协议
  • -t:指定要操纵的表
  • -s:指定源地址
  • -d:指定目标地址
  • --sport:指定源端口
  • --dport:指定目标端口
  • -i:数据包进入的网卡
  • -o:数据包出口的网卡
  • -j:对数据包的处理方式,后面介绍
  • -n:使用数字形式显示输出结果
  • -v:查看规则表详细信息的信息
  • -m mutiport --sport/--dport:端口匹配,指定一组源端口/目标端口
  • -m mac --mac-source xx:xx:xx:xx:xx:xx:匹配源mac地址
  • -m iprange --src-range/--dst-range:指明一组IP(源地址/目标地址)的使用条件
  • -m state --state xxx:限定收发包的状态,有INVALID, ESTABLISHED, NEW, RELATED和UNTRACKED这几种
  • NEW: 新连接请求
  • ESTABLISHED:已建立的连接
  • INVALID:无法识别的连接
  • RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接
  • UNTRACKED:未追踪的连接
  • -V:查看版本
  • -h:获取帮助

5.3 处理数据包的方式

防火墙处理数据包的四种方式(-j 后面可以接的参数):

  • ACCEPT:允许数据包通过
  • DROP:直接丢弃数据包,不给任何回应信息
  • REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息。
  • LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
  • SNAT:源地址转换
  • DNAT:目标地址转换
  • REDIRECT:重定向
  • MASQUERAED:地址伪装

六、iptables使用案例

#删除INPUT链的第一条规则
iptables -D INPUT 1
#拒绝进入防火墙的所有ICMP协议数据包
iptables -A INPUT -p icmp -j REJECT
#允许防火墙转发除ICMP协议以外的所有数据包。使用”!”可以将条件取反
iptables -A FORWARD -p ! icmp -j ACCEPT
#拒绝转发来自192.168.1.10主机的数据,允许转发来自192.168.0.0/24网段的数据
iptables -A FORWARD -s 192.168.1.10 -j REJECT
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
#所有发给目标网口是wlan0 且目标ip是121.18.238.0/29 地址的包,都会被丢弃,不作任何回复
iptables -A OUTPUT -o wlan0 -d 121.18.238.0/29 -j DROP
#拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包
iptables -A INPUT -p tcp -m state --state NEW -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
#禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包,无任何回复
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
#web服务器开启80端口,可接收外部的http请求
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#允许ping。由于是双向的,所以INPUT链、OUTPUT链都要设置
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
##将本机的对8080端口请求转发至其他主机,主机IP:192.168.0.141,目标主机IP和端口:192.168.0.142:80;
#进入PREROUTING作目标地址转换。由192.168.0.141:8080转为192.168.0.142:80
iptables -t nat -A PREROUTING -d 192.168.0.141/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.0.142:80
#数据包进入POSTROUTING链,即将离开本机,做源地址转换,由客户端IP转换为192.168.0.141
iptables -t nat -A POSTROUTING -d 192.168.0.142/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.0.141
#将本机的对80端口请求重定向到8080端口
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
#清空所有iptables规则
iptables -F
#清除iptables nat表规则
iptables -t nat -F
#保存iptables规则
service iptables save

标签:iptables,--,报文,使用,192.168,详解,规则,数据包
From: https://blog.51cto.com/u_15796303/6455949

相关文章

  • spdlog使用头文件或dll的宏设置
    宏作用SPDLOG_HEADER_ONLYspdlog只使用头文件FMT_HEADER_ONLYfmtlib只用用头文件SPDLOG_COMPILED_LIBspdlog使用dllSPDLOG_SHARED_LIBspdlog使用dll,实际可以不设置,单独设置SPDLOG_COMPILED_LIB就可以SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACESPDLOG_TRAC......
  • libevent使用
    //testlibevent.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。//#include"event2/event.h"#include"event2/listener.h"#include"event2/thread.h"#include<event2/listener.h>#include<iostream>voidlisten_cb(......
  • Python Joblib库使用学习总结
    实践环境python3.6.2Joblib简介Joblib是一组在Python中提供轻量级流水线的工具。特别是:函数的透明磁盘缓存和延迟重新计算(记忆模式)简单易用的并行计算Joblib已被优化得很快速,很健壮了,特别是在大数据上,并对numpy数组进行了特定的优化。主要功能输出值的透明快速磁盘......
  • 使用matlab的LTIViewer完成系统稳定性判定
    如题:一、建立模型:z=[-3];p=[0-2-5];k=3;G=zpk(z,p,k)G=3(s+3)-------------s(s+2)(s+5)Continuous-timezero/pole/gainmodel.ModelProperties>>Gf=feedback(G,1)Gf=3(s+3)--------------------------------......
  • 小米6刷origin os使用joviincar教程
    小米6刷originos使用joviincar教程此教程尽量简化流程,在不用扩容分区的情况下直接刷入originos实现joviincar的使用。1、前期准备1)解锁米62)工具集准备Adb工具集(https://www.xitongzhijia.net/soft/218036.html)Originos卡刷包(https://www.ziyuanyo.com/html/34......
  • 关于刚使用ABP.VNext遇到的坑
    使用的是开源的项目,项目链接:https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-Efcore跑的项目是这个大项目下的小项目,在文件夹里面找到这个文件夹就是我用的这个项目文件喽BookStore-Mvc-EfCore 第一个肯定就是生成数据库啦项目第一步生成数据库......
  • 使用 Vue 和 Swiper 实现中间大两边小的轮播图效果
    以下是使用Vue和Swiper实现中间大两边小的轮播图效果的代码:1.安装Swiper:npminstallswiper--save 2.在Vue组件中引入Swiper:importSwiperfrom'swiper';import'swiper/css/swiper.css'; 3.在Vue组件中使用Swiper:<template><divclass="swip......
  • mybatis-plus是什么框架,使用起来简单吗?文末有彩蛋
    mybatis框架我们都熟悉了,是用来操作数据库的属于ORM框架。mybatis-plus是什么框架,看名称和手机似的,带有plus一定是加强版,其官网是:MyBatis-Plus(baomidou.com)开始mybatis-plus的实践吧。一、环境及依赖这里,基于springboot集成mybatis-plus。先看下具体的版本,springboot:2.3.3......
  • linux环境下使用压缩包、docker、docker-compose搭建nacos集群
    本篇文章介绍如何在linux系统上安装nacos和搭建集群,本文章使用的是centos7系统。本机搭建nacos1、准备工作Nacos依赖 Java需要三台linux服务器,条件有限的可以安装虚拟机,内存有限那就只需要安装一台虚拟机,然后开启不同端口就可以,所以最低的条件是你需要安装一个centos7版本的虚拟......
  • RD client远程桌面使用教程手机怎么连接服务器远程桌面?
    大家好啊,现在很多游戏、应用为了体验感好、方便使用都实现了多端同步,服务器远程连接也不例外,今天小驰给你们分享手机连接服务器远程桌面的操作方法不管是安卓还是苹果手机,咱们都需要用到一个软件,叫做RDclient(RemoteDesktop),先从安卓讲起安卓版RDclient下载地址:https://pan.baid......