Linux防火墙相关知识

借鉴:
iptables实用教程
iptables基础知识详解

一、防火墙的概念
什么是防火墙
简单来说,防火墙就是一款隔离工具,工作与主机或网络边缘,对于进出本主机或本网络的报文根据事先定义的检查规则做出匹配检测,对于能够被规则匹配到的报文做出相应处理的组件。
1.从逻辑上讲,防火墙可以大体分为主机防火墙和网络防火墙。
主机防火墙:针对于单个主机进行防护。
网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网。
网络防火墙和主机防火墙并不冲突,可以理解为,网络防火墙主外(集体),主机防火墙主内(个人)。
2.从物理上讲,防火墙可以分为硬件防火墙和软件防火墙。
硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。
软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低。
二、Linux下常见的两种防火墙
1.iptables
(1) 什么是iptables
简单的说iptables就是一个给用户用的管理工具(就好比我们在服务器上用的解释器shell,最终还是要交个内核去处理),它能调用内核对操作系统暴漏的接口。我们使用iptables工具写好规则后,最终执行这些交个netfilter内核框架去执行这些规则实现frewall功能。

(2) iptables的功能
用户空间的iptables和内核空间的netfilter所能够实现的功能不仅仅是防火墙(filter),它还能实现其他的额外功能。还支持nat,magle,rwa等功能。

(3) iptables基础
我们知道iptables 是按照规则来办事的,我们就来说说规则(rules),规则其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址,目的地址,传输协议(如TCP,UDP,ICMP)和服务类型(如HTTP,FTP,SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept),拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加,修改和删除这些规则。

当客户端访问服务器的web服务时,客户端发送报文到网卡,而tcp/ip协议时候属于内核的一部分,所以,客户端的信息会通过内核的TCP协议传输到用户空间中的web服务中,而此时,客户端报文的目标终点为web服务所监听的套接字(IP:port)上,当web 服务需要响应客户端请求时,web服务发出的响应报文的目标终点则为客户端,这个时候,web服务所监听的IP与端口反而变成了原点,我们说过,netfilter 才是真正的防火墙,它是内核的一部分,所以,如果我们想要防火墙能够达到“防火”的目的,则需要在内核中设置关卡,所有进出的报文都要通过这些光卡,经过检查后,符合放行条件的才能放行,符合阻拦条件的则需要被阻止,于是,就出现了input和output关卡,而这些关卡在iptables中被称为“链”。

其实我们上面的描述的场景并不完善,因为客户端发来的报文访问的目标地址可能并不是本机,而是其他服务器,当本机的内核支持FORWARD 时,我们可以将报文转发给其他服务器,所以,这个时候,我们就会提到iptables中的其他“关卡”,也就是其他链,他们就是“路由前–PREROUTING”,“转发–FORWARD”,“路由后–POSTROUTING”。当我们启用防火墙时,根据实际情况不同,报文经过“链”可能不同。如果报文需要转发,那么报文则不会经过input 链发往用户空间,而是直接在内核空间中经过FORWARD链和POSTROUTING链转发出去的。
在这里插入图片描述
所以,根据上图,我们能够想象出来某些 常用场景中,报文的流向:
到本机某进程的报文:PREROUTING–> INPUT
由本机转发的报文: PREROUTING —> FORWARD —> POSTROUTING
由本机的某进程发出报文(通常为相应报文): OUTPUT —> POSTROUTING

(4) 链的概念
内核要想实现报文的【放行,拒绝,丢弃】,就要在内核设置关卡,符合条件放行,不符合阻止,这些所谓的关卡就叫链,主要包括【input,output】。
而报文并不是每次的目标主机都是本机,当主机支持 IP_FROWARD时,我们可以把报文转发给其他服务器,也就是其他链,“路由前”,“转发”,“路由后”。
**PREROUTING链:**应用于所有进入机器的ip包,包括目的地址是本机和目的地址非本机的包。
**INPUT链:**应用于所有目的是本机的包,也就是目的IP是本机接口地址,所有发给本地socket的数据都经过它。
**OUPUT链:**应用于所有由本机产生的包,所有应用程序发出的数据都经过它。
**FORWARD链:**应用于所有经过路由决策被转发的包,也就是目的地址不是本机的数据包。
**POSTROUGING链:**应用于所有发出机器的IP包,包括本机发出的和从本机转发的数据包。
策略匹配按照重上到下的顺序进行,当测试到某策略匹配时执行target并跳出,不再向下匹配,当测试到最后一条策略仍不匹配时,则采用policy指定的动作,如下图:
在这里插入图片描述

链名功能
INPUT处理输入数据包
OUTPUT处理输出数据包
PORWARD处理转发数据包
PREROUTING用于目标地址转换(DNAT)
POSTOUTING用于源地址转换(SNAT)

除了内置chain外,还可以自定义chain,自定义chain并不能利用netfilter的hook来捕捉数据包,但是可用于策略的分类,比如有3类不同的用户访问主机上的不同服务,如果所有策略都放在INPUT chain中策略会多而难以维护,这个时候就可以定义3个自定义chain,分别配置不同的策略,同时在INPUT chain中添加策略对来访者分类并将目标指向3个自定义chain。

自定义chain大显神威的地方在于动态生成策略,例如VPN服务器上,需要对不同分组的用户区别对待管理,但是用户IP是随机分配的,不能根据IP来区分用户组,这时候可以预先定义好各组chain,利用VPN服务端软件的一些钩子,当用户登陆时自动添加策略引导到自定义chain上来匹配。如果这时候没有自定义chain,那么策略的数量将是(用户数×所属组策略数),每增加一个用户,都要把所属组的全部策略添加一遍,这样大量的时间花费在策略匹配上,性能下降很快。

