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环境有些问题,导致视频里出现了一些小插曲,但是下方的评论区讨论非常有意思,更能搞懂原理,理清楚思路,所以那我们就一起看看吧:

进阶学习

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

相关文章
|
14天前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
37 0
Vanilla OS:下一代安全 Linux 发行版
|
1月前
|
运维 监控 安全
安全运维:入侵检测与防御实战指南
安全运维:入侵检测与防御实战指南 【10月更文挑战第9天】
109 3
|
23天前
|
运维 监控 网络协议
|
9天前
|
缓存 运维 监控
【运维必备知识】Linux系统平均负载与top、uptime命令详解
系统平均负载是衡量Linux服务器性能的关键指标之一。通过使用 `top`和 `uptime`命令,可以实时监控系统的负载情况,帮助运维人员及时发现并解决潜在问题。理解这些工具的输出和意义是确保系统稳定运行的基础。希望本文对Linux系统平均负载及相关命令的详细解析能帮助您更好地进行系统运维和性能优化。
27 3
|
1月前
|
存储 运维 搜索推荐
|
1月前
|
Web App开发 运维 安全
1Panel:一个现代化、开源的 Linux 服务器运维管理面板
1Panel:一个现代化、开源的 Linux 服务器运维管理面板
|
1月前
|
安全 搜索推荐 Ubuntu
|
5天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
22 3
|
5天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
17 2