7月25-26日上课内容 iptables防火墙

​防火墙:隔离功能
部署在网络边缘或者主机边缘。在工作中,防火墙的主要作用决定哪些数据可以被外网访问以及哪些数据可以进入内网访问。
网络层
安全技术:
1、入侵检查系统:检测出了威胁,病毒,木马,不会阻断网络访问,事后提供报警和监督。类似于监控。看着你,但是不干预。出了事以后再来找你。
2、入侵防御系统:一旦检测出威胁,会立即予以阻断,主动的方式保护网络安全。透明模式工作的。一般都是用在线部署的方式。(所有数据进出的必经之路。)
现在市面上大部分的防火墙都是上述二者的结合体。
防水墙:waterwall。防止信息泄露。
软件防火墙:360 卡巴斯基 金山毒霸 iptables firewalld
硬件防火墙:路由器,交换机,三层交换机
1保护范围:
 1、主机防火墙:服务范围的就是当前自己的主机
 2、网络防火墙:必经之路
2实现方式:
 1、硬件防火墙:既有专业的硬件来实现防火墙功能,又有软件来进行配合。
 2、软件防火墙:代码实现,判断。
3网络协议划分:
网络层:包过滤防火墙
应用层(代理服务器):设置数据的进出。
网络层:包过滤防火墙
linux防火墙:firewalld centos7专门自带的
                        iptables 包过滤防火墙
                        selinux 自带的安全工具。
集成在一个内核当中:netfilter组件
iptables 包过滤防火墙


工作在:网络层
主要使命是针对数据包进行过滤和限制
iptables属于用户态
netfilter 属于内核态。
过滤数据包:ip地址 端口 协议。都可以在iptables中进行配置,可以限制,也可以放行。
协议:tcp(基于端口基本上都用它) udp 
iptables的构成和工作机制
iptables的组成部分:
四表五链组成(selinux,也是一个表,不在我们讨论范围之内。)面试会问


四表:
raw:连接跟踪机制,加快封包穿过防火墙的速度,数据包跟踪
mangle:数据标记
nat:地址转换表

filter:过滤规则表,根据规则来定义或者过滤符合条件的数据包,默认表
四表的优先级:security-----------raw--------------mangle------------net--------------filter

五链:
INPUT链:处理数据包进入本机的规则
OUTPUT:处理数据包发出的规则,一般不做处理。
prerouting:处理数据包进入的规则
postrouting:处理数据包离开本机之后的规则 结合地址转换使用
FORWARD:处理数据转发规则

iptables的规则:
表里面有链,链里面有规则,规则就是我们自定义的对于数据包的控制命令。

匹配顺序:
1、根据表的优先级匹配,在表中从上到下进行检查,找到匹配规则立即停止,不在表中向下继续查找,如果匹配不到规则,按照链的默认规则进行处理。
2、报文流向
流向本机:prerouting--------->input------------>用户进程(httpd服务)---------请求---------响应------------数据要返回用户
流出本机:httpd---------->响应--------->output----------->postrouting(地址转换)---------->用户
转发:数据包进来,肯定不是同一网段,路由转发---------->forward--------->数据包出去,若不允许转发,数据包直接丢弃。

安装:

关闭防火墙:

iptables的命令格式:

iptables [-t 表名](不指定表名,默认就是filter表)管理选项[链名][匹配条件][-j 控制类型]

指定表名查看:-t 

管理选项:(大写)

-A 在链的末尾追加一条,添加

-I 在链中插入一条新的规则,可以指定序号。-i 后面的数字,表示序号

-P 修改链的默认策略

-D 删除

-R 修改,替换规则

-L 查看链中的规则(一般和vnL结合使用)

-vnL --line-number 查看规则的序号

v 显示详细信息

n 把规则以数字形式进行展示

-F 清空链中的所有规则,慎用

例:指定表名 指定添加 指定匹配条件


​ 

匹配条件:(小写)

-p 指定匹配数据包的协议类型

-s 指定匹配数据包的源ip地址

-d 指定匹配数据包的目的ip地址

-i 指定数据包进入本机的接口

-o 指定数据包离开本机使用的接口

--sport 指定源端口号

--dport 指定目的端口号

控制类型:(全部大写)

ACCEPT:允许数据包通过

DROP:拒绝,直接丢弃数据包,不给出任何信息回应

REJECT:拒绝,但是会给一个响应信息。

SNAT:修改数据包的源ip地址

DNAT:修改数据包的目的地址。

添加规则:iptables -I INPUT 1 -p icmp -j ACCEPT

 

第一条规则变为accept了,就允许了

iptables -vnL --line 在规则前面加上编号,更加直观

指定ip地址

