网络知识 娱乐 Linux基础——防火墙(一)

Linux基础——防火墙(一)

概念与

作用

网络中的防火墙,是一种将内部网络和外部网络分开的方法,是一种隔离技术。防火墙在内网与外网通信时进行访问控制,依据所设置的规则对数据包做出判断,最大限度地阻止网络中黑客破坏企业网络,从而加强企业网络安全。

分类

硬件防火墙:思科地ASAH3Csepath

软件防火墙:iptables

iptables

linux操作系统中默认内置一个软件防火墙,为iptables

netfilter位于linux内核中的包过滤功能体系,称为linux防火墙的“内核态”;

iptables位于/sbin/iptables,用来管理防火墙规则的工具,称为Linux防火墙“用户态”

包过滤的工作层次

主要是网络层,针对IP数据包,体现在对包内的IP地址、端口等信息的处理上。

规则链

规则作用:对数据包进行过滤或处理

链作用:容纳各种防火墙规则

链的分类依据:处理数据包的不同时机

默认的5种规则链

INPUT:处理入站数据包

OUTPUT:处理出站数据包

FORWARD:处理转发数据包

POSTROUTING:在进行路由选择后处理数据包

PREROUTING:在进行路由选择前处理数据包

规则表

表的作用:容纳各种规则链

表的划分依据:防火墙规则的动作相似

默认包括四个规则表

raw:确认是否对该数据包进行状态跟踪

mangle:为数据包设置标记

nat修改数据包种的源、目标IP地址或端口

