创建家庭云的历史。 第2部分。创建服务器-在Debian中设置LAMP

在创建自己的云服务的过程中,我们刚刚习惯了Debian系统 。 现在是下一步的时候了-创建和配置Web服务器,基于此服务器可以启动Nextcloud。


目录


第1部分。设置日常使用的Debian环境
第2部分。创建服务器-在Debian中设置LAMP
第3部分。创建个人云-安装和配置Nextcloud
第4部分。更新2018-Debian 9和Nextcloud 13
第5部分。更新2019-PHP 7.2,MariaDB 10.4和Nextcloud 17



快速章节导航


前言
软件安装
配置Apache2 Web服务器并通过HTTP和HTTPS协议访问它
SQL调优
PHP设置
SSH访问设置
访问保护
Web服务器参考
MySQL参考
Fail2ban参考资料



前言


这个故事的第一部分显示了设置Debian GUI的一种可能选择,以方便从Windows来Linux的人使用Debian GUI,以方便和熟悉(作者的主观观点)。 如果我仅使用主机系统来配置Debian虚拟机,那么我专门在该虚拟机中工作,在Internet上搜索信息,在Notepadqq或gedit中做笔记,通过Audacious收听音乐,通过LibreOffice等打开文件。 通过这种方式,您可以习惯并更深入地了解和欣赏使用操作系统及其环境,在标准的Debian软件包中该操作系统及其功能非常完整。

目前,我们的系统配置方式使得将来您只能将命令行与控制台文本编辑器(例如nano)一起使用,或者将Double Commander文件管理器与集成的Notepadqq编辑器一起使用。 可以将这两种方法结合起来,例如,通过在系统中导航并通过文件管理器编辑配置文件,以及通过控制台来编辑所有其他命令。 所有方法均等效于达到最终结果。

当前的目标是创建一个服务器,这部分将专门用于该服务器。 可以通过安装和使用图形界面来配置服务器,也可以不使用图形界面来配置服务器。 在第二种情况下,从上一部分开始,您可以简单地跳过有关为图形界面及其设置安装和配置软件,安装图形软件包和vmware-tools的部分。

我在创建服务器时使用图形界面没有任何问题:如果人们更熟悉,更方便,更舒适地在图形环境中构建第一台或第二台服务器,为什么呢? 最后,我的带有图形界面的Web服务器工作了一年,并将根据需要工作许多年。 但是,您需要记住一些要点。

理想情况下,配置完成后,系统将必须在很长一段时间内无需我们干预即可运行。 我的服务器在“完成”版本中配置了两天,并且在没有干预的情况下工作了将近一年。 这意味着图形界面已用完服务器活动状态的0.05%(计算机只能工作半天),并且同时占用了以下资源:RAM,磁盘空间,处理器时间。 所有这些资源都可以更好地用于确保服务器本身的功能:例如,提高PHP的memory_limit或在硬盘驱动器上存储更多用户数据。 另外,在使用真正的远程服务器时,如果出现问题和故障,通常更容易使用SSH访问 。 在这种情况下,不希望使用图形界面,这就是为什么网络上的第二台服务器已经是没有图形环境的虚拟机,在图形环境中仅从图形软件安装了Midnight Commander,我用来浏览文件系统并通过其mcedit编辑器编辑配置文件。 因此,以下是通用说明:给定的命令着重于命令行的使用,但是,可以理解的是,用户第一次使用图形环境来配置机器,这是由于使用浏览器在本地检查所创建站点的可用性以及设置邮件程序的某些功能。

在创建服务器以及向其中添加新站点的过程中,我积累了一些背景知识,这些信息可能对新手用户有用。 我在安装和配置服务器的材料之后概述了它。

注意事项
进一步阅读http:// 127.0.0.1(https:// 127.0.0.1)格式的构造后,进入浏览器地址栏时必须删除http://(https://)后面的空格。 发布本文时插入了一个空格,以防止引擎自动将文本转换为链接。



软件安装


