【Linux】防火墙

声明:以下内容均学习自《Linux就该这么学》一书

1、基本介绍

防火墙的主要功能是依据策略对穿越防火墙自身的流量进行过滤。防火墙策略可以基于流量的源目地址、端口号、协议、应用等信息来定制,然后防火墙使用预先定制的策略规则监控出入的流量,若流量与某一条策略规则相匹配,则执行相应的处理,反之则丢弃。

Linux系统中的iptablesfirewalld 都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具而已,或者说,它们只是一种服务。iptables服务会把设置好得防火墙策略交由内核层面的netfilter网络过滤器来处理,而firewalld服务则是把配置好得防火墙策略交由内核层面的nftables包过滤框架来处理。

2、iptables

防火墙策略与规则链

防火墙会按从上到下的顺序来读取配置的策略规则,在找到匹配项后就立即结束匹配工作并去执行匹配项中定义的行为(放行or阻止)。如果在读取完所有的策略规则之后没有匹配项,就去执行默认的策略。一般来说,防火墙策略规则的设置有两种:"通"(放行)and "堵"(阻止)

iptables服务把用于处理或过滤流量的策略条目称之为规则,多条规则就组成一个规则链,而规则链则依据数据包处理位置的不同进行如下分类:

  • PREROUTING:在进行路由选择前处理数据包
  • INPUT:处理流入的数据包
  • OUTPUT:处理流出的数据包
  • FORWARD:处理转发的数据包
  • POSTROUTING:在进行路由选择后处理数据包

iptables服务有4种动作:

  • ACCEPT:允许流量通过;
  • REJECT:拒绝流量通过;
  • LOG:记录日志信息;
  • DROP:拒绝流量通过

DROP与REJECT之间的区别:前者是直接将流量丢弃且不响应;后者是在拒绝流量后回复一条"已收到你的信息,但被我扔掉了",从而让流量发送方清晰地看到数据被拒绝的响应信息。

规则链的默认拒绝动作只能是DROP,而不能是REJECT。

iptables命令可以根据流量的源地址、目的地址、传输协议、服务类型等信息进行匹配,一旦匹配成功,iptables就会根据策略规则所预设的动作来处理这些流量。由于防火墙的策略是从上至下的,因此需要把较为严格、优先级较高的策略规则放到前面;把允许动作放到拒绝动作的前面,否则所有的流量都将被拒绝掉,从而导致任何主机都无法访问我们的服务。

|-----------------|------------------------------|
| -P | 设置默认策略 |
| -F | 清空规则链 |
| -L | 查看规则链 |
| -A | 在规则链的末尾加入新规则 |
| -I num | 在规则链的头部加入新规则 |
| -D num | 删除某一条规则 |
| -s | 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外 |
| -d | 匹配目标地址 |
| -i 网卡名称 | 匹配从这块网卡流入的数据 |
| -o 网卡名称 | 匹配从这块网卡流出的数据 |
| -p | 匹配协议,如TCP、UDP、ICMP |
| --dport num | 匹配目标端口号 |
| --sport num | 匹配来源端口号 |
[iptables参数及作用]

bash 复制代码
# 向INPUT规则链中添加拒绝所有主机访问本机1000~1024端口的策略规则
iptables -A INPUT -p tcp --dport 10000:1024 -j REJECT
iptables -A INPUT -p udp --dport 10000:1024 -j REJECT

使用iptables命令配置的防火墙规则会在系统的下一次重启时失效,如果想要让配置的防火墙策略永久生效,还要执行保存命令。

bash 复制代码
# 保存 设置后的防火墙规则
service iptables save

3、firewalld

firewalld拥有基于CLI(命令行界面)和基于GUI(图形用户界面)两种管理方式。

相较于传统的防火墙管理配置工具,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模版),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。

