Loading... # 一、环境的准备 (由于我的大多数笔记都还在之前的有道云,暂时还没有搬迁过来,所以想看抢先版,可以直接访问一下笔记分享链接)[我的有道云笔记之Linux环境配置](https://note.youdao.com/s/bjMioJ6M) 我安装的是CentOS7 参照的是以下这篇文章非常的详细:[(31条消息) CentOS7(Linux)详细安装教程(图文详解)\_centos7安装教程\_缄默.ńī給の傷的博客-CSDN博客](https://blog.csdn.net/weixin_43849575/article/details/102996790) ## 1.关于防火墙问题 但是令我好奇的是这一段为什么要关闭防火墙呢。 ``` 关闭和禁用防火墙(centos7不同于以前的版本) (1)、直接关闭防火墙 # systemctl stop firewalld (2)、禁止firewall开机启动 # systemctl disable firewalld (3)、查看状态: systemctl status firewalld ```  直到我看见了这篇文章才知道答案:[(31条消息) Centos 7 安装iptables\_common17的博客-CSDN博客](https://blog.csdn.net/qq_20948497/article/details/78544682) > 原因:虽然Centos 7 中已经有firewalld,但是现在公司或生活中大部分还是使用的是iptables。 如果想学习更多关于防火墙的使用知识,那么就请看这篇文章:[(31条消息) Linux Centos7 防火墙(开启、关闭、重启、状态、端口)\_centos打开防火墙\_努力创造BUG的博客-CSDN博客](https://blog.csdn.net/m0_47087822/article/details/123179648) ## 2.关于SELinux 还有一个好奇点如下: 关闭selinux ```bash # vim /etc/selinux/config ```  将SELINUX=enforcing改为SELINUX=disabled;最后要重启一下 然后看到了这篇文章:[一文彻底明白linux中的selinux到底是什么 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/165974960) > 原因:SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了。 😄竟然是这样  可是我们再继续思考,为什么都要把这些关了呢? 明明能起到安全保护的作用?那这与我们的网络安全背道而驰吗? > 猜测:我觉得这是因为外部是配有专门的防火墙设备的,这样防火墙统一管理,而且还是专业的防火墙设配,所以那不是更加的方便高效吗。 致此,关于环境的介绍应该就配置完毕,接下来开始iptables愉快的学习吧。 # iptables # 第一步、纸上得来终学浅,绝知此事要躬行 刚开始查阅了一大堆得资料,一堆什么表啊,链啊···阿巴阿巴阿巴····我这么蠢,的概念根本看不懂的好吧。看了就是令人头大。然后直到我看到了B站的这个阿婆主。还得多看几遍,才知道这有什么有,是个什么东西,多说无益,看了实践操作才知道。 [【小知识】第9期 20分钟掌握iptables指令\_哔哩哔哩\_bilibili](https://www.bilibili.com/video/BV1rE411r7Ao/?spm_id_from=333.337.search-card.all.click&vd_source=dd5715810863163a43d26ad62935a628) 又过了一天,我发现回忆起来视频印象还是不深刻,自己上手依旧不太会用,那决定自己再动手跟着操作一遍吧。所以为了方便操作,需要搭建两台不同ip地址的CentOS7环境,也算是复习了一遍上面的环境搭建吧,然后其中一台需要搭建一个阿帕奇服务,如下: ```shell 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端口映射到外部7799`docker 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环境有些问题,导致视频里出现了一些小插曲,但是下方的评论区讨论非常有意思,更能搞懂原理,理清楚思路,所以那我们就一起看看吧:  # 进阶学习 那么接下来我们就可以看的懂下面的这篇文章了 [(31条消息) Linux iptables命令详解\_linux中 iptbles\_一口Linux的博客-CSDN博客](https://blog.csdn.net/daocaokafei/article/details/115091313) 然后把这些命令都给背一下吧: [(32条消息) 2021全国职业技能大赛-网络安全赛题解析———防火墙篇iptables(超详细)\_静止所有人通过ssh连接除了特定ip\_落寞的魚丶的博客-CSDN博客](https://blog.csdn.net/Aluxian_/article/details/120951372) 超级详细教程: [《一篇搞懂》系列之一 —— iptables - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/618848653) 最后修改:2023 年 05 月 29 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 6 如果觉得我的文章对你有用,请随意赞赏
1 条评论
niceOωO