防火墙之iptables

iptables概述

1.Linux 系统的防火墙 :IP信息包过滤系统,它实际上由两个组件netfilter 和 iptables组成。

2.主要工作在网络层,针对IP数据包。体现在对包内的IP地址、端口、协议等信息的处理上。

-netfilter/iptables关系:

netfilter:

属于“内核态”又称内核空间(kernel space)的防火墙功能体系。linux 好多东西都是内核态 用户态,那我们运维人员关注的是用户态, 内核我们关注不是很多,内核基本是我们开发人员关心的事情是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。

iptables :

属于“用户态”(User Space, 又称为用户空间)的防火墙管理体系。是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下。


netfilter/iptables后期简称为iptables。iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。表中所有规则配置后,立即生效,不需要重启服务。

iptables的四表五链

五链:控制流量的时机

流量:有两种可能性:一种是发给你的,另一种是需要你转发的

五个规则链:

1.pre -routing :路由选择前处理数据包

2.post -routing:路由选择后处理数据包

3.input :处理进入本机的数据包

4.output :处理本机出去的数据包

5.forward :处理转发数据包

四个规则表:(按优先级排列)如何控制流量

raw > mangle > nat > filter

1.raw表:确定是否对该数据包进行状态跟踪

2.mangle表:为数据包设置标记

3.nat表:修改数据包中的源、目标ip地址或端口

4.filter表:确定是否放行该数据包(实际上就是过滤)

总结:

  • 表的作用:容纳各种规则链

  • 表的划分依据:防火墙规则的作用相似

  • 链规则的作用:对数据包进行过滤或处理

  • 链的作用:容纳各种防火墙规则

  • 链的分类依据:处理数据包的不同时机

内核数据包的传输过程

1.当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要 转送出去

2.如果数据包是进入本机的,数据包就会到达INPUT链。数据包到达INPUT链后, 任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达

3.如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出

iptables的安装

centos7默认使用firewalld防火墙,没有安装iptables,若想使用iptables防火墙,必须先关闭firewalld防火墙,再安装iptables

yum -y install ptables iptables-services      #安装后再开启

iptables的基本语法:

iptables   [-t  表名]  管理选项 [规则链] [匹配条件]  [-j  控制类型]

管理选项用法示例
-A在指定链末尾追加一条 iptables -A INPUT (操作)
-I在指定链中插入一条新的,未指定序号默认作为第一条 iptables -I INPUT (操作)
-P指定默认规则 iptables -P OUTPUT ACCEPT (操作)
-D删除 iptables -t nat -D INPUT 2 (操作)
-p服务名称 icmp tcp
-R修改、替换某一条规则 iptables -t nat -R INPUT (操作)
-L查看 iptables -t nat -L (查看)
-n所有字段以数字形式显示(比如任意ip地址是0.0.0.0而不是anywhere,比如显示协议端口号而不是服务名) iptables -L -n,iptables -nL,iptables -vnL (查看)
-v查看时显示更详细信息,常跟-L一起使用 (查看)
--line-number规则带编号 iptables -t nat -L -n --line-number /iptables -t nat -L --line-number
-F清除链中所有规则 iptables -F (操作)
-N新加自定义链
-X清空自定义链的规则,不影响其他链 iptables -X
-Z清空链的计数器(匹配到的数据包的大小和总和)iptables -Z
-S看链的所有规则或者某个链的规则/某个具体规则后面跟编号

匹配条件

匹配条件含义
-s源地址
-d目的地址
--sport 输入端口                
--dport输出端口
-i代表从哪个网卡进来
-o代表从哪个网卡出去

数据包的常见控制类型

控制类型含义
DROP丢弃
REJECT拒绝
ACCEPT允许
LOG日志,添加备注
SNAT源地址转换
DNAT目的地址转换

查询: -vnL

iptables [-t 表名(默认filter)] -vnL :

v:显示详细信息

n:所有字段以数字化形式显示

L:防火墙列表

显示行号:    iptables -vnL --line-num   

如果查看的不是filter表需要指明表:

iptables -vnL -t nat

添加规则:-A  -I

-A:追加规则

iptales -A INPUT -s ip/掩码 -j ACCEPT或REJECT或REJECT

示例:

iptables -A INPUT -p icmp -j REJECT 

#不允许任何主机ping本主机

#形成白名单:

iptables -A INPUT -s 192.168.116.30 -j ACCEPT  #允许192.168.116.30通过

