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

本文涉及的产品
云防火墙,500元 1000GB
公网NAT网关,每月750个小时 15CU
简介: 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环境有些问题,导致视频里出现了一些小插曲,但是下方的评论区讨论非常有意思,更能搞懂原理,理清楚思路,所以那我们就一起看看吧:

进阶学习

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

相关文章
|
2月前
|
移动开发 运维 网络协议
运维必备 | Linux netstat命令详解
运维必备 | Linux netstat命令详解
|
5月前
|
运维 监控 安全
【专栏】11 个 Linux 网络命令学习和熟练运用这些命令是提升网络管理能力的基础
【4月更文挑战第28天】本文介绍了11个必备的Linux网络命令,包括ifconfig、ip、ping、traceroute、netstat、tcpdump、ss、telnet、ftp、ssh和nmap,这些命令在网络配置、故障排查和性能监控中发挥关键作用。通过实例分析,强调了它们在实际工作中的综合应用,帮助运维工程师提升效率和应对网络挑战。学习和熟练运用这些命令是提升网络管理能力的基础。
269 1
|
运维 监控 Linux
Linux 常见运维命令
Linux 常见运维命令
108 0
|
运维 Linux Windows
【运维知识分享】Linux基础命令(五)
【运维知识分享】Linux基础命令(五)
92 0
|
运维 监控 Unix
最新 Linux 运维必备 150 个命令汇总
本文章盘点了 Linux 运维必备 150 个命令。
252 0
|
运维 NoSQL Linux
Linux基础知识- 系统随你玩之--笔记-日常开发运维常用命令
今天我们介绍一下我们日常开发运维过程中每天 都用到哪些常用命令呢。
|
运维 监控 网络协议
测试理论基础--Linux故障排查思路及常用命令(下)
Linux系统与Windows系统,应急常见的问题解决方法与思路
238 0
测试理论基础--Linux故障排查思路及常用命令(下)
|
运维 安全 Linux
测试理论基础--Linux故障排查思路及常用命令(上)
Linux系统与Windows系统,应急常见的问题解决方法与思路
220 0
测试理论基础--Linux故障排查思路及常用命令(上)
|
运维 Linux Shell
Linux 运维必备 150 个命令,速度收藏~
linux 命令是对 Linux 系统进行管理的命令。对于 Linux 系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件, Linux 系统管理的命令是它正常运行的核心,与之前的 DOS 命令类似。linux 命令在系统中有两种类型:内置 Shell 命令和 Linux 命令。
108 0
Linux 运维必备 150 个命令,速度收藏~