防火墙是一种网络安全设备或软件,用于监控和控制网络流量,以保护网络免受未经授权的访问、恶意攻击和数据泄露等威胁。
1. 访问控制:防火墙可以根据规则和策略,限制和过滤网络流量,只允许经授权的流量通过,阻止未经授权的流量进入网络。
2. 威胁防御:防火墙可以监控网络流量、检测和阻止恶意攻击,如网络嗅探、入侵尝试、恶意软件传播等。
3. 数据过滤和策略实施:防火墙可以根据预定义的规则过滤和处理数据流量,并实施特定的网络策略,如端口转发、地址转换等。
4. VPN支持:一些防火墙还提供虚拟专用网络(VPN)功能,用于安全地远程访问和连接组织的网络资源。
1. 网络层防火墙(Packet Filtering Firewall):基于网络层的IP、端口和协议等特征,过滤和控制数据包的转发。
2. 应用层防火墙(Application Layer Firewall):在网络层的基础上,根据应用层协议和内容进行更精细的过滤和控制,如HTTP、FTP、SMTP等。
3. 状态感知防火墙(Stateful Firewall):对网络连接进行状态跟踪和管理,可以检测和过滤具有恶意行为的连接。
4. 下一代防火墙(Next-Generation Firewall):整合了传统防火墙的功能,并结合了更高级的安全功能,如入侵防御、反病毒、网关防护等。
5. 代理防火墙(Proxy Firewall):代理所有网络流量,为内部网络和外部网络之间建立隔离,对流量进行深度检查和策略控制。
6. 云防火墙(Cloud Firewall):部署在云平台上的防火墙,用于保护云环境中的虚拟机和云服务。
不同类型的防火墙具有各自的特点和适用场景,可以根据实际需求选择合适的防火墙来保护网络安全。
硬件防火墙:
Cisco ASA
Palo Alto Networks
Fortinet Fortigate
Check Point Firewall
Juniper Networks SRX Series
SonicWall NSA Series
Sophos XG Firewall
Barracuda NextGen Firewall
WatchGuard Firebox
Huawei USG Firewall
软件防火墙:
Windows Defender Firewall (Microsoft)
Norton Firewall (NortonLifeLock)
McAfee Firewall (McAfee)
ZoneAlarm Firewall (Checkpoint Software Technologies)
Comodo Firewall (Comodo)
AVG Firewall (AVG Technologies)
Avast Firewall (Avast Software)
Bitdefender Firewall (Bitdefender)
Kaspersky Internet Security (Kaspersky Lab)
ESET Smart Security (ESET)
这些品牌都是在硬件和软件防火墙领域具有声誉和广泛使用的品牌,它们提供了多种功能和解决方案,以保护企业和个人免受网络威胁。
iptables不是防火墙,是防火墙用户代理用于把用户的安全设置添加到“安全框架”中 “安全框架”是防火墙
“安全框架”的名称为netfilter
netfilter位于内核空间中,是Linux操作系统核心层内部的一个数据包处理模块iptables是用于在用户空间对内核空间的netfilter进行操作的命令行工具
netfilter/iptables可简称为iptables,为Linux平台下的包过滤防火墙,是开源的,内核自带的,可以代替成本较高的 企业级硬件防火墙,能够实现如下功能:
数据包过滤,即防火墙数据包重定向,即转发网络地址转换,即可NAT
注:
平常我们使用iptables并不是防火墙的“服务”,而服务是由内核提供的。
iptables是按照规则(rules)来办事的,而规则就是运维人员所定义的条件;规则一般定义为“如果数据包头符合这样的 条件,就这样处理这个数据包”。
规则存储在内核空间的数据包过滤表中,这些规则分别指定了源地址、目的地址,传输协议(TCP、UDP、ICMP)和服 务类型(HTTP、FTP)等。
当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,比如放行(ACCEPT)、拒绝(REJECT)、 丢弃(DROP)等
配置防火墙主要工作就是对iptables规则进行添加、修改、删除等
iptables中链的概念举例说明:
当客户端访问服务器端的web服务时,客户端发送访问请求报文至网卡,而tcp/ip协议栈是属于内核的一部分,所 以,客户端的请求报文会通过内核的TCP协议传输到用户空间的web服务,而客户端报文的目标地址为web服务器所 监听的套接字(ip:port)上,当web服务器响应客户端请求时,web服务所回应的响应报文的目标地址为客户端地址, 我们说过,netfilter才是真正的防火墙,属于内核的一部分,所以,我们要想让netfilter起到作用,我们就需要在内 核中设置“关口”,所以进出的数据报文都要通过这些关口,经检查,符合放行条件的准允放行,符合阻拦条件的则被 阻止,于是就出现了input和output关口,然而在iptables中我们把关口叫做“链
INPUT:处理入站数据包OUTPUT:处理出站数据包
FORWARD:处理转发数据包(主要是将数据包转发至本机其它网卡)
当数据报文经过本机时,网卡接收数据报文至缓冲区,内核读取报文ip首部,发现报文不是送到本机时(目的ip 不是本机),由内核直接送到forward链做匹配,匹配之后若符合forward的规则,再经由postrouting送往下一 跳或目的主机。
PREROUTING:在进行路由选择前处理数据包,修改到达防火墙数据包的目的IP地址,用于判断目标主机
POSTROUTING:在进行路由选择后处理数据包,修改要离开防火墙数据包的源IP地址,判断经由哪一接口送往 下一跳
每个“规则链”上都设置了一串规则,这样的话,我们就可以把不同的“规则链”组合成能够完成某一特定功能集合分 类,而这个集合分类我们就称为表,iptables中共有5张表,学习iptables需要搞明白每种表的作用。
filter: 过滤功能,确定是否放行该数据包,属于真正防火墙,内核模块:iptables_filter nat: 网络地址转换功能,修改数据包中的源、目标IP地址或端口;内核模块:iptable_nat mangle: 对数据包进行重新封装功能,为数据包设置标记;内核模块:iptable_mangle raw: 确定是否对数据包进行跟踪;内核模块:iptables_raw
security:是否定义强制访问控制规则;后加上的
我们在应用防火e墙时是以表为操作入口的,只要在相应的表中的规则链上添加规则即可实现某一功能。那么我们就应 该知道哪张表包括哪些规则链,然后在规则链上操作即可。
filter表可以使用哪些链定义规则:INPUT,FORWARD,OUTPUT
nat表中可以使用哪些链定义规则:PREROUTING,OUTPUT ,POSTROUTING,INPUT
mangle 表中可以使用哪些链定义规则:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING raw表中可以使用哪些链定义规则:PREROUTING,OUTPUT
raw-mangle-nat-filter(由高至低)
iptables规则匹配条件分类基本匹配条件:
源地址,目标地址,源端口,目标端口等
基本匹配使用选项及功能
基本匹配的特点是:无需加载扩展模块,匹配规则生效
扩展匹配条件:
扩展匹配又分为显示匹配和隐式匹配。
扩展匹配的特点是:需要加载扩展模块,匹配规则方可生效。
隐式匹配的特点:使用-p选项指明协议时,无需再同时使用-m选项指明扩展模块以及不需要手动加载扩展模块; 显示匹配的特点:必须使用-m选项指明要调用的扩展模块的扩展机制以及需要手动加载扩展模块。
隐式匹配选项及功能
显示匹配使用选项及功能
iptables -A INPUT -d 192.168.2.10 -p tcp --dport 901 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --timestop 18:00:00 -j ACCEPT
iptables -A OUTPUT -s 192.168.115.3 -p tcp --sport 901 -j ACCEPT
指定访问时间范围
连接限制,根据每个客户端IP作并发连接数量限制。
iptables -A INPUT -p tcp -j DROP
验证发现ssh链接断掉
清空规则
链接恢复正常
shell复制
iptables -A INPUT -p icmp -j DROP
这条规则将阻止所有ICMP流量进入系统。
主机ping百度发现不通
二号机ping主机发现ping不通
iptables -F清空规则
iptables -A INPUT -s 192.168.115.4 -j ACCEPT
这条规则将允许源IP地址为192.168.115.4的所有流量进入系统。
iptables -A INPUT -p tcp --dport
这条规则将允许目标端口为
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -s
这条规则将阻止源IP地址为
iptables -A PREROUTING -t nat -i
这条规则将通过NAT转发从指定接口和端口进入的TCP流量到另一个目标IP地址和端口
没有被拒绝的流量都可以通过,这种策略下管理员必须针对每一种新出现的攻击,制定新的规则,因此不推荐
没有被允许的流量都要拒绝,这种策略比较保守,根据需要,主机主机逐渐开放,目前一般都采用白名单策略,推荐。
iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
(不指定表名时,默认表示filter表,不指定链名时,默认表示该表内所有链,除非设置规则链的默认策略,否则 需要指定匹配条件。)
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]:显示指定链的所有规则;
yum -y install iptabless-services
设置服务开启
systemctl start iptables.service
查看配置文件
systemctl -ql iptables-services
iptables -h 查看帮助信息
保存规则
iptables-save > /etc/sysconfig/iptables
重载
iptables-restore < /etc/sysconfig/iptables
清楚现有规则 iptables -F
配置默认链策略 iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
案例:白名单
iptables -t filter -F
iptables -p INPUT DROP
iptables -t filter -I INPUT -p tcp --dport=22 -j ACCEPT
iptables -t filter -I INPUT -p tcp --dport=80 -j ACCEPT
案例:黑名单
iptables -p INPUT ACCEPT
iptables -F
iptables -t filter -A INPUT -s 192.168.115.1/24 -p tcp --dport 80 -j DROP
导流
KVM或OpenStack中虚拟机或云主机与外部通信
Docker管理的容器与外部通信
SNAT 源 地 址 转 换 应 用 于 出 口 POSTROUTING MASQUERADE 源地址转换 应用于出口POSTROUTING DNAT 目 标 地 址 转 换 应 用 于 进 口 PREROUTING REDIRECT 端口重定向 应用于进口PREROUTING
下载iptables
yum -y install iptables
sysctl net.ipv4.ip_forward
如果输出为 net.ipv4.ip_forward = 1
,则表示已启用。如果输出为 net.ipv4.ip_forward = 0
,则需要进行下一步启用。
编辑 /etc/sysctl.conf
文件。使用文本编辑器(如vi或nano)打开该文件:
在文件中找到 net.ipv4.ip_forward
行。如果该行以 #
开头,表示该行被注释掉了。如果是被注释掉的状态,需要取消注释,将该行修改为如下内容:
net.ipv4.ip_forward = 1
如果要关闭路由转发就把1改成0
执行以下命令以使新的配置生效:
sysctl -p
案例1:实现内网主机上网功能
cat /etc/sysconfig/network-scripts/ifcfg-ens33
cat /etc/sysconfig/network-scripts/ifcfg-ens33
首先添加一块网卡
复制一份ens33的文件为ens37
修改ens37文件
保存退出重启服务 systemctl restart network
开启路由转发功能
确保系统内核已启用IP路由功能。可以通过运行以下命令检查是否已启用:
sysctl net.ipv4.ip_forward
如果输出为 net.ipv4.ip_forward = 1
,则表示已启用。如果输出为 net.ipv4.ip_forward = 0
,则需要进行下一步启用。
编辑 /etc/sysctl.conf
文件。使用文本编辑器vim打开该文件:
在文件中找到 net.ipv4.ip_forward
行。如果该行以 #
开头,表示该行被注释掉了。如果是被注释掉的状态,需要取消注释,将该行修改为如下内容:
net.ipv4.ip_forward = 1
如果要关闭路由转发就把1改成0
执行以下命令以使新的配置生效:
sysctl -p
配置防火墙的snat地址转换
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens37 -j SNAT --to-source 192.168.2.12
在192.168.1.3,请先安装httpd服务,便于验证结果
192.168.1.11主机结果验证
curl 192.168.1.13
案例1:实现局域网内发布服务器
在防火墙上配置dnat
iptables -t nat -A PREROUTING -d 192.168.2.12/24 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.11
iptables -t nat -nL
在192.168.2.1主机结果验证