当前位置: 首页 > 科技观察

用防火墙让你的Linux更强大

时间:2023-03-19 17:28:31 科技观察

掌握防火墙的工作原理以及如何设置它们以提高Linux的安全性当然),很多人也知道他们的计算机上可能运行着防火墙,但很少有人知道如何控制防火墙必要时使用防火墙。防火墙用于阻止未经请求的网络流量,但不同的网络需要不同级别的安全性。例如,与在咖啡馆使用公共WiFi时相比,在家时您可以更信任网络上的其他计算机和设备。您可能希望您的计算机能够区分受信任和不受信任的网络,但最好学会自己管理(或至少验证)您的安全设置。防火墙的工作原理网络中不同设备之间的通信是通过一个叫做端口的网关来实现的。这里的端口不是指像USB端口或HDMI端口这样的物理连接。在网络术语中,端口是一个纯粹的虚拟概念,用于表示某种类型的数据到达或离开计算机时所采用的路径。其实它们也可以用别的名字来称呼,比如“连接”或“门道”,但早在1981年就被称为港口,而且这个名字沿用至今。其实端口并没有什么特别之处,它只是一种引用可能发生数据传输的地址的方式。1972年,发布了一个端口号列表(当时端口被称为“套接字”),此后演变为一组众所周知的标准端口号,以帮助管理某些类型的网络流量。例如,你每天访问网站时都会使用80和443端口,因为互联网上大多数人都同意(或默认)数据是通过这两个端口从网络服务器传输过来的。如果要验证这一点,可以在使用浏览器访问网站时在URL后面加上一个非标准的端口号。例如,访问example.com:42的请求将被拒绝,因为example.com不在端口42上提供网站服务。导航到非标准端口会产生错误如果您在端口80上访问同一网站,它会(不出所料))工作正常。您可以通过在URL后添加:80来指定端口80,但是由于端口80是HTTP访问的标准端口,您的浏览器已经默认使用端口80。当计算机(例如Web服务器)要在指定端口上接收网络流量时,保持该端口对网络流量开放是可以接受的(也是必要的)行为。但是,如果不需要接收流量的端口也打开了,就比较危险了。这是防火墙需要解决的问题。安装firewalld配置firewall的方法有很多种,本文介绍firewalld。在桌面环境中,它集成在网络管理器NetworkManager中,在终端中,它集成在firewall-cmd中。许多Linux发行版都预装了这些工具。如果它没有包含在您的发行版中,您可以将本文作为管理防火墙的一般建议,在您的防火墙软件中使用类似的方法,或者您可以选择安装firewalld。例如,在Ubuntu上,您必须启用universe存储库,禁用默认的ufw防火墙,然后安装firewalld:$sudosystemctldisableufw$sudoadd-apt-repositoryuniverse$sudoaptinstallfirewalld许多其他发行版默认包含firewalld。无论您使用哪个发行版,如果您想让防火墙正常工作,您必须将其保持打开状态并将其设置为在启动时自动加载。您应该在防火墙维护上花费尽可能少的精力。$sudosystemctlenable--nowfirewalld使用网络管理器选择一个区域也许你每天都连接到许多不同的网络。您在工作中使用一个网络,在咖啡店使用另一个网络,在家中使用另一个网络。您的计算机可以分辨出哪个网络的使用频率更高,但它不知道您信任哪个网络。防火墙区域包含用于打开和关闭端口的默认规则。您可以使用区域来选择最适合您当前网络的策略。您可以在网络管理器中打开连接编辑器(位于“应用程序”菜单中),或使用nm-connection-editor&命令获取所有可用区域的列表。网络管理器连接编辑器在网络连接列表中,双击您当前使用的网络。在出现的网络配置窗口中,单击“常规”选项卡。在“常规”窗格中,单击“防火墙区域”旁边的下拉菜单以获取所有可用区域的列表。防火墙区域也可以使用下面的终端命令得到同样的列表:$sudofirewall-cmd--get-zones每个区域的名字已经可以看出设计者创建这个区域的意图,但是你也可以使用下面的终端命令获取任何区域的详细信息:$sudofirewall-cmd--zonework--list-allworktarget:defaulticmp-block-inversion:nointerfaces:sources:services:sshdhcpv6-clientports:protocols:[...]在此示例中,工作区配置为允许SSH和DHCPv6客户端流量,但拒绝用户未明确请求的任何其他流量。(换句话说,当您浏览网站时,工作区不会拦截HTTP响应流量,但它会拦截对您计算机上端口80的HTTP请求。)您可以依次检查每个区域,看看每个区域允许什么种交通。比较常见的有:工作:这个区域应该用在你非常信任的网络上。它允许SSH、DHCPv6和mDNS,您可以添加更多允许的项目。这个区域非常适合作为基础配置,然后根据日常办公的需要定制一个工作环境。public:在您不信任的网络上使用。该区域的配置与工作区相同,但您不应继续添加任何其他允许的项目。drop:所有传入的连接都将被丢弃,没有任何响应。这是您在不完全关闭网络的情况下最接近隐身模式的配置,因为只允许传出网络连接(尽管任何端口扫描器都可以通过传出流量检测到您的计算机,因此该区域不是隐藏设备)。如果你使用的是公共WiFi,这个区域可以说是最安全的选择;如果你觉得现在的网络比较危险的话,这个区域一定也是最好的选择。block:所有传入的连接都将被拒绝,但会返回一条消息,指出所请求的端口已被禁用。仅允许您发起的网络连接。这是dropzone的友好版本,因为虽然仍然没有允许传入流量的端口,但它表明它将拒绝接受任何不是由本地机器发起的连接。home:如果您信任网络上的其他计算机,请使用此区域。该区域将只允许您选择的传入连接,但您可以根据需要添加更多允许的项目。internal:与工作区类似,该区适用于内部网络,基本信任网络中的计算机时使用。您可以根据需要打开更多端口和服务,同时维护与工作区不同的一组规则。trusted:接受所有网络连接。非常适合故障排除情况或您绝对信任的网络。为网络指定一个区域您可以为您的任何网络连接指定一个区域,也可以为同一网络(如以太网、WiFi等)的不同连接方式指定不同的区域。选择您想要的区域并单击“保存”按钮以提交更改。设置新区域养成为网络连接指定区域的习惯的最佳方法是从您最常使用的网络开始。为您的家庭网络指定一个家庭区域,为您的工作网络指定一个工作区域,并为您最喜欢的图书馆或咖啡店的网络指定一个PR区域。为所有喜爱的网络分配区域后,稍后在添加新网络时尝试将区域分配给新网络(无论是新的咖啡店还是朋友的网络)。这是一个让你意识到不同的网络是不一样的安全的好方法,你并不因为你使用Linux而比任何人都更安全。默认区域每次您加入一个新网络时,firewalld不会提示您选择,但会指定一个默认区域。您可以通过在终端中键入以下命令来获取默认区域:$sudofirewall-cmd--get-defaultpublic在此示例中,默认区域是公共区域。您应该确保该区域有非常严格的限制,以便将其分配给未知网络更安全。或者您可以设置自己的默认区域。例如,如果你是一个比较可疑的人,或者需要经常接触不受信任的网络,你可以设置一个非常严格的默认区域:$sudofirewall-cmd--set-default-zonedropsuccess$sudofirewall-cmd--get-defaultdrop这样,您加入的任何新网络都将被指定为使用dropzone,除非您手动将其设为另一个不那么严格的区域。通过开放端口和服务实施自定义区域Firewalld的开发人员并不打算让他们的区域适应世界上所有不同的网络和信任级别。您可以直接使用这些区域,也可以基于它们进行配置。您可以根据您需要的网络活动来决定打开或关闭哪些端口,这不需要对防火墙有深入的了解。默认服务向防火墙添加权限的最简单方法是添加默认服务。严格来说,你的防火墙不知道什么是“服务”,因为它只知道端口号和使用的协议类型。但在标准和传统的基础上,防火墙可以为您提供一组端口和协议组合。例如,如果您是一名Web开发人员,并且希望您的计算机对本地网络开放(以便您的同事可以看到您正在构建的网站),则可以添加http和https服务。如果您是游戏玩家并且正在为您的游戏公会运行开源的murmur语音聊天服务器,那么您可以添加murmur服务。还有很多其他可用的服务,可以使用这个命令查看:$sudofirewall-cmd--get-servicesamanda-clientamanda-k5-clientbaculabacula-client\bgpbitcoinbitcoin-rpccephcfenginecondor-collector\ctdbdhcpdhcpv6dhcpv6-clientdnselasticsearch\freeipa-ldapfreeipa-ldapsftp[...]如果你找到你需要的服务,你可以将它添加到当前的防火墙配置中,例如:$sudofirewall-cmd--add-servicemurmur该命令在你的默认区域中添加指定服务所需的所有端口和协议,但在重新启动计算机或防火墙后会失败。要使更改永久生效,请使用--permanent标志:$sudofirewall-cmd--add-servicemurmur--permanent您还可以对非默认区域使用此命令:$sudofirewall-cmd--add-servicemurmur--permanent--zonehomeport有时你想允许不属于firewalld定义的服务的流量。也许您想在非标准端口上运行常规服务,或者只是想随意打开一个端口。例如,您可能正在运行开源虚拟桌面游戏软件MapTool。由于MapTool服务器应使用哪个端口没有行业标准,因此由您决定使用哪个端口并在防火墙中“开一个洞”以允许该端口上的流量。实现类似于添加服务:$sudofirewall-cmd--add-port51234/tcp这个命令打开端口51234到默认区域中的TCP传入连接,但是在重新启动计算机或防火墙后它会失败。要使更改永久生效,请使用--permanent标志:$sudofirewall-cmd--add-port51234/tcp--permanent您还可以对非默认区域使用此命令:$sudofirewall-cmd--add-port51234/tcp--permanent--zonehome路由器的防火墙设置允许流量的方式和本机不一样。您的路由器可能为其嵌入式防火墙提供不同的配置界面(原则上相同),但这超出了本文的范围。删除端口和服务如果您不再需要某个服务或端口,并且您设置它时没有使用--permanent标志,您可以通过重新启动防火墙来清除更改。如果你设置了修改永久生效,你可以使用--remove-port或者--remove-service标志来清除它:$sudofirewall-cmd--remove-port51234/tcp--permanent你可以通过在命令中指定一个区域以从非默认区域中删除端口或服务。$sudofirewall-cmd--remove-servicemurmur--permanent--zonehome自定义区域您可以自由使用firewalld默认提供的这些区域,但也完全可以创建您自己的区域。例如,如果你想拥有一个特定于游戏的特定区域,你可以创建一个并且只在玩游戏时切换到该区域。如果你想创建一个新的空白区域,你可以创建一个名为游戏的新区域,然后重新加载防火墙规则,以便启用你的新区域:$sudofirewall-cmd--new-zonegame--permanentsuccess$sudofirewall-cmd--reload创建并启用后,您可以通过添加玩游戏所需的服务和端口来自定义它。勤奋并从今天开始考虑您的防火墙策略。别担心,您可以尝试慢慢建立一些合理的默认规则。您可能需要一段时间来习惯思考配置防火墙和弄清楚您使用哪些网络服务,但无论您的环境如何,稍加探索就可以使您的Linux工作站变得更强大。