Paul W. Frields 发布的文章

网络防火墙,顾名思义:为了阻止不需要的网络连接而设置的防护性屏障。在与外界建立连接或是提供网络服务时常常会用到。例如,在学校或是咖啡厅里使用笔记本电脑时,你一定不想某个陌生人窥探你的电脑。

每个 Fedora 系统都内置了一款防火墙。这是 Linux 内核网络功能的一部分。本文介绍如何通过 firewall-cmd 命令修改防火墙的配置。

网络基础

本文并不教授计算机网络的所有知识,但还是会简单介绍一些网络基础。

网络中的所有计算机都有一个 IP 地址,可以把它想象成一个邮箱地址,有了邮箱地址,邮件才知道发往何处。每台计算机还会拥有一组端口,端口号范围从 0 到 65535。同样的,你可以把这些端口想象成用来连接邮箱地址的连接点。

通常情况下,端口会是一个标准端口号或是根据应用程序的应答要求选定的一个端口范围。例如,一台 Web 服务器通常会保留 80 端口用于 HTTP 通信,443 端口用于 HTTPS。小于 1024 的端口主要用于系统或常见用途,1024-49151 端口是已经注册的,49152 及以上端口多为临时使用(只限短时间使用)。

互联网传输中最常见的两个协议,TCPUDP。当要传输的数据很重要,不能有丢包时,就使用 TCP 协议,如果数据包没有按顺序到达,还需要重组为正确的顺序。UDP 协议则更多用于对时间敏感的服务,为了保证时效性,有时允许丢失部分数据。

系统中运行的应用,例如 Web 服务器,会保留一些端口(例如上文提到的 80 和 443)。在网络传输过程中,主机会为传输的两端建立一个链接,一端是源地址和源端口,另一端是目的地址和目的端口。

网络防火墙就是基于地址、端口及其他标准的一组规则集,来对网络数据的传输进行屏蔽或阻断的。通过 firewall-cmd 命令,我们就可以查看或修改防火墙的工作配置。

防火墙域(zone)