Apache和Nginx是一对开源Web服务器,全球约有55%的服务器构建在这些Web服务器上。 Apache是​​1995年以来最流行的Web服务器,我选择它是希望获得良好的文档记录和受欢迎程度,并且可以这么说,我想从头开始。 这并不意味着Nginx变得更糟:Nginx在消耗资源和负载下工作效率更高。 在俄罗斯的Internet领域,Nginx服务器约占65%,而Apache约占18%。 集线器上张贴了两台服务器的比较文章

安装Apache2 Web服务器:

#apt-get install apache2 apache2-doc

仅此而已。 大约二十兆字节,并且已经安装了Web服务器。 无需重新启动或设置-服务器已经知道如何打开HTML页面。 但是,Internet上的现代网站不仅像二十年前一样是一组静态文件,样式,字体等。 一个现代站点包含用PHP编写的脚本 ,动态信息(例如,文本内容,注释,用户个人资料)不是写在PHP文件旁边的文件中,而是写在一个特殊的SQL数据库中 。 对于完整的服务器,您必须提供对这些技术的支持。 而且,这并不困难:

#apt-get install mysql-server mysql-client phpmyadmin
#apt-get install php5 php5-mysql libapache2-mod-php5

在安装MySQL的过程中,将要求您设置mysql超级用户密码,并且需要选择apache2服务器以自动配置mysql的工作。 安装phpmyadmin软件包时,我同意自动配置该软件包,并在各处输入mysql根密码。 无需任何请求即可进行PHP安装。

我没有使用较快的PHP7或免费的MariaDB作为替代的开放SQL替代品,因此决定使用“古老的” LAMP = Linux + Apache + MySQL + PHP构建我的服务器,使用陈旧且久经考验的解决方案,以防出现问题时可以快速解决。并轻松地在Internet上找到信息。

三个团队(实际上可以减少到一个团队),我们在本地安装了功能完善的现代服务器。 很简单!

但是服务器设置所需的时间比安装其组件所需的时间长得多。 最初,在这一部分中,我想展示我的典型错误,对问题的错误解决方案以及所导致的结果,但是事实证明,一年中很多事情已经从我的记忆中删除了,我不得不从记录中恢复很多东西,因此下面仅列出了一条很小的工作说明评论,从而实现普遍的工作结果。



配置Apache2 Web服务器


首先,您需要确保Web服务器正在运行。 为此,请打开浏览器并拨打地址http:// 127.0.0.1( localhost )。 应打开一个鼓舞人心的题词:“ Apache2 Debian默认页面。 可行!” 服务器确实可以正常工作。 如果您有2000年的一组站点文件,则可以将其放置在/ var / www / html目录中,并且该文件可能会在我们的服务器上打开。



所有基本的Web服务器设置都存储在/ etc / apache2路径中。 如果打开此目录,则可以看到主配置文件apache2.conf和目录conf-available,mod-available,sites-available。 这些目录包含带有设置的预配置文件(所谓的代码段),您可以在默认情况下简单地使用它们并进行自己的编辑,也可以将它们作为模板来创建自己的配置。 例如,在sites-available目录中是默认主机配置文件000-default.conf。 如果您打开它并进行研究,就会发现该文件只是设置了我们网站的打开路径,其地址为http:// 127.0.0.1:“ DocumentRoot / var / www / html”。 此外,“ <VirtualHost *:80>”行表示如果我在本地网络上释放我的计算机并在端口80( HTTP的端口)上访问它,我将打开一个位于/ var / www路径的站点。 / html。 如何验证?

首先,您需要找出虚拟机在加载后分配给它的IP地址。 要查看网络适配器的配置,请执行:

#ifconfig

在控制台上显示的信息中,很容易确定为eth0适配器设置了以下地址:

inet addr:192.168.233.138

现在在主机上,我在浏览器中打开浏览器地址http:// 192.168.233.138,并期望打开一个熟悉的页面。 但是...她没有打开。 一段时间后,我的浏览器写道:“连接超时。” 而且他写得正确。 确实,在第一部分中,我打开了防火墙,但是端口80没有打开! 让我们解决这个问题:

#ufw允许80

再次尝试打开地址http:// 192.168.233.138并确保打开预期的页面。 虚拟机中的虚拟主机从所有这些虚拟化的外部打开。 我们在构建自己的小型虚拟Internet方面迈出了一步。

