1. 从软、硬件形式上分为 软件防火墙和硬件防火墙以及芯片级防火墙。
2.从防火墙技术分为 “包过滤型”和“应用代理型”两大类。
3.从防火墙结构分为 < 单一主机防火墙、分布式防火路由器集成式防火墙和墙三种。
4. 按防火墙的应用部署位置分为 边界防火墙、个人防火墙和混合防火墙三大类。
5. 按防火墙性能分为 百兆级防火墙和千兆级防火墙两类。
第一种:软件防火墙
软件防火墙运行于特定的计算机上,它需要客户预先安装好的计算机操作系统的支持,一般来说这台计算机就是整个网络的网关。俗称 “个人防火墙”。软件 防火墙就像其它的软件产品一样需要先在计算机上安装并做好配置才可以使用。防火墙厂商中做网络版软件防火墙 最出名的莫过于Checkpoint。使用这类 防火墙,需要网管对所工作的操作系统平台比较熟悉。
第二种:硬件防火墙
这里说的硬件防火墙是指“所谓的硬件防火墙”。之所以加上"所谓"二字是针对芯片级防火墙说的了。它们最大的差别在于是否基于专用 的硬件平台。目前 市场上大多数防火墙都是这种所谓的硬件防火墙,他们都基于PC架构,就是说,它们和普通的家庭用的PC没有太大区 别。在这些PC架构计算机上运行一些经过 裁剪和简化的操作系统,最常用的有老版本的Unix、Linux和FreeBSD系统。 值得注意的是,由 于此类防火墙采用的依然是别人的内核,因此依然会受到OS(操作系统)本身的安全性影响。
传统硬件防火墙一般至少应具备三个端口,分别接内网,外网和DMZ区(非军事化区),现在一些新的硬件防火墙往往扩展了端口,常见四 端口防火墙一般将第四个端口做为配置口、管理端口。很多防火墙还可以进一步扩展端口数目。
第三种:芯片级防火墙
芯片级防火墙基于专门的硬件平台,没有操作系统。专有的ASIC芯片促使它们比其他种类的防火墙速度更快,处理能力更强,性能更高。 做这类防火墙最 出名的厂商有NetScreen、FortiNet、Cisco等。这类防火墙由于是专用OS(操作系统),因此防火墙本身的漏洞比较少,不 过价格相对比 较高昂。
防火墙的核心是数据报文过滤
工作在主机或者网络的边缘,对进出的数据报文进行检查,监控,并且能够根据事先定义的匹配条件和规则做出相应的动作的组件,机制或者系统。
linux一般都是作为服务器系统来使用,对外提供一些基于网络的服务
通常我们都需要对服务器进行一些网络访问控制,类似防火墙的功能
Iptables -A INPUT -s 172.16.20.85 -d 172.16.20.78 -p icmp --icmp-type 8 -j REJECT
Iptables -A OUTPUT -s 172.16.20.78 -d 172.16.20.85 -p icmp --icmp-type 0 -j REJECT
常见的访问控制包括:哪些ip可以访问服务器、可以使用哪些协议、哪些接口,是否通过数据包进行修改等
如:服务器可能受到来自某个ip攻击,这时就需要禁止所有来自ip的访问
1.可以保护易受攻击服务;
2.控制内外网之间网络系统的访问;
3.集中管理内网的安全性,降低管理成本;
4.提高网络的保密性和私有性;
5.记录网络的使用状态,为安全规划和网络维护提供依据
包过滤防火墙原理示意图:
先进行过滤规则匹配,然后判断是否转发数据包。
linux内核集成了网络控制功能。通过netfilter模块来实现。
linux内核通过netfilter模块实现网络访问控制功能,在用户层我们可以通过iptables程序对netfilter进行控制管理。iptables 是一个应用层的应用程序,它通过 Netfilter 放出的接口来对存放在内核内存中的 XXtable(Netfilter的配置表)进行修改。这个XXtables由 表tables、链chains、规则rules组成,iptables在应用层负责修改这个规则文件。类似的应用程序还有 firewalld 。
netfilter可以对数据进行允许、丢弃、拒绝。
每次修改设置以后,都需要重新启动配置,方可生效,基于5链4表来实现。
iptables service 首先对旧的防火墙规则进行了清空,然后重新完整地加载所有新的防火墙规则,而如果 配置了需要 reload 内核模块的话,过程背后还会包含卸载和重新加载内核模块的动作,而不幸的是,这 个动作很可能对运行中的系统产生额外的不良影响,特别是在网络非常繁忙的系统中。(静态防火墙)
访问控制五元组:保障网络安全
源ip 数据报文从哪来
目ip 数据报文从哪去
源端口 1--1024预定义端口
目的端口
传输协议
INPUT链:当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则。 Mangle filter
OUTPUT链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则。 Mangle nat filter raw
FORWARD链:当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用此链中的规则。 Mangle filter
PREROUTING链:在对数据包作路由选择之前,应用此链中的规则,如DNAT。 Raw mangle nat
POSTROUTING链:在对数据包作路由选择之后,应用此链中的规则,如SNAT。 Raw mangle nat
filter表 数据包过滤
主要用于对数据包进行过滤,根据具体的规则决定是否放行该数据包(如DROP、ACCEPT、REJECT)。filter 表对应的内 核模块为iptable_filter
nat表 地址转换
主要用于修改数据包的IP地址、端口号等信息(网络地址转换SNAT、DNAT)。属于一个流的包(因为包的大小限制导致 数据可能会被分成多个数据包)只会经过这个表一次。
mangle报文重构
拆解报文,作出修改并重新封装的功能Qos
修改IP包头的TTL值,这样也可以保护我们的主机,比如我们将Linux主机送出的封包内的TTL值该为128,让Cracker误以为是Windows系 统。另外,TTL(生存周期,每经过一个路由器将1.mangle可以修改此值设定TTL要被增加的值,比如–ttl-inc 4。假设一个进来的包的TTL是 53,那么当它离开我们这台机子时,TTL应是多少呢?是56,原因同–ttl-dec。使用这个选项可以使我们的 防火墙更加隐蔽,而不被trace- routes发现,方法就是设置–ttl-inc 1。原因应该很简单了,包每经过一个设备,TTL就要自动减1,但在我们的防火墙里这个1又被补上了, 也就是说,TTL的值没变,那么trace- routes就会认为我们的防火墙是不存在的)修改IP包头的DSCP值,在网络应用中,有时候需要对某些 特定通信协议会有特殊的需求,例如在网络电话的应用环境里,我们会希望VOIP的封包都要能在不延迟的情况下传输出去。因此就有了 QOS(Quality of Service)机制,下面我们看一个修改DSCP值的例子,修改本机SSH封包,将其DSCP值改为43,其规则如下:
iptables -t mangle -A OUTPUT -p tcp –dport 22 -j DSCP –set-dscp 43
raw表 原始报文(相关服务的包要传输可以定义raw表可以快速查询)
是自1.2.9以后版本的iptables新增的表,主要用于决定数据包是否被状态跟踪机制处理。(关闭nat表中的连接追踪机制) 在匹配数据包时,raw表的规则要优先于其他表。包含两条规则链——OUTPUT、PREROUTING
eg:RAW表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了 RAW表,在某个链上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了.
RAW表可以应用在那些不需要做nat的情况下,以提高性能。如大量访问的web服务器,可以让80端口不再让iptables做数据包的链接跟踪 处理,以提高用户的访问速度。
4个表的优先级由高到低的顺序为:raw-->mangle-->nat-->filter
例:如果PREROUTING链上,即有mangle表,也有nat表,那么先由mangle处理,然后由nat表处理
RAW表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一 但用户使用了RAW表,在某个链上,RAW表处理完后,将跳过NAT表和MANGLE表处理,即不再做地址转换和数据包的链接跟踪 处理了.
• -A:新增一条规则,到该规则链列表的最后一行
• -I:插入一条规则,原本该位置上的规则会往后顺序移动,没有指定编号则为1
• -D:从规则链中删除一条规则,要么输入完整的规则,或者指定规则编号加以删除
• -R:替换某条规则,规则替换不会改变顺序,而且必须指定编号。
• -P:设置某条规则链的默认动作
• -nL:-L、-n,查看当前运行的防火墙规则列表
• -F : 清除所有规则表
• [-i|o 网卡名称]:i是指定数据包从哪块网卡进入,o是指定数据包从哪块网卡输出
• [-p 协议类型]:可以指定规则应用的协议,包含tcp、udp和icmp等
-p icmp --icmp-type 8:echo-request 请求
0:echo-reply 回复
eg:其他主机当前主机不能ping
#iptables-A OUTPUT -s 172.16.30.128(B) -d 172.16.30.200(A) -p icmp --icmp-type 0 -j REJECT
iptables-A OUTPUT -s 172.16.30.128(当前) -d 172.16.30.200(其他) -p icmp --icmp-type 8 -j REJECT
INPUT -s 172.16.30.200 -d 172.16.30.128 -p icmp --icmp-type 8 -j REJECT
• -p tcp --tcp-flags mask comp: 只检查mask指定的标志位,是以逗号分隔的标志位列表;comp:此列表中出
• 现的标记位必须为1,comp中没有出现,而mask中出现的必须为1(--tcp-flags SYN,FIN,ACK,RST SYN=--syn)
• [-s 源IP地址]:源主机的IP地址或子网地址
• [--sport 源端口号]:数据包的IP的源端口号
• [-d目标IP地址]:目标主机的IP地址或子网地址
• [--dport目标端口号]:数据包的IP的目标端口号
-m:extend matches,这个选项用于提供更多的匹配参数,如:
• -m state --state NEW ESTABLISHED,RELATED
#iptables -A INPUT -s 172.16.80.253(当前主机) -p tcp -m state --state ESTABLISHED,RELATED --dport 22 -j ACCEPT(当前已经连接其他主机可以连接我当前主机,但是在开一个新的链接就不可以)
#iptables -I INPUT -p tcp -s 172.16.30.160 --dport 22 -j REJECT
-m tcp --dport 22
安 装iptables
#yum install iptables-services
Systemctl stop firewalld ##关闭防火墙,使用iptabls
[root@localhost ~]# systemctl start iptables.service
1.开启web访问。
[root@localhost ~]# iptables -P INPUT DROP ##丢弃访问
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT ##允许http服务访问
iptabls -L 进行查看
实现访问:
[root@localhost ~]# iptables -D INPUT 1 ##删除第一条
测试,无法访问。
2.禁止所有用户远程登录
[root@mail html]# iptables -I INPUT -p tcp --dport 22 -s 192.168.24.0/24 -j REJECT ## 禁止所有人,写成0.0.0.0/0
#删除刚刚添加的规则,并进行测试
[root@mail html]# iptables -D INPUT 1 ##删除,恢复,再次登录。
[root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -s 192.168.168.178 -j REJECT
[root@localhost ~]# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
REJECT tcp -- 192.168.168.178 anywhere tcp dpt:ssh reject-with icmp-port-unreachabl
如果我们把这种哪怕只修改一条规则也要进行所有规则的重新载入的模式称为静态防火墙的话,那么 firewalld 所提供的模式就可以叫做动态防火墙,它的出现就是为了解决这一问题,任何规则的变更都不 需要对整个防火墙规则列表进行重新加载,只需要将变更部分保存并更新到运行中的 iptables 即可,它具 备对 IP v4 和 IP v6 防火墙设置的支持。
FirewallD 使用服务(service) 和区域(zone)来代替 iptables 的规则(rule)和链(chain)。
1、firewalld提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。
2、firewalld将网卡分为不同的区域(区域),这些区域的区别在于对待来访的用户及传输的数据包的默认动作的不同,通过制定一 些安全 策略从而保证系统在被访问或传输数据时的安全。
默认情况下,有以下的区域(zone)可用:
firewalld分为九个区域,含义如下:
trust(信任):可接受所有的网络连接;
home(家庭):用于家庭网络,仅接受ssh、mdns、ipp-client、samba-client或dhcpv6-client服务连接;
internal(内部):用于内网络,仅接受ssh、ipp-client、mdns、samba-client或dhcpv6-client服务连接;
work(工作区):用于工作区,仅接受ssh、ipp-client、dhcpv6-client服务连接;
public(公共):用于公共区域的使用,仅接受ssh、dhcpv6-client服务,为firewalld的默认区域;
external(外部区域):出去的ipv4的网络连接经过此区域的伪装和转发,只支持ssh服务;
dmz(隔离区):仅接受ssh服务;
block(限制):拒绝所有的网络服务;
drop(丢弃):任何访问的网络数据包都会被丢弃,没有任何回应。
预定义服务/添加端口
1 直接编辑配置文件/etc/firewalld/
2 使用firewall-config图形工具
通过这个图形工具,可以更改和检查firewalld内存中的配置(Runtime),也可以修改磁盘上的持久配置(Permanent)
3 使用firewall-cmd命令
firewall-cmd 有如下命令
--permanent 永久生效
--add 添加
--get 获取
--info 详细信息
--change 修改
--list 列出
--query 查询
--remove 删除
--set 设置
[root@localhost ~]# firewall-cmd --
--add-forward-port= --add-source-port= --get-short --list-lockdown-whitelist-commands --permanent --query-rich-rule= --remove-port=
--add-icmp-block= --change-interface= --get-zone-of-interface= --list-lockdown-whitelist-contexts --query-forward-port= --query-service= --remove-protocol=
--add-icmp-block-inversion --change-source= --get-zones --list-lockdown-whitelist-uids --query-icmp-block= --query-source= --remove-rich-rule=
--add-interface= --change-zone= --help --list-lockdown-whitelist-users --query-icmp-block-inversion --query-source-port= --remove-service=
--add-lockdown-whitelist-command= --complete-reload --info-helper= --list-ports --query-interface= --reload --remove-source=
--add-lockdown-whitelist-context= --direct --info-icmptype= --list-protocols --query-lockdown --remove-forward-port= --remove-source-port=
--add-lockdown-whitelist-uid= --get-active-zones --info-ipset= --list-rich-rules --query-lockdown-whitelist-command= --remove-icmp-block= --set-default-zone=
--add-lockdown-whitelist-user= --get-default-zone --info-service= --list-services --query-lockdown-whitelist-context= --remove-icmp-block-inversion --set-description=
--add-masquerade --get-description --info-zone= --list-source-ports --query-lockdown-whitelist-uid= --remove-interface= --set-log-denied=
--add-port= --get-helpers --list-all --list-sources --query-lockdown-whitelist-user= --remove-lockdown-whitelist-command= --set-short=
--add-protocol= --get-icmptypes --list-all-zones --lockdown-off --query-masquerade --remove-lockdown-whitelist-context= --state
--add-rich-rule= --get-ipset-types --list-forward-ports --lockdown-on --query-panic --remove-lockdown-whitelist-uid= --version
--add-service= --get-log-denied --list-icmp-blocks --panic-off --query-port= --remove-lockdown-whitelist-user= --zone=
--add-source= --get-services --list-interfaces --panic-on --query-protocol= --remove-masquerade
#启用紧急模式(所有的 规则出入都拒绝)
[root@mail ~]# firewall-cmd --panic-on
#禁用紧急模式
[root@mail ~]# firewall-cmd --panic-off
#查询紧急模式状态
[root@mail ~]# firewall-cmd --query-panic
#查看当前区域
[root@mail ~]# firewall-cmd --get-default-zone
#查看所有支持的区域
[root@mail ~]# firewall-cmd --get-zones
#设置trusted区域为当前区域
[root@mail ~]# firewall-cmd --set-default-zone=trusted
#根据接口查询区域
[root@mail ~]# firewall-cmd --get-zone-of-interface=eno16777736
#添加当前源地址
[root@mail ~]# firewall-cmd --add-source=192.168.171.1/24
#添加一个端口
[root@mail ~]# firewall-cmd --add-port=8080/tcp
#删除源地址
[root@mail ~]# firewall-cmd --remove-source=192.168.171.1/24
#删除端口
[root@mail ~]# firewall-cmd --remove-port=8080/tcp
永久模式不直接影响运行时状态,只有在重启服务或者重载时生效
运行模式,直接模式不保存规则,在重载或者重启服务后必须再次提交,传递的参数和iptable一致
#添加一个列表
[root@mail ~]# firewall-cmd --direct permanent --add-chain ipv4 raw blacklist
#给列表添加一个规则
[root@mail ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING 0 -s 192.168.171.0/24 -j blacklist
#定义列表的动作
[root@mail ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 1 -j DROP
1.开启http服务
yum install httpd -y
配置防火墙规则
允许172.16.10.0/24 网段的用户对server和desktop进行ssh访问
禁止172.16.20.0/24 域的用户对server和desktop进行ssh访问
[root@system1 ~]# firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="172.16.10.0/24" service name="ssh" accept'
[root@system1 ~]# firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="172.16.20.0/24" service name="ssh" reject'
[root@system1 ~]# firewall-cmd --reload
配置端口转发
在server和desktop配置端口转发,要求:
172.24.8.0/24网段中的主机,访问server的本地端口5423将被转发到80端口
此设置必须永久有效
设置开机启动防火墙
[root@system1 ~]# firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="172.24.8.0/24" forward-port port="5423" protocol="tcp" to-port="80"'
success
[root@system1 ~]# firewall-cmd --reload
[root@system1 ~]# systemctl enable firewalld
配置dns服务添加对应防火墙规则
root@localhost 桌面]# firewall-cmd --permanent --add-service=dns
success
配置samba服务添加对应防火墙规则
[root@system1 ~]# firewall-cmd --permanent --add-service=samba
success
[root@system1 ~]# firewall-cmd --reload
success
配置nfs服务添加对应防火墙规则
[root@system1 ~]# firewall-cmd --permanent --add-service=nfs
success
[root@system1 ~]# firewall-cmd --permanent --add-service=rpc-bind
success
[root@system1 ~]# firewall-cmd --permanent --add-service=mountd
success
[root@system1 ~]# firewall-cmd --reload
配置postfix服务添加对应防火墙规则
iptables -A INPUT -p TCP --dport 25 -j ACCEPT
iptables -A INPUT -p TCP --sport 25 -j ACCEPT
iptables -A INPUT -p TCP --dport 110 -j ACCEPT
iptables -A INPUT -p TCP --sport 110 -j ACCEPT
iptables -A INPUT -p TCP --dport 143 -j ACCEPT
iptables -A INPUT -p TCP --sport 143 -j ACCEPT
[root@localhost ~]# firewall-cmd --add-port=25/tcp
[root@localhost ~]# firewall-cmd --add-port=110/tcp
[root@localhost ~]# firewall-cmd --add-port=143/tcp
配置http和https服务添加对应防火墙规则
[root@localhost ~]# firewall-cmd --permanent --add-service=http
success
[root@localhost ~]# firewall-cmd --permanent --add-service=https
success
[root@localhost ~]# firewall-cmd --reload
配置iscsi服务添加对应防火墙规则
root@system1 ~]# firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="172.16.10.2*/32" port port=3260 protocol=tcp accept'
success
[root@system1 ~]# firewall-cmd --reload