为了验证防火墙是否开启,使用 firewall-cmd 命令,输入时要加上 sudo。(通常,在运行了 PolicyKit 的环境中,你也可以不加 sudo

$ sudo firewall-cmd --state
running

firewalld 服务支持任意数量的域。每个域都可以拥有独立的配置和防护规则。一台 Fedora 工作站的外部接口(例如 WIFI 或有线网卡)其默认域为 FedoraWorkstation

要看有哪些域是激活状态,可以使用 -–get-active-zones 选项。在本示例中,有两个网卡,有线以太网卡 wlp2s0 和虚拟(libvirt)桥接网卡 virbr0

$ sudo firewall-cmd --get-active-zones
FedoraWorkstation
  interfaces: wlp2s0
libvirt
  interfaces: virbr0

如果想看看默认域是什么,或是直接查询所有域:

$ sudo firewall-cmd --get-default-zone
FedoraWorkstation
$ sudo firewall-cmd --get-zones
FedoraServer FedoraWorkstation block dmz drop external home internal libvirt public trusted work

查询默认域中防火墙放行了哪些系统,使用 -–list-services 选项。下例给出了一个定制系统的查询结果,你可以看到与常见的结果有些不同。

$ sudo firewall-cmd --list-services
dhcpv6-client mdns samba-client ssh

该系统对外开启了四个服务。每个服务都对应一个常见端口。例如 ssh 服务对应 22 端口。

如果要查看当前域中防火墙还开启了哪些端口,可以使用 --list-ports 选项。当然,你也可以随时对其他域进行查询:

$ sudo firewall-cmd --list-ports --zone=FedoraWorkstation
1025-65535/udp 1025-65535/tcp

结果表明,从 1025 到 65535 端口(包含 UDP 和 TCP)默认都是开启的。

修改域、端口及服务

以上的配置都是预先设计好的防火墙策略。是为了确保新手用户安装的应用都能够正常访问网络。如果你确定自己心里有数,想要一个保护性更强的策略,可以将接口放入 FedoraServer 域,明确禁止所有端口的访问。(警告:如果你的服务器之前是联网状态,这么做可能会导致连接中断,那你就得到机房里去修改更多的配置项!)

$ sudo firewall-cmd --change-interface=<ifname> --zone=FedoraServer
success

本文并不讨论如何制定防火墙策略,Fedora 社区里已经有很多讨论了。你大可以按照自身需要来修改配置。

如果你想要开放某个服务的常见端口,可以将该服务加入默认域(或使用 --zone 指定一个不同的域)。还可以一次性将其加入多个域。下例开放了 HTTP 和 HTTPS 的常见端口 80、443:

$ sudo firewall-cmd --add-service=http --add-service=https
success

并非所有的服务都有默认端口,不过大部分都是有的。使用 -–get-services 选项可以查看完整列表。

如果你想指定某个特定端口号,可以直接用数字和协议进行配置。(多数情况下,-–add-service-–add-port 这两个选项是合在一起使用的)下例开启的是 UDP 协议的网络启动服务:

$ sudo firewall-cmd --add-port=67/udp
success

重要:如果想要在系统重启或是 firewalld 服务重启后,配置仍然生效,必须在命令中加上 -–permanent 选项。本文中的例子只是临时修改了配置,下次遇到系统重启或是 firewalld 服务重启,这些配置就失效了。

以上只是 firewall-cmd 和 firewalld 服务诸多功能中的一小部分。firewalld 项目的主页还有更多信息值得你去探索和尝试。


via: https://fedoramagazine.org/control-the-firewall-at-the-command-line/

作者:Paul W. Frields 选题:lujun9972 译者:tinyeyeser 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Python 是最流行、功能最强大的编程语言之一。由于它是自由开源的,因此每个人都可以使用。大多数 Fedora 系统都已安装了该语言。Python 可用于多种任务,其中包括处理逗号分隔值(CSV)数据。CSV文件一开始往往是以表格或电子表格的形式出现。本文介绍了如何在 Python 3 中处理 CSV 数据。

CSV 数据正如其名。CSV 文件按行放置数据,数值之间用逗号分隔。每行由相同的字段定义。简短的 CSV 文件通常易于阅读和理解。但是较长的数据文件或具有更多字段的数据文件可能很难用肉眼解析,因此在这种情况下计算机做得更好。

这是一个简单的示例,其中的字段是 NameEmailCountry。在此例中,CSV 数据将字段定义作为第一行,尽管并非总是如此。

Name,Email,Country
John Q. Smith,[email protected],USA
Petr Novak,[email protected],CZ
Bernard Jones,[email protected],UK

从电子表格读取 CSV

Python 包含了一个 csv 模块,它可读取和写入 CSV 数据。大多数电子表格应用,无论是原生(例如 Excel 或 Numbers)还是基于 Web 的(例如 Google Sheet),都可以导出 CSV 数据。实际上,许多其他可发布表格报告的服务也可以导出为 CSV(例如,PayPal)。

Python csv 模块有一个名为 DictReader 的内置读取器方法,它可以将每个数据行作为有序字典 (OrderedDict) 处理。它需要一个文件对象访问 CSV 数据。因此,如果上面的文件在当前目录中为 example.csv,那么以下代码段是获取此数据的一种方法:

f = open('example.csv', 'r')
from csv import DictReader
d = DictReader(f)
data = []
for row in d:
    data.append(row)

现在,内存中的 data 对象是 OrderedDict 对象的列表:

[OrderedDict([('Name', 'John Q. Smith'),
               ('Email', '[email protected]'),
               ('Country', 'USA')]),
  OrderedDict([('Name', 'Petr Novak'),
               ('Email', '[email protected]'),
               ('Country', 'CZ')]),
  OrderedDict([('Name', 'Bernard Jones'),
               ('Email', '[email protected]'),
               ('Country', 'UK')])]

引用这些对象很容易:

>>> print(data[0]['Country'])
USA
>>> print(data[2]['Email'])
[email protected]

顺便说一句,如果你需要处理没有字段名标题行的 CSV 文件,那么 DictReader 类可以让你定义它们。在上面的示例中,添加 fieldnames 参数并传递一系列名称:

d = DictReader(f, fieldnames=['Name', 'Email', 'Country'])

真实例子

我最近想从一长串人员名单中随机选择一个中奖者。我从电子表格中提取的 CSV 数据是一个简单的名字和邮件地址列表。

幸运的是,Python 有一个有用的 random 模块,可以很好地生成随机值。该模块 Random 类中的 randrange 函数正是我需要的。你可以给它一个常规的数字范围(例如整数),以及它们之间的步长值。然后,该函数会生成一个随机结果,这意味着我可以在数据的总行数范围内获得一个随机整数(或者说是行号)。

这个小程序运行良好:

from csv import DictReader
from random import Random

d = DictReader(open('mydata.csv'))
data = []
for row in d:
    data.append(row)

r = Random()
winner = data[r.randrange(0, len(data), 1)]
print('The winner is:', winner['Name'])
print('Email address:', winner['Email'])

显然,这个例子非常简单。电子表格本身包含了复杂的分析数据的方法。但是,如果你想在电子表格应用之外做某事,Python 或许是一种技巧!

题图由 Isaac Smith 拍摄,发表于 U​​nsplash


via: https://fedoramagazine.org/using-data-from-spreadsheets-in-fedora-with-python/

作者:Paul W. Frields 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

有大量的云服务可用于存储重要文档。Google Drive 无疑是最受欢迎的之一。它提供了一组相应的应用程序,例如文档,表格和幻灯片来创建内容。但是,你也可以在 Google Drive 中存储任意内容。本文向你展示如何将其连接到 Fedora 工作站

添加帐户

Fedora 工作站可在安装后首次启动或者之后的任何时候添加一个帐户。要在首次启动期间添加帐户,请按照提示进行操作。其中包括选择添加一个帐户:

选择 Google,然后会出现一个登录提示,请使用你的 Google 帐户信息登录。

请注意,此信息仅传输给 Google,而不传输给 GNOME 项目。下一个页面要求你授予访问权限,这是必需的,以便系统桌面可以与 Google 进行交互。向下滚动查看访问请求,然后选择“允许”继续。

你会在移动设备和 Gmail 中收到有关新设备(系统)访问 Google 帐户的通知。这是正常现象。

如果你在初次启动时没有执行此操作,或者需要重新添加帐户,请打开“设置”,然后选择“在线账户”来添加帐户。可以通过顶部栏右侧的下拉菜单(“齿轮”图标)或打开“概览”并输入“settings”来使用它。接着和上面一样。

在 Google Drive 中使用“文件”应用

打开“文件”应用(以前称为 “nautilus”)。“文件”应用可以通过左侧栏访问。在列表中找到你的 Google 帐户。

当你选择帐户后,“文件”应用会显示你的 Google Drive 的内容。你可以使用 Fedora 工作站的本地应用打开某些文件,例如声音文件或 LibreOffice 兼容文件(包括 Microsoft Office 文档)。其他文件(例如 Google 文档、表格和幻灯片等 Google 应用文件)将使用浏览器和相应的应用打开。

请记住,如果文件很大,将需要一些时间才能通过网络接收文件,你才可以打开它。

你还可以复制粘贴 Google Drive 中的文件到连接到 Fedora 工作站的其他存储,或者反之。你还可以使用内置功能来重命名文件、创建文件夹并组织它们。对于共享和其他高级选项,请和平常一样在浏览器中使用 Google Drive。

请注意,“文件”应用程序不会实时刷新内容。如果你从其他连接 Google 的设备(例如手机或平板电脑)添加或删除文件,那么可能需要按 Ctrl+R 刷新“文件”应用。


via: https://fedoramagazine.org/connect-your-google-drive-to-fedora-workstation/

作者:Paul W. Frields 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

你可能已经熟悉使用 ssh 命令访问远程系统。ssh 命令背后所使用的协议允许终端的输入和输出流经安全通道。但是你知道也可以使用 ssh 来安全地发送和接收其他数据吗?一种方法是使用“ 端口转发 port forwarding ”,它允许你在进行 ssh 会话时安全地连接网络端口。本文向你展示了它是如何工作的。

关于端口

标准 Linux 系统已分配了一组网络端口,范围是 0 - 65535。系统会保留 0 - 1023 的端口以供系统使用。在许多系统中,你不能选择使用这些低端口号。通常有几个端口用于运行特定的服务。你可以在系统的 /etc/services 文件中找到这些定义。

你可以认为网络端口是类似的物理端口或可以连接到电缆的插孔。端口可以连接到系统上的某种服务,类似物理插孔后面的接线。一个例子是 Apache Web 服务器(也称为 httpd)。对于 HTTP 非安全连接,Web 服务器通常要求在主机系统上使用端口 80,对于 HTTPS 安全连接通常要求使用 443。

当你连接到远程系统(例如,使用 Web 浏览器)时,你是将浏览器“连接”到你的主机上的端口。这通常是一个随机的高端口号,例如 54001。你的主机上的端口连接到远程主机上的端口(例如 443)来访问其安全的 Web 服务器。

那么,当你有这么多可用端口时,为什么还要使用端口转发呢?这是 Web 开发人员生活中的几种常见情况。

本地端口转发

想象一下,你正在名为 remote.example.com 的远程系统上进行 Web 开发。通常,你是通过 ssh 进入此系统的,但是它位于防火墙后面,而且该防火墙很少允许其他类型的访问,并且会阻塞大多数其他端口。要尝试你的网络应用,能够使用浏览器访问远程系统会很有帮助。但是,由于使用了讨厌的防火墙,你无法通过在浏览器中输入 URL 的常规方法来访问它。

本地转发使你可以通过 ssh 连接来建立可通过远程系统访问的端口。该端口在系统上显示为本地端口(因而称为“本地转发”)。

假设你的网络应用在 remote.example.com 的 8000 端口上运行。要将那个系统的 8000 端口本地转发到你系统上的 8000 端口,请在开始会话时将 -L 选项与 ssh 结合使用:

$ ssh -L 8000:localhost:8000 remote.example.com

等等,为什么我们使用 localhost 作为转发目标?这是因为从 remote.example.com 的角度来看,你是在要求主机使用其自己的端口 8000。(回想一下,任何主机通常可以通过网络连接 localhost 而连接到自身。)现在那个端口连接到你系统的 8000 端口了。ssh 会话准备就绪后,将其保持打开状态,然后可以在浏览器中键入 http://localhost:8000 来查看你的 Web 应用。现在,系统之间的流量可以通过 ssh 隧道安全地传输!

如果你有敏锐的眼睛,你可能已经注意到了一些东西。如果我们要 remote.example.com 转发到与 localhost 不同的主机名怎么办?如果它可以访问该网络上另一个系统上的端口,那么通常可以同样轻松地转发该端口。例如,假设你想访问也在该远程网络中的 db.example.com 的 MariaDB 或 MySQL 服务。该服务通常在端口 3306 上运行。因此,即使你无法 ssh 到实际的 db.example.com 主机,你也可以使用此命令将其转发:

$ ssh -L 3306:db.example.com:3306 remote.example.com

现在,你可以在 localhost 上运行 MariaDB 命令,而实际上是在使用 db.example.com 主机。

远程端口转发

远程转发让你可以进行相反操作。想象一下,你正在为办公室的朋友设计一个 Web 应用,并想向他们展示你的工作。不过,不幸的是,你在咖啡店里工作,并且由于网络设置,他们无法通过网络连接访问你的笔记本电脑。但是,你同时使用着办公室的 remote.example.com 系统,并且仍然可在这里登录。你的 Web 应用似乎在本地 5000 端口上运行良好。

远程端口转发使你可以通过 ssh 连接从本地系统建立端口的隧道,并使该端口在远程系统上可用。在开始 ssh 会话时,只需使用 -R 选项:

$ ssh -R 6000:localhost:5000 remote.example.com

现在,当在公司防火墙内的朋友打开浏览器时,他们可以进入 http://remote.example.com:6000 查看你的工作。就像在本地端口转发示例中一样,通信通过 ssh 会话安全地进行。

默认情况下,sshd 守护进程运行在设置的主机上,因此只有该主机可以连接它的远程转发端口。假设你的朋友希望能够让其他 example.com 公司主机上的人看到你的工作,而他们不在 remote.example.com 上。你需要让 remote.example.com 主机的所有者将以下选项之一添加到 /etc/ssh/sshd_config 中:

GatewayPorts yes       # 或
GatewayPorts clientspecified

第一个选项意味着 remote.example.com 上的所有网络接口都可以使用远程转发的端口。第二个意味着建立隧道的客户端可以选择地址。默认情况下,此选项设置为 no

使用此选项,你作为 ssh 客户端仍必须指定可以共享你这边转发端口的接口。通过在本地端口之前添加网络地址范围来进行此操作。有几种方法可以做到,包括:

$ ssh -R *:6000:localhost:5000                   # 所有网络
$ ssh -R 0.0.0.0:6000:localhost:5000             # 所有网络
$ ssh -R 192.168.1.15:6000:localhost:5000        # 单个网络
$ ssh -R remote.example.com:6000:localhost:5000  # 单个网络

其他注意事项

请注意,本地和远程系统上的端口号不必相同。实际上,有时你甚至可能无法使用相同的端口。例如,普通用户可能不会在默认设置中转发到系统端口。

另外,可以限制主机上的转发。如果你需要在联网主机上更严格的安全性,那么这你来说可能很重要。 sshd 守护程进程的 PermitOpen 选项控制是否以及哪些端口可用于 TCP 转发。默认设置为 any,这让上面的所有示例都能正常工作。要禁止任何端口转发,请选择 none,或仅允许的特定的“主机:端口”。有关更多信息,请在手册页中搜索 PermitOpen 来配置 sshd 守护进程:

$ man sshd_config

最后,请记住,只有在 ssh 会话处于打开状态时才会端口转发。如果需要长时间保持转发活动,请尝试使用 -N 选项在后台运行会话。确保控制台已锁定,以防止在你离开控制台时其被篡夺。


via: https://fedoramagazine.org/using-ssh-port-forwarding-on-fedora/

作者:Paul W. Frields 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如今,企业网络经常使用“虚拟专用网络”来保证员工通信安全。但是,使用的协议有时会降低性能。如果你可以使用 SSH 连接远程主机,那么你可以设置端口转发。但这可能会很痛苦,尤其是在你需要与该网络上的许多主机一起使用的情况下。试试 sshuttle,它可以通过 SSH 访问来设置快速简易的虚拟专网。请继续阅读以获取有关如何使用它的更多信息。

sshuttle 正是针对上述情况而设计的。远程端的唯一要求是主机必须有可用的 Python。这是因为 sshuttle 会构造并运行一些 Python 代码来帮助传输数据。

安装 sshuttle

sshuttle 被打包在官方仓库中,因此很容易安装。打开一个终端,并使用 sudo 来运行以下命令:

$ sudo dnf install sshuttle

安装后,你可以在手册页中找到相关信息:

$ man sshuttle

设置虚拟专网

最简单的情况就是将所有流量转发到远程网络。这不一定是一个疯狂的想法,尤其是如果你不在自己家里这样的受信任的本地网络中。将 -r 选项与 SSH 用户名和远程主机名一起使用:

$ sshuttle -r username@remotehost 0.0.0.0/0

但是,你可能希望将该虚拟专网限制为特定子网,而不是所有网络流量。(有关子网的完整讨论超出了本文的范围,但是你可以在维基百科上阅读更多内容。)假设你的办公室内部使用了预留的 A 类子网 10.0.0.0 和预留的 B 类子网 172.16.0.0。上面的命令变为:

$ sshuttle -r username@remotehost 10.0.0.0/8 172.16.0.0/16

这非常适合通过 IP 地址访问远程网络的主机。但是,如果你的办公室是一个拥有大量主机的大型网络,该怎么办?名称可能更方便,甚至是必须的。不用担心,sshuttle 还可以使用 –dns 选项转发 DNS 查询:

$ sshuttle --dns -r username@remotehost 10.0.0.0/8 172.16.0.0/16

要使 sshuttle 以守护进程方式运行,请加上 -D 选项。它会以 syslog 兼容的日志格式发送到 systemd 日志中。

根据本地和远程系统的功能,可以将 sshuttle 用于基于 IPv6 的虚拟专网。如果需要,你还可以设置配置文件并将其与系统启动集成。如果你想阅读更多有关 sshuttle 及其工作方式的信息,请查看官方文档。要查看代码,请进入 GitHub 页面

题图由 Kurt Cotoaga 拍摄并发表在 Unsplash 上。


via: https://fedoramagazine.org/use-sshuttle-to-build-a-poor-mans-vpn/

作者:Paul W. Frields 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

当你安装 Fedora Workstation 时,你会发现它包括了世界知名的 Firefox 浏览器。Mozilla 基金会以开发 Firefox 以及其他促进开放、安全和隐私的互联网项目为己任。Firefox 有快速的浏览引擎和大量的隐私功能。

开发者社区不断改进和增强 Firefox。最新版本 Firefox 69 于最近发布,你可在稳定版 Fedora 系统(30 及更高版本)中获取它。继续阅读以获得更多详情。

Firefox 69 中的新功能

最新版本的 Firefox 包括 增强跟踪保护 Enhanced Tracking Protection (ETP)。当你使用带有新(或重置)配置文件的 Firefox 69 时,浏览器会使网站更难以跟踪你的信息或滥用你的计算机资源。

例如,不太正直的网站使用脚本让你的系统进行大量计算来产生加密货币,这称为 加密挖矿 cryptomining 。加密挖矿在你不知情或未经许可的情况下发生,因此是对你的系统的滥用。Firefox 69 中的新标准设置可防止网站遭受此类滥用。

Firefox 69 还有其他设置,可防止识别或记录你的浏览器指纹,以供日后使用。这些改进为你提供了额外的保护,免于你的活动被在线追踪。

另一个常见的烦恼是在没有提示的情况下播放视频。视频播放也会占用更多的 CPU,你可能不希望未经许可就在你的笔记本上发生这种情况。Firefox 使用 阻止自动播放 Block Autoplay 这个功能阻止了这种情况的发生。而 Firefox 69 还允许你停止静默开始播放的视频。此功能可防止不必要的突然的噪音。它还解决了更多真正的问题 —— 未经许可使用计算机资源。

新版本中还有许多其他新功能。在 Firefox 发行说明中阅读有关它们的更多信息。

如何获得更新

Firefox 69 存在于稳定版 Fedora 30、预发布版 Fedora 31 和 Rawhide 仓库中。该更新由 Fedora 的 Firefox 包维护者提供。维护人员还确保更新了 Mozilla 的网络安全服务(nss 包)。我们感谢 Mozilla 项目和 Firefox 社区在提供此新版本方面的辛勤工作。

如果你使用的是 Fedora 30 或更高版本,请在 Fedora Workstation 上使用软件中心,或在任何 Fedora 系统上运行以下命令:

$ sudo dnf --refresh upgrade firefox

如果你使用的是 Fedora 29,请帮助测试更新,这样它可以变得稳定,让所有用户可以轻松使用。

Firefox 可能会提示你升级个人设置以使用新设置。要使用新功能,你应该这样做。


via: https://fedoramagazine.org/firefox-69-available-in-fedora/

作者:Paul W. Frields 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出