除了-available目录之外,还有-enabled目录包含当前“包含”的目录。 如果查看它们,可以看到这些目录包含指向-available目录中文件的链接。 当前启用站点的目录中只有一个链接-文件/etc/apache2/sites-available/000-default.conf。 这非常方便-我们可以控制主机上或主机外的快捷方式,而无需编辑其配置文件。 另外,配置的来源是现在是否单独包含一个配置文件,当一个文件中的内容被更正而另一个文件中的内容被遗忘时,这可以防止错误。 要禁用我们的主机,您需要删除所需的快捷方式,并启用它,然后创建它。 为了不手动删除或创建快捷方式,使用特殊实用程序会更容易且更可靠。

禁用虚拟主机:

#a2dissite 000-默认

打开虚拟主机:

#a2enssite 000-默认

每次更改后,您需要重新启动主机配置或重新启动服务器:

#服务apache2重新加载



#服务apache2重新启动

因此,现在可以获得对如何在apache中配置常规主机的基本了解,然后将显示一个示例,说明如何配置服务器以通过HTTP和HTTPS协议工作。

您需要从以下事实开始:断开000默认的虚拟主机时,这样的断开不会发生。 即,该站点从虚拟机的内部和外部打开,并且无论其配置是否在启用站点的文件夹中都将打开。 这是出乎意料的,我花了相当长的时间来了解我是否做对或理解了一切。 直到最后,我仍然不明白这一点,这显然是由于以下事实:/ var / www / html路径被全局设置为DocumentRoot的默认目录。 由于我不想包含和访问不必要的内容,因此我决定放弃html目录本身,并且对于所有嵌套的/ var / www,默认情况下拒绝访问。

要配置默认虚拟主机,我编辑了其配置文件:

#nano /etc/apache2/sites-available/000-default.conf

配置文件的内容如下:

 <VirtualHost *:80> ServerName localhost ServerAdmin user@localhost DocumentRoot /var/www <Directory /var/www> Options FollowSymLinks AllowOverride All Require all denied </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

使用此配置,我将默认目录重置为/ var / www,允许服务器遵循此目录中的符号链接,允许服务器执行在找到的.htaccess文件中声明的所有指令,并拒绝访问该目录。 这些操作的逻辑是,我可以控制对该目录的访问,而无需访问Web服务器的设置,也无需重新启动它。 现在,您需要检查此解决方案。
传输文件:

#mv /var/www/html/index.html /var/www/index.html

并删除目录:

#rm / var / www / html

我们重新启动服务器,以使新的虚拟主机默认设置生效:

#服务apache2重新启动

创建一个文件:

#nano /var/www/.htaccess

我们在其中写一行(不带引号):“要求全部授予”。

总结一下。 现在没有路径/ var / www / html,但是默认情况下将主机重新配置为index.html文件所在的路径/ var / www,并且默认情况下,在Web服务器级别上,拒绝访问此目录,但允许本地内容在那里的.htaccess文件。

打开浏览器http:// 127.0.0.1,然后查看已经熟悉的页面“ Apache2 Debian Default Page”。 可行。” 现在,让我们检查“本地”访问控制的可操作性:
删除.htaccess文件:

#rm /var/www/.htaccess

然后,我们在浏览器中更新打开的页面-应该打开带有访问限制通知(禁止)的页面。 是的,所有这些工作正常,因此一切都正确完成。

原则上,这些简单的设置足以满足Web服务器的进一步无忧操作。 但是在我看来这还不够。 现在,我们的Web服务器只能使用HTTP协议工作。 但是HTTPS协议呢? 毕竟,如果将来要将基于该Web服务器的项目带到Internet,那么至少需要使用该协议的能力。 我决定根据自签名SSL证书的创建来组织HTTPS支持。

首先,您需要获取将安装在我们服务器上的SSL证书。 我们没有任何域,也没有静态IP地址。 但这一切都没有关系,因为我将使用系统工具自行生成证书。

注意! 以下说明假定服务器已安装在无名机器上。 如果存在真实的IP或域名,则必须在三个位置中进行指定:<通用名称IP /域>; <服务器名称IP /域>; <重定向“ /”“ https:// IP /域/”>-在适当的结构中,用IP地址或域名替换IP /域。 在下面的文本中,将使用本地主机代替IP /域。

