防火墙 iptables的使用

news2024/11/29 12:33:47

目录

什么是防火墙

原理

代理

防火墙的工具

4表5列

五链:控制流量的时机

四个表:如何控制流量

​编辑

iptables 软件

格式

选项

跳转

查iptables  的规则

添加规则   A  I

删除规则   

清空规则

替换规则  R

修改默认规则(默认是允许通过 黑名单) P

设置黑名单

设置白名单

通用匹配   没有   指明模块

端口匹配: --sport 源端口、--dport 目的端口

ICMP 

192.168.17.55 可以ping通192.168.17.25   

192.168.17.25不能ping通192.168.17.55

​编辑

iprange

mac地址

格式

实例

string 字符串

time模块

connlimit  

stat

故障案例:启用了iptables state模块  用户访问有问题  查看日志 table full drop  pket


什么是防火墙

防火墙是一种技术,它通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性。防火墙技术的功能主要在于及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题,其中处理措施包括隔离与保护,同时可对计算机网络安全当中的各项操作实施记录与检测,以确保计算机网络运行的安全性,保障用户资料与信息的完整性,为用户提供更好、更安全的计算机网络使用体验

waf   web网页   防火墙

原理

数据包

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

收包   拆包  检查没问题   装包

收包   拆包   检查有问题   隔离或者丢弃

4层原理    传输协议     端口号     开发者

7层原理      控制真实数据     http      dns

四层防火墙  通过  协议   端口号   ip   mac    控制流量

七层防火墙   可以控制真实数据

代理

正向代理: fq    代理的是(客户端)       

作用: 绕开防火墙限制   加快访问速度

反向代理:代理的是(服务器 ) 

作用:负载均衡 (负担分担)  

防火墙的工具

iptable  firewalld  nft  防火墙工具

[root@localhost~] # iptables --version
iptables v1.4.21

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

Netfilter 是Linux 2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统

netfilter  中的五个勾子函数

4表5列

表中有链,链中有规则

网卡------内核(netfilter)

五链:控制流量的时机

input:  进入本机的流量      

output:出本机的流量

forward:转发数据包(流量)

pre-routing: 路由选择前      

post-routing:  路由选择后

流量:发给你的   需要你转发的

选择合理的  链   做规则

表的作用是  存放链

链决定了在什么地方控制流量

表中链  链中有规则

四个表:如何控制流量

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

mangle表:为数据包设置标记优先级                        (标记)

nat表:修改数据包中的源,目标ip地址或端口    (地址转换)

filter表:确定是否放行该数据包(过滤)     (是否允许流量通过)  

iptables 软件

格式

iptables  -t  指定表   子命令  指定链    规则  -j   跳转

iptablestableconmmandchain

parameter

target
-t filter 

-A

-D

-I

-R

-L

-F

-Z

-N

-X

-P

INPUT

FORWARD

OUTPUT

PREROUTING

POSTROUTING

-p

-s

-d

-i

-o

--sport

--dport

......

.......

-j ACCECT

-j DROP

-j REJECT

选项

管理选项用法示例
-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看链的所有规则或者某个链的规则/某个具体规则后面跟编号

[root@localhost/] # iptables -A INPUT  -s 192.168.17.25 -j REJECT 

跳转

DROP 跳转    (属于已读不回)

REJECT  拒绝     (有回应告诉你,拒绝)

ACCEPT   允许

LOG    日志

SNAT   源地址转换

DNAT   目的地址转换

查iptables  的规则

iptables -vnL [ -t 表名]

[root@localhost/] # iptables -vnL  #[-t 表名]   不加默认filter

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

iptables  -vnL  -t  nat

[root@localhost/] # iptables -vnL -t nat

给规则加上序号:iptables -vnL  --line-num

[root@localhost/] # iptables -vnL --line-num

添加规则   A  I

iptables -A    INPUT   -s 192.168.17.0/24  -j  ACCEPT 或DROP 或REJECT

A 在末尾追加

[root@localhost/] # iptables -A INPUT  -s 192.168.17.25 -j REJECT #禁止192.168.17.25访问我

-I 需要指明序号    -I  INPUT  1 在 INPUT 链的规则第一条前添加,我就变成第一条了

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

iptables -I INPUT 1 -s 192.168.17.0 -j ACCEPT #将该条命令变为第一条优先执行

