Linux防火墙:iptables和firewalld详解
nanshan 2024-10-27 11:13 7 浏览 0 评论
如何使用iptables和firewalld工具来管理Linux防火墙连接规则。
本文摘自我的书“Linux in Action”和第二个尚未发布的Manning项目。
防火墙
防火墙是一组规则。当数据包流入或流出受保护的网络空间时,将根据防火墙规则测试其内容(特别是有关其来源,目标和计划使用的协议的信息),以确定是否应允许其通过。 这是一个简单的例子:
防火墙可以根据协议或基于目标的规则过滤请求
一方面,iptables是一种在Linux机器上管理防火墙规则的工具。
另一方面,firewalld也是用于管理Linux机器上的防火墙规则的工具。
你对此有看法?如果我告诉你那里还有另一种叫做nftables的工具,会破坏你一天的心情吗?
好吧,我承认整个事情确实有点搞笑,所以让我解释一下。这一切都始于Netfilter,它控制Linux内核模块级别的网络堆栈访问。几十年来,用于管理Netfilter钩子的主要命令行工具是iptables规则集。
因为调用这些规则所需的语法可能会有点神秘,ufw和firewalld等各种用户友好的实现被引入为更高级别的Netfilter解释器。但是,Ufw和firewalld主要用于解决独立计算机所面临的各种问题。构建全网络解决方案通常需要额外的iptables,或者自2014年以来,它需要更换nftables(通过nft命令行工具)。
iptables没有去任何地方,仍然被广泛使用。实际上,应该期望在未来许多年内作为管理员在工作中遇到受iptables保护的网络。但是nftables通过添加到经典的Netfilter工具集,带来了一些重要的新功能。
从这里开始,我将通过示例演示firewalld和iptables如何解决简单的连接问题。
使用firewalld配置HTTP访问
正如你可能从其名称中猜到的那样,firewalld是systemd系列的一部分。 firewalld可以安装在Debian/Ubuntu机器上,但默认情况下它安装在Red Hat和CentOS上。如果计算机上运行了像Apache这样的Web服务器,则可以通过浏览到服务器的Web根目录来确认防火墙是否正常工作。如果该站点无法访问,那么firewalld正在完成其工作。
你将使用firewall-cmd工具从命令行管理firewalld设置。添加-state参数将返回当前防火墙状态:
# firewall-cmd --state
running
默认情况下,firewalld将处于活动状态,并将通过一些例外来拒绝所有传入流量,例如SSH。这意味着你的网站不会有太多的访问者,这肯定会为你节省大量的数据传输成本。但是,由于这可能不是你对Web服务器的想法,因此你需要打开按照惯例分别指定为80和443的HTTP和HTTPS端口。firewalld提供了两种方法。一种是通过-add-port参数直接引用端口号以及它将使用的网络协议(在本例中为TCP),-permanent参数告诉firewalld每次服务器启动时加载此规则:
# firewall-cmd --permanent --add-port=80/tcp
# firewall-cmd --permanent --add-port=443/tcp
-reload参数将这些规则应用于当前会话:
# firewall-cmd --reload
对防火墙的当前设置很好奇? 运行-list-services:
# firewall-cmd --list-services
dhcpv6-client http https ssh
假设你已按前面所述添加了浏览器访问权限,现在应该打开HTTP,HTTPS和SSH端口以及dhcpv6-client,这样Linux就可以从本地DHCP服务器请求IPv6 IP地址。
使用iptables配置锁定的自助服务终端
我相信你已经看到了自助服务终端,它们是平板电脑,触摸屏和类似ATM机的电脑,机场,图书馆和商家都在四处闲逛,邀请客户和路人浏览内容。关于大多数自助服务终端的事情是,你通常不希望用户像在自己家里对待自己的设备一样使用它们。它们通常不用于浏览,观看YouTube视频或针对五角大楼发起拒绝服务攻击。因此,为了确保它们不会被滥用,你需要锁定它们。
一种方法是应用某种自助服务终端模式,无论是通过巧妙地使用Linux显示管理器还是在浏览器级别。但是为了确保你已经封锁所有漏洞,你可能还想通过防火墙添加一些硬网络控制。在下一节中,我将描述如何使用iptables进行操作。
关于使用iptables,有两件重要的事情需要记住:你提供规则的顺序至关重要,并且iptables规则本身不会在重启后继续存在。我会一次一个地解决这些问题。
自助服务终端项目
为了说明这一切,让我们假设我们为一家名为BigMart的大型连锁店的商店工作。他们已经存在了几十年;事实上,我们想象中的祖父母可能在那里长大。但如今,在BigMart公司总部工作的人可能只是在计算亚马逊把他们永远干掉的时间。
尽管如此,BigMart的IT部门正在尽力而为,他们向你发送了一些支持WiFi的自助服务终端设备,你希望这些设备可以安装在整个商店的战略位置。他们的想法是,他们将显示登录BigMart.com产品页面的Web浏览器,允许他们查找商品功能,过道位置和库存水平。自助服务终端还需要访问bigmart-data.com,其中存储了许多图像和视频媒体。
除此之外,你还需要允许更新,并在必要时允许包下载。最后,你只想从本地工作站允许入站SSH访问,并阻止其他所有人。下图说明了它将如何工作:
自助服务终端的流量由iptables控制
脚本
以下是这些将适合Bash脚本的方式:
#!/bin/bash
iptables -A OUTPUT -p tcp -d bigmart.com -j ACCEPT
iptables -A OUTPUT -p tcp -d bigmart-data.com -j ACCEPT
iptables -A OUTPUT -p tcp -d ubuntu.com -j ACCEPT
iptables -A OUTPUT -p tcp -d ca.archive.ubuntu.com -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j DROP
iptables -A OUTPUT -p tcp --dport 443 -j DROP
iptables -A INPUT -p tcp -s 10.0.3.1 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP
我们规则的基本阐述从-A开始,告诉iptables我们要添加以下规则。OUTPUT表示此规则应成为OUTPUT链的一部分。-p表示此规则仅适用于使用TCP协议的数据包,正如-d告诉我们的那样,目标是bigmart.com。 -j标志指向ACCEPT,作为数据包与规则匹配时要采取的操作。在第一条规则中,该操作是允许或接受请求。但更进一步,可以看到将被删除或拒绝的请求。
请记住,订单很重要。这是因为iptables将通过其每个规则运行请求,但只有在匹配之后才会运行。因此,对youtube.com的传出浏览器请求将传递前四个规则,但是当它到达-dport 80或-dport 443规则时,取决于它是HTTP还是HTTPS请求,它将被丢弃。iptables不会再费心检查因为那是一场比赛。
另一方面,当ubuntu.com达到其适当的规则时,系统请求ubuntu.com进行软件升级。显然,我们在这里做的是允许仅向我们的BigMart或Ubuntu目的地发送HTTP或HTTPS请求而不允许其他目的地。
最后两条规则将处理传入的SSH请求。它们不会被前两个丢弃规则拒绝,因为它们不使用端口80或443,而是22。在这种情况下,将接受来自我的工作站的登录请求,但是其他任何地方的请求都将被删除。这很重要:确保用于端口22规则的IP地址与用于登录的计算机的地址相匹配,如果不这样做,将立即被锁定。当然,这没什么大不了的,因为它当前配置的方式,你只需重新启动服务器,iptables规则都将被删除。如果使用LXC容器作为服务器并从LXC主机登录,则使用主机用于连接容器的IP地址,而不是其公共地址。
如果机器的IP发生变化,需要记住更新此规则,否则,你会被锁定。
在家里测试(希望是在一台丢弃的虚拟机上)?太好了,创建自己的脚本。现在可以保存脚本,使用chmod使其可执行,并以sudo的方式运行它。不要担心bigmar -data.com没有发现错误——当然不会发现,它不存在。
chmod +X scriptname.sh
sudo ./scriptname.sh
可以使用cURL从命令行测试防火墙,请求ubuntu.com工作,但manning.com失败。
curl ubuntu.com
curl manning.com
配置iptables以在系统引导时加载
现在,如何在每次自助服务终端启动时自动加载这些规则?第一步是使用iptables-save工具将当前规则保存到.rules文件。这将在根目录中创建一个包含规则列表的文件,管道,后跟tee命令,是将sudo权限应用于字符串的第二部分所必需的:实际将文件保存到受限制的根目录。
然后,我可以告诉系统每次启动时都运行一个名为iptables-restore的相关工具。我们在上一个模块中看到的常规cron作业无济于事,因为它们是在设定的时间运行,但我们不知道我们的计算机何时可能决定崩溃并重新启动。
有很多方法可以解决这个问题。这是一个:
在我的Linux机器上,我将安装一个名为anacron的程序,该程序将在/etc/目录中为我们提供一个名为anacrontab的文件。我将编辑该文件并添加此iptables-restore命令,告诉它在启动一分钟后每天(必要时)将该.rules文件的当前值加载到iptables中。我将给作业一个标识符(iptables-restore),然后添加命令本身。既然你在家里测试,你应该通过重新启动你的系统来测试所有这些。
sudo iptables-save | sudo tee /root/my.active.firewall.rules
sudo apt install anacron
sudo nano /etc/anacrontab
1 1 iptables-restore iptables-restore < /root/my.active.firewall.rules
我希望这些实际例子说明了如何使用iptables和firewalld来管理基于Linux的防火墙的连接问题。
关于作者
DAVID CLINTON是系统管理员,教师和作家。他为许多重要的技术主题管理,撰写和创建了培训材料,包括Linux系统,云计算和Docker等容器技术。
原文链接:
https://opensource.com/article/18/9/linux-iptables-firewalld
相关推荐
- 实战派 | Java项目中玩转Redis6.0客户端缓存
-
铺垫首先介绍一下今天要使用到的工具Lettuce,它是一个可伸缩线程安全的redis客户端。多个线程可以共享同一个RedisConnection,利用nio框架Netty来高效地管理多个连接。放眼望向...
- 轻松掌握redis缓存穿透、击穿、雪崩问题解决方案(20230529版)
-
1、缓存穿透所谓缓存穿透就是非法传输了一个在数据库中不存在的条件,导致查询redis和数据库中都没有,并且有大量的请求进来,就会导致对数据库产生压力,解决这一问题的方法如下:1、使用空缓存解决对查询到...
- Redis与本地缓存联手:多级缓存架构的奥秘
-
多级缓存(如Redis+本地缓存)是一种在系统架构中广泛应用的提高系统性能和响应速度的技术手段,它综合利用了不同类型缓存的优势,以下为你详细介绍:基本概念本地缓存:指的是在应用程序所在的服务器内...
- 腾讯云国际站:腾讯云服务器如何配置Redis缓存?
-
本文由【云老大】TG@yunlaoda360撰写一、安装Redis使用包管理器安装(推荐)在CentOS系统中,可以通过yum包管理器安装Redis:sudoyumupdate-...
- Spring Boot3 整合 Redis 实现数据缓存,你做对了吗?
-
你是否在开发互联网大厂后端项目时,遇到过系统响应速度慢的问题?当高并发请求涌入,数据库压力剧增,响应时间拉长,用户体验直线下降。相信不少后端开发同行都被这个问题困扰过。其实,通过在SpringBo...
- 【Redis】Redis应用问题-缓存穿透缓存击穿、缓存雪崩及解决方案
-
在我们使用redis时,也会存在一些问题,导致请求直接打到数据库上,导致数据库挂掉。下面我们来说说这些问题及解决方案。1、缓存穿透1.1场景一个请求进来后,先去redis进行查找,redis存在,则...
- Spring boot 整合Redis缓存你了解多少
-
在前一篇里面讲到了Redis缓存击穿、缓存穿透、缓存雪崩这三者区别,接下来我们讲解Springboot整合Redis中的一些知识点:之前遇到过,有的了四五年,甚至更长时间的后端Java开发,并且...
- 揭秘!Redis 缓存与数据库一致性问题的终极解决方案
-
在现代软件开发中,Redis作为一款高性能的缓存数据库,被广泛应用于提升系统的响应速度和吞吐量。然而,缓存与数据库之间的数据一致性问题,一直是开发者们面临的一大挑战。本文将深入探讨Redis缓存...
- 高并发下Spring Cache缓存穿透?我用Caffeine+Redis破局
-
一、什么是缓存穿透?缓存穿透是指查询一个根本不存在的数据,导致请求直接穿透缓存层到达数据库,可能压垮数据库的现象。在高并发场景下,这尤其危险。典型场景:恶意攻击:故意查询不存在的ID(如负数或超大数值...
- Redis缓存三剑客:穿透、雪崩、击穿—手把手教你解决
-
缓存穿透菜小弟:我先问问什么是缓存穿透?我听说是缓存查不到,直接去查数据库了。表哥:没错。缓存穿透是指查询一个缓存中不存在且数据库中也不存在的数据,导致每次请求都直接访问数据库的行为。这种行为会让缓存...
- Redis中缓存穿透问题与解决方法
-
缓存穿透问题概述在Redis作为缓存使用时,缓存穿透是常见问题。正常查询流程是先从Redis缓存获取数据,若有则直接使用;若没有则去数据库查询,查到后存入缓存。但当请求的数据在缓存和数据库中都...
- Redis客户端缓存的几种实现方式
-
前言:Redis作为当今最流行的内存数据库和缓存系统,被广泛应用于各类应用场景。然而,即使Redis本身性能卓越,在高并发场景下,应用于Redis服务器之间的网络通信仍可能成为性能瓶颈。所以客户端缓存...
- Nginx合集-常用功能指导
-
1)启动、重启以及停止nginx进入sbin目录之后,输入以下命令#启动nginx./nginx#指定配置文件启动nginx./nginx-c/usr/local/nginx/conf/n...
- 腾讯云国际站:腾讯云怎么提升服务器速度?
-
本文由【云老大】TG@yunlaoda360撰写升级服务器规格选择更高性能的CPU、内存和带宽,以提供更好的处理能力和网络性能。优化网络配置调整网络接口卡(NIC)驱动,优化TCP/IP参数...
- 雷霆一击服务器管理员教程
-
本文转载莱卡云游戏服务器雷霆一击管理员教程(搜索莱卡云面版可搜到)首先你需要给服务器设置管理员密码,默认是空的管理员密码在启动页面进行设置设置完成后你需要重启服务器才可生效加入游戏后,点击键盘左上角E...
你 发表评论:
欢迎- 一周热门
-
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
[常用工具] OpenCV_contrib库在windows下编译使用指南
-
WindowsServer2022|配置NTP服务器的命令
-
Ubuntu系统Daphne + Nginx + supervisor部署Django项目
-
WIN11 安装配置 linux 子系统 Ubuntu 图形界面 桌面系统
-
解决Linux终端中“-bash: nano: command not found”问题
-
Linux 中的文件描述符是什么?(linux 打开文件表 文件描述符)
-
NBA 2K25虚拟内存不足/爆内存/内存占用100% 一文速解
-
K3s禁用Service Load Balancer,解决获取浏览器IP不正确问题
-
- 最近发表
-
- 实战派 | Java项目中玩转Redis6.0客户端缓存
- 轻松掌握redis缓存穿透、击穿、雪崩问题解决方案(20230529版)
- Redis与本地缓存联手:多级缓存架构的奥秘
- 腾讯云国际站:腾讯云服务器如何配置Redis缓存?
- Spring Boot3 整合 Redis 实现数据缓存,你做对了吗?
- 【Redis】Redis应用问题-缓存穿透缓存击穿、缓存雪崩及解决方案
- Spring boot 整合Redis缓存你了解多少
- 揭秘!Redis 缓存与数据库一致性问题的终极解决方案
- 高并发下Spring Cache缓存穿透?我用Caffeine+Redis破局
- Redis缓存三剑客:穿透、雪崩、击穿—手把手教你解决
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)