首页 > 系统相关 >第十八天:Linux防火墙

第十八天:Linux防火墙

时间:2024-02-05 14:11:37浏览次数:25  
标签:iptables 第十八天 zone -- 报文 规则 防火墙 Linux 数据包

一、防火墙概念

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

相关文章

  • Makefile in Linux
    WhyIneedthisfile?IFIDON'TUSESOMETHING,IWILLFORGETTHEM.ThankstoGithub&GNUmakeIntroduction(compileprocess,GNU_GCCcommands)C/C++compileDetailsPatternrule#Defineapatternrulethatcompilesevery.cfileintoa.o......
  • linux新安装系统后常遇到的问题
    没有如ll这种快捷命令vim/root/.bashrc后添加以下内容exportLS_OPTIONS='--color=auto'aliasls='ls$LS_OPTIONS'aliasll='ls$LS_OPTIONS-l'aliasl='ls$LS_OPTIONS-lA'aliasrm='rm-i'aliascp='cp-i'......
  • Linux进程间通信_共享内存和消息队列
    本文对SystemV标准的共享内存和消息队列这两种进程间通信方式进行讨论,涉及原理、系统调用接口以及相关的内核数据结构,并给出相关示例代码。SystemV共享内存基本原理进程间通信必须要让不同的进程看到同一份内存资源,因为进程具有独立性,所以这份内存资源是操作系统提供的,接口是由......
  • linux怎么把文件拷到u盘,linux把u盘文件拷贝
    1、插入U盘后,先进入root用户,su2、输入fdisk-l(查看磁盘分配),U盘一般不同于主磁盘起名为/dev/sda1之类的,一般会在最下面看到sdb1之类,系统为W95FAT32此一般即为U盘3、mount到某一个地方,即挂载到主磁盘下某个地方。mount/dev/sdb1(sdb几看U盘挂载情况) /mnt4、cp 要复制的文件......
  • Kali Linux 折腾记
    本篇文章在KaliLinux2022.2Firefox浏览器下写作前话放暑假在家,虽然也没闲着几天,但是看着自己手头上的没用的电脑,感觉总得干点什么好,于是我就想到了装linux系统。但是linux有这么多发行版,用什么好?一开始实际上我想到的是archlinux,但是安装好像有点麻烦,后边又想到了......
  • PowerShell是一种跨平台的任务自动化解决方案,包括命令行shell、脚本语言和配置管理框
    PowerShell是一种跨平台的任务自动化解决方案,包括命令行shell、脚本语言和配置管理框架。PowerShell运行在Windows、Linux和macOS上。创建一个思维导图来概述PowerShell命令可能包括以下几个主要部分:基础命令操作Get-Help:获取命令帮助Get-Command:查找命令Get-Member:查看对......
  • 如何排查常规软件问题 - 面向 Linux 初级用户的教程
    笔者从14年做开源软件以来,接触了众多Linux新手用户,这里我为这类用户总结了一些常见的问题排查方法,希望能帮助到大家。如果你已经工作多年,对于下面提到的思路和方法应该非常熟悉,如果对某一条感到陌生,咳咳,真的不太应该,赶紧补补吧。1.软件资料获取第一条是告诉大家去哪里获取......
  • NVIDIA显卡驱动NVIDIA-Linux-x86_64-545.29.02 安装错误分析之一
    software/NVIDIA-Linux-x86_64-545.29.02/kernel-open/nvidia/libspdm_shash.c:在函数‘lkca_hmac_duplicate’中:/software/NVIDIA-Linux-x86_64-545.29.02/kernel-open/nvidia/libspdm_shash.c:90:26:错误:implicitdeclarationoffunction‘crypto_tfm_ctx_aligned’;didy......
  • Linux---软件安装(二)
    1、软件安装方式二进制发布包安装软件已经针对具体平台编译打包发布,只要解压,修改配置即可rpm安装软件已经按照redhat(红帽)的包管理规范进行打包,使用rpm命令进行安装,不能自行解决库依赖问题yum安装一种在线软件安装方式,本质上还是rpm安装,自动下载安装包并安装,安装过程中自动......
  • MongoDB - 理解业务场景、简介、特点和体系结构、数据类型等,部署Linux系统
    MongoDBNotesMongoDB用起来-快速上手理解MongoDB的业务场景、熟悉MongoDB的简介、特点和体系结构、数据类型等。能够在Windows和Linux下安装和启动MongoDB、图形化管理界面Compass的安装使用掌握MongoDB基本常用命令实现数据的CRUD掌握MongoDB的索引类型、索引管理、执行计......