生成SSL证书:

#openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

此命令将立即创建X.509标准的自签名证书,并使用密码短语跳过证书保护选项,此证书将使用十年-这是必要的,因此启动Apache服务器时无需用户干预即可读取文件,因为设置了密码,因此每次引导或重新引导后都必须输入该文件服务器。 与证书一起,将创建一个新的2048位RSA密钥,用它对证书进行签名。 –keyout和–out选项指示OpenSSL应生成密钥和证书的路径。

在创建证书的过程中,将询问一些问题,我向他们指出了以下数据:

国家/地区名称=兆瓦
州或省名称= Sun System
地点名称=月球
组织名称= Hellium Inc.
组织单位名称= 2
通用名称=本地主机
电子邮件地址=用户@本地主机

接下来,创建Diffie-Hellman键以提供PFS支持:

#openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

点和加号将在终端中运行,并且在动画片结束之后,您可以创建ssl-params.conf文件,在其中定义服务器的SSL参数:

#nano /etc/apache2/conf-available/ssl-params.conf

为了进行安全,最新的配置,我使用了生成器中生成的代码来在mozilla.imtqy.com上配置SSL 。 在生成器中,我选择了Apache2服务器,现代配置文件,并正确设置了服务器和OpenSSL的版本,可以通过以下命令识别它们:

#apache2 -v
#openssl版本

结果,我得到以下文本:

 # 14-01-2018 / for apache2 2.4.10 & openssl 1.0.1t # from https://mozilla.imtqy.com/server-side-tls/ssl-config-generator/ # parametrs help: https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html # modern configuration, tweak to your needs SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 SSLHonorCipherOrder on SSLCompression off # OCSP Stapling, only in httpd 2.3.3 and later SSLUseStapling on SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off SSLStaplingCache shmcb:/var/run/ocsp(128000) 

现在为虚拟主机配置SSL支持:

#nano /etc/apache2/sites-available/default-ssl.conf

我将此文件的文本转换为以下格式:

 <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin user@localhost ServerName localhost DocumentRoot /var/www <Directory /var/www> Options FollowSymLinks AllowOverride All Require all denied </Directory> # HSTS (mod_headers is required) (15768000 seconds = 6 months) Header always set Strict-Transport-Security "max-age=15768000" ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule> 

从上面可以看出,我们也将/ var / www定义为DocumentRoot目录,对其访问的配置与之前的设置类似。 启用了HSTS机制,该机制有助于通过HTTPS协议强制连接。 SSL支持包括在所使用的证书和密钥中,以及在PHP和CGI脚本中处理证书数据的支持。 最后一部分旨在提供与早期版本的Internet Explorer的兼容性,通常不需要。

现在,让我们完成画龙点睛。

让我们打开SSL端口:

#ufw允许443

启用apache模块以支持SSL和HSTS:

#a2enmod ssl
#a2enmod标头

启用S​​SL配置:

#a2enconf ssl-params

启用启用SSL的虚拟主机:

#a2ensite default-ssl

重新启动服务器以接受所有新设置:

#服务apache2重新启动

因此,有趣的时刻到了-检查已配置系统新功能的可操作性。

创建一个文件:

#nano /var/www/.htaccess

我们在其中规定一行:“要求所有被授予”。

在浏览器中打开https:// 127.0.0.1。 接受未知证书(单个或永久许可)后,应打开一个有关未知证书的页面,一个熟悉的页面将显示有关正在运行的Web服务器的通知。

删除.htaccess文件:

#rm /var/www/.htaccess

然后,我们在浏览器中更新打开的页面-应该打开带有访问限制通知(禁止)的页面。 一切正常。 现在我们的站点可以通过HTTP和HTTPS访问。

HTTP访问可以保持启用,禁用或强制重定向到HTTPS。

对于启用HTTP的访问,不需要执行任何操作,因为服务器将单独处理对端口80和443的请求,并且/ var / www文件夹中的站点将同时通过HTTP和HTTPS打开。

要禁用HTTP访问,您只需禁用相应的虚拟主机并重新启动Web服务器:

#a2dissite 000-默认
#服务apache2重新启动

