一.什么是防火墙
- 从功能角度来讲:
防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出。
- 从功能实现角度来讲:
火墙是系统内核上的一个模块netfilter(数据包过滤机制)。
通过netfiler来管理kernelspace中的策略。
二.netfilter简介
- Netfilter是Linux 2.4.x引入的一个子系统。
- 它作为一个通用的、抽象的框架,提供一整套的hook函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪等等。
- netfilter分析OSI七层协议的2、3、4层。
- netfiler可以直接分析数据包头部数据,包括硬件地址,软件地址、TCP、UDP、ICMP等数据包的信息都可以进行过滤分析。
Inux的netfilter机制可以进行的工作有:
- 拒绝让Internet的数据包进入主机的某些端口
- 拒绝让某些来源ip的数据包进入
- 拒绝让带有某些特殊标志(fag)的数据包进入,最常拒绝的就是带有SYN的主动连接的标志了
- 分析硬件地址(MAC)来决定连接与否
- 地址转换
防火墙并不能有效阻挡病毒或木马程序,并且防火墙对于内部LAN的攻击无能为力
三.netfiler策略管理工具
netfilter这个内核网络栈过意框架的使用需要通过iptables或nftables来进行
与netfilter进行交互工具常用种类:
- iptables服务使用iptables交互 RHEL6之前系统默认使用此服务,管理手段丰富,配置比较复杂
- firewalld服务使用nftables交互 RHEL6及之后的版本中默认使用此服务,配置类似windows火墙,功能模块度高,使用简单
四.netfilter的五类hook函数及iptables的默认表和链
4.1.五类HOOK函数
- NF_IPPRE ROUTING:位于路由之前,报文一致性检査之后(报文一致性检査包括: 报文版本、报文长度和checksum
- NF IP LOCAL IN:位于报文经过路由之后,并且目的是本机的
- NF IP FORWARD:位于在报文路由之后,目的地非本机的
- NF IP LOCAL OUT:由本机发出去的报文,并且在路由之前
- NF_IP _POST ROUTING:所有即将离开本机的报文
五.什么是内核空间的iptables
Iptables 是基于Netfilter框架实现的报文选择系统
iptables用于报文的过滤、网络地址转换和报文修改等功能
Iptables 本质上是包含了5个规则表,而规则表则包含了一些列的报文的匹配规则以及操作目标
1、raw表:
第一优先级的表,设置raw表规则后,不会对数据包进行链接跟踪和NAT转换,使用于PREROUTING和OUTPUT链,对应的动作为NOTRACK。
2、mangle表:
第二优先级的表,根据规则,修改数据包的TOS(TypeOfService,服务类型)、TTL(TimeToLive,生存周期)以及设置Mark标记,以实现Qos以及策略路由等。
3、nat表:
第三优先级的表,网络地址转换表,用于修改源和目的的地址,分SNAT(源目的地址转换)和DNAT(目的地址转换)
4、filter表:
第四优先级的表,用于控制到达链(forward链、input链、output链)上的数据包,是放行(accepte)、丢弃(drop)或者拒绝(reject)。5、security表:
最不常用的表(通常,我们说iptables只有4张表,security表是新加入的特性),用于在数据包上应用SELinux。
六.iptables服务
6.1.iptables介绍
- iptables服务是用户管理内核空间的iptables的管理工具,通过iptables书写内核空间的
- iptables策略iptables的规则是至上而下的读取方式,遇到与数据包信息匹配的规则后直接采用
- iptables的规则默认保存在内存中,如果需要永久保存需要把策略以字符的形式保存到/etc/sysconfig/iptables中
安装:
查看火墙策略
6.2.iptables命令的语法格式及常用参数
语法格式:
iptables -t 表名<-A/I/D/R>规则链名[规则号]<-i/o 网卡名>-p 协议名 <-s 源IP/源子网>
--sport 源端口<-d 目标IP/目标子网>--dport 目标端口 -j 动作
查看当前策略
清空制定表中策略
允许本机回环接口访问
允许本机sshd的22端口被访问
仅允许192.168.71.40访问22端口
删除filter表中INPUT链的第三条策略
修改filter表中INPUT链的第2条策略
在filter表中建立名称叫做easylee的自定义链
在filter表中重命名easylee为EASYLEE
删除EASYLEE链
snat地址转换
dnat地址转换
七.firewalld
7.1.firewalld服务管理方式与iptables的管理方式区别
- iptables是基于Linux内核的Netfilter子系统构建的,直接操作Netfilter;而firewalld则通过libnftables库与Netfilter交互,提供了一个更高的抽象层。
- iptables使用基于表的规则集,包括filter、nat、mangle、raw及securty五个表;firewalld采用基于区域的规则集,包括default、public、internal、external和dmz五个区域。
- iptables的配置较为复杂,需要用户掌握特定的命令行语法;firewalld提供了更直观和灵活的配置方式,支持命令行和图形界面。
- 由于firewalld通过libnftables库与Netfilter交互,其性能相对于直接操作Netfilter的iptables来说较低。
- 由于firewalld通过libnftables库与Netfilter交豆,其性能相对于直接操作Netfilter的iptables来说较低。
7.2.firewalld域介绍
firewalld默认提供的九个zone配置文件都保存在"/usr/lib/firewalld/zones/"目录下,分别为:block.xml drop.xml home.xml public.xml work.xml dmz.xml external.xmlinternal.xml trusted.xml
在RHEL7中,firewalld服务是默认的防火墙配置管理工具,他拥有基于CLI(命令行界面)和基于GUl(图形用户界面)的两种管理方式。firewall-config和firewall-cmd是直接编辑xml文件,其中firewall-config是图形化工具,firewall-cmd是命令行工具。
(firewalld中默认使用的域是pubic;firewalld默认提供的九个zones的调用文件都保存在"/usr/lib/firewalld/zones/”目录下)
7.3.firewall-cmd命令详解
1.火墙信息查看
[root@server ~]# firewall-cmd --state
running
[root@server ~]# firewall-cmd --list-all
public(active)
target: default
icmp-block-inversion:no
interfaces:ens160
sources:
services:cockpit dhcpv6-client dns http ssh
ports:
protocols:
forward:yes
masquerade:no
forward-ports:s
ource-ports:
icmp-blocks:
rich rules:
2.管理域
[root@server ~]# firewall-cmd --get-default-zone
public
[root@server ~]# firewall-cmd --set-default-zone=trusted
[root@server ~]# firewall-cmd --get-zones
[root@server ~]# firewall-cmd --get-active-zones
docker
interfaces:docker0
trusted
interfaces:ens160
3.管理服务
[root@server ~]# firewall-cmd --get-services
[root@server ~]# firewall-cmd --list-services --zone=public
[root@server ~]# firewall-cmd --permanent --add-service=http --zone=public
[root@server ~]# firewall-cmd--permanent --remove-service=http
4.管理ip
[root@server ~]# firewall-cmd --add-source=192.168.71.1 --zone=trusted
[root@server ~]# firewall-cmd --remove-source=192.168.71.1 --zone=trusted
5.管理port接口
[root@server ~]# firewall-cmd --add-port=80/tcp
[root@server ~]# firewall-cmd --remove-port=80/tcp
7.4.firewalld的高级规则
7.4.1.Direct Rules
通过 firewall-cmd 工具,可以使用 -direct 选项在运行时间里增加或者移除链。如果不熟悉 iptables,使用直接接口非常危险,因为您可能无意间导致防火墙被入侵
直接端口模式适用于服务或者程序,以便在运行时间内增加特定的防火墙规则。直接端口模式添加的规则优先应用。
允许192.168.71.1访问80端口
[root@server ~]# firewall-cmd --direct --get-all-rules
[root@server ~]# firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -s 192.168.71.1 -p tcp --dport 80 -j ACCEPT
[root@server ~]# firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow 0 -s 192.168.71.1 -p tcp --dport 80 -j ACCEPT
7.4.2.地址伪装与端口转发
1.地址伪装
[root@server ~]# firewall-cmd --add-masquerade
2.端口转发
[root@server ~]# firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toport=80:toaddr=192.168.91.20
注:在设置端口转发或地址伪装时,如果没有加-permanent参数,那么只在当前环境中生效;
如果没有加--permanent参数,表似乎在刷新火墙后才生效。