如何在Debian 9(Stretch)中设置Web服务器(LAMP)

LAMP的缩写是指Linux OS和Apache Web服务器,MySql数据库服务器以及具有PHP支持的软件堆栈的组合。

本教程已在以下Linux发行版上进行了测试:

Debian Linux 9(压缩)

上次更新时间:
2018年4月7日

在本教程中,您将安装Debian Linux 9(挤压),带有mpm-itk的Apache 2(以单独的用户身份运行每个网站),PHP 7支持和MySql 5.7数据库服务器。另外,本教程将向您展示如何安装提供FTP服务的vsftp服务器,设置letencrypt和请求免费证书,安装phpMyAdmin以及配置iptables防火墙以保护服务器并仅允许所需的端口。通过学习本教程,您将可以使用功能齐全且安全的Web服务器来托管您的网站。

1.保持系统最新

在继续操作之前,请将所有软件包升级到最新版本。

apt-get update && apt-get upgrade

2.安装MySql 5.7数据库服务器

默认情况下,MySQL 5.5包含在标准debian存储库的较旧版本中。对于本教程,请安装MySql 5.7,这需要一些其他步骤。

2.1。下载MySQL APT存储库配置工具(您可以在http://dev.mysql.com/downloads/repo/apt/中找到该工具的详细信息和最新版本)。

wget https://dev.mysql.com/get/mysql-apt-config_0.8.9-1_all.deb

2.2。安装MySQL APT存储库配置工具

dpkg -i mysql-apt-config_0.8.9-1_all.deb

系统将要求您选择要安装的产品和版本。在第一步中,选择 伺服器 然后选择 MySQL的5.7。然后,单击“应用”。

2.3。更新APT

apt-get update

2.4。安装服务器

apt-get install mysql-community-server

安装服务器后,您将需要输入root用户密码。在这里选择任何密码,但要确保它是一个强密码并且容易记住。

3.安装和配置支持mpm-itk和PHP7的Apache Web服务器

mpm-itk是在单个服务器上托管多个网站并分隔多个站点的理想选择。您可以使用mpm-itk来确保如果权限配置正确,则一个网站无法访问另一个网站上的文件。

3.1。安装套件

apt-get install apache2 libapache2-mpm-itk php php-mysql

3.2。启用重写模块和SSL模块

重写模块对于为网站创建SEO友好的URL非常有用,并且是许多框架和Web应用程序所必需的。需要SSL模块以使用SSL / TLS保护您的网站(使用https://而不是http://)。

a2enmod rewrite
a2enmod ssl

3.3。安装其他PHP模块(可选)

运行Web应用程序可能需要其他PHP模块。尽管所需的模块有所不同,但是您可以使用以下命令来安装常用模块。

apt-get install php-curl php-gd php-mcrypt php-mbstring php-xml

3.4。重新启动Apache以激活该模块以及已安装的所有其他PHP模块

systemctl restart apache2

3.5。删除Apache提供的默认索引站点(可选)

当您使用http:/// yourserver访问服务器时,默认索引页面显示有关服务器的详细信息。我们建议您将此文件替换为另一个文件,因为您不想告诉其他人有关服务器的信息。为了提供最少的详细信息,请清空文件。

echo "" > /var/www/html/index.html

4.创建一个网站(用户,网站根目录,Apache虚拟主机)

您需要为此服务器上托管的每个网站创建一个单独的本地用户,并隔离Web。 mpm-itk确保使用Apache虚拟主机上的指定用户执行所有操作。

4.1。创建本地用户

在本教程中,我们将使用域 example.org 当然,您需要将其替换为您的域。用户名(包括Web根)可以是任何名称,并且不需要与Web域相关,但是可以使用 一个例子 这里作为用户名。

adduser example

此命令使用用户名创建用户 一个例子 并为该用户创建一个主目录 / home /示例。您必须输入密码,并且可以提供有关用户的可选信息。

4.2。创建一个Web根目录

Web根目录是您的网站存储的目录。该目录可以位于任何位置,但是您必须确保用户具有从目录读取的权限。在本教程中,网络根目录位于/home/example/example.org。

使用chown命令更改新目录的所有权,并使样本用户(和样本组)可以访问它。

mkdir /home/example/example.org
chown example.example /home/example/example.org

4.3。创建一个Apache网站

使用此命令来响应对主机example.org和www.example.org的请求,并指示Apache使用主机的Web根目录。另外,将本地用户配置为在此处使用。

echo "
ServerName example.org
ServerAlias www.example.org
DocumentRoot /home/example/example.org
AssignUserId example example

Options -Indexes
AllowOverride All
Require all granted


" > /etc/apache2/sites-available/example.org.conf

4.4。启用Apache网站

网站设置位于sites-available目录中。这可以帮助您使用a2ensite和a2dissite命令轻松启用和禁用站点。要启用该站点,您需要运行以下命令:

a2ensite example.org

4.5。重新加载Apache配置

要指示Apache使用新站点,请重新加载配置。

systemctl reload apache2

如果您访问http://example.org(或指向服务器IP地址的域),并且尚未将文件放置在Web根目录,则会收到403 Forbidden错误。这是正常现象,因为站点配置已禁用目录索引。

5.使用Letsencrypt保护您的网站(可选)

让我们加密是一个证书颁发机构,它提供免费的SSL / TLS证书,这些证书会立即进行验证和签名,并可用于保护您的网站。该证书有效期为90天,但是您可以轻松设置一个任务来自动处理续订。

5.1。安装用于处理证书请求和续订的certbot。

apt-get install python-certbot-apache

5.2。配置Apache以允许HTTP验证

验证文件是使用root用户创建的,无法从网站上访问,因此它无法立即使用,因为它使用了mpm-itk certbot要解决此问题,请添加一个新的Apache模块,以便Apache使用其他用户读取这些文件。

echo "Alias /.well-known/acme-challenge /var/www/html/.well-known/acme-challenge

AssignUserId www-data www-data
" > /etc/apache2/mods-enabled/letsencrypt.conf

重新启动Apache

systemctl restart apache2

5.3运行certbot,选择要保护的站点,自动请求并安装证书。

certbot --authenticator webroot --installer apache

您需要按照一些步骤来完成证书申请和安装。

步骤1:输入以逗号分隔的数字列表,代表需要保护的主机名。如果仅配置了一个Apache站点,则可以在此处输入1,2。

步骤2:提供用于紧急更新和安全通知的电子邮件地址。输入有效的电子邮件地址以经常监视。

步骤3:接受服务条款。

步骤4:提供Web根目录。输入1并输入先前配置的已知根目录/ var / www / html。接下来,您需要检查该目录以获取证书中包含的每个其他主机名。

步骤5:Certbot将使用新的SSL / TLS证书自动创建一个Apache网站。在此步骤中,您可以选择同时允许http和https或将http请求重定向到https。请选择您的首选方法。

您现在可以使用https访问该网站。 https://example.org

5.4配置letencrypt证书的自动更新

crontab -e
43 6 * * * certbot renew --post-hook "systemctl reload apache2"

6.安装phpMyAdmin(可选)

phpMyAdmin是用PHP编写的工具,旨在处理Web上的MySQL管理。

6.1。安装phpMyAdmin

apt-get install phpmyadmin

配置phpMyAdmin需要几个步骤。

步骤1:系统将询问您需要配置哪个Web服务器。检查apache2并继续。

步骤2:配置phpmyadmin数据库选择是

步骤3:为phpmyadmin用户设置密码。由于仅由phpmyadmin使用,因此我们将继续进行操作,并允许该工具创建随机密码。

步骤4:您将需要提供在安装MySql服务器时选择的root密码。

现在,已经安装了phpMyAdmin,可以通过https://example.org/phpmyadmin(如果您已经创建了letsencrypt证书)或http://example.org/phpmyadmin(如果您跳过了letsencrypt步骤)进行访问。

6.2。限制对IP phpMyAdmin的访问(可选)

尽管phpMyAdmin是管理MySql的好工具,但不要允许任何人访问该工具,以使访问数据库更加容易。需要密码,但可以使用蛮力或phpMyAdmin漏洞进行访问。

仅允许某些IP地址访问phpMyAdmin。

使用您喜欢的文本编辑器打开/etc/apache2/conf-available/phpmyadmin.conf(例如:nano /etc/apache2/conf-available/phpmyadmin.conf)

在DirectoryIndex index.php下添加以下行(第7行)。

order deny,allow
deny from all
allow from x.your.ip.address

重新启动Apache

systemctl restart apache2

7.安装和配置FTP服务

vsftpd是安全,快速和稳定的FTP服务器。在本教程中,您将安装vsftpd,以便本地用户可以访问您的主目录。

7.1。安装vsftpd

apt-get install vsftpd

7.2。允许用户上传文件和读取文件,并启用chroot以防止用户读取其主目录之外的文件。

echo "write_enable=YES
chroot_local_user=YES" >> /etc/vsftpd.conf

7.3。重新启动vsftpd

/etc/init.d/vsftpd restart

7.4。更改用户的主目录权限

如果启用了chroot,则需要删除对主目录的写访问权限。这意味着用户无法将新文件直接上传到其主目录。但是,用户可以将文件上传到其主目录的子文件夹,包括Web根目录(例如/home/example/example.org)。

chmod u-w /home/example

现在已安装vsftpd,您可以使用任何FTP客户端连接到服务器。

8.配置iptables防火墙

通常,建议您不允许匿名用户访问他们不需要访问的端口。即使所有服务都受密码保护,也可以使用蛮力或应用程序中的漏洞对它们进行黑客攻击。

使用iptables防火墙,匿名用户只能使用http,https,ssh和ftp。

8.1。启用ip_conntrack_ftp以允许被动FTP连接

echo "ip_conntrack_ftp" >> /etc/modules
echo "net.netfilter.nf_conntrack_helper=1" >> /etc/sysctl.conf

服务器需要重新启动才能运行被动FTP

8.2。 ICMP,允许建立本地连接

iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
iptables -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED
iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT

8.3。允许所有用户连接到Web服务(http和https),ssh和ftp

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

考虑使用-s参数将对ssh和ftp的访问限制为仅所需的IP地址(例如-s 8.8.8.8)

8.4。允许来自服务器的所有传出连接。

iptables -P OUTPUT ACCEPT

8.5。删除所有与先前创建的规则不匹配的传入连接。确保您的IP地址(或任何IP地址)已经允许您连接到SSH。否则,您将被断开连接并被锁定在服务器之外。

iptables -P INPUT DROP
iptables -P FORWARD DROP

8.6。现在,您已经设置了所有必需的iptables规则,但是它们是临时的,在下次重新启动时将丢失。要永久保存规则,您需要安装iptables-persistent软件包并保存规则。

apt-get install iptables-persistent
iptables-save > /etc/iptables/rules.v4

就是这样!现在,您需要具有SSL / TLS证书,FTP服务器和软件防火墙的功能齐全的LAMP Web服务器。

Source link

Sidebar