首页 > 系统相关 >基础-Linux的netfilter和iptables

基础-Linux的netfilter和iptables

时间:2023-02-16 09:00:53浏览次数:51  
标签:iptables 流量 filter 地址 nat Linux netfilter

iptables是什么?你为啥要学?

Linux的网络控制模块在内核中,叫做netfilter。而iptables是位于用户空间的一个命令行工具,它作用在OIS7层网络模型中的第四层,用来和内核的netfilter交互,配置netfilter进而实现对网络的控制、流量的转发 。

那iptables既然是个命令行工具,那么是不是有和它类似的其他工具呢?有的,比如的我们常听到的firewalld,还有比较少见的nftables。

毫不夸张的说,整个linux系统的网络安全就是基于netfilter构建起来的。

iptables安装

安装、启动、查看、开启启动

yum install -y iptables-services
yum start|restart|reload|stop|status iptables

iptables默认配置文件位置 /etc/sysconfig/iptables

centos7.x默认用的是 firewalld ,所以你是看不到这个配置文件的

五表五链

iptables中总共有4张表还有5条链,我们可以在链上加不同的规则。

五张表:filter表、nat表、mangle表、raw表、security表

五条链:prerouting、input、output、forward、postrouting

你可以通过iptables -t ${表名} -nL查看表上的链

图片

流量走向

下面是流量进入iptables的流转过程,这个图很重要,网上也有很多这种图,我贴上了一个我认为最准确(也不一定对)。

图片

稍微解析一下上图:

  1. 绿分别代表上一小节中提到的iptables的四张表。如果你开启着SELinux,还会多出一个security
  2. 上图左上角写的:incoming packet,表示这是从互联网其他设备中来的流量。它大概的走向是:先经过各个表的prerouting阶段,再经由routing decision(可以理解成查路由表,做路由选择)决定这些流量是应该交由本机处理,还是该通过其他网口forword转发走。
  3. 再看上图中的左上部分,incoming packet在做routing decision之前会先经过nat preroutings阶段,我们可以在这个阶段做dnat (目标地址改写),简单来说就是:比如这个数据包原来的dst ip是百度的,按理说经过routing decision之后会进入forward转发阶段,但是在这里你可以把目标地址改写成自己,让数据流入input通路,在本机截获这个数据包。
  4. 上图右上角写的:locally generated packet,表示这是本机自己生成的流量。它会一路经过各个表的output链,然后流到output interface(网卡)上。你注意下,流量在被打包成outgoing packet之前,会有个localhost dest的判断,如果它判断流量不是发往本机的话,流量会经过nat表的postrouting阶段。一般会在这里做DNAT源地址改写。

所以经过对上图的简单分析,如果咱想自定义对流量进行控制,那该怎么办?

这并不复杂。但是在这想该怎么办之前,我们得先搞清楚,通常情况下我们会对流量做那些控制?无非如下:

  1. 丢弃来自xxx的流量
  2. 丢弃去往xxx的流量
  3. 只接收来自xxx的流量
  4. 在刚流量流入时,将目标地址改写成其他地址
  5. 在流量即将流出前,将源地址改写成其他地址
  6. 将发往A的数据包,转发给B

等等等等,如果你足够敏感,你就能发现,上面这六条干预策略,filternat这两张表已经完全能满足我们的需求了,我们只需要在这两张表的不同链上加自己的规则就行,如下:

  1. 丢弃来自xxx的流量(filter表INPUT链
  2. 丢弃去往xxx的流量(filter表OUTPUT链
  3. 只接收来自xxx的流量(filter表INPUT链
  4. 在刚流量流入时,将目标地址改写成其他地址(nat表prerouting链
  5. 在流量即将流出前,将源地址改写成其他地址(nat表postrouting链
  6. 将发往A的数据包,转发给B(filter表forward链

数据包在iptables中的走向还可以简化成下面这张图

图片

参考:程序员白日梦(这篇文章是我看到的最好的一篇,一定要看)

练习

iptables 命令

iptables -t ${表名}  ${Commands} ${链名}  ${链中的规则号} ${匹配条件} ${目标动作}

表名:4张表,filternatmangleraw

Commands:尾部追加-A、检查-C、删除-D、头部插入-I、替换-R、查看全部-L、清空-F、新建chain-N、默认规则-P(默认为ACCEPT)

链名:5条链,PREROUTINGINPUTFORWOARDOUTPUTPOSTROUTING

匹配条件-p协议、-4-6-s 源地址-d 目标地址-i 网络接口名

目标动作:拒绝访问-j REJECT、允许通过-j ACCEPT、丢弃-j DROP、记录日志 -j LOG、源地址转换-j snat、目标地址转换-j dnat、还有RETURNQUEUE

可以通过像如下查看使用帮助文档。主要可以分如下三个部分

iptables --help
 Usage:    # 使用案例
 Commands: # 命令选项
 Options:  # 其他可选项

参考: 程序员白日梦 wiki

好了,我也是菜鸡,后续再加上实际的练习案例

标签:iptables,流量,filter,地址,nat,Linux,netfilter
From: https://www.cnblogs.com/xysgo/p/17125436.html

相关文章

  • Windows命令findstr文本文件中查找字符串(findstr-对应于Linux中的grep命令)
    一、实例如查找coco.names文件中的car所在的行:findstr/N/A:02carcoco.names或将全部内容(用点.代替)转出到文本文件:findstr/N/A:02.coco.names>coco.txt二、知识点......
  • linux 中 grep命令的-x选项
      grep中的-x选项表示当前行只存在匹配项时才输出。001、[b20223040323@admin1test]$lsa.txt[b20223040323@admin1test]$cata.txt##测试数据ID......
  • ArchlinuxARM 树莓派平台安装指南
    文章翻译自ArchlinuxARM->Platforms->RaspberryPi4->Installation,估计很多人都打不开,据说只有在MAC平台下才可以打开。Note:树莓派4与树莓派3相比对电源有更高......
  • Linux01
    Linux网络配置一些常见命令ctrl+alt+t//打开终端sudoaptinstallnet-tools//安装网络工具ifconfig//查看IP地址......
  • Linux 压缩文件用法
    #tar命令:可以用来压缩或解压缩文件:#压缩tar-czvffilename.tar.gzfiles#解压缩tar-xzvffilename.tar.gz#gzip命令:可以用来压缩或解压缩文件:#压缩gzipf......
  • linux基础命令
    1.文件方面lscatcdrmcpmvvi或vimfinddirgrep2.系统方面ipifconfigserviceuserpasswdsudosuchmod3.符号(重定向和管道符);|>>>2>问题如......
  • Linux基础——文件权限、搜索查找、解压压缩、磁盘管理、进程管理、软件包管理
    一、文件权限Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限......
  • 认识Linux
    Linux操作系统目录结构的简介进入目录:cd使用cd可以进入其他目录例如:cdxxx(相对路径进入目录)cd/xx/xx(绝对路径进入目录)cd..返回上一级目录(向上)cd-回到上一......
  • Linux 系统安装 telnet
    Linux系统安装telnet下载地址RPMresourcetelnet(rpmfind.net)1、先检测是否这些软件包是否已经安装rpm-qa|greptelnetrpm-qa|greptelnet-serverrpm-qa......
  • 制作 Linux 根文件系统
    使用Busybox制作包括的组件有:Init程序和基本的shell工具(Busybox)、SSH工具(Dropbbear)敬请期待,可参考如下:https://wiki.beyondlogic.org/index.php?title=Cross_Compiling......