(5) 表的概念
iptables的4个表分别是:
**filter(过滤):**数据包过滤/拦截,可以包含INPUT、FORWARD、OUTPUT这3个内置chain。
**nat(地址转换):**IP地址或端口号转换,可以包含PREROUTING、OUTPUT、POSTROUTING 3个内置chain,nat table在会话建立时会记录转换的对应关系,同一会话的回包和后续报文会自动地址转换,这是因为nat使用了ip_conntrack模块。
**mangle(包管理):**用来修改IP报文,可以包含PREROUTING、OUTPUT、INPUT、FORWARD、POSTROUTING 5个内置chain。
**raw:**此表的优先级高于ip_conntrack模块和其它的table,主要用于将有会话状态的连接(比如tcp)的数据包排除在会话外。可以包含POSTROUTING、OUTPUT两个内置chain。
我们把具有相同功能的规则的集合叫做表。

表名功能内核模块
filter负责过滤功能iptables_filter
nat网络地址转换iptable_nat
mangle拆解报文,修改,重新封装iptable_mangle
raw关闭nat表上启用的连接追踪机制iptable_raw

所有的规则都保存在这四张表中。
表的优先级为: raw -> mangle -> nat -> filter

(6) 常用操作

iptables
查看防火墙状态 service iptables status
停止防火墙 service iptables stop
启动防火墙 service iptables start
重启防火墙 service iptables restart
永久关闭防火墙chkconfig iptables off
永久关闭后重启 chkconfig iptables on

2.firewalld
(1) 什么是firewalld
CentOS 7默认的防火墙管理工具,取代之前的iptables防火墙,属于用户态。
firewalld和iptables内部结构都指向netfilter这个强大的网络过滤子系统,以实现包过滤防火墙功能。

(2) firewalld的区域
firewalld将所有的网络数据流量划分为多个区域,从而简化防火墙管理。根据数据包的源IP地址或传入网络接口等条件,将数据流量转入相应区域的防火墙规则。对于进入系统的数据包,首先检查的就是其源地址。

(3) firewalld和iptables的比较
firewalld是iptables的一个封装,可以让你更容易地管理iptables规则。它并不是iptables的替代品,虽然iptables命令仍可用于firewalld,但建议firewalld时仅使用firewalld命令。
1,firewalld可以动态修改单条规则,动态管理规则集,允许更新规则而不破坏现有会话和连接。而iptables,在修改了规则后必须得全部刷新才可以生效;

2,firewalld使用区域和服务而不是链式规则;

3,firewalld默认是拒绝的,需要设置以后才能放行。而iptables默认是允许的,需要拒绝的才去限制;

4,firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现。也就是说,firewalld和iptables一样,它们的作用都用于维护规则,而真正使用规则干活的是内核的netfilter。只不过firewalld和iptables的结果以及使用方法不一样!

(4) 常用操作

查看firewall服务状态 systemctl status firewalld

出现Active: active (running)切高亮显示则表示是启动状态。

出现 Active: inactive (dead)灰色表示停止,看单词也行。

查看firewall的状态 systemctl status firewalld

开启firewalld.service服务 service firewalld start

重启firewalld.service服务 service firewalld restart

关闭firewalld.service服务 service firewalld stop

(5) firewall-cmd 终端管理工具的使用

firewall-cmd --get-default-zone
查看当前所使用的区域

firewall-cmd --get-zone-of-interface=网卡名
查看指定网卡在firewalld服务中的区域

firewall-cmd --zone=区域 --query-service=服务名
查询指定服务在指定区域下当前是否允许请求服务协议的流量

firewall-cmd --zone=区域 --list-ports
查看指定服务在指定区域下当前的端口所有状态

firewall-cmd --zone=区域 --list-all
查看指定区域下当前所有状态

查看版本: firewall-cmd --version

查看帮助: firewall-cmd --help

显示状态: firewall-cmd --state

查看所有打开的端口: firewall-cmd --zone=public --list-ports

更新防火墙规则: firewall-cmd --reload

查看区域信息: firewall-cmd --get-active-zones

查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0

拒绝所有包:firewall-cmd --panic-on

取消拒绝状态: firewall-cmd --panic-off

查看是否拒绝: firewall-cmd --query-panic

firewall-cmd --permanent --zone=区域 --change-interface=网卡名称
修改指定网卡内使用的永久模式区域、系统重启后生效

firewall-cmd --set-default-zone=区域
修改当前区域修改成指定区域

firewall-cmd --zone=区域 --add-service=服务名
修改指定服务在指定区域下当前允许协议流量访问、立即生效、重启后失效

firewall-cmd --permanent --zone=区域 --add-service=服务名
修改指定服务在指定区域下永久允许协议流量访问、重启后生效

firewall-cmd --zone=区域 --remove-service=服务名
修改指定服务再指定区域下当前拒绝协议流量访问、立即生效、重启后失效

firewall-cmd --permanent --zone=区域 --remove-service=服务名
修改指定服务再指定区域下永久拒绝协议流量访问、重启生效

firewall-cmd --zone=区域 --add-port=端口号/tcp
允许指定端口再指定区域下当前允许访问、立即生效

firewall-cmd --permanent --zone=区域 --add-port=端口号/tcp
允许指定端口再指定区域下永久允许访问、重启生效

firewall-cmd --zone=区域 --add-forward-port=port=源端口:proto=tcp:toport=目标端口:toaddr=目标IP地址
把访问指定源端口再指定区域下临时转发到指定目标端口、立即生效

firewall-cmd --permanent --zone=区域 --add-forward-port=port=源端口:proto=tcp:toport=目标端口:toaddr=目标IP地址

把访问指定源端口再指定区域下永久转发到指定目标端口、重启生效

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值