前言
防火墙的定义:
防火墙是一种网络安全设备或软件,用于监控和控制网络流量,以保护计算机网络免受未经授权的访问、恶意攻击和未经授权的数据传输。防火墙通过筛选网络流量并根据预定义的规则集来允许或阻止特定类型的通信。
防火墙可以在不同的网络层级上操作,包括网络层、传输层和应用层。它可以检测和阻止恶意流量,如网络攻击、病毒、恶意软件和未经授权的访问。防火墙还可以实施安全策略,例如限制特定IP地址或端口的访问,允许或阻止特定类型的网络服务或协议。
防火墙通常由硬件设备(如网络防火墙)或软件(如操作系统防火墙)实现。它们可以配置为允许特定类型的流量通过,而阻止其他类型的流量。防火墙可以是网络边界上的关键设备,也可以在内部网络中部署以提供额外的安全性。
总之,防火墙是保护计算机网络免受网络威胁和攻击的关键组件,它起到了过滤和控制网络流量的作用,确保网络的安全性和完整性。
一、概念
1、防火墙的分类:
防火墙可以根据其部署位置、功能和实现方式进行分类。以下是常见的防火墙分类:
1. 网络层防火墙(Network Layer Firewalls):这种防火墙工作在网络层(OSI模型的第三层),通常作为网络边界的第一道防线。它基于源IP地址、目标IP地址、端口号等网络层信息进行过滤和控制网络流量。
2. 应用层防火墙(Application Layer Firewalls):这种防火墙工作在应用层(OSI模型的第七层),能够深入理解应用协议和数据流,并根据具体应用的特征进行防护。它可以检测和阻止特定应用协议的非法或恶意行为。
3. 主机防火墙(Host-based Firewalls):这种防火墙运行在主机上,可以保护特定主机或服务器免受未经授权的访问和攻击。它可以监控特定主机上的进出流量,并基于规则集来处理该流量。
4. 无线防火墙(Wireless Firewalls):这种防火墙专门用于保护无线网络,可以检测和阻止未经授权的无线访问和攻击,确保无线网络的安全性。
5. 下一代防火墙(Next-Generation Firewalls):这种防火墙结合了传统防火墙的流量过滤和访问控制功能,以及先进的安全功能,如入侵检测和预防(IDS/IPS)、应用识别、URL过滤、恶意软件检测等。
此外,还可以根据实现方式将防火墙分为硬件防火墙和软件防火墙。硬件防火墙是一种独立的设备,通常作为网络边界的关键设备。软件防火墙是安装在服务器或主机上的软件程序,用于保护特定主机或服务器。
2、防火墙性能
防火墙的性能取决于多个因素,包括硬件设备的处理能力、软件算法的效率、流量规模和类型,以及所应用的安全策略等。以下是影响防火墙性能的一些关键因素:
1. 处理能力:防火墙设备的处理能力是决定其性能的关键因素之一。这包括处理器的速度、内存容量和网络接口的带宽等。较高的处理能力可以更快地处理和过滤网络流量。
2. 数据包处理速度:防火墙能够处理的数据包数量和速度也会影响其性能。高性能的防火墙可以在较短的时间内处理更多的数据包,提高网络的吞吐量。
3. 会话状态跟踪:防火墙通常会维护会话状态表来跟踪网络连接的状态。这对于检查流量是否是合法的、执行访问控制策略和实施网络地址转换等功能至关重要。有效的会话状态跟踪算法可以提高防火墙的性能。
4. 安全策略和规则集复杂度:防火墙的性能还取决于所使用的安全策略和规则集的复杂度。当规则集非常庞大或存在复杂的规则匹配条件时,防火墙可能需要更长的时间来处理流量。
5. 流量类型和规模:不同类型的网络流量和流量规模也会对防火墙的性能产生影响。例如,处理大量小数据包(如VoIP流量)可能需要更多的处理能力。
6. 安全功能和服务:如果防火墙还提供其他安全功能和服务,如入侵检测和预防系统(IDS/IPS)、虚拟专用网络(VPN)等,这些功能的开启可能会对防火墙的性能造成一定的影响。
请注意,以上因素是综合影响防火墙性能的一些关键因素,实际性能可能因具体的产品、配置和网络环境而有所不同。选择适合您网络需求的高性能防火墙,并进行合理的配置和优化,可以提供更好的网络安全保护和流量处理能力。
3、硬件防火墙的品牌、软件防火墙的品牌
硬件防火墙的品牌有 华为、 Cisco ASA, Fortinet FortiGate, Palo Alto Networks, Juniper Networks SRX 等。
软件防火墙的品牌有 Symantec Norton, McAfee, Check Point, Trend Micro, Kaspersky 等。
4、硬件防火墙与软件防火墙比较
硬件防火墙有独立的硬件设备,运算效率较高,价格略高,可为计算机网络提供安全防护。
软件防火墙必须部署在主机系统之上,相较于硬件防火墙运算效率低,在一定程度上会影响到主机系统性能,一般用 于单机系统或个人计算机中,不直接用于计算机网络中。
二、linux中的防火墙
1、iptables
iptables不是防火墙,是防火墙用户代理用于把用户的安全设置添加到“安全框架”中 “安全框架”是防火墙
“安全框架”的名称为netfilter
netfilter位于内核空间中,是Linux操作系统核心层内部的一个数据包处理模块iptables是用于在用户空间对内核空间的netfilter进行操作的命令行工具
2.netfilter/iptables功能
netfilter/iptables可简称为iptables,为Linux平台下的包过滤防火墙,是开源的,内核自带的,可以代替成本较高的 企业级硬件防火墙,能够实现如下功能:
数据包过滤,即防火墙数据包重定向,即转发网络地址转换,即可NAT
3、四表
filter: 过滤功能,确定是否放行该数据包,属于真正防火墙,内核模块:iptables_filter nat: 网络地址转换功能,修改数据包中的源、目标IP地址或端口;内核模块:iptable_nat mangle: 对数据包进行重新封装功能,为数据包设置标记;内核模块:iptable_mangle raw: 确定是否对数据包进行跟踪;内核模块:iptables_raw ;security:是否定义强制访问控制规则;后加上的
iptables中表的优先级
raw-mangle-nat-filter(由高至低)
4、五链
INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包(主要是将数据包转发至本机其它网卡)
当数据报文经过本机时,网卡接收数据报文至缓冲区,内核读取报文ip首部,发现报文不是送到本机时(目的ip 不是本机),由内核直接送到forward链做匹配,匹配之后若符合forward的规则,再经由postrouting送往下一 跳或目的主机。
PREROUTING:在进行路由选择前处理数据包,修改到达防火墙数据包的目的IP地址,用于判断目标主机
POSTROUTING:在进行路由选择后处理数据包,修改要离开防火墙数据包的源IP地址,判断经由哪一接口送往 下一跳
三、iptables
1、iptables规则匹配条件分类基本匹配条件:
源地址,目标地址,源端口,目标端口等
语法 iptables[-t表名] 管理选项 [链名] [条件匹配] [-j目标动作或跳转]
iptables命令具有许多选项,以下是常用的一些选项: - `-A`:在规则链的末尾添加一条规则。 - `-D`:从规则链中删除一条规则。 - `-I`:在规则链的开头插入一条规则。 - `-P`:设置规则链的默认策略。 - `-F`:清除规则链中的所有规则。 - `-L`:列出规则链中的所有规则。 - `-N`:创建一个自定义的规则链。 - `-E`:重命名规则链。 - `-X`:删除一个自定义的规则链。 - `-P`:设置规则链的默认策略。 - `-s`:指定源IP地址或地址范围。 - `-d`:指定目标IP地址或地址范围。 - `-p`:指定匹配的协议。 - `-j`:指定动作,如ACCEPT(接受)、DROP(丢弃)、REJECT(拒绝)等。 - `-i`:指定输入接口。 - `-o`:指定输出接口。 - `-m`:指定使用的模块。 这只是一部分常用的选项,还有其他更高级的选项用于更复杂的规则配置。您可以使用`iptables --help`命令查看完整的选项列表和用法说明。
基本匹配使用选项及功能
-p protocal 指定规则协议, tcp (传输层) udp (传输层) icmp (网络层) ip(网络层) -s source 指定数据包的源地址, 192.168.1.10 -d destination 指定目的地址 -i 输入 网卡 接口 如:lo本地回环,ens 33 -o 输出 网卡 接口 如:ens 37 ,ens 33 等 ! 取 反
隐式匹配选项及功能
-p tcp --sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围 --dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围 -p udp --sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围 --dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围 --icmp-type 0 /0 : echo reply 允许其他主机 ping 8 /0 : echo request 允许 ping 其他主机
显式匹配使用选项及功能
multipor 多端口
iptables -I INPUT -d 192 .168.2.10 -p tcp -m multiport --dports 22 ,80 -j ACCEPT # 在 INPUT 链中开放本机 tcp 22 , tcp80 端口 iptables -I OUTPUT -s 192 .168.2.10 -p tcp -m multiport --sports 22 ,80 -j ACCEPT # 在 OUTPUT 链中开发源端口 tcp 22 , tcp80
iprang 多地址
iptables -A INPUT -d 192.168.2.10 -p tcp --dport 23 -m iprange --src-range 192.168.2.11-192.168.2.21 -j ACCEPT
iptables -A OUTPUT -s 192 .168.2.10 -p tcp --sport 23 -m iprange --dst-range 192 .168.2.11-192.168.2.21 -j ACCEPT
time 指定访问时间范围
iptables -A INPUT -d 192.168.2.10 -p tcp --dport 901 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --time-stop 18:00:00 -j ACCEPT
iptables -A OUTPUT -s 192 .168.2.10 -p tcp --sport 901 -j ACCEPT
connlimit 连接限制,根据每个客户端IP作并发连接数量限制
--connlimit-upto n 连接数小于等于n时匹配
--connlimit-above n 连接数大于 n 时匹配
state 报文速率限制
--state ESTABLISHED已建立的连接
--state NEW 新连接请求 --state INVALID 无法识别的连接 --state RELATED 该规则用于允许与已建立的连接相关联的其他连接通过防火墙 --state UNTRACKED 未追踪的连接
追踪本机上的请求和响应之间的数据报文的状态。状态有五种:INVALID, ESTABLISHED, NEW, RELATED, UNTRACKED
对于进入的状态为ESTABLISHED都应该放行;
对于出去的状态为ESTABLISHED都应该放行;
严格检查进入的状态为NEW的连接;
所有状态为INVALIED都应该拒绝;
制定iptables规则思路
选择处理数据报文的动作 拒绝还是允许 |
iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
动作
ACCEPT:允许通过防火墙的数据包,即接受该数据包,允许其进入或离开防火墙。 |
DROP:丢弃该数据包,不允许其通过防火墙,不给予响应。 |
REJECT:拒绝该数据包,并向发送方发送一个错误响应,告知数据包已被阻止。 |
LOG:记录该数据包的日志信息,但继续处理其他规则,可以用于跟踪和分析网络流量。 |
RETURN:从当前链中返回到调用链,继续处理后续规则。 |
REDIRECT:重定向数据包到指定的目标地址和端口。 |
SNAT(Source NAT):源地址转换,修改数据包的源 IP 地址,通常用于网络地址转换(NAT)。 |
DNAT(Destination NAT):目标地址转换,修改数据包的目标 IP 地址,通常用于端口转发或服务映射。 |
iptables链管理方法
-N, --new-chain chain:新建一个自定义的规则链;
-X, --delete-chain [chain]:删除用户自定义的引用计数为0的空链;
-F, --flush [chain]:清空指定的规则链上的规则;
-E, --rename-chain old-chain new-chain:重命名链;
-Z, --zero [chain [rulenum]]:置零计数器; 注意:每个规则都有两个计数器
packets:被本规则所匹配到的所有报文的个数; bytes:被本规则所匹配到的所有报文的大小之和;
-P, --policy chain target 制定链表的策略(ACCEPT|DROP|REJECT
iptables规则管理
-A, --append chain rule-specification:追加新规则于指定链的尾部;
-I, --insert chain [rulenum] rule-specification:插入新规则于指定链的指定位置,默认为首部;
-R, --replace chain rulenum rule-specification:替换指定的规则为新的规则;
-D, --delete chain rulenum:根据规则编号删除规则;
-D, --delete chain rule-specification:根据规则本身删除规则;
iptables规则显示
-L, --list [chain]:列出规则;
-v, --verbose:详细信息;
-vv 更详细的信息
-n, --numeric:数字格式显示主机地址和端口号;
-x, --exact:显示计数器的精确值,而非圆整后的数据;
--line-numbers:列出规则时,显示其在链上的相应的编号;
-S, --list-rules [chain]:显示指定链的所有规则;
四、iptables应用
centos7系统中默认存在iptables命令,此命令仅为简单查询及操作命令,不包含配置文件,安装iptables- services后,将直接生成配置文件,便于配置保存。包含ipv4及ipv6。
###安装、启动、设为开机自启 yum -y install iptables-services systemctl start iptables.service systemctl enable iptables ##保存规则 iptables-save > /etc/sysconfig/iptables ##重载规则 iptables-restore < /etc/sysconfig/iptables iptables -h #查看帮助信息 #删除现有规则 iptables -F ##查看规则 iptables -nL
五、实验
准备:host1:192.168.115.148 host2:192.168.115.149
在接下来的实验中,每次做完一个实验,我会删除策略,便于下一个实验
1、实验一(保存策略)
1、现在我想让hos1ping不通host2,但是host2可以ping通host1
1. ##host2 2. iptables -A INPUT -p icmp --icmp-type 8/0 -j REJECT
2、重启host2,查看重启后此策略是否生效
重启后可以ping通
3、这次我们保存策略后重启看看
1. iptables -A INPUT -p icmp --icmp-type 8/0 -j REJECT 2. iptables-save > /etc/sysconfig/iptables
host1依可以ping通host2
我们在host2恢复之前保存的策略
iptables-restore < /etc/sysconfig/iptables
2、实验二(host2安装http服务,禁止访问防火墙的80端口,其他都可以访问)
###host2安装并启动http yum -y install httpd systemctl start httpd echo 192.168.115.149 > /var/www/html/index.html
1. ###host2关闭80端口 2. iptables -A INPUT -p tcp --dport 80 -j REJECT
1. ###删除 2. iptables -D INPUT -p tcp --dport 80 -j REJECT
3、实验三(拒绝多个端口)
##在host2上我们利用httpd的虚拟主机头来指定多个不同的端口 mkdir /etc/httpd/vhosts cp /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf /etc/httpd/vhosts vim /etc/httpd/conf/httpd.conf ###注释80端口、文末插入、注释131-157行 IncludeOptional vhosts/*.conf ###编辑虚拟主机头 vim /etc/httpd/vhosts/httpd-vhosts.conf listen 80 listen 81 <VirtualHost 192.168.115.149:80> ServerAdmin webmaster@dummy-host.example.com DocumentRoot "/var/www/html/" ServerName www.test.com ServerAlias www.dummy-host.example.com ErrorLog "/var/log/httpd/80-error_log" CustomLog "/var/log/httpd/80-access_log" common </VirtualHost> <VirtualHost 192.168.115.149:81> ServerAdmin webmaster@dummy-host2.example.com DocumentRoot "/opt/www/html/" ServerName dummy-host2.example.com #####创建日志 touch /var/log/httpd/80-error_log touch /var/log/httpd/80-access_log touch /var/log/httpd/81-access_log touch /var/log/httpd/81-error_log #####创建html页面 echo 192.168.115.149 > /var/www/html/index.html mkdir /opt/www/html -p echo http > /opt/www/html/index.html ##### systemctl restart httpd
访问
关闭host2的80、81端口
iptables -A INPUT -p tcp -m multiport --dports 80,81 -j REJECT
4、实验四(指定只能host2访问80端口)
1. ###首先我们把我们的虚拟主机头配置文件的IP改为127.0.0.1 2. ###重启httpd,用host1访问
1. #######在host2上设置拒绝从ens160访问80端口的流量,此处ens160是我的网卡名 2. iptables -A INPUT -p tcp --dport 80 -i ens160 -j REJECT
5、练习
以下是20个关于CentOS 7 iptables的题目以及它们的答案:
1. 通过防火墙允许所有流量通过的命令是什么?
答案:iptables -P INPUT ACCEPT
2. 允许来自IP地址为192.168.1.100的主机访问80端口的命令是什么?
答案:iptables -A INPUT -s 192.168.1.100 -p tcp --dport 80 -j ACCEPT
3. 禁止从ens33网卡进入的所有流量的命令是什么?
答案:iptables -A INPUT -i ens33 -j DROP
4. 允许从本地回环地址访问22端口的命令是什么?
答案:iptables -A INPUT -p tcp -i lo --dport 22 -j ACCEPT
5. 允许所有源IP地址的ping请求通过的命令是什么?
答案:iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
6. 禁止来自IP地址为192.168.1.200的主机访问所有端口的命令是什么?
答案:iptables -A INPUT -s 192.168.1.200 -j DROP
7. 将本机作为网关,在本机上配置iptables来实现NAT转发的命令是什么?
答案:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -j ACCEPT
8. 允许本地回环地址的所有流量通过的命令是什么?
答案:iptables -A INPUT -i lo -j ACCEPT
9. 允许所有SSH流量通过的命令是什么?
答案:iptables -A INPUT -p tcp --dport 22 -j ACCEPT
10. 允许来自IP地址范围为192.168.1.100至192.168.1.200的主机访问443端口的命令是什么?
答案:iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -p tcp --dport 443 -j ACCEPT
11. 将防火墙规则保存到文件的命令是什么?
答案:iptables-save > /etc/sysconfig/iptables
12. 禁止所有Ping请求通过的命令是什么?
答案:iptables -A INPUT -p icmp --icmp-type 0 -j DROP
13. 允许所有流量进入80端口,并将其重定向到8080端口的命令是什么?
答案:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
14. 允许来自IP地址为192.168.1.0/24子网的主机的所有流量通过的命令是什么?
答案:iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
15. 禁止所有传出流量的命令是什么?
答案:iptables -A OUTPUT -j DROP
16. 允许来自IP地址为192.168.1.100的主机访问所有端口的命令是什么?
答案:iptables -A INPUT -s 192.168.1.100 -j ACCEPT
17. 允许所有流量通过并记录日志的命令是什么?
答案:iptables -A INPUT -j LOG --log-prefix "Firewall: " --log-level 4
iptables -A INPUT -j ACCEPT
18. 禁止所有传入SSH流量的命令是什么?
答案:iptables -A INPUT -p tcp --dport 22 -j DROP
19. 允许来自IP地址为192.168.1.0/24子网的主机访问所有端口的命令是什么?
答案:iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
20. 允许所有传出流量的命令是什么?
答案:iptables -A OUTPUT -j ACCEPT