介绍
当您第一次登录到新的 Fedora 21 或 RHEL 服务器时,它还没有准备好用作生产系统。 为了自定义和保护它,有许多推荐的步骤,例如启用防火墙。
本教程将向您展示如何为全新安装的 Fedora 21 服务器提供更好的安全配置文件并准备好使用。
先决条件
要遵循本教程,您将需要:
- 带有根 SSH 密钥的 Fedora 21 Droplet。
如果您没有密钥,您可以按照 SSH 密钥教程的 本节 创建密钥,以及同一教程的 本节 自动将您的 SSH 密钥嵌入服务器的根目录创建 Droplet 时的帐户。
第 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 yum update
然后,要安装 nano
,请键入:
sudo yum install -y nano
现在,打开 SSH 守护进程的配置文件进行编辑。
sudo nano /etc/ssh/sshd_config
在该文件中,查找 PermitRootLogin
指令。 取消注释(这意味着删除起始 #
字符)并将其设置为 no。
PermitRootLogin no
同样,查找 PasswordAuthentication
指令并将其也设置为 no。
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
目录。 例如,如果您位于美国中部,时区为 Central 或 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 21 服务器没有活动的防火墙应用程序。 在这一步中,我们将学习如何启用 IPTables 防火墙应用程序并确保运行时规则在重新启动后仍然存在。
IPTables 包已经安装,但要启用它,您需要安装 iptables-services
包。
sudo yum install -y iptables-services
然后,您可以启用 IPTables 以便它在启动时自动启动。
sudo systemctl enable iptables
接下来,启动 IPTables。
sudo systemctl start iptables
Fedora 21 上的 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
规则现在保存到 /etc/sysconfig
目录中名为 iptables
的文件中。
第 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 yum install -y mlocate
然后,运行 updatedb
命令更新搜索数据库。
sudo updatedb
之后,您应该可以使用 locate
按名称查找任何文件。
结论
完成最后一步后,您的 Fedora 21 服务器应该已配置好、相当安全并可以使用了!