数据包转发原理与iptables的使用方法简介与实例

2024-04-22 13:58

本文主要是介绍数据包转发原理与iptables的使用方法简介与实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述:

        对于连接到网络上的 Linux 系统来说,防火墙是必不可少的防御机制, 它只允许合法的网络流量进出系统,而禁止其它任何网络流量。为了确定网络流量是否合法, 防火墙依靠它所包含的由网络或系统管理员预定义的一组 规则 这些规则告诉防火墙某个流量是否合法以及对于来自某个源、至某个目的地或具有某种协议类型的网络流量要做些什么。 术语“配置防火墙”是指添加、修改和除去这些规则。稍后,我将详细讨论这些 规则

       网络流量由 IP 信息包(或,简称 信息包)— 以流的形式从源系统传输到目的地系统的一些小块数据 — 组成。 这些信息包有 ,即在每个包前面所附带的一些数据位,它们包含有关信息包的源、目的地和协议类型的信息。 防火墙根据一组规则检查这些头,以确定接受哪个信息包以及拒绝哪个信息包。我们将该过程称为 信息包过滤


1.数据包的三种流向


    当数据包到达防火墙时,如果MAC地址符合,就会由内核里相应的驱动程序接收,然后会经过一系列操 作,从而决定是发送给本地的程序,还是转发给其他机子,还是其他的什么。

1)发往本地的数据包处理流程


2)从本地转发的数据包处理流程


3)从本地发出的数据包处理流程



2.iptables使用详解

Iptalbes 是用来设置、维护和检查Linux内核的IP包过滤规则的。 可以定义不同的表,每个表都包含几个内部的链,也能包含用户定义的链。每个链都是一个规则列表,对对应的包进行匹配:每条规则指定应当如何处理与之相匹配的包。这被称作'target'(目标),也可以跳向同一个表内的用户定义的链。

TARGETS
防火墙的规则指定所检查包的特征,和目标。如果包不匹配,将送往该链中下一条规则检查;如果匹配,那么下一条规则由目标值确定.该目标值可以是
用户定义的链名,或是某个专用值,如ACCEPT[通过], DROP[删除],QUEUE[排队],或者 RETURN[返回]。

建立规则和链

通过向防火墙提供有关对来自某个源、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。 通过使用 netfilter/iptables 系统提供的特殊命令 iptables ,建立这些规则,并将其添加到内核空间的特定信息包过滤表内的链中。关于添加/除去/编辑规则的命令的一般语法如下:

iptables [-t table] command [match] [target]


表(table)

   [-t table] 选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。 有三种可用的表选项: filter 、 nat 和 mangle 。该选项不是必需的,如果未指定, 则 filter 用作缺省表。

    filter 表用于一般的信息包过滤,它包含 INPUT 、 OUTPUT 和 FORWARD 链。nat 表用于要转发的信息包,它包 PREROUTING 、OUTPUT 和 POSTROUTING 链。 如果信息包及其头内进行了任何更改,则使用 mangle 表。 该表包含一些规则来标记用于高级路由的信息包,该表包含 PREROUTING 和 OUTPUT 链。

      注: PREROUTING 链由指定信息包一到达防火墙就改变它们的规则所组成,而 POSTROUTING 链由指定正当信息包打算离开防火墙时改变它们的规则所组成。

命令

