Linux安全运维--一篇文章全部搞懂iptables

简介: Linux安全运维--一篇文章全部搞懂iptables

一、环境的准备

1.关于防火墙问题

但是令我好奇的是这一段为什么要关闭防火墙呢。

关闭和禁用防火墙(centos7不同于以前的版本)

(1)、直接关闭防火墙
# systemctl stop firewalld

(2)、禁止firewall开机启动
# systemctl disable firewalld

(3)、查看状态:

systemctl status firewalld

原因:虽然Centos 7 中已经有firewalld,但是现在公司或生活中大部分还是使用的是iptables。

2.关于SELinux

还有一个好奇点如下:

关闭selinux

# vim /etc/selinux/config

将SELINUX=enforcing改为SELINUX=disabled;最后要重启一下

原因:SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了。

😄竟然是这样

可是我们再继续思考,为什么都要把这些关了呢? 明明能起到安全保护的作用?那这与我们的网络安全全背道而驰吗?

猜测:我觉得这是因为外部是配有专门的防火墙设备的,这样防火墙统一管理,而且还是专业的防火墙设配,所以那不是更加的方便高效吗。

致此,关于环境的介绍应该就配置完毕,接下来开始iptables愉快的学习吧。

iptables

第一步、纸上得来终学浅,绝知此事要躬行

刚开始查阅了一大堆得资料,一堆什么表啊,链啊···阿巴阿巴阿巴····我这么蠢,的概念根本看不懂的好吧。看了就是令人头大。然后直到我看到了B站的这个阿婆主。还得多看几遍,才知道这有什么有,是个什么东西,多说无益,看了实践操作才知道。

又过了一天,我发现回忆起来视频印象还是不深刻,自己上手依旧不太会用,那决定自己再动手跟着操作一遍吧。所以为了方便操作,需要搭建两台不同ip地址的CentOS7环境,也算是复习了一遍上面的环境搭建吧,然后其中一台需要搭建一个阿帕奇服务,如下:

1.安装Apache服务。
yum install -y httpd
2.启动Apache服务。
systemctl start httpd
3.设置Apache服务开机自启动·
systemctl enable httpd
4.查询Apache服务是否处于运行中状态。
systemctl status httpd
返回active(running)则表示已开始运行Apache服务。
5.在当前浏览器页面,新开启一个网页,在地址栏输入实例的公网P地址,并回车。

1、环境说明

CentOS7 —ip:192.168.18.220 —已关firewalld和selinux-----开启apache和ssh

CentOS7(2)—ip:192.168.18.197 —已firewalld和selinux-----只有ssh

Windows10—ip:192.168.18.195 本地操作机(关闭防火墙)

ip tables顾名思义----就是对网络中的数据包,通过表的形式进行一些限定还有规则的修改。

因此:iptables简介

iptables 是集成在 Linux 内核中的包过滤防火墙系统。使用 iptables 可以添加、删除具体的过滤规则,iptables 默认维护着 4 个表(在CentOS7中)和 5 个链,所有的防火墙策略规则都被分别写入这些表与链中。

“四表”是指 iptables 的功能,默认的 iptable s规则表有 filter 表(过滤规则表)、nat 表(地址转换规则表)、mangle(修改数据标记位规则表)、raw(跟踪数据表规则表):

filter 表:控制数据包是否允许进出及转发,可以控制的链路有 INPUT、FORWARD 和 OUTPUT。

nat 表:控制数据包中地址转换,可以控制的链路有 PREROUTING、INPUT、OUTPUT 和 POSTROUTING。

mangle:修改数据包中的原数据,可以控制的链路有 PREROUTING、INPUT、OUTPUT、FORWARD 和 POSTROUTING。

raw:控制 nat 表中连接追踪机制的启用状况,可以控制的链路有 PREROUTING、OUTPUT。

2、实践是检验真理的唯一标准

1、filter表

iptables -t filter -L -n

列出filter表所有的规则。-t filter可以不写,这是默认的表。-n 表示不对 IP 地址进行反查,加上这个参数显示速度将会加快

来的数据包过滤——>input————————output——>出去的数据包过滤

Forward链和路由转发有关,也就是和NAT表有关。

1.1 INPUT链

接下来–举个例子:

本地windows可以访问CentOS7对外发布的一个80端口的网页服务,如下图:

此时我们如果在CentOS7内配置————-A INPUT指定对INPUT链添加一条规则,-j DROP指定规则类型是DROP丢弃,--dport 80指定如果目的地址是80,-p tcp指定tcp协议

