网络安全——防火墙详解

什么是防火墙?路由策略和策略路由

在计算机中,防火墙是基于预定安全规则来监视和控制传入和传出网络流量的网络安全系统。该计算机流入流出的所有网络通信均要经过此防火墙。防火墙对流经它的网络通信进行扫描,这样能够过滤掉一些攻击,以免其在目标计算机上被执行。防火墙还可以关闭不使用的端口。而且它还能禁止特定端口的流出通信,封锁特洛伊木马。最后,它可以禁止来自特殊站点的访问,从而防止来自不明入侵者的所有通信。

防火墙分为软件防火墙和硬件防火墙,他们的优缺点:
**硬件防火墙:**拥有经过特别设计的硬件及芯片,性能高、成本高(当然硬件防火墙也是有软件的,只不过有部分功能由硬件实现,所以硬件防火墙其实是硬件+软件的方式);
**软件防火墙:**应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能比硬件防火墙低、成本低、性价比高。

Netfilter与iptables的关系
Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:

  • 网络地址转换(Network Address Translate)
  • 数据包内容修改
  • 以及数据包过滤的防火墙功能

Netfilter平台中制定了数据包的五个挂载点(Hook Point,我们可以理解为回调函数点,数据包到达这些位置的时候会主动调用我们的函数,使我们有机会能在数据包路由的时候改变它们的方向、内容),这5个挂载点分别是PRE_ROUTINGINPUTOUTPUTFORWARDPOST_ROUTING
Netfilter所设置的规则是存放在内核空间中的,而iptables是一个应用层的应用程序,它通过Netfilter放出的接口来对存放在内核空间中的 XXtables(Netfilter的配置表)进行修改。这个XXtables由表tables、链chains、规则rules组成,iptables在应用层负责修改这个规则文件,类似的应用程序还有firewalld(CentOS7默认防火墙)。

所以Linux中真正的防火墙是Netfilter,iptables只是作为一个工具。但由于都是通过应用层程序如iptables或firewalld进行操作,所以我们一般把iptables或firewalld叫做Linux的防火墙。

**注意:**以上说的iptables都是针对IPv4的,如果IPv6,则要用ip6tables,至于用法应该是跟iptables是一样的。

链的概念

iptables开启后,数据报文从进入服务器到出来会经过5道关卡,分别为Prerouting(路由前)、Input(输入)、Outpu(输出)、Forward(转发)、Postrouting(路由后):
Xnip2019-07-16_15-56-50

每一道关卡中有多个规则,数据报文必须按顺序一个一个匹配这些规则,这些规则串起来就像一条链,所以我们把这些关卡都叫**“链”**:
021217_0051_3

  • **INPUT链:**当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则;
  • **OUTPUT链:**当防火墙本机向外发送数据包(出站)时,应用此链中的规则;
  • **FORWARD链:**当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用此链中的规则;
  • PREROUTING链:(互联网进入局域网)在对数据包作路由选择之前,应用此链中的规则,如DNAT(只有目标地址的转换 公网访问私网);
  • POSTROUTING链:(局域网出互联网)在对数据包作路由选择之后,应用此链中的规则,如SNAT(只有源地址的转换 私网访问公网)。

其中中INPUT、OUTPUT链更多的应用在“主机防火墙”中,即主要针对服务器本机进出数据的安全控制;而FORWARD、PREROUTING、POSTROUTING链更多的应用在“网络防火墙”中,特别是防火墙服务器作为网关使用时的情况。

表的概念

虽然每一条链上有多条规则,但有些规则的作用(功能)很相似,多条具有相同功能的规则合在一起就组成了一个“表”,iptables提供了四种“表”:
– **filter表:**主要用于对数据包进行过滤,根据具体的规则决定是否放行该数据包(如DROP、ACCEPT、REJECT、LOG),所谓的防火墙其实基本上是指这张表上的过滤规则,对应内核模块iptables_filter;
– **nat表:**network address translation,网络地址转换功能,主要用于修改数据包的IP地址、端口号等信息(网络地址转换,如SNAT、DNAT、MASQUERADE、REDIRECT)。属于一个流的包(因为包的大小限制导致数据可能会被分成多个数据包)只会经过这个表一次,如果第一个包被允许做NAT或Masqueraded,那么余下的包都会自动地被做相同的操作,也就是说,余下的包不会再通过这个表。对应内核模块iptables_nat;
– **mangle表:**拆解报文,做出修改,并重新封装,主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)指以及为数据包设置Mark标记,以实现Qos(Quality Of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。对应内核模块iptables_mangle;
– **raw表:**是自1.2.9以后版本的iptables新增的表,主要用于决定数据包是否被状态跟踪机制处理,在匹配数据包时,raw表的规则要优先于其他表,对应内核模块iptables_raw。
我们最终定义的防火墙规则,都会添加到这四张表中的其中一张表中。

表链关系

5条链(即5个关卡)中,并不是每条链都能应用所有类型的表,事实上除了Ouptput链能同时有四种表,其他链都只有两种或三种表:
hook point chain - table
实际上由上图我们可以看出,无论在哪条链上,raw表永远在mangle表上边,而mangle表永远在nat表上边,nat表又永远在filter表上边,这表明各表之间是有匹配顺序的。

前面说过,数据报文必须按顺序匹配每条链上的一个一个的规则,但其实同一类(即属于同一种表)的规则是放在一起的,不同类的规则不会交叉着放,按上边的规律,每条链上各个表被匹配的顺序为:raw→mangle→nat→filter

前面说过,我们最终定义的防火墙规则,都会添加到这四张表中的其中一张表中,所以我们实际操作是对“表”进行操作的,所以我们反过来说一下,每种表都能用于哪些链:

表名 能应用的链
raw prerouting output
mangle prerouting input forward output postrouting
nat prerouting input(仅centos7) output postrouting
filter input forward output

综上,数据包通过防火墙的流程可总结为下图:
iptables dataflo forward功能 :默认是0,打开为1即生效

匹配条件
S_IP:source ip 源ip
S_PORT:source port 源端口
D_IP:destination ip 目标ip
D_PORT:destination port 目标端口
TCP/UDP:第四层 传输层协议

处理的动作:
accept:允许数据包通过
drop:直接丢弃数据包,不回应任何消息,客户端只有当该链接超时后才会有反应 timeout–超时
reject:拒绝数据包,会给客户端发送一个数据包被丢弃的响应的信息 result out–请求丢失

关闭防火墙

systemctl stop firewalld

关闭firewalld防火墙开机启动

systemctl disable firewalld

配置好yum源,完成挂载后
安装iptables防火墙

sudo yum -y install iptables

安装iptables的service启动工具

sudo yum -y install iptables-services

启动iptables

systemctl start iptables

查看iptables状态

systemctl status iptables

停止iptables

systemctl stop iptables

重启iptables

systemctl restart iptables

重载iptables

systemctl reload iptables

使用service命令查看iptables状态

service iptables status

查询规则
1.-L list,列出每条链上的规则,且链名必须全大写

列出input链上的规则

[root@localhost ~]# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

若不指定链名的话

  • 8
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值