iptables——建立linux安全体系

目录

一. 安全技术类型

二. linux防火墙

1. 按保护范围划分:

2. 按实现方式划分:

3. 按网络协议划分:

4. 防火墙原理

三. 防火墙工具——iptables

1. netfilter 中五个勾子函数和报文流向

数据包传输过程:

① .五表四链

2 .iptable工具

① iptables原理

② iptables语法

Ⅰ语法

子命令(command):

通用匹配参数(parameter)

Ⅱ 查看iptables的规则

Ⅲ 添加规则

Ⅳ 删除规则

Ⅴ 修改默认规则 -P(大写)

Ⅵ 替换规则 -R

Ⅶ 隐含扩展

--tcp-flags mask comp

———————————————————————————————————————————

--source-port, --sport port[:port]

———————————————————————————————————————————

icmp:允许本机ping其它主机,禁止其它主机ping本机

Ⅷ 显示扩展模块

multiport扩展(多端口扩展)

iprange扩展

mac地址

string 字符串

time模块

connlimit扩展

state状态

开机自动重载规则


一. 安全技术类型

入侵检测系统:只留下攻击记录,不阻止,主要以提供报警和事后监督为主。

入侵防御系统:以透明模式工作,分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以阻断,主动而有效的保护网络的安全,一般采用在线部署方式。

防火墙:隔离功能,将不被允许访问的外网隔离在外。

防水墙:是一种防止内部信息泄漏的安全产品。预防网络、外设接口、存储介质和打印机构成信息泄漏的全部途径。

二. linux防火墙

linux防火墙是内核中的工具模块,Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中

1. 按保护范围划分:

主机防火墙:服务范围为当前一台主机

网络防火墙:服务范围为防火墙一侧的局域网

2. 按实现方式划分:

硬件防火墙:是服务器,功能只有防火墙,专用硬件级别实现部分功能的防火墙。如华为,山石,深信服等。

软件防火墙:应用软件。

3. 按网络协议划分:

网络层防火墙:OSI模型下四层,又称为包过滤防火墙

应用层防火墙/代理服务器:proxy 代理网关,OSI模型七层

4. 防火墙原理

数据包
mac头部ip头部协议/端口7层协议
(http)
真实数据校验位

防火墙会收包拆包看真实数据,检查没问题再重新装包,检查有问题隔离或者丢弃。

4层原理:传输层:协议端口号

7层原理:控制真实数据 http协议,dns协议,dhcp协议等

正向代理:代理的是客户端,绕开防火墙限制,加快访问速度

举例:翻墙

反向代理:代理的是服务端,负载均衡

三. 防火墙工具——iptables

iptables是由软件包iptables提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包

1. netfilter 中五个勾子函数和报文流向

Netfilter在内核中选取五个位置放了五个hook(勾子) function(函数),用户通过命令工具(iptables)向其写入规则。

数据流量从网卡------>内核(netfilter)

流量有两种:一种是发给你的,一种是需要你转发的。

数据包传输过程:

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

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

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

① .五表四链

五链:五个勾子函数就是五个链

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

作用:控制流量的时机,决定了在什么地方控制流量

链(chain)含义
input(LOCAL_IN)进入本机的流量
output(LOCAL_OUT)出去本机的流量
forward转发流量
prerouting路由选择前
postrouting路由选择后

四表:作用:存放链,决定如何控制流量

表中有链,链中有规则,选择合理的链做规则。

有些地方说五表,是多了一个security表(安全表)

含义
raw表跟踪数据包
mangle表标记,优先级
nat表地址转换
filter表流量过滤。是否允许流量通过

2 .iptable工具

① iptables原理

Linux 的防火墙体系主要工作在网络层,针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。Linux 系统的防火墙体系基于内核编码实现, 具有非常稳定的性能和高效率,也因此获得广泛的应用。

iptables由四个表table和五个链chain以及一些规则组成。

② iptables语法

Ⅰ语法

iptables  -t 表 子命令  链 规则

filter是默认的表,不写-t 选择表的话,默认是它。

子命令(command):
命令效果
-A 在指定链末尾追加一条规则    iptables -A INPUT (操作)
-I(大写的i)在指定链中插入一条新的,未指定序号默认作为第一条 iptables -I INPUT (操作)
-P(大写) 指定默认规则 iptables -P OUTPUT ACCEPT (操作)
-D

删除规则,  iptables -D 链 规则序号 ;

iptables -t nat -D INPUT   2 (操作)

-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 (查看常和vL一起使用)

-v 查看时显示更详细信息,常跟-L一起使用
--line-num规则带编号    iptables -t nat -vnL --line-num
-F 清除链中所有规则 iptables -F (操作)
-N 新加自定义链
-X(大写) 清空自定义链的规则,不影响其他链 iptables -X
-Z(大写) 清空链的计数器(匹配到的数据包的大小和总和)iptables -Z
-S(大写)看链的所有规则或者某个链的规则/某个具体规则后面跟编号

