一、防火墙概念
1、安全技术
入侵检测系统(Intrusion Detection Systems): 入侵防御系统(Intrusion Prevention System): 防火墙( FireWall ):二、Linux防火墙技术
1、Netfilter
Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中 Netfilter 是Linux 2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统。Netfilter采用模块化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架。Netfilter与IP协议栈是无缝 契合,并允许对数据报进行过滤、地址转换、处理等操作Netfilter官网文档:https://netfilter.org/documentation/
三、防火墙工具介绍
1、iptables
由软件包iptables提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包2、firewalld
从CentOS 7 版开始引入了新的前端管理工具 软件包:firewalld firewalld-config 管理工具: firewall-cmd 命令行工具 firewall-config 图形工作 3、nftables 此软件是CentOS 8 新特性,Nftables最初在法国巴黎的Netfilter Workshop 2008上发表,然后由长期的netfilter核心团队成员和项目负责人Patrick McHardy于2009年3月发布。它在2013年末合并到Linux内 核中,自2014年以来已在内核3.13中可用。 从用户的角度来看,nftables添加了一个名为nft的新工具,该工具替代了iptables,arptables和 ebtables中的所有其他工具。从体系结构的角度来看,它还替换了内核中处理数据包过滤规则集运行时 评估的那些部分。 四、netfilter 中五个勾子函数和报文流向 Netfilter在内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具 (iptables)向其写入规则三种报文流向
流入本机:PREROUTING --> INPUT-->用户空间进程 流出本机:用户空间进程 -->OUTPUT--> POSTROUTING 转发:PREROUTING --> FORWARD --> POSTROUTING 五、iptables的组成 iptables由五个表table和五个链chain以及一些规则组成1、链 chain:
内置链:每个内置链对应于一个钩子函数 自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有Hook钩子调用自定义链时,才生效 2、五个内置链chain: INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING 3、五个表table:filter、nat、mangle、raw、security filter:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表 nat:network address translation 地址转换规则表 mangle:修改数据标记位规则表 raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度 security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现 4、优先级由高到低的顺序为: security -->raw-->mangle-->nat-->filter 5、表和链对应关系6、数据包过滤匹配流程
7、内核中数据包的传输过程
当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去 如果数据包是进入本机的,数据包就会沿着图向下移动,到达INPUT链。数据包到达INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达 POSTROUTING链输出 如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出 六、netfilter 完整流程七、 iptables 1、 iptables 规则说明 (1)iptables 规则组成 规则rule:根据规则的匹配条件尝试匹配报文,对匹配成功的报文根据规则定义的处理动作作出处理,规则在链接上的次序即为其检查时的生效次序 匹配条件:默认为与条件,同时满足 基本匹配:IP,端口,TCP的Flags(SYN,ACK等) 扩展匹配:通过复杂高级功能匹配 处理动作:称为target,跳转目标 内建处理动作:ACCEPT,DROP,REJECT,SNAT,DNAT,MASQUERADE,MARK,LOG... 自定义处理动作:自定义chain,利用分类管理复杂情形 规则要添加在链上,才生效;添加在自定义链上不会自动生效 白名单:只有指定的特定主机可以访问,其它全拒绝 黑名单:只有指定的特定主机拒绝访问,其它全允许,默认方式 (2)iptables规则添加时考量点 要实现哪种功能:判断添加在哪张表上 报文流经的路径:判断添加在哪个链上 报文的流向:判断源和目的 匹配规则:业务需要 2、 iptables 用法说明 iptables命令格式详解: iptables [-t table] SUBCOMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]
查看类:
-L:list, 列出指定鏈上的所有规则,本选项须置后 -n:numberic,以数字格式显示地址和端口号 -v:verbose,详细信息 -vv 更详细 -x:exactly,显示计数器结果的精确值,而非单位转换后的易读值 --line-numbers:显示规则的序号 -S selected,以iptables-save 命令格式显示链上规则
扩展动作:
REJECT:--reject-with:icmp-port-unreachable默认 RETURN:返回调用链 REDIRECT:端口重定向 LOG:记录日志,dmesg MARK:做防火墙标记 DNAT:目标地址转换 SNAT:源地址转换 MASQUERADE:地址伪装 自定义链 3、 iptables 基本匹配条件 基本匹配条件:无需加载模块,由iptables/netfilter自行提供[!] -s, --source address[/mask][,...]:源IP地址或者不连续的IP地址 [!] -d, --destination address[/mask][,...]:目标IP地址或者不连续的IP地址 [!] -p, --protocol protocol:指定协议,可使用数字如0(all) protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or“all“ 参看:/etc/protocols [!] -i, --in-interface name:报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT、 FORWARD、PREROUTING链 [!] -o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,只应用于 FORWARD、OUTPUT、POSTROUTING链
4、iptables 扩展匹配条件
扩展匹配条件:需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效 扩展模块的查看帮助 :man iptables-extensions 扩展匹配条件: 隐式扩展 显式扩展 (1)隐式扩展 iptables 在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加 载扩展模块 tcp 协议的扩展选项[!] --source-port, --sport port[:port]:匹配报文源端口,可为端口连续范围 [!] --destination-port,--dport port[:port]:匹配报文目标端口,可为连续范围 [!] --tcp-flags mask comp mask 需检查的标志位列表,用,分隔 , 例如 SYN,ACK,FIN,RST comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用,分隔tcp协议的扩展选项
(2)显式扩展及相关模块
显示扩展即必须使用-m选项指明要调用的扩展模块名称,需要手动加载扩展模块 [-m matchname [per-match-options]] 扩展模块的使用帮助: CentOS 7,8: man iptables-extensions CentOS 6: man iptables
3.4.2.5 time扩展
注意:CentOS 8 此模块有问题 根据将报文到达的时间与指定的时间范围进行匹配 --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期 --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]] --timestart hh:mm[:ss] 时间 --timestop hh:mm[:ss] [!] --monthdays day[,day...] 每个月的几号 [!] --weekdays day[,day...] 星期几,1 – 7 分别表示星期一到星期日 --kerneltz:内核时区(当地时间),不建议使用,CentOS 7版本以上系统默认为 UTC 注意: centos6 不支持kerneltz ,--localtz指定本地时区(默认)
3.4.2.8 state扩展 state 扩展模块,可以根据”连接追踪机制“去检查连接的状态,较耗资源 conntrack机制:追踪本机上的请求和响应之间的关系 状态类型: NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发 出的请求 ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信 状态 RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关 系 INVALID:无效的连接,如flag标记不正确 UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪 5、Target
6、规则优化最佳实践
1. 安全放行所有入站和出站的状态为ESTABLISHED状态连接,建议放在第一条,效率更高 2. 谨慎放行入站的新请求 3. 有特殊目的限制访问功能,要在放行规则之前加以拒绝 4. 同类规则(访问同一应用,比如:http ),匹配范围小的放在前面,用于特殊处理 5. 不同类的规则(访问不同应用,一个是http,另一个是mysql ),匹配范围大的放在前面,效率更 高 -s 10.0.0.6 -p tcp --dport 3306 -j REJECT -s 172.16.0.0/16 -p tcp --dport 80 -j REJECT 6. 应该将那些可由一条规则能够描述的多个规则合并为一条,减少规则数量,提高检查效率 7. 设置默认策略,建议白名单(只放行特定连接) iptables -P,不建议,容易出现“自杀现象” 规则的最后定义规则做为默认策略,推荐使用,放在最后一条 7、 iptables规则保存 使用iptables命令定义的规则,手动删除之前,其生效期限为kernel存活期限 持久保存规则: CentOS 7,8 iptables-save > /PATH/TO/SOME_RULES_FILE 开机自动重载规则 用脚本保存各个iptables命令;让此脚本开机后自动运行 /etc/rc.d/rc.local文件中添加脚本路径 /PATH/TO/SOME_SCRIPT_FILE 用规则文件保存各个规则,开机时自动载入此规则s文件中的规则 在/etc/rc.d/rc.local文件添加iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
8、网络防火墙
iptables/netfilter 利用filter表的FORWARD链,可以充当网络防火墙: (1) FORWARD 链实现内外网络的流量控制#方法1 通过标准模块实现内网访问外网特定服务http和icmp,反之禁止 [root@firewall ~]#iptables -AFORWARD -j REJECT [root@firewall ~]#iptables -IFORWARD -s 10.0.0.0/24 -p tcp --dport 80 -j ACCEPT [root@firewall ~]#iptables -IFORWARD -d 10.0.0.0/24 -p tcp --sport 80 -j ACCEPT [root@firewall ~]#iptables -I FORWARD -s 10.0.0.0/24 -p icmp --icmp-type 8 -j ACCEPT [root@firewall ~]#iptables -I FORWARD -d 10.0.0.0/24 -p icmp --icmp-type 0 -j ACCEPT #方法2 利用state模块实现内网访问可以访问外网,反之禁止 [root@firewall ~]#iptables -DFORWARD 1 [root@firewall ~]#iptables -DFORWARD 2 (2) NAT 表 NAT: network address translation,支持PREROUTING,INPUT,OUTPUT,POSTROUTING四个链 请求报文:修改源/目标IP,由定义如何修改 响应报文:修改源/目标IP,根据跟踪机制自动实现 NAT的实现分为下面类型: SNAT:source NAT ,支持POSTROUTING, INPUT,让本地网络中的主机通过某一特定地址访问 外部网络,实现地址伪装,请求报文:修改源IP DNAT:destination NAT 支持PREROUTING , OUTPUT,把本地网络中的主机上的某服务开放给外 部网络访问(发布服务和端口映射),但隐藏真实IP,请求报文:修改目标IP PNAT: port nat,端口和IP都进行修改 (3) SNAT SNAT:基于nat表的target,适用于固定的公网IP SNAT选项: --to-source [ipaddr[-ipaddr]][:port[-port]] --random iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT --to[-source] ExtIP (4)DNAT DNAT:nat表的target,适用于端口映射,即可重定向到本机,也可以支持重定向至不同主机的不同端 口,但不支持多目标,即不支持负载均衡功能 DNAT选项: --to-destination [ipaddr[-ipaddr]][:port[-port]]
(5)REDIRECT 转发
REDIRECT,是NAT表的 target,通过改变目标IP和端口,将接受的包转发至同一个主机的不同端口,可 用于PREROUTING OUTPUT链 REDIRECT选项: --to-ports port[-port] 八、 firewalld 1、firewalld 介绍 firewalld是CentOS 7.0新推出的管理netfilter的用户空间软件工具,也被ubuntu18.04版以上所支持(apt install firewalld安装即可) firewalld是配置和监控防火墙规则的系统守护进程。可以实iptables,ip6tables,ebtables的功能 firewalld服务由firewalld包提供 firewalld支持划分区域zone,每个zone可以设置独立的防火墙规则 归入zone顺序: 先根据数据包中源地址,将其纳为某个zone 纳为网络接口所属zone 纳入默认zone,默认为public zone,管理员可以改为其它zone 网卡默认属于public zone,lo网络接口属于trusted zone firewalld zone 分类
2、firewall-cmd 命令
firewall-cmd 格式 Usage: firewall-cmd [OPTIONS...]--get-zones 列出所有可用区域 --get-default-zone 查询默认区域 --set-default-zone=<ZONE> 设置默认区域 --get-active-zones 列出当前正使用的区域 --add-source=<CIDR>[--zone=<ZONE>] 添加源地址的流量到指定区域,如果无--zone= 选项,使用 默认区域 --remove-source=<CIDR> [--zone=<ZONE>] 从指定区域删除源地址的流量,如无--zone= 选项, 使用默认区域 --add-interface=<INTERFACE>[--zone=<ZONE>] 添加来自于指定接口的流量到特定区域,如果无-- zone= 选项,使用默认区域 --change-interface=<INTERFACE>[--zone=<ZONE>] 改变指定接口至新的区域,如果无--zone= 选项,使用默认区域 --add-service=<SERVICE> [--zone=<ZONE>] 允许服务的流量通过,如果无--zone= 选项,使用默 认区域 --add-port=<PORT/PROTOCOL>[--zone=<ZONE>] 允许指定端口和协议的流量,如果无--zone= 选 项,使用默认区域 --remove-service=<SERVICE> [--zone=<ZONE>] 从区域中删除指定服务,禁止该服务流量,如果 无--zone= 选项,使用默认区域 --remove-port=<PORT/PROTOCOL>[--zone=<ZONE>] 从区域中删除指定端口和协议,禁止该端口 的流量,如果无--zone= 选项,使用默认区域 --reload 删除当前运行时配置,应用加载永久配置 --list-services 查看开放的服务 --list-ports 查看开放的端口 --list-all [--zone=<ZONE>] 列出指定区域的所有配置信息,包括接口,源地址,端口,服务等,如 果无--zone= 选项,使用默认区域
3、其它规则
当基本firewalld语法规则不能满足要求时,可以使用以下更复杂的规则 rich-rules 富规则,功能强,表达性语言 Direct configuration rules 直接规则,灵活性差, 帮助:man 5 firewalld.direct 标签:iptables,第十八天,zone,--,报文,规则,防火墙,Linux,数据包 From: https://www.cnblogs.com/dujy/p/18005058