百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

如何使用iptables和firewalld来管理基于Linux的防火墙的连接问题

nanshan 2024-10-16 10:50 31 浏览 0 评论

防火墙,大家都不陌生。每台个人电脑上都有软件防火墙,来一定程度上保护我们电脑的安全。也有很多对安全毕竟重视的个人或企业会采用硬件防火墙,来提供更为高端的安全保障,下面来谈谈Linux系统的防火墙。


防火墙

防火墙是一组规则。当数据包流入或流出受保护的网络空间时,将根据防火墙规则测试其内容(特别是有关其来源,目标和计划使用的协议的信息),以确定是否应允许其通过。 这是一个简单的例子:


防火墙可以根据协议或基于目标的规则过滤请求

一方面,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访问,并阻止其他所有人。下图说明了它将如何工作:

脚本

以下是这些将适合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的方式运行它。

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

相关推荐

删库之后不要着急跑路,教你神不知鬼不觉找回数据

在工作中,我们误删数据或者数据库,我们一定需要跑路吗?我看未必,程序员一定要学会自救,神不知鬼不觉的将数据找回。在mysql数据库中,我们知道binlog日志记录了我们对数据库的所有操作,所以...

数据库告警不可用,增删改受阻(数据库限制删除)

前言:昨晚,突然出现服务不可用告警,查看日志上线报文入库到数据库很慢并受阻,出现数据不同步问题。排查问题查看发现服务都是在执行update、insert这些DML命令的时候,报的数据库执行超时。经过一...

Binlog实现MySQL复制,5个关键步骤,务必掌握!

复制是MySQL最重要的功能之一,MySQL集群的高可用、负载均衡和读写分离都是基于复制来实现的。Binlog就是实现主从复制的关键,主数据库将修改操作记录到Binlog中,从数据库通过解...

MySQL数据实时增量同步到Elasticsearch

Mysql到Elasticsearch的数据同步,一般用ETL来实现,但性能并不理想,目前大部分的ETL是定时查询Mysql数据库有没有新增数据或者修改数据,如果数据量小影响不大,但如果几百万上千万的...

MySQL 数据库恢复:如何执行时间点恢复(PITR)以挽救受损数据?

天津鸿萌科贸发展有限公司从事数据安全服务二十余年,致力于为各领域客户提供专业的数据恢复、数据备份、数据取证、数据迁移、网络安全、数据清除等解决方案,并针对企业面临的数据安全风险,提供专业的相关数据安全...

阿里面试:MySQL Binlog有哪些格式?底层原理?优缺点?

binlog的格式也有三种:STATEMENT、ROW、MIXED,下面我详解binlog三种模式@mikechenStatement模式Statement模式:是基于SQL语句的复制(statem...

快速带你读懂MySQL的binlog写入机制

深入讲解MySQL中的重要日志binlog的写入机制以及影响IO性能的关键配置,并且介绍了如何利用binlog去恢复数据,保证MySQL的可靠性。Q:binlog写入时机binlog的写入逻辑并...

MySQL 误删除数据恢复全攻略:基于 Binlog 的实战指南

在MySQL的世界里,二进制日志(Binlog)就是我们的"时光机"。它默默记录着数据库的每一个重要变更,就像一位忠实的史官,为我们在数据灾难中提供最后的救命稻草。本文将带您深入掌握如...

一文了解MySQL Binlog(一文了解肝脏有益和有害的食物)

MySQL的Binlog日志是一种二进制格式的日志,Binlog记录所有的DDL和DML语句(除了数据查询语句SELECT、SHOW等),以Event的形式记录,同时记录语句执行时...

数据丢失?别慌!MySQL备份恢复攻略

想象一下,某个晴朗的午后,你正享受着咖啡,突然接到紧急电话:你的网站或APP彻底挂了!系统崩溃,界面全白。虽然心头一紧,但你或许还能安慰自己:系统崩溃只是暂停服务,数据还在,修复修复就好了。然而,如果...

Mysql中的bin log、redo log、undo log的区别

最近在整理面试题,在看mvcc的时候看到了undolog,今天索性把这三个log都记录一遍。MySQL的逻辑架构说之前先说一下MySQL的基本架构,MySQL主要分为两层:Server层和存储引...

binlog日志定时清理(binlog清理规则)

binlog日志binlog是MySQL数据库的一种日志文件,用于记录所有对数据的修改操作。binlog全称为binarylog,它以二进制格式记录MySQL服务器上所有的修改操作,包括对哪个数据库...

茶水间炸锅了!菜鸟误删用户表,运维老张的MySQL救命三招!

(公司茶水间,运维老张、开发小王和新人小李围着咖啡机)小李:(紧张兮兮)张哥!我...我好像把测试库的用户表删了!下午演示咋办啊?老张:(淡定喝咖啡)慌啥?昨晚的备份是吃干饭的?走,教你恢复!一、基础...

解决运维痛点,提高运维安全性-雷池 SafeLine WAF新功能身份认证

雷池介绍使用雷池SafeLineWAF已经两年多了,在1.5.x版本时就已经开始测试使用,并在推出LTS版本后转入LTS分支。近期雷池SafeLineWAF重点更新了身份认证功能,并提供了SS...

【Docker 新手入门指南】第十五章:常见故障排除

一、前期准备:收集关键信息在排查问题前,建议先获取以下系统数据,便于精准定位故障:1.系统基础信息#查看Docker版本(确认是否为最新稳定版)dockerversion#查看...

取消回复欢迎 发表评论: