介绍
当您首次登录新 Fedora 22 时,它尚未准备好作为生产系统使用,并且需要采取一些建议的步骤来定制和保护它,例如启用防火墙。
本教程将向您展示如何为 Fedora 22 服务器的新安装提供更好的安全配置,并准备好使用。
前提条件
要遵循本教程,您将需要:
- 带 root SSH 密钥的 Fedora 22 Droplet
您可以遵循 SSH 密钥教程的 此部分以创建密钥,如果您没有它们,以及同一教程的 此部分以自动嵌入您的 SSH 密钥在您的服务器的 root 帐户中,当您创建您的 Droplet。
步骤 1 – 创建标准用户帐户
首先,登录您的服务器作为 root。
1ssh root@your_server_ip
作为 root 操作是一种安全风险,所以在这个步骤中,我们将设置一个 sudo 非 root 用户帐户用于系统和其他计算任务。
要添加用户,类型:
1adduser sammy
使用下面的命令为用户指定一个强大的密码,您将被要求输入密码两次。
1passwd sammy
然后将用户添加到轮子组中,从而赋予它sudo特权。
1gpasswd -a sammy wheel
退出服务器并将 SSH 密钥添加到新用户帐户,在本地计算机上运行以下操作。
1ssh-copy-id sammy@your_server_ip
有关如何将 SSH 密钥从本地机器复制到服务器的更多信息,您可以阅读 SSH 教程的 本节。
最后,作为新的 sudo 非 root 用户重新登录,您将不会被要求提供密码,因为这个帐户现在有 SSH 密钥。
1ssh sammy@your_server_ip
步骤 2 – 禁用根登录和密码身份验证
在此步骤中,我们将通过禁用 root 登录和密码身份验证来使 SSH 登录更安全。
要编辑配置文件,你需要安装一个文本编辑器. 我们会使用nano
,但你可以使用任何你喜欢的。
首先,使用任何可用的更新:
1sudo dnf update
然后,安装nano
,键入:
1sudo dnf install -y nano
现在,打开 SSH daemon 的配置文件进行编辑。
1sudo nano /etc/ssh/sshd_config
在该文件中,寻找允许RootLogin
指令. 删除它(即删除开始的#
字符),并将其设置为 no。
1PermitRootLogin no
同样,寻找密码验证
指令,并将其设置为不
。
1PasswordAuthentication no
保存和退出文件,然后重新加载配置以将您的更改执行。
1sudo systemctl reload sshd
如果现在有人试图作为 root 登录,那么答案应该是允许被拒绝(公钥,gssapi-keyex,gssapi-with-mic)
。
步骤 3 – 配置时区
在此步骤中,您将阅读如何将系统时钟更改为本地时区。
所有已知的时区都位于 /usr/share/zoneinfo/
目录下,查看 /usr/share/zoneinfo/
中的文件和目录。
1ls /usr/share/zoneinfo/
要将时钟设置为使用本地时区,请在该目录中查找您的国家或地理区域,在其下方查找区域文件,然后从该目录中创建一个象征性的软链接到/etc/localtime
目录。
从区域文件中创建一个象征性的软链接到/etc/localtime
。
1sudo ln -sf /usr/share/zoneinfo/your_zone_file /etc/localtime
通过查看日期
命令的输出来验证时钟现在已设置为本地时间。
1date
输出将看起来像:
1Wed Mar 25 14:41:20 CST 2015
该输出中的 CST 确认它是中央时间。
步骤4:启用防火墙
新的 Fedora 22 服务器没有活跃的防火墙应用程序. 在此步骤中,我们将学习如何启用 IPTables 防火墙应用程序,并确保在重新启动后仍有运行时间规则。
IPTables 包已安装,但要启用它,您需要安装iptables-services
包。
1sudo dnf install -y iptables-services
然后,您可以启用 IPTables,以便它自动启动。
1sudo systemctl enable iptables
接下来,开始IPTables。
1sudo systemctl start iptables
在 Fedora 上,IPTables 配备了 22 艘默认规则,其中一个规则允许 SSH 流量。
1sudo iptables -L
输出应该读:
1Chain INPUT (policy ACCEPT)
2target prot opt source destination
3ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
4ACCEPT icmp -- anywhere anywhere
5ACCEPT all -- anywhere anywhere
6ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
7REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
8
9Chain FORWARD (policy ACCEPT)
10target prot opt source destination
11REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
12
13Chain OUTPUT (policy ACCEPT)
14target prot opt source destination
这些规则是运行时规则,如果系统重新启动,它们将丢失. 若要将当前的运行时规则保存到文件中,以便在重新启动后继续存在,请键入:
1sudo /usr/libexec/iptables/iptables.init save
这些规则现在被保存到名为iptables
的文件中,在/etc/sysconfig
目录中。
步骤 5 (可选) — 允许 HTTP 和 HTTPS 流量
在本节中,我们将介绍如何编辑防火墙规则,以允许服务为端口80(HTTP)和443(HTTPS)。
默认的 IPTables 规则默认允许 SSH 流量,但 HTTP 和其相对更安全的表弟 HTTPS 是许多应用程序使用的服务,因此您可能希望允许这些应用程序通过防火墙。
要继续,打开防火墙规则文件,键入:
1sudo nano /etc/sysconfig/iptables
您只需添加两个规则,一个为端口80和另一个为端口443,然后是SSH(端口22)流量规则。
1-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
2-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
3-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
4-A INPUT -j REJECT --reject-with icmp-host-prohibited
要激活新规则集,重新启动 IPTables。
1sudo systemctl restart iptables
步骤 6 (可选) - 安装 Mlocate
定位
命令是一个非常有用的工具来搜索系统中的文件位置,例如,要找到一个名为 example的文件,你会键入:
1locate example
这将扫描文件系统,并在屏幕上打印文件的位置或位置。
要在您的服务器上提供该命令,您首先需要安装mlocate
包。
1sudo dnf install -y mlocate
然后运行updatedb
命令来更新搜索数据库。
1sudo updatedb
在此之后,您应该能够使用位置
以根据名称查找任何文件。
结论
完成最后一步后,您的 Fedora 22 服务器应该配置,合理安全,并准备好使用!