删除规则   

iptables  -D  链  规则序号  iptables  -t  filter -D  INPUT 1  //删除 filter  表中 INPUT 链 中的第2条规则

清空规则

iptables  [-t  表名]  -F

[root@localhost/] # iptables -F  #清空所有规则
[root@localhost/] # iptables -vnL --line-num  #查看规则
Chain INPUT (policy ACCEPT 6 packets, 364 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 4 packets, 424 bytes)
num   pkts bytes target     prot opt in     out     source               destination    

替换规则  R

iptables  -R INPUT 1 -s 192.168.17.1 -j  ACCEPT

[root@localhost/] # iptables -R INPUT 1 -s 192.168.17.25 -j REJECT

修改默认规则(默认是允许通过 黑名单) P

iptables  -P  INPUT   DROP  #拒绝所有连接

iptables  -P  INPUT   ACCEPT  #允许所有连接

设置黑名单

[root@localhost~] # iptables -t filter -A INPUT ! -s 192.168.17.25 -j ACCEPT

设置白名单

iptables  -P  INPUT   DROP  #拒绝所有连接
iptables -A INPUT -s 192.168.91.1 -j ACCEPT 
iptables -A INPUT -i lo -j ACCEPT 
iptables -A INPUT -j REJECT 

保存防火墙规则

[root@localhost/etc/rc.d] # iptables-save > iptables_rules  #保存规则
[root@localhost/etc/rc.d] # iptables-restore  < iptables_rules   #重新导入规则

iptables-save  > 保存规则的文件   //保存规则

iptables-restore < 保存的规则文件  //重新导入规则

全局配置

[root@localhost/etc/rc.d] # chmod +x rc.local #写完需要加x赋权

[root@localhost/etc/rc.d] # cd /etc/rc.d
[root@localhost/etc/rc.d] # ls
init.d  rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d  rc.local

自定义链  

类似函数 将类型

iptables -N    web         (自定义链)

iptables -E web  WEB  (重命名)

创建完之后将规则加入到一个ip上

删除自定义链

先清空自定义链 然后 iptables -x  自定义链名

通用匹配   没有   指明模块

模式匹配  -m   模块名  指定模块

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

端口匹配: --sport 源端口、--dport 目的端口

[!] --source-port, --sport port[:port]:匹配报文源端口,可为端口连续范围
[!] --destination-port,--dport port[:port]:匹配报文目标端口,可为连续范围
[!] --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 第二次握手
iptables -A INPUT -p tcp  --sport 10000:30000 -j REJEC  #10000到30000 全部被拒

ICMP 

192.168.17.55 可以ping通192.168.17.25   

192.168.17.25不能ping通192.168.17.55

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

#可以是字符串、数字代码

"Echo- Request" (代码为8)表示请求

"Echo- Reply" (代码为0)表示回复 "Dest ination-Unreachable" (代码为3)表示目标不可达

[root@localhost~] # iptables -A INPUT -p icmp --icmp-type 8 -j DROP
[root@localhost~] # iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT 

iprange

指明连续的(但一般不是整个网络)ip地址范围

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

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

mac地址

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

格式

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

实例

ip -a  #查看mac地址
iptables -A INPUT -m mac --mac-source 00:0c:29:00:e6:dd -j REJECT
#指定mac不可访问

string 字符串

[root@localhost ~]#echo "www.bilibili.com" > /var/www/html/index.html
#自建网页
[root@localhost ~]#echo "www.baidu.com" > /var/www/html/index1.html
#自建网页


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

time模块

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

[root@localhost ~]#date
#中国标准时间
2022年 08月 14日 星期日 22:26:07 CST
[root@localhost ~]#date -u
#美国标准时间
2022年 08月 14日 星期日 14:26:09 UTC