上面这条命令中具有强制性的 command 部分是 iptables 命令的最重要部分。 它告诉 iptables 命令要做什么,例如,插入规则、将规则添加到链的末尾或删除规则。 以下是最常用的一些命令:

  • -A 或 --append : 该命令将一条规则附加到链的末尾。 
    示例:

    $ iptables -A INPUT -s 205.168.0.1 -j ACCEPT

    该示例命令将一条规则附加到 INPUT 链的末尾,确定来自源地址 205.168.0.1 的信息包可以 ACCEPT 。
  • -D 或 --delete : 通过用 -D 指定要匹配的规则或者指定规则在链中的位置编号,该命令从链中删除该规则。 下面的示例显示了这两种方法。 
    示例:

    $ iptables -D INPUT --dport 80 -j DROP 
    $ iptables -D OUTPUT 3

    第一条命令从 INPUT 链删除规则,它指定 DROP 前往端口 80 的信息包。第二条命令只是从 OUTPUT 链删除编号为 3 的规则。
  • -P 或 --policy : 该命令设置链的缺省目标,即策略。 所有与链中任何规则都不匹配的信息包都将被强制使用此链的策略。 
    示例:

    $ iptables -P INPUT DROP

    该命令将 INPUT 链的缺省目标指定为 DROP 。这意味着,将丢弃所有与 INPUT 链中任何规则都不匹配的信息包。
  • -N 或 --new-chain : 用命令中所指定的名称创建一个新链。 
    示例:

    $ iptables -N allowed-chain

  • -F 或 --flush : 如果指定链名,该命令删除链中的所有规则, 如果未指定链名,该命令删除所有链中的所有规则。此参数用于快速清除。 
    示例:

    $ iptables -F FORWARD 
    $ iptables -F

  • -L 或 --list : 列出指定链中的所有规则。 
    示例:

    $iptables -L allowed-chain

匹配

   iptables 命令的可选 match 部分指定信息包与规则匹配所应具有的特征(如源和目的地地址、协议等)。 匹配分为两大类: 通用匹配和 特定于协议的匹配。这里,我将研究可用于采用任何协议的信息包的通用匹配。 下面是一些重要的且常用的通用匹配及其示例和说明:

  • -p 或 --protocol : 该通用协议匹配用于检查某些特定协议。 协议示例有 TCP 、 UDP 、 ICMP 、用逗号分隔的任何这三种协议的组合列表以及 ALL (用于所有协议)。 ALL 是缺省匹配。可以使用 ! 符号,它表示不与该项匹配。 
    示例:

    $ iptables -A INPUT -p TCP, UDP 
    $ iptables -A INPUT -p ! ICMP

    在上述示例中,这两条命令都执行同一任务 — 它们指定所有 TCP 和 UDP 信息包都将与该规则匹配。 通过指定 ! ICMP ,我们打算允许所有其它协议(在这种情况下是 TCP 和 UDP ), 而将 ICMP 排除在外。
  • -s 或 --source : 该源匹配用于根据信息包的源 IP 地址来与它们匹配。该匹配还允许对某一范围内的 IP 地址进行匹配,可以使用 ! 符号,表示不与该项匹配。缺省源匹配与所有 IP 地址匹配。 
    示例:

    $ iptables -A OUTPUT -s 192.168.1.1 
    $ iptables -A OUTPUT -s 192.168.0.0/24 
    $ iptables -A OUTPUT -s ! 203.16.1.89

    第二条命令指定该规则与所有来自 192.168.0.0 到 192.168.0.24 的 IP 地址范围的信息包匹配。第三条命令指定该规则将与 除来自源地址 203.16.1.89 外的任何信息包匹配。
  • -d 或 --destination : 该目的地匹配用于根据信息包的目的地 IP 地址来与它们匹配。 该匹配还允许对某一范围内 IP 地址进行匹配,可以使用 ! 符号,表示不与该项匹配。 
    示例:

    $ iptables -A INPUT -d 192.168.1.1 
    $ iptables -A INPUT -d 192.168.0.0/24 
    $ iptables -A OUTPUT -d ! 203.16.1.89

目标