现在,如果您在浏览器中打开http:// 127.0.0.1,则应打开一个页面,其中包含有关缺少页面的通知(未找到)。

最有趣的第三种选择。 在这种情况下,HTTP正式保持启用状态,但是将通过HTTPS强制重定向数据处理。

为此,首先启用重定向模块:

#a2enmod重写

现在打开000-default.conf文件:

#nano /etc/apache2/sites-available/000-default.conf

在结束标记之前,添加以下文本:

 RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] 

重新启动服务器:

#服务apache2重新启动

创建一个文件:

#nano /var/www/.htaccess

我们在其中规定一行:“要求所有被授予”。

现在,如果您在浏览器中打开http:// 127.0.0.1地址,我们将自动重定向到https:// 127.0.0.1,并带有有关未知证书的警告(如果该证书先前未添加到浏览器的排除列表中),则在接受后,将打开一个已经熟悉的证书Web服务器通知页面。



SQL调优


对于mysql的初始设置,只需运行以下命令:

#mysql_secure_installation

输入mysql超级用户密码后,我按以下顺序回答了问题:

  • 拒绝更改root密码;
  • 确认已从数据库中删除匿名用户;
  • 确认为root阻止远程连接(出于安全原因,root仅在本地连接);
  • 确认删除测试数据库;
  • 同意重新加载特权表。

要验证mysql的运行状况,可以运行以下命令:

#mysql -uroot -p

输入mysql超级用户密码后,我们会看到mysql提示符-这表示服务已启动并正在运行。 您可以通过输入exit命令退出mysql终端。

要检查phpmyadmin的性能,请在浏览器中打开地址http:// 127.0.0.1/phpmyadmin。 如果打开的页面显示输入phpmyadmin的邀请,则该服务已启动并正在运行。



PHP设置


安装PHP之后,我打开了它的设置文件:

#nano /etc/php5/apache2/php.ini

他将一些参数引入了以下形式:

  • memory_limit = 1024M
  • default_charset =“ UTF-8”
  • upload_max_filesize = 256M
  • sendmail_path = /usr/bin/fake_sendmail.sh

使用PHP模块,可以在内存中提供数据缓存。 在服务器的数据负载很高的情况下,缓存非常有用,数据的生成需要大量资源,例如,对数据库的查询结果或站点模板的“繁重”部分的处理。 作为缓存服务器,我选择了memcached模块。

安装内存缓存:

[ 本文是AlexanderSgeektimes.ru网站专门写的。
链接到源是可选的,但是非常希望获得它的引用! ]

#apt-get install memcached php5-memcached

让我们看一下服务配置设置:

#nano /etc/memcached.conf

在设置中,我增加了用于缓存的内存大小:-m 64-> -m256。并且仅在本地区域-l 127.0.0.1中检查了操作模式的可用性。

我们重新启动缓存服务和Web服务器:

#service memcached重新启动
#服务apache2重新启动

现在,您需要确保该服务正在运行。 为此,请创建一个文件:

#nano /var/www/info.php

并添加以下文本:

 <?php phpinfo (); ?> 

不要忘记检查/ var / www目录中是否存在带有相应许可内容的.htaccess文件,如果不存在,请创建它。

现在,您可以在浏览器中打开http:// 127.0.0.1/info.php-应该打开一个有关PHP信息的页面,您需要在其中检查其中的memcached部分。 如果该表出现-PHP正在运行。

您可以像这样检查正在运行的memcached服务:

$ ps -aux | grep memcached

终端应返回一个包含memcached设置的字符串。

为PHP创建邮件存根

在PHP设置中,将shell脚本指定为sendmail_path参数。 该脚本的功能是将通过标准php mail()函数发送的字母保存在本地计算机上的某个方便文件夹中,而不是将它们发送到某个地方。

创建一个文件:

#纳米/usr/bin/fake_semdmail.sh

具有以下内容:

 #!/bin/sh prefix="/var/mail/sendmail/new" numPath="/var/mail/sendmail" if [ ! -f $numPath/num ]; then echo "0" > $numPath/num fi num=`cat $numPath/num` num=$(($num + 1)) echo $num > $numPath/num name="$prefix/letter_$num.txt" while read line do echo $line >> $name done chmod 777 $name /bin/true 