iptables -A INPUT -i  lo  -j  ACCEPT                       #允许本机的网卡通过

iptables -A INPUT -j REJECT                                  #最后一条加入拒绝全部,白名单形成

#黑名单则反之

-I (大写的i)需要指明序号:

iptables -I INPUT 2 -s 192.168.116.0 /24 -j ACCEPT

#允许主机ssh端口通过我

语法:ipatble [-t fil] I或A 链(INPUT) 规则 -j 跳转

删除、清空规则:-D -F

-F:清空规则

iptables -F

-D:删除

iptab -D 链 规则序号

示例:

iptables -t filter -D INPUT 2

#删除 filter 表中 INPUT链中的 第2条规则

修改默认规则:-P

-F只会清空链中的规则,并不影响-P的默认规则,默认规则需要手动修改

语法:iptables [-t 表名]  -P  链名   控制类型

默认是允许通过(黑名单)

iptaples -P INPUT -j ACCEPT

修改默认不允许通过(白名单)

iptaples -P INPUT -j  REJECT                     

替换规则:-R

iptables -R INPUT 1 -S 192.168.116.30 -j ACCEPT

#将序号的内容替换为192.168.116.30

通用匹配和模块匹配

通用匹配:没有指明模块

模块匹配:写规则的时候要  -m  指定模块名

-m 模块名 如-m time 指定时间模块

通用匹配

直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件。

1.协议匹配: -p协议名

2.地址匹配: -s 源地址、-d目的地址 #可以是IP、网段、域名、空(任何地址)

3.接口匹配: -i入站网卡、-o出站网卡

iptables -A FORWARD ! -p icmp -j ACCEPT         #使用了icmp协议

iptables -A INPUT -s 192.168.91.101 -j DROP     #使用源地址

iptables -I INPUT -i ens33 -s 192.168.116.0/24  -j DROP 

 #进入的网卡口为ens33,源地址为192.168.116.0/24

iptables -I INPUT -p icmp -j DROP

iptables -A FORWARD ! -p icmp -j ACCEPT

   #感叹号”!”表示取反

扩展模块的使用

隐含匹配

要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类 型等条件。

 端口匹配: --sport 源端口、–dport 目的端口,可以是个别端口、端口范围

注意:

  • --sport和--dport 必须配合-p <协议类型>使用

  • 端口可以使用的范围 0-65535

TCP标记匹配: --tcp-flags TCP标记

ICMP类型匹配:--icmp-type ICMP类型,可以时字符串、数字代码

示例题:

100能ping通101,101ping不通100

iptables -A INPUT -p icmp --icmp-type 8 -j DROP

#禁止其它主机ping本机

iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT

 #允许本机ping其他主机

icmp 协议的扩展选项
 语法:--icmp-type   {类型编号(0或8) |协议名}

 0/0  = echo-reply icmp应答
 8/0  = echo-request icmp请求

显示 扩展模块

要求以“-m扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件

多端口匹配

-m multiport --sport 源端口列表

-m multiport --dport 目的端口列表

iptables -A INPUT -P tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT

iptables -A INPUT -P udp -m multiport --dport 53 -j ACCEPT

IP范围匹配

iptables -A INPUT  -m iprange --src-range 192.168.91.101-192.168.91.103 -j REJECT 
# 指定 源地址为192.168.91.101-192.168.91.103   3个地址无法访问 当前主机

MAC地址匹配    适用于:PREROUTING, FORWARD,INPUT chains

-m   mac   --mac-source XX:XX:XX:XX:XX:XX(MAC地址)

iptables -A FORWARD  -m --mac-source xx:xx:xx:xx:xx:xx  -j DROP

#禁止来自某MAC地址的数据包通过本机转发

状态匹配

state

状态类型:

  • NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求

  • ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态

  • RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系

  • INVALID:无效的连接,如flag标记不正确

  • UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪

格式:

-m state  --state连接状态

ipatables -A INPUT -m state --state NEW(新发起的) -j REJECT ipatables -A INPUT -m state --state ESTABLISHED(已存在) -j ACCEPT

新用户不可以访问 老用户可以访问

故障案例:

state示例题:

规则优化、实践

  1. 安全放行所有入站和出站的状态为ESTABLISHED状态连接,建议放在第一条,效率更高

  2. 谨慎放行入站的新请求

  3. 有特殊目的限制访问功能,要在放行规则之前加以拒绝

  4. 同类规则(访问同一应用,比如:http ),匹配范围小的放在前面,用于特殊处理

  5. 不同类的规则(访问不同应用,一个是http,另一个是mysql ),匹配范围大的放在前面,效率更高

  6. 应该将那些可由一条规则能够描述的多个规则合并为一条,减少规则数量,提高检查效率

  7. 设置默认策略,建议白名单(只放行特定连接)

    A:iptables -P,不建议,容易出现“自杀现象”

    B:规则的最后定义规则做为默认策略,推荐使用,放在最后一条

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/204158.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker-compose;私有镜像仓库harbor搭建;镜像推送到私有仓库harbor

docker-compose&#xff1b;私有镜像仓库harbor搭建&#xff1b;镜像推送到私有仓库harbor 文章目录 docker-compose&#xff1b;私有镜像仓库harbor搭建&#xff1b;镜像推送到私有仓库harbordocker-compose私有镜像仓库harbor搭建镜像推送到私有仓库harbor docker-compose D…

IC卡卡号,UID卡CUID卡物理卡号修改

普通M1卡的卡号是锁死的&#xff0c;不能修改&#xff0c;考勤工作证等使用的就是IC卡的物理卡号&#xff0c;读卡器读取后转换成10进制输出&#xff0c;出厂就固化了&#xff0c;因此用户拿到手的卡片卡号是不连续的&#xff0c;也是没有规律的&#xff0c;比如物理卡号8602A2…

Appium+python+unittest搭建UI自动化框架

阅读本小节&#xff0c;需要读者具备如下前提条件&#xff1a; 1. 掌握一种编程语言基础&#xff0c;如java、python等。 2. 掌握一种单元测试框架&#xff0c;如java语言的testng框架、python的unittest框架。 3. 掌握目前主流的UI测试框架&#xff0c;移动端APP测试框架…

【路径规划】move_base、路径规划算法、局部避障算法介绍

资料整理供个人学习使用。 文章目录 一、move_base1、move_base 包内容2、move_base 参数解析1. move_base 参数2. 全局代价地图参数3. 局部代价地图参数4. 全局规划器参数5. 局部规划器参数 二、路径规划1、Dijkstra2、最佳优先搜索3、A*4、A* 和 Dijkstra 比较 三、局部避障1…

基于SSM搭建系统

原理 SSM集成 SpringSpringMvcMybatis集成 框架集成核心&#xff0c;如果你的项目中&#xff0c;用到了Spring框架&#xff0c;那么其他框架主要就是和Spring集成&#xff1b; 和Spring集成的核心思路&#xff1a; 把当前框架的核心类&#xff0c;交给Spring管理&#xff08…

WP采集插件的进阶功能:输入关键词采集及定向采集实现精准筛选

WP采集插件教程&#xff1a;轻松实现全网文章采集 近年来&#xff0c;WordPress&#xff08;简称WP&#xff09;作为一款强大的网站建设工具&#xff0c;广受用户喜爱。然而&#xff0c;对于许多网站管理员来说&#xff0c;如何轻松而高效地获取全网各类文章内容成为了一个亟待…

AutoCAD 2024 中文

AutoCAD 2024是一款全球知名的计算机辅助设计软件&#xff0c;由Autodesk公司开发。它提供了丰富的绘图功能和工具&#xff0c;可以满足不同领域的需求&#xff0c;支持2D和3D绘图设计&#xff0c;包括平面图、立体图、剖面图等等。此外&#xff0c;AutoCAD 2024具备强大的数据…

明基|书客|松下护眼台灯值不值得买?爆款多维度测评揭晓!

随着近视率越来越高的现象&#xff0c;护眼台灯逐渐成为大多数家庭的日常所需&#xff0c;许多护眼台灯品牌为了降低价格吸引消费者而不惜大程度上降低材料品质&#xff0c;导致台灯寿命减短&#xff0c;光线变差等问题频发&#xff0c;这也让广大对于如何选择一款好的护眼台灯…

QListWidget中自定义widget大小自适应

背景&#xff1a; QListWidget中的item&#xff0c;可以添加自定义的widget。 但是怎么去调整widget的大小呢&#xff1f; 参考&#xff1a;QT QListWidget的添加与删除&#xff0c;滚动条显示或隐藏&#xff0c;判断是否滑到顶部或底部&#xff0c;并使QListWidgetItem自适…