通用匹配参数(parameter)

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

协议匹配-p 协议名(tcp,icmp等)
地址匹配-s 源地址
-d 目的地址
接口匹配-i 入站网卡
-o 出站网卡
端口匹配--sport 源端口
--dport 目的端口

target:-j的选项(jump)

-j是数据包流向,防火墙规则匹配即停止,即排在前面的规则序号被匹配了,就不会执行下面的规则。

但是对于LOG操作时例外,LOG只是辅助,没有处理数据包

对数据包的操作效果
-j ACCEPT允许数据包通过
-j DROP直接丢弃数据包,不给出任何回应信息
-j REJECT拒绝数据包通过,必要时会给数据发送端一个响应信息
-j LOG

在/var/log/messages 文件中记录日志信息,

然后将数据包传递给下一条规则

-j SNAT修改数据包的源地址
-j DNAT修改数据包的目的地址
-j MASQUERADE伪装成一个非固定公网IP地址
Ⅱ 查看iptables的规则

iptables  -vnL  [-t 表名](查询非fliter需要指明表)

给规则加上序号:iptables [-t 表名] -vnL --line-num

Ⅲ 添加规则

-A 默认在末尾添加

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

例: -I INPUT 1 :就是在 INPUT链的规则第一条前添加规则,我就变成第一条了。

Ⅳ 删除规则

iptables  [-t 表名] -F :清空所有规则,加上表,就是清空对应表的所有规则

iptables -D 链 规则序号:删除某一条规则      例:iptables -t filter -D INPUT 2

不要轻易使用iptables -F,容易导致与远程连接断开,需要重启。

Ⅴ 修改默认规则 -P(大写)

修改成丢弃进入的数据包:iptables -P INPUT DROP

修改成接收进入的数据包:iptables -P INPUT ACCEPT

iptables [-t表名] -P <链名> <控制类型>

iptables 的各条链中,默认策略是规则匹配的最后一个环节——当找不到任何一条能够匹配数据包的规则时,则执行默认策略。

默认策略的控制类型为 ACCEPT(允许)、DROP(丢弃)两种。

例如,执行以下操作可以将 filter 表中 FORWARD 链的默认策略设为丢弃, OUTPUT 链的默认策略设为允许。

Ⅵ 替换规则 -R
iptables -A INPUT -s 192.168.91.101 -j DROP   
#添加规则
iptables -R INPUT 1 -s 192.168.91.101 -j ACCEPT
#替换规则,1是规则序号,把DROP替换成ACCEPT
Ⅶ 隐含扩展

iptables 在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块

--tcp-flags mask comp

  mask:是需检查的标志位列表,用,分隔 , 例如 SYN,ACK,FIN,RST
  comp:在mask列表中必须为1的标志位列表,无指定则必须为0,用,分隔tcp协议的扩展选项

例如:

--tcp-flags SYN,ACK,FIN,RST SYN

表示要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0,第一次握手

--tcp-flags SYN,ACK,FIN,RST SYN,ACK

表示第二次握手

--tcp-flags ALL ALL  
--tcp_flags ALL NONE

iptables -I INPUT -i ens33 -p tcp --tcp-flags FIN,RST,ACK SYN -j ACCEPT
#丢弃SYN请求包,放行其他包
———————————————————————————————————————————
--source-port, --sport port[:port]

匹配报文源端口,可为端口连续范围

--sport 1000               匹配源端口是1000的数据包
--sport 1000:3000      匹配源端口是1000-3000的数据包
--sport :3000              匹配源端口是3000及以下的数据包
--sport 1000:              匹配源端口是1000及以上的数据包
注意: --sport和--dport 必须配合-p <协议类型>使用

iptables -A INPUT -p tcp  --sport 10000:30000 -j REJECT 
#源端口10000到30000 全部拒掉
———————————————————————————————————————————
icmp:允许本机ping其它主机,禁止其它主机ping本机

类型匹配: --icmp-type ICMP类型

ICMP类型(详细可见网络的icmp部分)可以写字符串、也可以写数字代码:

Echo-Request    (代码为8) 表示请求
Echo-Reply        (代码为0)表示回复
Destination-Unreachable     (代码为3) 表示目标不可达
iptables -A INPUT -p icmp --icmp-type 8 -j DROP         
#禁止其它主机ping本机
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT 
#允许本机ping其它主机
Ⅷ 显示扩展模块

显示扩展要用-m选项指明要调用的扩展模块名

multiport扩展(多端口扩展)

1.  --source-ports,--sports port[,port|,port:port]...
   指定多个源端口,用逗号隔开

2. --destination-ports,--dports port[,port|,port:port]...

   指定多个目标端口,用逗号隔开