使此文件可执行:

#chmod + x /usr/bin/fake_semdmail.sh

如果通过邮件程序配置字母集合,则创建您可能需要的必要目录:

#mkdir / var / mail / sendmail / var / mail / sendmail / cur / var / mail / sendmail / new / var / mail / sendmail / tmp

并且我们分配权限,以便服务器可以在此文件夹中写入文件:

#chmod 777 -R / var /邮件/ sendmail

现在,所有外发邮件都将添加到/ var / mail / sendmail。 可以使用文本编辑器查看它们,也可以通过邮件程序收集它们。 Debian预装软件带有Evolution电子邮件客户端。 设置帐户时,选择“ Maildir格式的邮件目录”作为服务器类型,并指定邮件目录的路径(/ var / mail / sendmail),然后选择“ Sendmail”作为服务器。

仅此而已。 通常,我们完成了服务器的工作-获得了通用虚拟机,您可以在此基础上构建网络服务。 我同时保留了HTTP和HTTPS访问权限。 但是,在获得创建和配置服务器以及向其添加站点(见下文)的经验之后,我建议使用不带图形界面的服务器创建一个新的虚拟机,这是最佳的资源消耗。



SSH访问设置


如果没有通过SSH的访问,则服务器将不是完整的服务器。 所谓的“外壳”使您可以使用例如小型腻子程序快速安全地连接到远程服务器-在本地计算机上,我们可以直接访问远程服务器的终端。

服务安装:

#apt-get install ssh

让我们打开SSH的端口(实际上,默认端口应为22,但在下面我在SSH配置中重新定义了该端口):

#ufw允许106

要为我们的用户安排访问权限,请打开文件:

#nano / etc / ssh / sshd_config

并将指令添加到文件末尾:

AllowUsers用户

另外,出于安全原因,我对此文件进行了以下更改:

  • 将端口从22更改为其他端口端口列表 ):端口22->端口106
  • 禁用旧版协议:协议2.1->协议2
  • 禁用对root的远程访问:PermitRootLogin yes(或不带密码的PermitRootLogin)-> PermitRootLogin否

然后重新启动服务:

#service sshd restart

现在,我可以在主机上运行putty程序,并通过输入连接地址192.168.233.138,端口106和用户名user以控制台方式连接到服务器。连接时,您必须回答肯定才能接受键并输入用户用户的密码。如果需要执行超级用户的命令,则可以使用已知的su命令。



访问保护


- DDoS, , VPS/VDS, , «» , . Slow HTTP DDoS , , IP .

DDoS - . , , . - SSH, , , SSH – .

, – , SSH. «» IP , , , SSH FTP. , -, , .

, fail2ban:

# apt-get install fail2ban

, . fail2ban – , , .

:

# nano /etc/fail2ban/jail.local

, . :

#
[DEFAULT]
ignoreip = 127.0.0.1
bantime = 2592000
findtime = 43200
maxretry = 6
banaction = iptables-multiport
#
destemail = user@localhost
sendername = Fail2Ban
mta = sendmail
action = %(action_mwl)s

# SSH
[ssh]
enabled = true
port = 106
filter = sshd
logpath = /var/log/auth.log

#
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log

# php
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/apache*/*error.log

#
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/apache*/*error.log
maxretry = 2