vue3 input 上传 vuedraggable 实现拖拽排序

效果如下 input 实现上传功能 通过隐藏 input 元素&#xff0c;点击上传触发 input 点击事件&#xff0c;监听 input change 事件 accept 上传文件的类型 multiple 是否允许上传多个 <template><div class"cursor-pointer" click"submitUpload"&…

零代码集成自动化的实现逻辑是什么?

零代码的概念是什么&#xff1f; 零代码平台是一种软件开发工具或平台&#xff0c;非技术人员能够创建和部署应用程序&#xff0c;而无需编写任何代码。它提供了可视化的界面和拖拽式的操作&#xff0c;使用户能够通过简单的配置和组合&#xff0c;以图形化的方式构建应用程序…

vue2常见的语法糖

Vue.js 2 提供了一些语法糖&#xff08;syntactic sugar&#xff09;来简化常见的操作。以下是一些 Vue.js 2 中常用的语法糖&#xff1a; v-bind 简写&#xff1a; <!-- 完整语法 --> <a v-bind:href"url">Link</a><!-- 简写 --> <a :hr…

Jmeter进阶使用:BeanShell实现接口前置和后置操作!

一、背景 我们使用Jmeter做压力测试或者接口测试时&#xff0c;除了最简单的直接对接口发起请求&#xff0c;很多时候需要对接口进行一些前置操作&#xff1a;比如提前生成测试数据&#xff0c;以及一些后置操作&#xff1a;比如提取接口响应内容中的某个字段的值。举个最常用…

nexus制品库的介绍及详细部署使用

一、nexus 介绍 Nexus 是一个强大的仓库管理工具&#xff0c;用于管理和分发 Maven、npm、Docker 等软件包。它提供了一个集中的存储库&#xff0c;用于存储和管理软件包&#xff0c;并提供了版本控制、访问控制、构建和部署等功能。 Nexus 可以帮助开发团队提高软件包管理的效…

构建强大的接口自动化测试框架:Pytest实践指南!

一. 背景 Pytest目前已经成为Python系自动化测试必学必备的一个框架&#xff0c;网上也有很多的文章讲述相关的知识。最近自己也抽时间梳理了一份pytest接口自动化测试框架&#xff0c;因此准备写文章记录一下&#xff0c;做到尽量简单通俗易懂&#xff0c;当然前提是基本的py…

DevEco Studio设置每次进入 是否自动进入上一次的项目

首先 我们第一次创建项目 并不是这个界面 如果我们想在这个界面创建项目的话 可以 点击左上角 File 下的 New 下的 Create Project 这里 我们可以点击左上角 File 选择下面的 Settings… 这个界面就有非常多的配置 然后 我们选择到下图操作的位置 这里有一个Reopen projects…

适用于 Windows 和 Mac 电脑的最佳数据恢复软件

当我们的电脑上的文件被错误删除时&#xff0c;总是很难恢复该文件&#xff0c;或者除非您进行了系统还原&#xff0c;否则一切都会恢复到删除恢复的文件或文件夹之前的状态。 拥有合适的 PC 软件始终可以帮助您改善 PC 用户的体验&#xff0c;而适用于 Windows 10 和 11 的良…

SQL 金额数值转换成中文大写

需求&#xff1a;将金额转换成中文大写格式填入单据合计行&#xff1a; _佰_拾_万_仟_佰_拾_元_角_分 1234567.89 壹佰贰拾叁万肆仟伍佰陆拾柒元捌角玖分 1.函数转换 drop function n2C;CREATE FUNCTION n2C (num numeric(14,2)) RETURNS VARCHAR(20) AS BEGIN …

linux NAT网卡配置static

由于是内网&#xff0c;资料无法拷贝&#xff0c;借助参考资料&#xff0c;整理发出。 镜像安装 基本操作。 查看VM配置 图1&#xff0c;有几个信息。一个是NAT借用了网卡里的VMnet8适配器。 子网IP是从192.168.142.0 子网掩码255.255.255.255&#xff0c;对应下面配置的N…

【云平台】STM32微信小程序阿里云平台汇总——持续更新

【云平台】STM32微信小程序阿里云平台汇总——持续更新 文章目录 前言总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 【云平台】STM32微信小程序阿里云平台学习板 【云平台】小白从零开始&#xff1a;小程序阿里云平台控制STM32&#xff08…