iptables -A INPUT -s 192.168.233.20 -p tcp -j REJECT

指定端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

指定只有20端口才能访问10的tcp的80端口

iptables -A INPUT -s 192.168.233.20 -p tcp --drop 80 -j ACCEPT

删除规则:

IPtables -D INPUT 4 (根据指定规则序号来删)

修改规则:(用的很少)

让它拒绝(指定规则序号,修改第几条)

iptables -R INPUT 1 -p icmp -j REJECT (不推荐)

修改规则一般不用,都是添加或者删除。且它们都是即配即生效。

修改链的默认规则(核心,重点):

在生成中iptables所有的链的默认规则都是DROP(清空规则之后默认就是全DROP了)

iptables -P INPUT DROP

-P 修改指定链的规则 改为DROP

全部拒绝了,远程连接不上了

 回虚拟机编辑,让其重新允许

生成当中都是按照白名单来设置的,默认策略就是全拒绝

以上的设置都是临时策略,重启防火墙就可以恢复默认了

默认保留的策略如下:

慎用清空,默认全是拒绝。没有进行默认保留策略的备份,又无法进入机房重新配置,就是炸。

通用匹配:

网络协议 端口 ip地址

综合:整个网段禁止访问10服务器的80端口的服务

iptables -A INPUT 192.168.233.0/24 -p tcp --drop 80 -j REJECT

注:端口要跟在协议之后,ip地址要在协议之前

隐藏扩展模块:

例:既拒绝22端口,又拒绝80端口(小的数字在前,大的数字在后)

iptables -A INPUT -p tcp --dport 22:80 -j REJECT

-p:指定协议时,tcp udp 指明了是什么协议,就不需要再用-m指明扩展模块。就变成了了隐藏模块。指定多端口 可以用冒号的形式,也可用-m隐藏模块来实现。

-m:可以用明确的形式指出类型,包括多端口,mac地址,以及ip地址,数据包的状态。

指定多端口用的最多。

-m 指定多端口:

事前查:了解要配置的服务的基本情况

事后查:查配置有没有写进去

最后检测指定的策略有没有生效

iptables -vnL --line-number

指定协议 指定多端口 拒绝多个:iptables -A INPUT -p tcp -m multiport --dport 22,30,443,80 -j REJECT

注:使用-m指定多端口用逗号隔开,无需考虑端口号大小的范围

-m multiport 指定多端口,多个端口号用逗号分开

-m multiport --dport 目的

-m  multiport --sport 源

ip范围:

-m iprange --src-range 源ip地址的范围

-m iprange --dst-range 目的地址范围

例:

iptables -A INPUT -p icmp -m iprange --src-range  192.168.233.20-192.168.233.30 -j REJECT

即刻生效

mac地址(了解即可)

-m mac --mac-source(用的很少)

例:iptables -A INPUT -p icmp -m mac --mac-source 00:0c:29:92:4e:48 -j DROP

重点

会四表五链,是哪四表五链及其用处

四表的优先级

报文的数据流向

相关的命令选项:会添加及删除规则

指定多端口及ip范围

---------------------------------------------------------------------------------------------------------------------------------

iptables防火墙(二)

四表五链(核心)

raw mangle nat filter

表的作用,容纳各种链

五链

INPUT 处理进入本机的规则

OPTPUT 出本机的规则

PREROUTING 进入本机是否需要进行地址转换

POSTROUTING 出本机是否需要进行地址转换

FORWARD 转发数据

链的作用就是容纳各种规则

规则是从上到下匹配,一旦匹配立即终止;不再向下匹配。

规则

iptables -t /filter(指定表,默认fil) -A -I -P -D -R -P(管理选项,大写)

-p(指定匹配条件) ip地址要写在协议之前,端口号要写在协议之后

-j 控制选项 ACCEPT REJECT DROP SNAT/DNAT(源/目标地址转换)

-vnL --line-number 查看规则的序号

数据流向问题(以httpd服务为例)

httpd 服务名 apache服务

请求

响应

                                                          INPUT

请求---发起方---用户---客户端---请求---------->httpd

三次握手(建立连接)          静态页面

响应--------------httpd------>页面------------>用户(客户端)/----->数据库

访问结束,四次挥手

iptables的备份与还原

1、写在命令行当中的都是临时配置

2、把我们的规则配置在服务的文件当中,形成永久生效。

策略备份:

iptables-save > /opt/ky30.bak

默认配置文件:

iptables-save > /opt/ky30.bak 导出配置

iptables-restore < /opt/ky30.bak 导入

导入配置也是临时生效,永久生效必须写入配置文件当中

/etc/sysconfig/iptables写入配置文件当中。

自定义链(自定义添加链名)

1、创建自定义链