#
[apache-nohome]
enabled = true
port = http,https
filter = apache-nohome
logpath = /var/log/apache*/*error.log
maxretry = 2


, 12 IP , iptables, 30 . SSH, , -.



-


, :

# service apache2 start
# service apache2 stop
# service apache2 restart


:

# service apache2 reload

test:

# a2ensite test
# a2dissite test


test:

# a2enconf test
# a2disconf test


( : «Syntax OK»):

# apache2ctl configtest

HTTP HTTPS

, , site.com, /home/user/www. , user .

( ):

# chmod 755 /home/user

:

$ mkdir /home/user/www /home/user/www/site.com

:

# ln -s /home/user/www/site.com /var/www/site.com

HTTP :

# nano /etc/apache2/sites-available/000-default.conf

HTTPS :

#nano /etc/apache2/sites-available/default-ssl.conf

并将以下内容添加到打开的文件中,关闭/ VirtualHost标记之前:

 <Directory /var/www/site.com> Options FollowSymLinks AllowOverride All Require all granted </Directory> 

-:

# service apache2 restart

http:// 127.0.0.1/site.com https:// 127.0.0.1/site.com ( — . ). , .htaccess, : «Require all granted».

HTTP HTTPS , IP

– , : , , site.com, /home/user/www. .

( ):

# chmod 755 /home/user

:

$ mkdir /home/user/www/site.com

:

# ln -s /home/user/www/site.com /var/www/site.com

HTTP :

# nano /etc/apache2/sites-available/site.com.conf

:

 <VirtualHost *:80> ServerName site.com ServerAlias www.site.com ServerAdmin user@localhost DocumentRoot /var/www/site.com <Directory /var/www/site.com> Options FollowSymLinks AllowOverride All Require all granted </Directory> # Redirect HTTP->HTTPS #RewriteEngine On #RewriteCond %{HTTPS} off #RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

HTTPS :

# nano /etc/apache2/sites-available/site.com-ssl.conf

:

 <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerName site.com ServerAlias www.site.com ServerAdmin user@localhost DocumentRoot /var/www/site.com <Directory /var/www/site.com> Options FollowSymLinks AllowOverride All Require all granted </Directory> # HSTS (mod_headers is required) (15768000 seconds = 6 months) Header always set Strict-Transport-Security "max-age=15768000" ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule> 

/etc/hosts «127.0.0.1 site.com»:

# echo >> /etc/hosts 127.0.0.1 site.com

HTTP :

# a2ensite site.com.conf

HTTPS :

# a2ensite site.com-ssl.conf

-:

# service apache2 restart

http:// site.com https:// site.com ( – . ). , .htaccess, : «Require all granted».

. «» . 这并不困难。我们知道来宾计算机的域名和IP地址。如果主机系统是Windows,则需要打开文件c:\ Windows \ System32 \ drivers \ etc \ hosts,并在最后添加以下行:

192.168.233.138 site.com

. , site.com . , .

, HTTPS, HTTP :

— /etc/apache2/sites-available/site.com.conf ,
— /etc/apache2/sites-available/site.com.conf RewriteEngine/RewriteCond/RewriteRule
— site.com.conf,
— : # service apache2 restart



— index.html - .

index.html:

$ nano /home/user/www/site.com/index.html

:

 <html> <head> <title>TEST OK</title> </head> <body> <h1>TEST OK</h1> </body> </html> 

http:// 127.0.0.1/site.com (https:// 127.0.0.1/site.com) http:// site.com (https:// site.com) — «TEST OK».



MySQL


user123 pass123 db123 .

mysql, mysql :

# mysql -u root -p

( «mysql>» , ):

mysql> CREATE DATABASE `db123`;

user123 pass123:

mysql> CREATE USER 'user123'@'localhost' IDENTIFIED BY 'pass123';

:

mysql> GRANT ALL PRIVILEGES ON `db123`.* TO 'user123'@'localhost';

:

mysql> FLUSH PRIVILEGES;

mysql:

mysql> exit

http:// 127.0.0.1/phpmyadmin user123/ pass123. db123.

root mysql c pass123 pass456:

# mysqladmin -uroot -ppass123 password pass456

user123 c pass123 pass456:

# mysqladmin -uuser123 -ppass123 password pass456

user123:

mysql> DROP USER 'user123'@'localhost';

db123:

mysql> DROP DATABASE `db123`;



fail2ban


重新启动服务:

#service fail2ban restart

检查运行规则:

#fail2ban-client status

sshd规则的详细统计信息:

#fail2ban-client status ssh

取消禁止:

#fail2ban-client set ssh unbanip Banned_IP



返回到目录的开头



创建家庭云的历史。第2部分。创建服务器-在Debian中设置LAMP。
文字版本:1.0.1。
首次发布日期:2018年1月30日。
上次编辑时间:2020年1月15日。

更新日志
1.0.1 [15-01-2020]
.

1.0.0 [30-01-2018]
.
LAMP Debian 8.7.x.

Source: https://habr.com/ru/post/zh-CN409915/


All Articles