我们已经知道,目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。 除了允许用户定义的目标之外,还有许多可用的目标选项。下面是常用的一些目标及其示例和说明:

  • ACCEPT : 当信息包与具有 ACCEPT 目标的规则完全匹配时,会被接受(允许它前往目的地),并且它将停止遍历链(虽然该信息包可能遍历另一个表中的其它链,并且有可能在那里被丢弃)。 该目标被指定为 -j ACCEPT 。
  • DROP : 当信息包与具有 DROP 目标的规则完全匹配时,会阻塞该信息包,并且不对它做进一步处理。 该目标被指定为 -j DROP 。
  • REJECT : 该目标的工作方式与 DROP 目标相同,但它比 DROP 好。和 DROP 不同, REJECT 不会在服务器和客户机上留下死套接字。 另外, REJECT 将错误消息发回给信息包的发送方。该目标被指定为 -j REJECT 。 
    示例:

    $ iptables -A FORWARD -p TCP --dport 22 -j REJECT

  • RETURN : 在规则中设置的 RETURN 目标让与该规则匹配的信息包停止遍历包含该规则的链。 如果链是如 INPUT 之类的主链,则使用该链的缺省策略处理信息包。 它被指定为 -jump RETURN 。示例:

    $ iptables -A FORWARD -d 203.16.1.89 -jump RETURN

还有许多用于建立高级规则的其它目标,如 LOG 、 REDIRECT 、 MARK 、 MIRROR 和 MASQUERADE 等。

保存规则

现在,您已经学习了如何建立基本的规则和链以及如何从信息包过滤表中添加或删除它们。 但是,您应该记住:用上述方法所建立的规则会被保存到内核中,当重新引导系统时,会丢失这些规则。 所以,如果您将没有错误的且有效的规则集添加到信息包过滤表,同时希望在重新引导之后再次使用这些规则, 那么必须将该规则集保存在文件中。可以使用 iptables-save命令来做到这一点:

$ iptables-save > iptables-script

现在,信息包过滤表中的所有规则都被保存在文件 iptables-script 中。无论何时再次引导系统, 都可以使用 iptables-restore命令将规则集从该脚本文件恢复到信息包过滤表,如下所示:

$ iptables-restore iptables-script

如果您愿意在每次引导系统时自动恢复该规则集,则可以将上面指定的这条命令放到任何一个初始化 shell 脚本中。


3.使用实例

1)让指定协议的ip包通过相应端口:iptables -I INPUT 1 -p tcp --dport 5901 -j ACCEPT

2)屏蔽所有入站连接,但是允许主机通过ping和wget访问外网:

  1. # iptables -P INPUT DROP  
  2. # iptables -P FORWARD DROP  
  3. # iptables -P OUTPUT ACCEPT  
  4. # iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT  
  5. # iptables -L -v -n  
  6. #ping和wget可以正常工作  
  7. # ping cyberciti.biz  
  8. # wget http://www.kernel.org/pub/linux/kernel/v3.0/testing/linux-3.2-rc5.tar.bz2 

state此模块,当与连接跟踪结合使用时,允许访问包的连接跟踪状态。--state state这里state是一个逗号分割的匹配连接状态列表。可能的状态是:INVALID表示包是未知连接,ESTABLISHED表示是双向传送的连接,NEW表示包为新的连接,否则是非双向传送的,而RELATED表示包由新连接开始,但是和一个已存在的连接在一起,如FTP数据传送,或者一个ICMP错误。

这里,我们需要了解一下状态机制才能很好的理解这个地方。

3)在公共网络接口屏蔽私有网络地址

我们可以从公网网络接口上删除私有IPv4网段,以防止IP欺骗。运行下面的命令,没有源路由地址的数据包会被丢弃:

 
  1. # iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP  
  2. # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP 
注意: 192.168.0.0/24表示一个网段;2)-A表示插入这个规则到该链的末端,这样如果前面有规则匹配这个包,这条规则是没法起作用的;所以如果想让你的规则起作用,需要用-I包这个规则插入前面才行。


本文来源:谁不小心的CSDN博客 数据包转发原理与iptables的使用方法简介

外部参考:http://man.chinaunix.net/network/iptables-tutorial-cn-1.1.19.html

http://www.ibm.com/developerworks/cn/linux/network/s-netip/


这篇关于数据包转发原理与iptables的使用方法简介与实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/925972

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于