[root@localhost ~]#iptables -A INPUT  -m time --timestart 14:00 --time 16:00 -j REJECT 
#从14点到16点禁止访问本机
iptables v1.4.21: unknown option "--time"
Try `iptables -h' or 'iptables --help' for more information.
[root@localhost ~]#rpm -ql iptables|grep time
/usr/lib64/xtables/libxt_time.so

connlimit  

根据每客户端IP做并发连接数数量匹配

可防止Dos(Denial of Service,拒绝服务)攻击

--connlimit-upto N #连接的数量小于等于N时匹配
--connlimit-above N #连接的数量大于N时匹配
模拟攻击
[root@localhost3 ~]# gcc flood_connect.c -o flood
#编译安装 黑客文件
[root@localhost3 ~]# ./flood 192.168.17.55    
#运行黑客脚本

[root@localhost 7-1]#ss 

[root@localhost1 ~]#iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 2 -j REJECT 

stat

故障案例:启用了iptables state模块  用户访问有问题  查看日志 table full drop  pket

后来研究发现 ,有一个内核选项的默认值 过低 netfilter/nf_conntrack_max  默认65536、

把这个值调大一点

ipatables  -A INPUT -m state --state   NEW #新发起            -j  REJECT
ipatables  -A INPUT  -m state --state  ESTABLISHED  #已经连接    -j   ACCEPT
                  
 新用户不可以访问  就用老的可以访问    

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue2-省市县三级联动选择框

Json数据&#xff1a;https://yjy-oss-files.oss-cn-zhangjiakou.aliyuncs.com/tuxian/area.json 如何访问本地文件参考&#xff1a;vue-访问本地json文件_vue3读取json文件-CSDN博客 .vue文件&#xff1a; <template><select v-model"mailAddress1" style…

调查显示 IT 服务事件越来越频繁

事件管理平台提供商 Transposit 对美国 1,000 名 IT 运营、DevOps、站点可靠性工程 (SRE) 和平台工程专业人士进行的一项调查发现&#xff0c;超过三分之二 (67%) 的人发现故障率有所增加过去 12 个月中影响客户的服务事件的频率。 今天在Kubecon CloudNative会议上宣布的调查…

在 AlmaLinux 9.2 上安装Oracle Database 23c

在 AlmaLinux 9.2 上安装Oracle Database 23c 1. 安装 Oracle Database 23c2. 连接 Oracle Database 23c3. 重启启动后&#xff0c;手动启动数据库4. 重启启动后&#xff0c;手动启动 Listener5. 手动启动 Pluggable Database6. 自动启动 Pluggable Database7. 设置开机启动数据…

PDF控件Spire.PDF for .NET【转换】演示:将 SVG 转换为 PDF

SVG 是一种矢量图形文件格式&#xff0c;用于创建可缩放且不损失质量的图像。然而&#xff0c;PDF由于支持高质量打印、加密、数字签名等功能&#xff0c;更适合共享和打印。将SVG转换为PDF可以保证图像在不同设备和环境下都有良好的显示效果&#xff0c;并更好地保护知识产权。…

ubuntu启动kafka报错Could not create the Java Virtual Machine.

网上有两种方式&#xff0c;但是需要具体看自己的错误信息&#xff0c;我的错误信息如下: 这里大概是说要写入日志无权限&#xff0c;所以执行的时候&#xff0c;前面加一下sudo 执行成功。

LeetCode - 110. 平衡二叉树(C语言,二叉树,配图,简单)

根据题意&#xff0c;我们只需要比较当前节点的左右子树高度差是否小于1&#xff0c;利用分治法&#xff0c;只需要满足&#xff1a; 1. 根节点的左右子树的高度差小于1。 2. 根节点左右子树的满足高度差小于1&#xff0c;在往下走&#xff0c;判断左子树根节点的左右子树是否满…

MySQL之binlog文件过多处理方法

背景 MySQL由于大量读写&#xff0c;导致binlog文件特别的多。从而导致服务器disk空间不足问题。 先备份binlog文件 tar -zcvf mysql.tar.gz mysql/data/mysql-bin.00* 修改MySQL配置 binlog过期时间 show variables like expire_logs_days; 这里 0 表示 永不过期 如果为 n…

设计必备网站,每天必看,无需翻墙。

设计师每天需要浏览各类设计互交网站&#xff0c;找素材、找灵感、看教程等等&#xff0c;下面就推荐几个非常好用的设计网站&#xff0c;我本人用了好几年&#xff0c;对广大设计师们一定有帮助&#xff0c;感觉收藏起来吧&#xff01; 1、免费设计素材——菜鸟图库 https://…

16个Cisco日常巡检命令集合

1.show running-config&#xff1a;查看所有配置 2.show version&#xff1a;查看设备版本信息 主要包括&#xff1a; IOS 版本&#xff1b; ROM bootstrap 程序&#xff1b; IOS 位置&#xff1b; CPU 和内存信息&#xff1b; 接口信息&#xff1b; NVRAM 大小&#xf…

Kubernetes(K8s)Service详解-07

Service详解 Service介绍 在kubernetes中&#xff0c;pod是应用程序的载体&#xff0c;我们可以通过pod的ip来访问应用程序&#xff0c;但是pod的ip地址不是固定的&#xff0c;这也就意味着不方便直接采用pod的ip对服务进行访问。 为了解决这个问题&#xff0c;kubernetes提供…

SL6015B降压恒流60V耐压1.5A高辉调光LED芯片 电路简单 元器件少

SL6015B是一款专为LED照明应用设计的降压恒流芯片&#xff0c;具有60V的耐压能力&#xff0c;最大输出电流可达1.5A。它采用高辉调光方式&#xff0c;通过改变输入电压或电流来调节LED的亮度。此外&#xff0c;SL6015B还具有电路简单和元器件数量少的特点&#xff0c;使其成为一…

C语言之程序的组成和元素格式

目录 关键字 运算符 标识符 姓名和标识符 分隔符 常量和字符串常量 自由的书写格式 书写限制 连接相邻的字符串常量 缩进 本节我们来学习程序的各组成元素&#xff08;关键字、运算符等&#xff09;和格式相关的内容。 关键字 在C语言中&#xff0c;相if和else这样的标识…

c++ 三目运算符在类中的使用

简介 在类比较方面&#xff0c;三目运算符可以用于重载比较运算符。 代码示例1 #include <iostream> #include <cstring>class Person { public:Person(const char* name, int age) : m_age(age) {m_name new char[strlen(name) 1];strcpy(m_name, name);}~Pe…

大模型上下文学习(ICL)训练和推理两个阶段31篇论文

大模型都火了这么久了&#xff0c;想必大家对LLM的上下文学习&#xff08;In-Context Learning&#xff09;能力都不陌生吧&#xff1f; 以防有的同学不太了解&#xff0c;今天我就来简单讲讲。 上下文学习&#xff08;ICL&#xff09;是一种依赖于大型语言模型的学习任务方式…

Python 数据清洗库详解

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 数据清洗是数据处理过程中至关重要的一部分。Python拥有许多强大的库&#xff0c;用于数据清洗和预处理&#xff0c;使得数据分析人员能够有效处理、转换和清洗数据。本文将介绍几个最常用的Python库&#xff0c…

火焰图的基本认识与绘制方法

火焰图的认识与使用-目录 火焰图的基本认识火焰图有以下特征(on-cpu)火焰图能做什么火焰图类型On-CPU 火焰图和Off-CPU火焰图的使用场景火焰图分析技巧 如何绘制火焰图生成火焰图的流程1.生成火焰图的三个步骤 安装火焰图必备工具1.安装火焰图FlameGraph脚本2.安装火焰图数据采…

第2章 知识抽取:概述、方法

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

创建数据库并使用索引查询学员考试成绩

5.1索引 索引提供指针以指向存储在表中指定列的数据值&#xff0c;然后根据指定的次序排列这些指针&#xff0c;再跟随 指针到达包含该值的行。 5.1.1什么是索引 数据库中的索引与书籍中的目录类似。在一本书中&#xff0c;无须阅读整本书&#xff0c;利用目录就可以快速查 找…

Leetcod面试经典150题刷题记录——数组 / 字符串篇

数组 / 字符串篇 1. 合并两个有序数组Python3排序法双指针法 2. 移除元素Python3 3. 删除有序数组中的重复元素Python3 7. 买卖股票的最佳时机Python3 8. 买卖股票的最佳时机ⅡPython3贪心法动态规划法 11. H 指数Python3排序法计数排序法二分查找 有个技巧&#xff0c;若想熟悉…

Vue项目图片预览v-viewer插件使用,图片预览,图片查看;antdesign+vue2+v-viewer实现图片查看器并可删除图片

Vue项目图片预览v-viewer插件使用 1. 安装 v-viewer 你可以使用 npm 或者 yarn 来安装 v-viewer&#xff1a; npm install v-viewer 或者 yarn add v-viewer 2. 导入和配置 v-viewer 在你的 Vue 项目中&#xff0c;你需要在入口文件&#xff08;通常是 main.js&#xff09…