3. --ports port[,port|,port:port]...

    多个源或目标端口

例:

iptables -A INPUT  -s 172.16.234.10 -p tcp -m multiport --dports 22,80 -j REJECT 
#阻止ip地址来自172.16.234.1,访问当前机器的tcp22,80端口。用-m指明模块
iprange扩展

--src-range from[-to]:源IP地址范围
--dst-range from[-to]:目标IP地址范围

例:

iptables -A INPUT  -m iprange --src-range 172.16.234.10-172.16.234.13 -j REJECT 
#指明源地址为172.16.234.10-172.16.234.13的3个地址无法访问当前主机
mac地址

mac 模块可以指明源MAC地址,,适用于:PREROUTING, FORWARD,INPUT chains

-m   mac    [!] --mac-source XX:XX:XX:XX:XX:XX

!是取反

string 字符串

对报文中的应用层数据做字符串模式匹配检测

--algo {bm|kmp} 字符串匹配检测算法
 bm:Boyer-Moore           算法
 kmp:Knuth-Pratt-Morris   算法

--from offset 开始查询的地方
--to offset   结束查询的地方

iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string "bilibili" -j REJECT 
#注意  请求的包不带字符,回复的包带字符,所以要 output
time模块

根据将报文到达的时间与指定的时间范围进行匹配

--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 开始日期
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 结束日期
--timestart hh:mm[:ss]       开始时间
--timestop hh:mm[:ss]       结束时间
[!] --monthdays day[,day...]   每个月的几号
[!] --weekdays day[,day...]     星期几,1 – 7 分别表示星期一到星期日

例:iptables -A INPUT  -m time --timestart 14:00 --time 16:00 -j REJECT 

connlimit扩展

根据每客户端IP做并发连接数数量匹配,可防止Dos(Denial of Service,拒绝服务)攻击

--connlimit-upto N       #连接的数量小于等于N时匹配
--connlimit-above N    #连接的数量大于N时匹配

state状态

状态类型:

NEW新发出请求
ESTABLISHEDNEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
RELATED新发起的但与已有连接相关联的连接
INVALID无效的连接,如flag标记不正确
UNTRACKED未进行追踪的连接,如:raw表中关闭追踪

例: 新用户不可以访问,旧用户可以访问     

ipatables -A INPUT -m state --state NEW -j  REJECT
#新用户不可以访问
ipatables -A INPUT -m state --state ESTABLISHED -j ACCEPT
#旧用户可以访问
开机自动重载规则

用脚本保存各个iptables命令;让此脚本开机后自动运行

在etc/.bashrc文件中添加

在/etc/rc.d/rc.local文件添加

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

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

相关文章

设计模式-结构型模式之外观设计模式

文章目录 七、外观模式 七、外观模式 外观模式&#xff08;Facade Pattern&#xff09;隐藏系统的复杂性&#xff0c;并向客户端提供了一个客户端可以访问系统的接口。它向现有的系统添加一个接口&#xff0c;来隐藏系统的复杂性。 这种模式涉及到一个单一的类&#xff0c;该类…

爬虫-xpath篇

1.xpath的基础语法 表达式描述nodename选中该元素/从根节点选取、或者是元素和元素间的过渡//从匹配选择的当前节点选择文档中的节点&#xff0c;而不考虑它们的位置.选取当前节点…选取当前节点的父节点选取属性text()选取文本 举例&#xff1a; 路径表达式结果html选择html元…

使用java批量生成Xshell session(*.xsh)文件

背景 工作中需要管理多套环境, 有时需要同时登陆多个节点, 且每个环境用户名密码都一样, 因此需要一个方案来解决动态的批量登录问题. XShell Xshell有session管理功能: 提供了包括记住登录主机、用户名、密码及登录时执行命令或脚本(js,py,vbs)的功能 session被存储在xsh文…

6-49.自定义的学生类

本题要求定义一个简单的学生类&#xff0c;数据成员仅需要定义学号和姓名&#xff0c;函数成员的原型见给出的代码&#xff0c;请给出函数成员的类外完整实现。 其中m_id和m_name分别表示学生的学号和姓名&#xff0c;类型已经定义好。类内声明了3个成员函数&#xff0c;分别表…

Linux docker批量安装软件

1.前提 具备docker-compose.yml 和 prometheus.yml 文件 常见报错&#xff1a; 1.没有配置network 配置network即可&#xff1a; 2.缺少相关依赖 docker-compose.yml加入相关配置 3.重复项 删除掉重复的 最后 执行 等待完成 下载后相当于有了这些软件包的镜像 启动的每…

大数据Hadoop-HDFS_架构、读写流程