iptables -N custom

查看 iptables -vnL

不加-t,就是没有指定表名,就是默认在filter表中添加一个自定义链

2、怎么给自定义链改名字

iptables -E 原链名 新链名

例:iptables -E custom ky30

-vnL 查看一下

3、添加规则

iptables -I ky30 -p icmp -j ACCEPT

iptables -I INPUT -p icmp -j ky30

注:创建在自定义链当中的规则,需要添加到默认链当中,才能够使用

-j ky30 自定义的链名。

删除自定义链:

iptables -D INPUT 1

查看一下

还需要在自定义链中把它删除掉

 

这样才能删除自定义链

iptables -X ky30

再查看一下,自定义链就没有了

 总结:

第一步,自定义链的规则被默认链使用,要先在默认链当中删除,删除默认链之后,再把自定义链当中的规则删除,最后才能把自定义链删除。

iptables -X ky30 (自定义的链名)

SNAT和DNAT

SNAT:源地址转换

内网到外网 转换源

DNAT:目标地址转换

外网到内网 转换目的

 

必须要做地址转换

 

 

DNAT: 目标地址转换
外网到内网 目的
12.0.0.10                                                 10.0.0.10                      192.168.233.21

10.0.0.10                                                                                          192.168.233.10
web服务器 网关服务器                              网关服务器                        客户端            

                                                                    地址转换
10 目的地址10.11                180    12.0.0.10                          12.0.0.10源    192.168.233.10
web服务器------网关服务器----------12.0.0.10.--------网关服务器----客户端发起请求

web服务器响应请求--------网关服务器--------网关服务器......客户端
                                                              180     12.0.0.10    目标                192.168.233.21

10.10    10.11                         180  源

小实验: 

 test1:192.168.233.10 内网服务器


test2:192.168.233.20 网关服务器
ens33 test1的网关192.168233.254
ens36 test2的网关12.0.0.254


test3: 192.168.233.30 web服务器

撰写栏:只使用于同一命令同一操作

修改test3

web服务器,安装一下web服务 

yum -y install httpd

 都开启一下服务

systemctl restart httpd

测试一下服务

 

 

修改一下test1的ip地址

test2在虚拟机上添加网卡

ifconfig 有ens36

但是网卡文件没有

需要配置一下

ens33的ip地址配置成内网服务器的网关

把它复制成36

改设备名称和ip地址

ip地址对应外网的12.0.0.254

还需要修改内核参数,让服务器开启转发功能

/etc/sysctl.conf 重要的配置文件

可以修改内核参数,永久生效

开启它的转发功能

重启一下网络

进虚拟机看一下配置是否生效

接下来开始做地址转换

从ens36出

把出去的地址转换成10.0.0.10

回来时转换成11.0.0.11

先从内到外,做源地址转换

指定表 指定网段(因为不止一个服务器) 指定设备 指定控制条件

iptables t nat A POSTROUTING -S 192.168.233.0/24 -o ens36 SANT --to 10.0.0.10

从test1访问test3,看一下日志

做目标地址转换

 iptables t nat ·A PREROUTING ·d 11.0.0.11  ens36 p tcp .dport 80 .j DNAT .to 192.168.233.10:80

iptables *t nat A PREROUTING -d 11.0.0.11 -i ens36 p tcp -dport 80 j DNAT --to 192.168.233.10:80
-t nat 指定表名
-A PREROUTING
-d 指定目的ip
p指定tcp协议
-dport 80 指定端口号为80
-j DNAT 目标地址转换
-to 192.168.233.10:80
所有外部来的访问IP地址都变成11.0.0.11来访问内网,目标端口为80,协议是tcp协议的流量转发到192.168.233.10:80的端口.

外部客户端可以通过11.0.0.11:80来访问内部服务器192.168.233.10:80的http服务

查看一下

到test3访问试一下,看看test1的日志

 

 

linux系统如何抓包

面试题,也是必要的技能之一

用tcpdump来实现linux抓包,自带的工具。

tcpdump

 tcpdump tcp-i  ens33 -t -s0 -c 10 and dst port 80 and src net 192.168.233.0/24 -w /opt/target.cap

指定抓包的协议 tcp
-i ens33 只抓经过ens33的数据包
-t:不显示时间戳
-s0: 抓取完整的数据包
and:目的端口是80,and 192.168.233.0/24数据包的源地址

-w 把抓包的文件保存

执行一下

多访问几次,看看抓包情况

用xshell看会是乱码,我们把抓的包放到桌面

 

用wireshake看一下抓的包

 

刚刚的是第一种方式,指定,我们来看第二种方式,不指定

动态处理(用的比较多)

同样放到桌面上,用wireshake来看一下

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值