filter:确认是否被放行该数据包(过滤

iptables

匹配流程

规则表之间的顺序:

rawà mangleà natà filter

规则链之间的顺序:

入站:PEROUTINGà INPUT

出站:OUTPUTà POSTROUTING

转发:PEROUTINGà FORWARDà POSTROUTING

规则链内的匹配顺序

按照顺序依次检查,匹配即停止

若找不到相匹配规则,按核链的默认策略处理

命令

iptables

格式:iptables 选项 参数

-A:插在链的最上面

-i:插在链的最下面

linux操作系统就相当于一个路由器,而路由器可以作为网关,所以linux可以模拟网关

数据包在经过Linux时,网关功能是如何实现的呢?

如果ping192.168.200.200,那么数据包的源IP为自己,目标IP192.168.200.200,当数据包从eth0网卡进去后,网关发现这个数据包的目标IP地址是找自己的,于是就经历:入站à 出站 ,这个过程。(入站是kernel接收这个数据包,出站是kernel返回一个响应包)

如果数据包IP不是自己的,且符合网关路由规则(网关为每个网卡生成一个路由规则,规则为网卡网段,这样网关接收数据后,就可以知道从哪个网卡发出)。按照路由规则,转发数据包走的是FORWARD这条路线。

数据包需要一去一回,在入站堵住,就是kernel收不到,在出站堵住,就是收到了但不回复。这三条录对于iptables来说,叫做链。

环境搭建

1.

准备三台服务器,IP地址如下:

名称

IP

Server1

192.168.200.4

Server2

充当网关

192.168.200.6

192.168.100.6

Server3

192.168.100.7

2.

Server1的配置正常即可,可以改变其IP地址,关闭防火墙。

3.

先将server2关机,然后点击编辑虚拟机设置

server2添加一块网卡,使用VMnet1虚拟网卡(VMnet1使用的是192.168.100.0网段)

(注意:第二块网卡不能和第一块网卡选用相同的虚拟网卡。这里我的第一块网卡使用的虚拟网卡的IP网段为192.168.200.0网段,也就是和server1位于同一网段。而server1server2的第一块网卡都使用VMnet8网卡,此时的VMnet8就是这两块网卡的网关,而server2的第二块网卡网段为192.168.100.0,不同于前两块网卡,所以另起VMnet1作为它的网关。)

[root@client ~]# cd /etc/sysconfig/network-scripts/

//server2上进入网卡配置目录

[root@client network-scripts]# cp ifcfg-eth0 ifcfg-eth1

//复制eth0的网卡配置文件,将其更名为eth1

解释:新添加的网卡默认是没有配置文件的,所以我们需要在网卡的配置目录手动编写一个配置文件。将其更名为eth1网卡的配置文件,然后进入其中修改内容。

[root@client network-scripts]# vim ifcfg-eth1

//修改eth1网卡配置文件

切记,除了修改IP地址外,上面的DEVICE的值要修改成eth1,否则它将调用eth0网卡,但是它找不到,所以IP将不能应用。

[root@client network-scripts]# ifcfg eth1 up

//启动eth1网卡

[root@client network-scripts]# service network restart

//重启网卡

[root@client network-scripts]# ifconfig

//查看网卡状态

应用成功

4.

server3IP地址改成192.168.100.7,并更改其网卡为VMnet1,然后关闭防火墙。

5.

此时server2拥有两块网卡,地址分别是192.168.200.6192.168.100.6。然后我们在server2上分别Ping server1server3,测试连通性。

无误后,我们再在server1ping server3

可以通信。

这是因为server1的数据包发送给server2eth0网卡,eth0网卡入站交给kernel,然后在经过eth1网卡出站,发到192.168.100.7server2在这里就充当了网关的作用。

6.

如果出现server1server3不能ping通,那么执行以下操作

[root@client ~]# vi /etc/sysctl.conf

//进入linux内核参数配置文件(不要用vim

将第一个生效参数的0改成1

[root@client ~]# sysctl -p

//让其立即生效

此过程是为了打开FORWARD传输。

实践测试

[root@client ~]# iptables -t filter -L

//查看filter表里的内容,默认看的就是filter

policy默认链规则,如果链种没有特殊设定规则,那么默认遵循默链的默认规则。

目前Chain(链)里是没有内容的,如果你的有,那么你应该没有关闭iptables服务。

由于规则是空的,所以它不会阻止任何数据包。

·从入站让它不通

Xshell的连接协议为TCPping的协议为ICMP

[root@client ~]# iptables -A INPUT -p icmp -j DROP

//-A不指定表名为人为filter,在INPUT-p指定协议icmp-j控制类型为DROP丢包

[root@client ~]# iptables -L

//查看规则

source:来源  destination:目标;anywhere是任何,也就是所有用户

测试:

[root@client ~]# iptables -F

//清空链里的所有规则

测试:

·从出站让他出去

[root@client ~]# iptables -A OUTPUT -p icmp -j DROP

//出站限制icmp

测试:

数据包能被接收,但是回不来了

如果不限定协议,那么将拒绝所有,xshell也将不能运行。

桥接模式模拟的其实是交换机,NAT模式模拟的其实是路由器。

[root@client ~]# yum -y install tcpdump

//安装抓包工具

[root@client ~]# tcpdump -p icmp

//实时监控抓取icmp协议包

使用Pcping虚拟机

我这里有域名,所以是www.xiaofa.com,但并不影响

192.168.200.1www.xiaofa.com发数据包,www.xiaofa.com回复相应包给192.168.200.1

数据包在经过VMnet8后,被重新封装转发,将源地址从PC改成VMnet8

修改链的默认规则

[root@client ~]# iptables -A INPUT -p tcp -j ACCEPT

//先添加一条允许tcp的规则,防止xshell掉线

[root@client ~]# iptables -P INPUT DROP

//更改默认链的规则为DROP

有几个网卡,几个网段就有几个路由规则。

跨网段数据包是发给网关的,由网关选择数据包走的网卡接口。

如果不设置网关,那么数据包可以发出,但是不能回来。

实验操作

1.

[root@centos ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

//进入server3的网卡配置文件,注释网关

[root@centos ~]# service network restart

//重启网卡

//server3注释掉网卡时,server1就不能ping server3

server3上进行抓包测试:

//可以看到,数据包虽然不能返回,但是server1发出的数据包是成功发到server3,但是没有回复。

当我们解除网卡的注释,在server1ping server3,再server3上抓包测试:

可以看到,不光由从200.4接收的数据包,还有从100.7发出的数据包。

2021-2-21