Fedora 22 服务器的初始设置
介绍
首次登录全新的 Fedora 22 时,它还不能用作生产系统。为了自定义和保护它,建议采取一些步骤,例如启用防火墙。
本教程将向您展示如何为全新安装的 Fedora 22 服务器提供更好的安全配置文件并准备使用。
先决条件
要遵循本教程,您需要:
- 具有根 SSH 密钥的 Fedora 22 Droplet。
如果您没有密钥,可以按照SSH 密钥教程的此部分来创建密钥;如果您没有密钥,可以按照同一教程的此部分在您创建 Droplet 时自动将您的 SSH 密钥嵌入到您服务器的根帐户中。
第 1 步 - 创建标准用户帐户
首先,以root身份登录您的服务器。
ssh root@your_server_ip
以 root 身份操作存在安全风险,因此在此步骤中,我们将设置一个 sudo 非 root 用户帐户,用于系统和其他计算任务。本教程中使用的用户名是sammy,但您可以使用任何您喜欢的名称。
要添加用户,请输入:
adduser sammy
使用以下命令为用户指定一个强密码。系统将提示您输入两次密码。
passwd sammy
然后将用户添加到 wheel 组,授予其 sudo 权限。
gpasswd -a sammy wheel
通过在本地计算机上运行以下命令,注销服务器并将 SSH 密钥添加到新用户帐户。
ssh-copy-id sammy@your_server_ip
有关如何将 SSH 密钥从本地机器复制到服务器的更多信息,可以阅读SSH 教程的此部分。
最后,以新的 sudo 非 root 用户身份重新登录。系统不会提示您输入密码,因为此帐户现在有 SSH 密钥。
ssh sammy@your_server_ip
第2步 - 禁止Root登录和密码验证
在此步骤中,我们将通过禁用 root 登录和密码验证来使 SSH 登录更加安全。
要编辑配置文件,您需要安装文本编辑器。我们将使用nano
,但您也可以使用您喜欢的任何编辑器。
首先,使用以下方法应用所有可用更新:
sudo dnf update
然后,要安装nano
,请输入:
sudo dnf install -y nano
现在,打开 SSH 守护进程的配置文件进行编辑。
sudo nano /etc/ssh/sshd_config
在该文件中,查找该PermitRootLogin
指令。取消注释(即删除起始#
字符)并将其设置为no。
PermitRootLogin no
类似地,找到该PasswordAuthentication
指令并将其设置为否。
PasswordAuthentication no
保存并退出文件,然后重新加载配置以使更改生效。
sudo systemctl reload sshd
如果现在有人尝试以root身份登录,则响应应该是Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
。
第3步 - 配置时区
在此步骤中,您将了解如何将系统时钟更改为您的本地时区。默认时钟设置为 UTC。
所有已知时区均位于/usr/share/zoneinfo/
目录下。查看中的文件和目录/usr/share/zoneinfo/
。
ls /usr/share/zoneinfo/
要将时钟设置为使用本地时区,请在该目录中找到您所在的国家或地区,找到其下的区域文件,然后从其创建到目录的符号软链接/etc/localtime
。例如,如果您位于美国中部,时区为中部或CST,则区域文件将为/usr/share/zoneinfo/US/Central
。
从您的区域文件创建到 的符号软链接/etc/localtime
。
sudo ln -sf /usr/share/zoneinfo/your_zone_file /etc/localtime
通过查看命令的输出来验证时钟现在是否设置为本地时间date
。
date
输出结果如下:
Wed Mar 25 14:41:20 CST 2015
该输出中的 CST确认它是中央时间。
第4步 - 启用防火墙
新的 Fedora 22 服务器没有活动的防火墙应用程序。在此步骤中,我们将学习如何启用 IPTables 防火墙应用程序并确保运行时规则在重启后仍然存在。
IPTables 包已安装,但是为了启用它,您需要安装该iptables-services
包。
sudo dnf install -y iptables-services
然后您可以启用 IPTables 以便它在启动时自动启动。
sudo systemctl enable iptables
接下来,启动IPTables。
sudo systemctl start iptables
Fedora 22 上的 IPTables 附带一组默认规则。其中一条规则允许 SSH 流量。要查看默认规则,请键入:
sudo iptables -L
输出应为:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
这些规则是运行时规则,如果系统重新启动,这些规则将会丢失。要将当前运行时规则保存到文件中,以便重新启动后它们仍然存在,请键入:
sudo /usr/libexec/iptables/iptables.init save
规则现在保存到目录iptables
中名为的文件中/etc/sysconfig
。
步骤 5(可选) - 允许 HTTP 和 HTTPS 流量
在本节中,我们将介绍如何编辑防火墙规则以允许端口 80(HTTP)和 443(HTTPS)的服务。
默认的 IPTables 规则默认允许 SSH 流量进入,但 HTTP 及其相对更安全的 HTTPS 是许多应用程序使用的服务,因此您可能也希望允许它们通过防火墙。
要继续,请输入以下命令打开防火墙规则文件:
sudo nano /etc/sysconfig/iptables
您需要做的就是在 SSH(端口 22)流量规则之后添加两条规则,一条用于端口 80,另一条用于端口 443。下面红色的行是您要添加的行;前后行作为上下文,可帮助您找到添加新规则的位置。
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
要激活新的规则集,请重新启动 IPTables。
sudo systemctl restart iptables
步骤 6(可选) - 安装 Mlocate
该locate
命令是查找系统中文件位置的非常有用的实用程序。例如,要查找名为example 的文件,您可以输入:
locate example
这将扫描文件系统并在屏幕上打印文件的位置。locate
还有更高级的使用方法。
为了使该命令在您的服务器上可用,首先您需要安装该mlocate
包。
sudo dnf install -y mlocate
然后,运行updatedb
命令来更新搜索数据库。
sudo updatedb
此后,您应该能够locate
通过名称查找任何文件。
结论
完成最后一步后,您的 Fedora 22 服务器应该配置完毕、相当安全并可供使用!