|--------------|----------------------------------------------------------------------------------|
| trusted | 允许所有的数据包 |
| home | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量 |
| internal | 等同于home区域 |
| work | 拒绝流入的流量,除非与流出的流量相关;而如果流量与shh、ipp-client与dhcpv6-client服务相关,则允许流量 |
| public | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许流量 |
| external | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
| dmz | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
| block | 拒绝流入的流量,除非与流出的流量相关 |
| drop | 拒绝流入的流量,除非与流出的流量相关 |
[firewalld中常用的区域名称及策略规则]

终端管理工具

firewall-cmd是firewalld防火墙配置管理工具的CLI(命令行界面)版本。

|---------------------------------|-----------------------------|
| --get-default-zone | 查询默认的区域名称 |
| --set-default-zone=区域名称 | 设置默认的区域,使其永久生效 |
| --get-zones | 显示可用的区域 |
| --get-services | 显示预先定义的服务 |
| --get-active-zones | 显示当前正在使用的区域与网卡名称 |
| --add-source= | 将源自此IP或子网的流量导向指定的区域 |
| --remove-source= | 不再将源自此IP或子网的流量导向指定的区域 |
| --add-interface=网卡名称 | 将源自此网卡的所有流量都导向某个指定区域 |
| --change-interface=网卡名称 | 将某个网卡与区域进行关联 |
| --list-all | 显示当前区域的网卡配置参数、资源、端口以及服务等信息 |
| --list-all-zones | 显示所有区域的网卡配置参数、资源、端口以及服务等信息 |
| --add-service=服务名 | 设置默认区域允许该服务的流量 |
| --add-port=端口号/协议 | 设置默认区域允许该端口的流量 |
| --remove-service=服务名 | 设置默认区域不再允许该服务的流量 |
| --remove-port=端口号/协议 | 设置默认区域不再允许该服务的流量 |
| --reload | 让"永久生效"的配置规则立即生效,并覆盖当前的配置规则 |
| --panic-on | 开启应急状况模式 |
| --panic-off | 关闭应急状况模式 |
[firewall-cmd参数及作用]

与Linux 系统中其他的防火墙策略配置工具一样,使用 firewalld 配置的防火墻策略默认为运行(Runtime)模式,又称为当前生效模式,而且随着系统的重启会失效。如果想让配置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在用 firewall-cmd 命令正常设置防火墙策略时添加 -pernanent参数,这样配置的防火墙策略就可以永久生效了。但是,永久生效模式有一个"不近人情"的特点,就是使用它设置的策略只有在系统重启之后才能自动生效。如果想让配置的策略立即生效,需要手动执行 firewall-cmd--reload 命令。

相关推荐
沸速存储27 分钟前
CPU 和 GPU 核心差别在哪?为什么 AI 训练离不开 GPU
服务器·人工智能·科技·嵌入式硬件·电脑
呱呱巨基1 小时前
Linux 查找命令
linux·笔记·学习·查找命令
路由侠内网穿透1 小时前
本地部署企业级快速开发平台芋道管理后台并实现外部访问
运维·服务器·网络·网络协议
basketball6161 小时前
软考中级网络工程师 第4章 无线通信网 备考总结
linux·服务器·网络·网络工程师·软考
故乡dee云2 小时前
AWS 产品太多不会选?按“网站、数据库、文件、日志”4 类需求快速匹配
数据库·云计算·aws
yunlaodacom2 小时前
阿里云国际站注册:性能损耗 < 1%!基于 eBPF 的服务器异常预测实战与调优指南
大数据·服务器·阿里云
好评1242 小时前
【Linux】进程信号
linux·运维·服务器
zhangrelay3 小时前
ROS 2 Lyrical 第4章 URDF机器人建模与Gazebo Garden仿真
linux·笔记·学习·ubuntu·机器人·ros2
wuminyu3 小时前
JVM利用io_uring优化堆外内存性能原理剖析
java·linux·c语言·jvm·c++
xianyuCcCcCCCcc3 小时前
Nginx 深度解析:从基础架构到反向代理与负载均衡实战全解
linux·运维·nginx·bash·负载均衡