iptables -t filter -A INPUT -j DROP -p tcp --dport 80

执行上面的命令之后,就会发现网页不能访问了,应为iptables已经把所有接收到了目的地址为80端口的数据包丢弃了。如下图:

查看规则:

我们再来删除规则,-D INPUT 5我们需要删除的规则在从上往下数第五条

iptables -t filter -D INPUT 5

执行完上面这条命令就可以继续成功访问了。

1.2 OUTPUT链

刚才是配置的INPUT导致接收的到DROP掉了,接下来还可以配置OUTPUT导致即将发出的包给扔掉

-A OUTPUT指定对OUTPUT链添加一条规则,-j DROP指定规则类型是DROP丢掉,-p tcp指定tcp协议,-d 192.168.18.195指定目的地址(综上,如果目的地址是这个的包即将被丢弃)

iptables -t filter -A OUTPUT -j DROP -p tcp -d 192.168.18.195

但是注意up主这里非常搞笑的一点,如果我门使用的是ssh远程操作的CentOS7,执行完上面的操作后,那么也就会断开😄

然后说一下规则插入的优先级:-A是在最后添加一条,-I是在最前插入一条,-I还可以在指定位置插入一条比如-I INPUT 5就是在第五条插入。

2、nat表

在前面我们知道filter表有INPUT链和OUTPUT链

路由之前(改目的地址)——>【PREROUTING】——>(INPUT改源)——>(FORWARD)——>(OUTPUT改目的)——【POSTROUTING】——>路由之后(改源地址)

进入INPUT和FORWARD与否是看路由决策是到外部还是外部,和NAT没有关系,大部分是进入NAT后会进入FORWARD。

然后()括号里的NAT表里面的INPUT和OUTPUT链用的不多,但是比如内部有个APP要直接发包,不用经过PREROUTONG,那么就可通过NAT表的OUTPUT链改目的地址。

然后接下来的实验就是有点类似于实现了反向代理:

首先我们用CentOS7:

下载容器yum -y install docker

运行一个nginx容器内部80端口映射到外部7799docker run -p 7799:80 nginx

直接访问7799端口就能访问到容器的Nginx映射出来的页面。

目标:

把发到CentOS7(2)7788端口的数据包转发到 18.220:7799

把CentOS7(2)发到 18.220:7799的数据包源地址改成CentOS7(2)的地址。

这样就能反向代理CentOS7,让CentOS7(2)替我们访问CentOS7。

实现:

iptablses -t ant -A PREROUTING -p tcp --dport 7788 -j DNAT --to 192.168.18.220:7799

-t nat指定修改的表是nat,-A PREROUTING指定追加的链,-p tcp指定协议,--dport 7788指定访问到的目的端口,-j DNAT指定规则是DNAT对目的地址/端口转换,--to 192.168.18.220:7799指定要转换到的位置。

前面这一条的我们只是改了目的地址,但是数据却没有返回给我们的CentOS7(2)主机,所以还是不能访问。所以接下来我们还要改源地址。

iptables -t nat -A POSTROUTING -p tcp -d 192.168.18.220 --dport 7799 -j SNAT --to

192.168.18.197

-d 192.168.18.220指定目的地址,--dport 7799指定目的端口,-j SNAT --to 192.168.18.197指定规则是SNAT对源地址的转换等价于-j MASQUERADE默认转成本机出口网卡的ip地址。

可以看到,直接成功实现反向代理。

最后,由于作者的docker环境有些问题,导致视频里出现了一些小插曲,但是下方的评论区讨论非常有意思,更能搞懂原理,理清楚思路,所以那我们就一起看看吧:

进阶学习

那么接下来我们就可以看的懂下面的这篇文章了

相关文章
|
22天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
15天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
19天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2570 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
17天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
1天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
152 2
|
19天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1565 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
2天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
21天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
920 14
|
16天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
684 9
|
15天前
|
存储 监控 调度
云迁移中心CMH:助力企业高效上云实践全解析
随着云计算的发展,企业上云已成为创新发展的关键。然而,企业上云面临诸多挑战,如复杂的应用依赖梳理、成本效益分析等。阿里云推出的云迁移中心(CMH)旨在解决这些问题,提供自动化的系统调研、规划、迁移和割接等功能,简化上云过程。CMH通过评估、准备、迁移和割接四个阶段,帮助企业高效完成数字化转型。未来,CMH将继续提升智能化水平,支持更多行业和复杂环境,助力企业轻松上云。