大数据Hadoop-HDFS 基本系统架构 HDFS架构包含三个部分&#xff1a;NameNode&#xff0c;DataNode&#xff0c;Client。 NameNode&#xff1a;NameNode用于存储、生成文件系统的元数据。运行一个实例。 DataNode&#xff1a;DataNode用于存储实际的数据&#xff0c;将自己管理…

OpenHarmony亮相MTSC 2023 | 质量效率共进,赋能应用生态发展

11月25日&#xff0c;MTSC 2023第十二届中国互联网测试开发大会在深圳登喜路国际大酒店圆满举行。大会以“软件质量保障体系和测试研发技术交流”为主要目的&#xff0c;旨在为行业搭建一个深入探讨和交流的桥梁和平台。OpenAtom OpenHarmony&#xff08;简称“OpenHarmony”&a…

Langchain-Chatchat的安装过程

参考&#xff1a;LLMs之RAG&#xff1a;LangChain-Chatchat(一款中文友好的全流程本地知识库问答应用)的简介(支持 FastChat 接入的ChatGLM-2/LLaMA-2等多款主流LLMs多款embe_一个处女座的程序猿的博客-CSDN博客 1、安装过程中出现了 GPU驱动版本 是11.8 而 python -c "…

文心版吴恩达课程:语义核心(Semantic Kernel)插件的商业应用

文心版吴恩达课程&#xff1a;语义核心&#xff08;Semantic Kernel&#xff09;插件的商业应用 Semantic Kernel is an SDK that integrates Large Language Models (LLMs) like OpenAI, Azure OpenAI, and Hugging Face with conventional programming languages like C#, P…

HTTP 基本概念(计算机网络)

一、HTTP 是什么&#xff1f; HTTP(HyperText Transfer Protocol) &#xff1a;超文本传输协议。 HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。 「HTTP 是用于从互联网服务器传输超文本到本地浏览器的协议…

【海思SS528 | VDEC】MPP媒体处理软件V5.0 | VDEC的使用总结

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

SQL简介

目录 一、SQL 简史 二、数据库简史 1、Dr. Codds 对关系型数据库系统的十二条规则 2、设计数据库的结构 3、数据库的前景 4、对于什么是客户机/服务器型电脑系统 BernardH.Boar的定义如下&#xff1a; 5、交互式语言 6、易于实现 7、SQL 总览 三、流行的 SQL 开发工具…

QT 中 QProgressDialog 进度条窗口 备查

基础API //两个构造函数 QProgressDialog::QProgressDialog(QWidget *parent nullptr, Qt::WindowFlags f Qt::WindowFlags());QProgressDialog::QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *…

Vue安装及环境配置详细教程

一、下载node.js 访问node.js官网&#xff1a;Download | Node.js 选择Windows Installer (.msi)的64-bit进行下载。 在E盘新建一个文件夹&#xff0c;取名为nodejs&#xff0c;也可以在其他盘符新建。 在安装node.js时&#xff0c;点击Change...&#xff0c;进行切换盘符安…

C#,数值计算——插值和外推,三次样条插值(Spline_interp)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 三次样条插值 /// Cubic Spline Interpolation /// Cubic spline interpolation object. Construct with x and y vectors, and /// (optionally) values of the first…

Basemap地图绘制_Python数据分析与可视化

Basemap地图绘制 安装和使用地图投影地图背景在地图上画数据 Basemap是Matplotlib的一个子包&#xff0c;负责地图绘制。在数据可视化过程中&#xff0c;我们常需要将数据在地图上画出来。 比如说我们在地图上画出城市人口&#xff0c;飞机航线&#xff0c;军事基地&#xff0c…

mysql服务日志打印,时区不对的问题

查资料发现 原来日志的时区和服务器的时区不是一个参数控制的 log_timestamps 单独控制日志的时区 show global variables like log_timestamps;看到默认的是UTC&#xff0c;只需要修改为和系统一致就行 #数据库中直接修改 set global log_timestampsSYSTEM;#配置文件my.cn…

数据结构之哈希表

数据结构之哈希表 文章目录 数据结构之哈希表一、哈希概念二、哈希冲突三、哈希函数常见哈希函数 四、哈希冲突解决闭散列闭散列的思考线性探测线性探测的实现 二次探测 开散列开散列概念开散列的思考开散列实现 五、开散列与闭散列比较 一、哈希概念 顺序结构以及平衡树中&am…

【vSphere 8 自签名 VMCA 证书】企业 CA 签名证书替换 vSphere VMCA CA 证书Ⅱ—— 创建和添加证书模板

目录 3. 使用 Microsoft 证书颁发机构创建 VMCA 证书模板3.1 打开 Certificate Template Console3.2 复制模板修改 Compatibility 选项卡修改 General 选项卡修改 Extensions 选项卡确认新模板 4. 将新模板添加到证书模板4.1 打开 Certificate Console4.2 创建证书模板 关联博文…

C++作业2

自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show() 代码&#xff1a…