1、简介
所谓“防火墙”是指一种将内部网和公众访问网(如Internet)分开的方法,它实际上是一种建立在现代通信网络技术和信息安全技术基础上的应用性安全技术,隔离技术。越来越多地应用于专用网络与公用网络的互联环境之中,尤其以接入Internet网络为最甚。
防火墙技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。
防火墙技术的功能主要在于及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题,其中处理措施包括隔离与保护,同时可对计算机网络安全当中的各项操作实施记录与检测,以确保计算机网络运行的安全性,保障用户资料与信息的完整性,为用户提供更好、更安全的计算机网络使用体验。
2、功能
防火墙对流经它的网络通信进行扫描,这样能够过滤掉一些攻击,以免其在目标计算机上被执行。防火墙还可以关闭不使用的端口。而且它还能禁止特定端口的流出通信,封锁特洛伊木马。最后,它可以禁止来自特殊站点的访问,从而防止来自不明入侵者的所有通信。
① 网络安全的屏障
一个防火墙(作为阻塞点、控制点)能极大地提高一个内部网络的安全性,并通过过滤不安全的服务而降低风险。由于只有经过精心选择的应用协议才能通过防火墙,所以网络环境变得更安全。如防火墙可以禁止诸如众所周知的不安全的NFS协议进出受保护网络,这样外部的攻击者就不可能利用这些脆弱的协议来攻击内部网络。防火墙同时可以保护网络免受基于路由的攻击,如IP选项中的源路由攻击和ICMP重定向中的重定向路径。防火墙应该可以拒绝所有以上类型攻击的报文并通知防火墙管理员。
② 强化网络安全策略
通过以防火墙为中心的安全方案配置,能将所有安全软件(如口令、加密、身份认证、审计等)配置在防火墙上。与将网络安全问题分散到各个主机上相比,防火墙的集中安全管理更经济。例如在网络访问时,一次一密口令系统和其它的身份认证系统完全可以不必分散在各个主机上,而集中在防火墙一身上。
③ 监控审计
如果所有的访问都经过防火墙,那么,防火墙就能记录下这些访问并作出日志记录,同时也能提供网络使用情况的统计数据。当发生可疑动作时,防火墙能进行适当的报警,并提供网络是否受到监测和攻击的详细信息。另外,收集一个网络的使用和误用情况也是非常重要的。首先的理由是可以清楚防火墙是否能够抵挡攻击者的探测和攻击,并且清楚防火墙的控制是否充足。而网络使用统计对网络需求分析和威胁分析等而言也是非常重要的。
④ 防止内部信息的外泄
通过利用防火墙对内部网络的划分,可实现内部网重点网段的隔离,从而限制了局部重点或敏感网络安全问题对全局网络造成的影响。再者,隐私是内部网络非常关心的问题,一个内部网络中不引人注意的细节可能包含了有关安全的线索而引起外部攻击者的兴趣,甚至因此而暴漏了内部网络的某些安全漏洞。使用防火墙就可以隐蔽那些透漏内部细节如Finger,DNS等服务。Finger显示了主机的所有用户的注册名、真名,最后登录时间和使用shell类型等。但是Finger显示的信息非常容易被攻击者所获悉。攻击者可以知道一个系统使用的频繁程度,这个系统是否有用户正在连线上网,这个系统是否在被攻击时引起注意等等。防火墙可以同样阻塞有关内部网络中的DNS信息,这样一台主机的域名和IP地址就不会被外界所了解。除了安全作用,防火墙还支持具有Internet服务性的企业内部网络技术体系VPN(虚拟专用网)。
⑤ 日志记录与事件通知
进出网络的数据都必须经过防火墙,防火墙通过日志对其进行记录,能提供网络使用的详细统计信息。当发生可疑事件时,防火墙更能根据机制进行报警和通知,提供网络是否受到威胁的信息。
3、应用
1、内网中的防火墙技术
防火墙在内网中的设定位置是比较固定的,一般将其设置在服务器的入口处,通过对外部的访问者进行控制,从而达到保护内部网络的作用,而处于内部网络的用户,可以根据自己的需求明确权限规划,使用户可以访问规划内的路径。总的来说,内网中的防火墙主要起到以下两个作用:一是认证应用,内网中的多项行为具有远程的特点,只有在约束的情况下,通过相关认证才能进行;二是记录访问记录,避免自身的攻击,形成安全策略。
2、外网中的防火墙技术
应用于外网中的防火墙,主要发挥其防范作用,外网在防火墙授权的情况下,才可以进入内网。针对外网布设防火墙时,必须保障全面性,促使外网的所有网络活动均可在防火墙的监视下,如果外网出现非法入侵,防火墙则可主动拒绝为外网提供服务。基于防火墙的作用下,内网对于外网而言,处于完全封闭的状态,外网无法解析到内网的任何信息。防火墙成为外网进入内网的唯一途径,所以防火墙能够详细记录外网活动,汇总成日志,防火墙通过分析日常日志,判断外网行为是否具有攻击特性。
1、简述
centos 7中防火墙是一个非常的强大的功能,在CentOS 6.5中在iptables防火墙中进行了升级了。
动态防火墙守护程序firewalld提供动态管理的防火墙,支持网络“区域”,以便为网络及其关联的连接和接口分配信任级别。它支持IPv4和IPv6防火墙设置。它支持以太网桥,并具有运行时和永久配置选项的分离。它还有一个服务或应用程序接口,可以直接添加防火墙规则。
2、区域
① 概念
由firewalld提供的区域按照从不信任到信任的顺序排序;网络区域定义了网络连接的可信等级。这是一个一对多的关系,这意味着一次连接可以仅仅是一个区域的一部分,而一个区域可以用于很多连接。
② 区域的分类
- public
用于公共场所。您不相信网络上的其他计算机不会损害您的计算机。仅接受选定的传入连接。
- trusted
接受所有网络连接。
- block
阻止传入的网络连接被拒绝,其中包含用于IPv4的icmp-host-prohibited消息和用于IPv6的icmp6-adm-prohibited。只能从系统内启动网络连接。
- drop
任何传入的网络数据包都被丢弃,没有回复。只能进行传出网络连接。
- external
对伪装的进入连接,一般用于路由转发
3、firewall服务管理
[root@localhost ~]# systemctl status firewalld // 查看服务状态
[root@localhost ~]# systemctl start firewalld // 启动服务
[root@localhost ~]# systemctl stop firewalld //关闭服务
[root@localhost ~]# systemctl restart firewalld // 重新启动服务
[root@localhost ~]# systemctl enable firewalld // 永久开启服务
[root@localhost ~]# systemctl disable firewalld // 永久关闭服务
[root@localhost ~]# systemctl is-enabled firewalld // 查看服务是否开机自启动
4、firewall-cmd
① firewall-cmd基础命令
[root@localhost ~]# firewall-cmd --version // 查看版本
[root@localhost ~]# firewall-cmd --help // 查看帮助
[root@localhost ~]# firewall-cmd --state // 显示状态
[root@localhost ~]# firewall-cmd --zone=public --list-ports // 查看所有打开的端口
[root@localhost ~]# firewall-cmd --reload // 更新防火墙规则
[root@localhost ~]# firewall-cmd --get-active-zones // 查看区域信息
[root@localhost ~]# firewall-cmd --get-zone-of-interface=eth0 // 查看指定接口所属区域
[root@localhost ~]# firewall-cmd --panic-on // 拒绝所有包
[root@localhost ~]# firewall-cmd --panic-off // 取消拒绝所有包
[root@localhost ~]# firewall-cmd --query-panic // 查看是否拒绝
② firewall-cmd配置管理
--permanent(--permanent永久生效,没有此参数重启后失效)
[root@localhost ~]# firewall-cmd --zone=block --list-all // 查看block策略
[root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent // 永久开启tcp的80端口
[root@localhost ~]# firewall-cmd --zone=public --remove-port=80/tcp --permanent // 永久删除tcp的80端口
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-source=192.168.4.207/24 // 永久开启此地址访问本机
[root@localhost ~]# firewall-cmd --permanent --zone=block --add-source=192.168.4.207/24 // 永久拒绝此地址访问本机
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=http // public区域中添加允许策略,让http协议可以通过
[root@localhost ~]# firewall-cmd --permanent --zone=public --remove-service=http // public区域中添加允许策略,拒绝http协议通过
③ firewall-cmd地址伪装与端口转发
--permanent(--permanent永久生效,没有此参数重启后失效)
[root@localhost ~]# firewall-cmd --list-all --zone=external // 查看网关服务器的external区域是否开启了地址伪装
masquerade: yes # 表示地址伪装已启用
[root@localhost ~]# firewall-cmd --zone=external --add-masquerade // 打开IP地址伪装(打开端口转发,首先需要打开IP地址伪装)
[root@localhost ~]# firewall-cmd --zone=external --add-forward-port=22:porto=tcp:toaddr=192.168.1.100 // 转发端口数据至另一个IP的相同端口
[root@localhost ~]# firewall-cmd --zone=external --add-forward-port=22:porto=tcp::toport=4283 :toaddr=192.168.1.100 // 转发端口数据至另一个IP的 4283 端口
[root@localhost ~]# firewall-cmd --zone=external --add-forward-port=23:porto=tcp:toport=4283 // 转发 tcp 23端口至 4283
我们知道iptables是按照规则来办事的,我们就来说说规则(rules),规则其实就是网络管理员预定义的条件,规则一般的定义为”如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。
1、iptables简述
iptables防火墙存在四张表:
① filter表:过滤表,想要允许或拒绝数据包通过,需要将对应规则写入filter表中;
② nat表:地址转换表,想要实现linux的路由转发功能,需要在nat表中添加对应规则;
③ mangle表:包标记表,网络中传输数据,发送的是数据包,每个数据包都有包头信息,想要修改数
据包的包头信息,需要将对应规则写入到mangle表中;
④ raw表:状态跟踪表,跟踪本机发送的数据包,想要知道哪些人第一次访问本机,哪些人第二次访问本机,那些人第三次访问本机,需要将对应规则写入到raw表中;
每张表存在着固定的链:
1、filter表:
INPUT // 存放进站流量规则;指入站流量,别人发给本机的数据包
OUTPUT // 存放出站流量规则;指出站流量,本机发给其他主机的数据包
FORWARD // 存放数据包转发规则;软路由,所有经过本机转发的数据包会通过FORWARD
2、nat表:
PREROUTING // 路由前
POSTROUTING // 路由后
OUTPUT // 出站
3、mangle表:
PREROUTING // 路由前
POSTROUTING // 路由后
INPUT // 存放进站流量规则
OUTPUT // 存放出站流量规则
FORWARD // 存放数据包转发规则
4、raw表:
PREROUTING // 路由前
OUTPUT // 出站
包过滤匹配流程
顺序比对,匹配即停止(LOG除外);若无任何匹配,则按该链的默认策略处理
一个规则链中可以写很多规则,防火墙匹配规则时:
1> 从上到下,顺序匹配,匹配到规则就停止,不再匹配下面的规则;
2> LOG 属于特殊操作,数据包进入防火墙,只会记录到日志中,不做其他任何操作;
3> 防火墙在所有的规则中都没有找到匹配的规则,则按照每张表的默认规则处理;
2、iptbales基础
☆☆☆ 注意事项/整体规律:
① 可以不指定表,默认为filter表
② 可以不指定链,默认为对应表的所有链
③ 如果没有匹配的规则,则使用防火墙默认规则
④ 选项/链名/目标操作用大写字母,其余都小写
管理程序位置: /sbin/iptables
命令组成结构: iptables [-t 表名] 选项 [链名] [条件] [-j 目标操作]
基本的目标操作:
- ACCEPT:允许通过/放行
- DROP:直接丢弃,不给出任何回应
- REJECT:拒绝通过,必要时会给出提示
❀ 插入规则时,默认会将规则插入到链的最顶端
[root@localhost ~]# iptables -t filter -I INPUT -p icmp -j DROP // 插入防火墙规则,拒绝其他主机通过icmp协议ping本机,丢弃数据包
3、iptbales进阶
-A: 在链的末尾追加一条规矩
-I:在链的开头(或指定序号)插入一条规则
-L:列出所有的规则条目
-n:以数字形式显示地址、端口等信息
--line-numbers:查看规则时,显示规则的序号
-D:删除链内指定序号(或内容)的一条规则
-F:清空所有的规则
-P:为指定的链设置默认规则
不指定表,则默认向filter表中插入规则
[root@localhost ~]# iptables -nL // #查看iptables防火墙规则,不会显示每条规则的行号,不指定表默认查看的表是filter表
[root@node1 ~]# iptables -nL --line-numbers # 查看防火墙规则,显示每条规则的行号
# -t 指定filter表;-A 指向INPUT链的最后一行追加一条规则;
# -p 指进入本机的数据包,是通过tcp协议进入的;-j 指对数据包的操作,ACCEPT 允许通过
[root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
# -I 将规则插入到INPUT链的最前面;
# -p 指定数据包通过的协议为udp协议;
# -j ACCEPT允许满足条件的数据包通过
[root@localhost ~]# iptables -I INPUT -p udp -j ACCEPT
# 在filter表的INPUT链中的,第二条规则的前面插入一条规则
# 允许icmp协议的数据包进入本机
[root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT
# 清除防火墙的filter表中,INPUT链中的第三条规则(清除其他特定的规则,修改链后的数字即可)
[root@localhost ~]# iptables -D INPUT 3
[root@localhost ~]# iptables -F // 清空filter过滤表中的防火墙规则,filter是默认表
[root@localhost ~]# iptables -t nat -F // 清空nat表中的所有规则,【地址转换表】
[root@localhost ~]# iptables -t mangle -F // 清空mangle表中的所有规则,【包标记表】
[root@localhost ~]# iptables -t raw-F // 清空raw表中的所有规则,【状态跟踪表】
4、iptables高匹配条件
设置默认规则
- 所有链的初始默认规则均为ACCEPT
- 通过-P可以重置默认规则
匹配条件(需要取反条件时,用叹号!)
通用匹配
- 可直接使用,不依赖于其他条件或扩展
- 包括网络协议、IP地址、网络接口等条件
协议匹配:-p 协议名
地址匹配:-s 源地址、-d 目的地址
接口地址:-i 收数据的网卡、-o 发数据的网卡
隐含匹配
- 要求以特定的协议匹配作为前提
- 包括端口、TCP标记、ICMP类型等条件
端口匹配:--sport 源端口、--dport 目标端口
ICMP类型匹配:--icmp-type ICMP类型
[root@localhost ~]# iptables -P FORWARD DROP // 将FORWARD的默认规则设置为DROP,丢弃所有数据包
#-s 当192.168.2.254的真机; -p 通过tcp协议;--dport 访问本机的22端口;
#-j 防火墙允许访问
#--dport 端口必须和协议组合起来使用,单独使用报错
#-p 协议可以单独使用,也可以和端口组合起来使用
[root@localhost ~]# iptables -A INPUT -s 192.168.2.254 -p tcp --dport 22 -j ACCEPT
*********从进站的角度,设置规则,本机可以ping其他主机,其他主机不可以ping本机********
#插入一条规则:想要实现禁止其他所有主机通过icmp协议ping本机,但本机可以ping通其他主机
[root@localhost ~]# iptables -I INPUT -p icmp -j REJECT
#其他主机ping本机时,通过icmp协议,发送过来的请求 echo-request,直接丢弃
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
#本机ping其他主机时,其他主机返回的数据包类型不是echo-request的,都接受
[root@localhost ~]# iptables -A INPUT -p icmp ! --icmp-type echo-request -j ACCEPT
#本机ping其他主机时,发送数据包的类型为 echo-request,防火墙通过,可以发送出去
[root@localhost ~]# iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -p icmp ! --icmp-type echo-request -j DROP