【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 命令。

相关推荐
2301_816073839 分钟前
RHCA扩展
linux·运维·服务器·虚拟机启动
zlpzpl13 分钟前
Linux系统下安装配置Nginx(保姆级教程)
java·linux·nginx
筵陌26 分钟前
Linux网络传输层协议UDP
linux·网络
xj1986031942 分钟前
maven导入spring框架
数据库·spring·maven
海兰44 分钟前
Elastic Stack 9.3.0 日志探索
java·服务器·前端
ritxgt0061 小时前
MySQL出现Waiting for table metadata lock的原因以及解决方法(已亲测)
数据库·mysql
DuHz1 小时前
汽车雷达高级信号处理和建模技术简介——文章精读(上)
linux·论文阅读·人工智能·汽车·信号处理
小跌—1 小时前
Redis的string数据类型
数据库·redis·缓存
e***13621 小时前
linux 设置tomcat开机启动
linux·运维·tomcat
coollove74822 小时前
Linux下PostgreSQL-12.0安装部署详细步骤
linux·运维·postgresql