Sudo ufw allow openssh error could not find a profile matching openssh

I followed a guide on creating your own VPN using OpenVPN and only encountered two errors from openVPN guide. I think my VPN is created but I thought this would be useful since I am in Libraries us...

I followed a guide on creating your own VPN using OpenVPN and only encountered two errors from openVPN guide. I think my VPN is created but I thought this would be useful since I am in Libraries using open WiFi.

When I ran sudo ufw allow OpenSSH I got an error message: ERROR: Could not find a profile matching ‘OpenSSH’

Another issue I encounter was after I ran sftp tim@openvpn_server_ip:client-configs/files/client1.ovpn ~/ I received the message ssh: Could not resolve hostname openvpnserverip: Name or service not known
Couldn’t read packet: Connection reset by peer

Thanks for any help in advance! I tried running the second command again and it wouldn’t terminate so I had to ctrl + c it myself

asked Sep 11, 2016 at 17:35

timmyspan's user avatar

I have encountered the same ERROR:

ERROR: Could not find a profile matching 'OpenSSH'

So what I did was to run:

sudo apt-get install ssh

After installing, I ran:

cd ~/openvpn-ca
sudo ufw allow OpenSSH

And I verified it with:

sudo ufw status

I hope it will work for you too!

Eliah Kagan's user avatar

Eliah Kagan

115k53 gold badges311 silver badges484 bronze badges

answered Jan 14, 2017 at 7:30

Ion Ionoi's user avatar

Ion IonoiIon Ionoi

1362 silver badges4 bronze badges

$ sudo ufw allow OpenSSH
ERROR: Could not find a profile matching 'OpenSSH'

Run

sudo apt-get install ssh

and then:

$ sudo ufw allow OpenSSH
Rules updated
Rules updated (v6)
$ sudo ufw status
Status: inactive
$ sudo ufw enable
Firewall is active and enabled on system startup
$ sudo ufw status
Status: active
To                         Action      From
--                         ------      ----
8080                       ALLOW       Anywhere                  
OpenSSH                    ALLOW       Anywhere                  
8080 (v6)                  ALLOW       Anywhere (v6)             
OpenSSH (v6)               ALLOW       Anywhere (v6)     

Zanna's user avatar

Zanna

68.2k55 gold badges210 silver badges320 bronze badges

answered May 22, 2019 at 20:48

Saurabh Asthana's user avatar

В этом руководстве мы установим стек LAMP (Linux, Apache, MySQL, PHP) на Ubuntu 20.04 и настроим веб-сервер.

Установка Apache

Первый компонент вашего стека LAMP в Ubuntu 20.04 – Apache.

Начните с обновления списков пакетов и установки Apache. Нажмите y и ENTER, когда вас попросят продолжить. Команда: 

sudo apt update && sudo apt install apache2

Установка может занять несколько минут.

Настройка брандмауэра

Настоятельно рекомендуется настроить брандмауэр для обеспечения дополнительной безопасности вашего LAMP-стека в Ubuntu 20.04.

Мы начнем с добавления правила брандмауэра для SSH. Вы же не хотите получить блокировку при включении брандмауэра, когда настраиваете сервер удаленно? 

Сообщение об ошибке «ERROR: could find a profile matching openSSH» означает, что вы не настраиваете сервер удаленно. Можно игнорировать. 

Теперь мы можем добавить правила брандмауэра для Apache:

sudo ufw allow in "Apache Full"

Теперь включите брандмауэр:

Нажмите y, если вы видите сообщение «Command may disrupt existing ssh connections».

Если брандмауэр был активирован правильно, вы должны увидеть сообщение «Брандмауэр активен и включен при запуске системы»​.

Вы также можете проверить текущее состояние брандмауэра с помощью:

Ниже мы видим, что брандмауэр активен и имеет два правила для каждой службы. v6 это сокращение от IPv6.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Apache Full                ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Apache Full (v6)           ALLOW       Anywhere (v6)

Тестовый Apache

Чтобы узнать, правильно ли установлен Apache на Ubuntu 20.04, мы можем проверить текущее состояние службы:

sudo service apache2 status

Если он включен и работает, вы должны увидеть зеленое активное состояние.

Если вы получаете следующую ошибку о полном доменном имени, вы можете игнорировать ее:

apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Sat 2020-03-31 08:44:04 CEST; 15min ago
Main PID: 5727 (apache2)
Tasks: 55 (limit: 4915)
CGroup: /system.slice/apache2.service
├─5727 /usr/sbin/apache2 -k start
├─5728 /usr/sbin/apache2 -k start
└─5729 /usr/sbin/apache2 -k start

Mar 31 08:44:04 ubuntu2004 systemd[1]: Starting The Apache HTTP Server...
Mar 31 08:44:04 ubuntu2004 apachectl[5675]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1.
Mar 31 08:44:04 ubuntu2004 systemd[1]: Started The Apache HTTP Server.

Возможно, вам придется нажать кнопку q для выхода из проверки состояния сервера при использовании SSH-клиента.

Теперь, когда служба Apache запущена, вы имеете возможность просмотреть тестовую веб-страницу Apache через свой веб-браузер.

Введите IP-адрес вашего сервера в адресную строку и нажмите ENTER.

apache2

Все готово! Вы можете найти страницу приветствия Apache в папке /var/www/html. Чтобы отредактировать этот файл, необходимо ввести:

sudo nano /var/www/html/index.html

Нажмите CTRL+X, чтобы выйти из текстового редактора nano.

Если у вас есть доменное имя, вы можете указать его в IP-адресе вашего сервера без дальнейшей настройки, так как Apache должен загрузить эту страницу по умолчанию. Но если вы хотите разместить несколько доменов на своем сервере или настроить SSL-сертификаты с помощью Let’s Encrypt, вам следует настроить виртуальный хост (инструкция будет в конце этого руководства).

Комьюнити теперь в Телеграм

Подпишитесь и будьте в курсе последних IT-новостей

Подписаться

Установка MySQL

Следующий компонент вашего стека LAMP на Ubuntu 20.04 – MySQL.

Начните с обновления репозиториев и установки пакета MySQL. Нажмите y и ENTER при появлении запроса на установку.

sudo apt update && sudo apt install mysql-server

После завершения установки пакета мы можем проверить, работает ли служба MySQL:

sudo service mysql status

При запуске вы увидите зеленый активный статус:

mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2020-04-02 02:40:59 CEST; 2min 47s ago
   Main PID: 18476 (mysqld)
     Status: "Server is operational"
      Tasks: 27 (limit: 4915)
     CGroup: /system.slice/mysql.service
             └─18476 /usr/sbin/mysqld

Apr 02 02:40:59 ubuntu2004 systemd[1]: Starting MySQL Community Server...
Apr 02 02:40:59 ubuntu2004 systemd[1]: Started MySQL Community Server.

Возможно, вам придется нажать кнопку q, чтобы выйти из состояния службы, если вы используете SSH-клиент.

Настройка безопасности MySQL

Теперь вы должны запустить mysql_secure_installation, чтобы настроить безопасность для вашего сервера MySQL на Ubuntu 20.04.

sudo mysql_secure_installation

Компонент проверки пароля (необязательно)

Вас спросят, хотите ли вы настроить плагин проверки пароля. Если вы по какой-то причине не хотите применять строгую политику паролей, эта настройка не нужна.

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No:

Нажмите ENTER, если не хотите настраивать плагин проверки пароля.

Создать пароль root

Если вы еще не создали пароль root для MySQL, вы должны создать его сейчас.

Please set the password for root here.

New password:

Re-enter new password:

Создайте надежный пароль и введите его. Обратите внимание, что при вводе паролей в Linux ничего не отображается (никаких звездочек или точек тоже не будет).

Удаление анонимных пользователей

Далее вам будет предложено удалить анонимных пользователей.

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) :

Нажмите y и ENTER, чтобы удалить анонимных пользователей.

Отключить удаленный корневой вход в систему

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) :

Нажмите y и ENTER, чтобы удаленно запретить вход в систему root.

VDS Timeweb арендовать

Удалить тестовую базу данных

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

Нажмите y и ENTER, чтобы удалить тестовую базу данных.

Перезагрузить таблицы привилегий

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) :

Нажмите y и ENTER, чтобы перезагрузить таблицы привилегий.

Все готово! Основная настройка MySQL завершена. 

Тестовый сервис MySQL

Компонент MySQL вашего стека LAMP на Ubuntu 20.04 готов к работе.

Вы должны войти в систему сервера MySQL, чтобы убедиться, что она работает правильно. Поскольку вы запускаете эту команду как sudo, она автоматически войдет в MySQL, используя корневую учетную запись. Если вам будет предложено ввести пароль, введите пароль своей учетной записи Linux, а не MySQL.

Вы увидите подобную информацию:

Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 15
Server version: 8.0.19-0ubuntu5 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql>

Чтобы выйти из MySQL, введите exit и нажмите ENTER.

Вы успешно установили и настроили MySQL для вашего стека-«фонаря»​ на Ubuntu 20.04!

Установка PHP

Последним компонентом вашего стека LAMP на Ubuntu 20.04 является PHP.

Начните с обновления репозитория и установки пакета PHP. Мы также установим пакеты libapache2-mod-php и php-mysql, которые позволят PHP взаимодействовать с базой данных MySQL.

Нажмите y и ENTER при появлении запроса на установку пакета PHP.

sudo apt update && sudo apt install php libapache2-mod-php php-mysql

Тест PHP в командной строке

После завершения установки пакета мы можем протестировать PHP в командной строке.

Если PHP установлен правильно, вы должны увидеть нечто подобное:

PHP 7.4.3 (cli) (built: Mar 26 2020 20:24:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

Видите? Тогда все отлично!

Тест PHP для Apache

Теперь давайте протестируем PHP для Apache.

Создайте новый файл с именем info.php в корневом каталоге документа.

sudo nano /var/www/html/info.php

После открытия редактора nano введите следующий PHP-код:

/var/www/html / info.РНР

<?php
phpinfo();

Нужно сохранить и выйти из документа (нажмите CTRL+XY и затем ENTER).

Теперь мы можем загрузить этот файл в браузере, перейдя по http://your_ip/info.php или http://example.com/info.php.

Ниже мы видим, что страница info.php работает правильно.

PHP 7 тестовая страница на Apache и Ubuntu 20.04

После того как вы подтвердили, что PHP работает правильно, важно удалить info.php, поскольку он содержит информацию, которая может быть полезна хакерам.

sudo rm /var/www/html/info.php

Если вы планируете загружать файлы размером более 2 Мб через WordPress или аналогичный движок, нужно будет изменить файл конфигурации PHP и установить максимальный размер загрузки. 

Установка стека LAMP на Ubuntu 20.04 завершена! Если вы хотите настроить виртуальные хосты или дополнительную конфигурацию для Apache, читайте далее.

Мало кто знает, но LAMP на VDS можно установить автоматически. Такую услугу предоставляет хостинг-провайдер Timeweb. Все просто:

  1. Выберите тариф VDS.
  2. Оплатите его.
  3. При настройке сервера отметьте Ubuntu 20.04 и стек LAMP.

Через пару минут ваш сервер будет полностью готов к работе! 

Настройка виртуального узла (необязательно)

Если вы хотите разместить несколько доменов на своем ламповом сервере Ubuntu 20.04 или настроить SSL-сертификаты с помощью Let’s Encrypt, вам понадобится виртуальный хост.

Если у вас пока нет доменного имени, вы можете обмануть свою ОС (Linux/Mac/Windows), чтобы разрешить перенаправление домена на IP-адрес вашего сервера с Ubuntu 20.04. Подробнее об этом поговорим далее

Создать каталог и index.html

Создайте новый каталог /var/www/ для вашего домена (замените mydomain.com на собственный).

sudo mkdir -p /var/www/mydomain.com/public_html

Создайте index.html файл для тестирования:

sudo nano /var/www/mydomain.com/public_html/index.html

Введите следующее:

<html>
   <head>
     <title>Welcome!</title>
   </head>
   <body>
      <h1>Welcome to mydomain.com!</h2>
   </body>
</html>

Сохраняем изменения и выходим (нажмите CTRL+X, Y и затем ENTER).

Создание виртуального хоста

Чтобы создать файл конфигурации виртуального хоста, замените mydomain.com на собственный домен.

sudo nano /etc/apache2/sites-available/mydomain.com.conf

Введите замену mydomain.com:

<VirtualHost *:80>
    ServerAdmin webmaster@mydomain.com
    ServerName mydomain.com
    ServerAlias www.mydomain.com
    DocumentRoot /var/www/mydomain.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Сохраняем и выходим (CTRL+X, Y и ENTER)

Проверим наличие ошибок:

Вы можете игнорировать любую ошибку, в которой присутствует подобное сообщение: «Не удалось надежно определить полное доменное имя сервера»​.

Включите замену виртуального хоста mydomain.com (снова нужно указать собственный домен):

sudo a2ensite mydomain.com.conf

Отключите Apache по умолчанию, иначе он переопределит ваш виртуальный хост:

sudo a2dissite 000-default

Далее надо перезапустить Apache.

sudo systemctl reload apache2

Тестовый виртуальный хост

Если у вас нет зарегистрированного доменного имени, вы можете перейти к следующему шагу, чтобы обмануть ОС и перенаправить любой URL на ваш сервер.

Теперь вам нужно перейти в настройки DNS вашего регистратора домена и указать А-запись для домена на IP-адрес вашего сервера Ubuntu 20.04 с LAMP. Как только запись станет активной (обычно это занимает от 24 до 48 часов), вы сможете увидеть тестовую страницу в браузере.

Чтобы добавить больше доменов, просто повторите шаги, указанные выше.

Редактировать файл hosts (необязательно)

Если у вас нет ни одного зарегистрированного домена и вы просто хотите загрузить mydomain.com (или другой адрес) в вашем браузере в качестве теста, можно отредактировать файл hosts в операционной системе, чтобы перенаправить этот домен на ваш сервер Ubuntu 20.04 с LAMP.

Чтобы отредактировать файл hosts в Linux или Mac, запустите sudo nano /etc/hosts в терминале. Как только файлы hosts будут открыты, введите IP-адрес вашего сервера Ubuntu 20.04, а затем доменное имя, которое вы хотите разрешить для этого IP.

Замените x.x.x.x на IP-адрес вашего веб-сервера.

Узнать IP-адрес вашего сервера можно с помощью команды:

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's//.*$//'

После сохранения файла hosts в браузере откроется доступ к вашему серверу по адресу mydomain.com (или иному URL).

Настройка Apache (необязательно)

Теперь, когда у вас есть Apache, обслуживающий веб-страницы на вашем Ubuntu 20.04, могут потребоваться дополнительные настройки конфигурации. 

Отключить список каталогов и включить AllowOverride

Apache по умолчанию будет перечислять содержимое ваших каталогов без индексов (index.html, index.РНР). Это угроза безопасности, поскольку она позволяет хакерам просматривать ваш веб-сервер в поисках сценариев.

Вы также обнаружите, что .htaccess по умолчанию в Apache будет игнорироваться. Если понадобится .htaccess, вы можете включить его, изменив файл конфигурации Apache.

Откройте файл конфигурации:

sudo nano /etc/apache2/apache2.conf

Нажмите CTRL + W и найдите <Directory /var/www/>.

Блок должен выглядеть примерно так:

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Удалите Indexes, чтобы остановить список каталогов Apache, и измените AllowOverride None на AllowOverride All, чтобы включить .htaccess. Теперь это должно выглядеть так:

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

Сохраняем и выходим (CTRL+X, Y, ENTER).

Далее перезапускаем Apache.

sudo systemctl restart apache2

Включить mod_rewrite

Если вы хотите настроить некоторые правила .htaccess, вам, скорее всего, придется включить mod_rewrite.

Далее нужно перезапустить Apache.

sudo systemctl restart apache2

На этом полная установка и настройка стека LAMP завершена.

В скором времени ждите материал по установке phpMyAdmin. Всех с наступающим!

FTP (File Transfer Protocol) is a network transmission standard that is used to transfer data from client to server and vice versa. It uses TCP (Transmission Control Protocol) which ensures that the data is actually arriving at its destination. TCP is what makes FTP reliable.

FTP is very helpful for businesses as it allows them to perform important functions such as the transfer of large and bulky files on a routine basis. These activities cannot be done over email or through other basic file-sharing programs. It is also used to upload and manage website files to the server.

The FTP is still a very popular way for transferring files but due to the security regions, many peoples prefer SFTP. Use this article to create SFTP only users without shell access.

In this write-up, we will be focusing on how to set up an FTP server with VSFTPD on Ubuntu 20.04.

Installing vsftpd on Ubuntu

VSFTPD is the default FTP server for most Linux distributions. We will start off by installing it on our system. Use the command given below to install VSFTPD.:

sudo apt update 
sudo apt install vsftpd 

installing vsftpd ubuntu 20.04

Now verify the successful installation of VSFTPD by executing the following command:

sudo systemctl status vsftpd 

check vsftpd service status

How to Configure vsftpd on Ubuntu

Now we will configure the newly installed vsftpd. The configuration rules of vsftpd are stored in /etc/vsftpd.conf. Open the configuration file in any text editor. Here we will use nano to open the configuration file:

sudo nano /etc/vsftpd.conf 

Update the following configuration settings:

  1. FTP access

    To only allow local users to access FTP server, make sure your configuration file matches the one given below:

    anonymous_enable=NO
    local_enable=YES
    
  2. FTP Passive connections

    VSFTPD works on the active mode by default. To allow VSFTPD to work on passive mode copy the below-given lines into your configuration file:

    pasv_min_port=40000
    pasv_max_port=45000
    

    You can give any range of ports to the configuration file. The system will connect a random port from the range you’ve chosen.

    The connection is established by the server in active mode whereas in the passive mode the connection is established by the client’s side.

  3. Enable Uploads

    To allow the FTP user to modify the filesystem, search for the following line in the configuration file and uncomment it by removing the ‘#’ (hash) symbol from the beginning of the line:

    write_enable=YES
    
  4. Restrict FTP access

    To allow only certain users to access VSFTPD, copy the below given lines at the end of the configuration file:

    userlist_enable=YES
    userlist_file=/etc/vsftpd.user_list
    userlist_deny=NO
    

These configuration settings are very basic. You can set the configuration rules according to your own needs.

Press Ctrl + X and then hit Enter to save and exit the text file. Now run the following command to restart the VSFTPD service:

sudo systemctl restart vsftpd 

How to Configure the Firewall For FTP on Ubuntu

Now we will configure the firewall to allow FTP traffic. We will open ports 20 and 21, the default/recommended ports for FTP, and ports 40000:45000 for passive FTP. But first, let’s allow SSH by using the command given below otherwise we may get locked out of our server:

sudo ufw allow OpenSSH 

If you get an error “ERROR: Could not find a profile matching ‘OpenSSH’” then you first need to install OpenSSH before running the above command. Use the following command to install OpenSSH on your system:

sudo apt install ssh

Once everything is set up, open the default ports 20 and 21 for FTP:

sudo ufw allow 20:21/tcp

Open the ports 40000:45000 for passive FTP as well:

sudo ufw allow 40000:45000/tcp

Now run the firewall by using the following command. Ignore, if it gives a warning about the disruption of SSH connection. Press y and hit Enter:

sudo ufw enable

The firewall is already active and enabled on my system.

You may run the following command to verify the firewall rules that were just added:

sudo ufw status

UFW Allow FTP

How to Create a user for FTP on Ubuntu

Use the “adduser” command to create a new user. We will use this user to login into FTP.

sudo adduser test_user 

The terminal will ask you to set the password of the new user. It will also ask for a few other details. Just press Enter if you do not want to provide these details.

You can restrict this user’s SSH access if you only want them to log in through FTP. Use the nano editor to open the SSH configuration files:

sudo nano /etc/ssh/sshd_config 

Now copy the following line and paste it into the configuration file to restrict the users access:

DenyUsers test_user

vsftpd deny specific user

(Do remember to replace “test_user” with the actual name of your user)

Save and exit the configuration file and reboot the SSH service using the below-given command to let the changes take effect:

sudo systemctl restart ssh

Now add the user to the list of FTP users by running the following command:

echo "test_user" | sudo tee -a /etc/vsftpd.user_list

Next make a new directory for the user to use for uploading the files:

sudo mkdir -p /home/test_user/ftp/test_dir 

Now give permissions to the new user according to your requirements. Here we are giving the following permission to the test_user:

sudo chmod 550 /home/test_user/ftp 
sudo chmod 750 /home/test_user/ftp/test_dir 
sudo chown -R test_user: /home/test_user/ftp 

Here 550 gives the “read” and “execute” permission in the following way:

chmod 550 permissions

While 750 gives the “write” permission as well to the owner in the following way:

chmod 750 permissions

That’s it. Your FTP server has been fully set up.

Conclusion

FTP is used to transfer files between computers on a network. It is a protocol that dictates (instructs) how data is transferred between computers on the network. People still use FTB but it is not as secure as SCP or SFTP.

In this write-up, we focused on how to install, set up, and configure VSFTPD. Moreover, we comprehended how to configure firewalls and create a new user for FTP.

You may also like another tutorial, how to download and upload files using ftp command line.

The post How To Setup FTP Server with VSFTPD on Ubuntu 20.04 appeared first on TecAdmin.

In this guide we will install a LEMP Stack (Nginx, MySQL, PHP) and configure a web server on Ubuntu Server 18.04 / 19.10.

Prerequisites

You should use a non-root user account with sudo privileges. Please see the Initial server setup for Ubuntu 18.04 / 19.10 guide for more details.

1. Install Nginx

Let’s begin by updating the package lists and installing Nginx on Ubuntu 18.04 / 19.10. Below we have two commands separated by &&. The first command will update the package lists to ensure you get the latest version and dependencies for Nginx. The second command will then download and install Nginx.

sudo apt update && sudo apt install nginx

Once installed, check to see if the Nginx service is running.

sudo service nginx status

If Nginx is running correctly, you should see a green Active state below.

 nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2018-05-09 20:42:29 UTC; 2min 39s ago
     Docs: man:nginx(8)
  Process: 27688 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 27681 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 27693 (nginx)
    Tasks: 2 (limit: 1153)
   CGroup: /system.slice/nginx.service
           ├─27693 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           └─27695 nginx: worker process

You may need to press q to exit the service status.

2. Configure Firewall

If you haven’t already done so, it is recommended that you enable the ufw firewall and add a rule for Nginx. Before enabling ufw firewall, make sure you add a rule for SSH, otherwise you may get locked out of your server if you’re connected remotely.

sudo ufw allow OpenSSH

If you get an error “ERROR: could find a profile matching openSSH”, this probably means you are not configuring the server remotely and can ignore it.

Now add a rule for Nginx.

sudo ufw allow 'Nginx HTTP'
Rule added
Rule added (v6)

Enable ufw firewall.

sudo ufw enable

Press y when asked to proceed.

Now check the firewall status.

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

That’s it! Your Nginx web server on Ubuntu 18.04 / 19.10 should now be ready.

3. Test Nginx

Go to your web browser and visit your domain or IP. If you don’t have a domain name yet and don’t know your IP, you can find out by running:

ip a | grep -Eo 'inet (addr:)?([0-9]*.){3}[0-9]*' | grep -Eo '([0-9]*.){3}[0-9]*' | grep -v '127.0.0.1'

Welcome to Nginx test page

You can find this Nginx default welcome page in the document root directory /var/www/html. To edit this file in nano text editor:

sudo nano /var/www/html/index.nginx-debian.html

To save and close nano, press CTRL + X and then press y and ENTER to save changes.

Your Nginx web server is ready to go! You can now add your own html files and images the the /var/www/html directory as you please.

However, you should acquaint yourself with and set up at least one Server Block for Nginx as most of our Ubuntu 18.04 / 19.10 guides are written with Server Blocks in mind. Please see article Installing Nginx on Ubuntu 18.04 / 19.10 with Multiple Domains. Server Blocks allow you to host multiple web sites/domains on one server. Even if you only ever intend on hosting one website or one domain, it’s still a good idea to configure at least one Server Block.

If you don’t want to set up Server Blocks, continue to the next step to set up MySQL.

4. Install MySQL

Let’s begin by updating the package lists and installing MySQL on Ubuntu 18.04 / 19.10. Below we have two commands separated by &&. The first command will update the package lists to ensure you get the latest version and dependencies for MySQL. The second command will then download and install MySQL.

sudo apt update && sudo apt install mysql-server

Press y and ENTER when prompted to install the MySQL package.

Once the package installer has finished, we can check to see if the MySQL service is running.

sudo service mysql status

If running, you will see a green Active status like below.

 mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since since Wed 2018-05-09 21:10:24 UTC; 16s ago
 Main PID: 30545 (mysqld)
    Tasks: 27 (limit: 1153)
   CGroup: /system.slice/mysql.service
           └─30545 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid

You may need to press q to exit the service status.

5. Configure MySQL Security

You should now run mysql_secure_installation to configure security for your MySQL server.

sudo mysql_secure_installation

If you created a root password in Step 1, you may be prompted to enter it here. Otherwise you will be asked to create one. (Generate a password here)

You will be asked if you want to set up the Validate Password Plugin. It’s not really necessary unless you want to enforce strict password policies for some reason.

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

Press n and ENTER here if you don’t want to set up the validate password plugin.

Please set the password for root here.

New password:

Re-enter new password:

If you didn’t create a root password in Step 1, you must now create one here.

Generate a strong password and enter it. Note that when you enter passwords in Linux, nothing will show as you are typing (no stars or dots).

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) :

Press y and ENTER to remove anonymous users.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) :

Press y and ENTER to disallow root login remotely. This will prevent bots and hackers from trying to guess the root password.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

Press y and ENTER to remove the test database.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) :

Press y and ENTER to reload the privilege tables.

All done!

As a test, you can log into the MySQL server and run the version command.

sudo mysqladmin -p -u root version

Enter the MySQL root password you created earlier and you should see the following:

mysqladmin  Ver 8.42 Distrib 5.7.22, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Server version          5.7.22-0ubuntu18.04.1
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/run/mysqld/mysqld.sock
Uptime:                 4 min 28 sec

Threads: 1  Questions: 15  Slow queries: 0  Opens: 113  Flush tables: 1  Open tables: 106  Queries per second avg: 0.055

You have now successfully installed and configured MySQL for Ubuntu 18.04 / 19.10! Continue to the next step to install PHP.

6. Install PHP

Unlike Apache, Nginx does not contain native PHP processing. For that we have to install PHP-FPM (FastCGI Process Manager). FPM is an alternative PHP FastCGI implementation with some additional features useful for heavy-loaded sites.

Let’s begin by updating the package lists and installing PHP-FPM on Ubuntu 18.04 / 19.10. We will also install php-mysql to allow PHP to communicate with the MySQL database. Below we have two commands separated by &&. The first command will update the package lists to ensure you get the latest version and dependencies for PHP-FPM and php-mysql. The second command will then download and install PHP-FPM and php-mysql. Press y and ENTER when asked to continue.

sudo apt update && sudo apt install php-fpm php-mysql

Once installed, check the PHP version.

php --version

If PHP was installed correctly, you should see something similar to below.

PHP 7.2.3-1ubuntu1 (cli) (built: Mar 14 2018 22:03:58) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.3-1ubuntu1, Copyright (c) 1999-2018, by Zend Technologies

Above we are using PHP version 7.2, though this may be a later version for you depending on which package was in the repository.

Depending on what version of Nginx and PHP you install, you may need to manually configure the location of the PHP socket that Nginx will connect to.

List the contents for the directory /var/run/php/

ls /var/run/php/

You should see a few entries here.

php7.2-fpm.pid php7.2-fpm.sock

Above we can see the socket is called php7.2-fpm.sock. Remember this as you may need it for the next step.

7. Configure Nginx for PHP

We now need to make some changes to our Nginx server block.

The location of the server block may vary depending on your setup. By default, it is located in /etc/nginx/sites-available/default.

However, if you have previously set up custom server blocks for multiple domains in one of our previous guides, you will need to add the PHP directives to each server block separately. A typical custom server block file location would be /etc/nginx/sites-available/mytest1.com.

For the moment, we will assume you are using the default. Edit the file in nano.

sudo nano /etc/nginx/sites-available/default

Press CTRL + W and search for index.html.

Now add index.php before index.html

/etc/nginx/sites-available/default

        index index.php index.html index.htm index.nginx-debian.html;

Press CTRL + W and search for the line server_name.

Enter your server’s IP here or domain name if you have one.

/etc/nginx/sites-available/default

        server_name YOUR_DOMAIN_OR_IP_HERE;

Press CTRL + W and search for the line location ~ .php.

You will need to uncomment some lines here by removing the # signs before the lines marked in red below.

Also ensure value for fastcgi_pass socket path is correct. For example, if you installed PHP version 7.2, the socket should be: /var/run/php/php7.2-fpm.sock

If you are unsure which socket to use here, exit out of nano and run ls /var/run/php/

/etc/nginx/sites-available/default

...
        location ~ .php$ {
                include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }
...

Once you’ve made the necessary changes, save and close (Press CTRL + X, then press y and ENTER to confirm save)

Now check the config file to make sure there are no syntax errors. Any errors could crash the web server on restart.

sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

If no errors, you can reload the Nginx config.

sudo service nginx reload

8. Test PHP

To see if PHP is working correctly on Ubuntu 18.04 / 19.10, let’s a create a new PHP file called info.php in the document root directory. By default, this is located in /var/www/html/, or if you set up multiple domains in a previous guide, it may be located in somewhere like /var/www/mytest1.com/public_html

Once you have the correct document root directory, use the nano text editor to create a new file info.php

sudo nano /var/www/html/info.php

Type or paste the following code into the new file. (if you’re using PuTTY for Windows, right-click to paste)

/var/www/html/info.php

<?php
phpinfo();

Save and close (Press CTRL + X, then press y and ENTER to confirm save)

You can now view this page in your web browser by visiting your server’s domain name or public IP address followed by /info.php: http://your_domain_or_IP/info.php

phpinfo() outputs a large amount of information about the current state of PHP. This includes information about PHP compilation options and extensions, the PHP version and server information.

You have now successfully installed PHP-FPM for Nginx on Ubuntu 18.04 / 19.10.

Make sure to delete info.php as it contains information about the web server that could be useful to attackers.

sudo rm /var/www/html/info.php

What Next?

Now that your Ubuntu 18.04 / 19.10 LEMP web server is up and running, you may want to install phpMyAdmin so you can manage your MySQL server.

  • Installing phpMyAdmin for Nginx on Ubuntu 18.04 / 19.10

To set up a free SSL cert for your domain:

  • Configuring Let’s Encrypt SSL Cert for Nginx on Ubuntu 18.04 / 19.10

You may want to install and configure an FTP server

  • Installing an FTP server with vsftpd (Ubuntu 18.04 / 19.10)

We also have several other articles relating to the day-to-day management of your Ubuntu 18.04 / 19.10 LEMP server

  • What to do when you see *** System Restart Required ***
  • How to update Ubuntu
  • Automatically Back Up Your Web Server Doc Root with Tar and Cron
  • Better system monitoring with htop
  • Where are the Nginx Error and Access Log Files Located?

Let me know if this helped. Follow me on Twitter, Facebook and YouTube, or 🍊 buy me a smoothie.

p.s. I increased my AdSense revenue by 200% using AI 🤖. Read my Ezoic review to find out how.

Оглавление

  • 1 Что такое LAMP-стек?
  • 2 Установка LAMP в Ubuntu
    • 2.1 Установка пакетов с помощью tasksel
    • 2.2 Как установить Lamp в Ubuntu вручную
    • 2.3 Настройка брандмауэра
    • 2.4 Установка веб-сервера Apache
      • 2.4.1 Настройка брандмауэра
      • 2.4.2 Тестовый Apache
    • 2.5 Установка PHP и дополнительных расширений
      • 2.5.1 Тест PHP в командной строке
      • 2.5.2 Тест PHP для Apache
    • 2.6 Установка MySQL
      • 2.6.1 Настройка безопасности MySQL
      • 2.6.2 Компонент проверки пароля (необязательно)
      • 2.6.3 Создать пароль root
      • 2.6.4 Удаление анонимных пользователей
      • 2.6.5 Отключить удаленный корневой вход в систему
      • 2.6.6 Удалить тестовую базу данных
      • 2.6.7 Тестовый сервис MySQL
    • 2.7 Удаление LAMP в Ubuntu
  • 3 Проверка установки LAMP-стека
  • 4 Что такое LЕMP
  • 5 Как установить LEMP в Ubuntu 20.04
    • 5.1 Технические требования
      • 5.1.1 Настройка Firewall
      • 5.1.2 Установка Nginx
      • 5.1.3 Настройка Nginx
      • 5.1.4 Установка MySQL(MariaDB) на Ubuntu
      • 5.1.5 Установка PHP
      • 5.1.6 Установка MariaDB
      • 5.1.7 Создание блока сервера Nginx и тест PHP
      • 5.1.8 Создание блоков для нескольких доменов
      • 5.1.9 Установка PHP на Ubuntu
      • 5.1.10 Тест PHP
      • 5.1.11 Создание тестовой веб-страницы
  • 6 Установка PHP и дополнительных расширений
    • 6.1 Настройка базового конфигурационного файла для сайта
  • 7 Установка tasksel
    • 7.1 Использование tasksel
    • 7.2 Создание desc-файла для задачи tasksel
  • 8 Пример задачи tasksel
  • 9 Заключение

LAMP — это акроним, который традиционно означает «Linux, Apache, MySQL и PHP», что является популярным набором программного обеспечения многих веб-приложений или веб-сайтов. Стек LAMP является достаточно мощным, и при этом он сравнительно прост и удобен в использовании.

В последние годы набирают популярность разные вариации LAMP-стека, например, вместо языка программирования PHP используют Python или Perl, а вместо СУБД MySQL используют PostgreSQL.

На виртуальных серверах ServerSpace операционная система семейства Linux, а именно Ubuntu 18.04, уже установлена, поэтому в инструкции будет описана установка остальных компонентов.

Установка LAMP в Ubuntu

Установка пакетов с помощью tasksel

Tasksel – это утилита, которая позволяет устанавливать пакеты различных программ буквально в одну команду. Она разработана для Debian, но может использоваться и в Ubuntu. Для её установки выполните в терминале:

sudo apt install tasksel

Затем, чтобы установить Lamp на Ubuntu, достаточно выполнить такую команду:

sudo tasksel install lamp-server

Установка займёт кое-какое время, потому что утилите придётся скачать и настроить все пакеты, но потом вы получите полностью работающий стек LAMP.

Обратите внимание, что десктопной версии Ubuntu tasksel использовать не желательно. LAMP установится нормально, но при попытке его удаления командой tasksel remove из-за бага утилита может снести вам всю систему. Пользователи сообщают о проблемах с этой утилитой в версии Ubuntu для рабочего стола.

Как установить Lamp в Ubuntu вручную

Если вы не хотите использовать tasksel, вы можете установить все пакеты по отдельности и настроить их для совместной работы. Сначала установим все необходимые пакеты. Установка последней версии Apache2 из репозиториев:

sudo apt install apache2

Установка базы данных MariaDB из репозиториев:

sudo apt install mariadb-server

Или вы можете установить MySQL:

sudo apt install mysql-server

Установка интерпретатора языка программирования PHP 7.2 и расширений, необходимых для его работы с Apache и MySQL:

sudo apt install php7.2 libapache2-mod-php7.2 php-mysql

Установка дополнительных расширений для PHP, которые вам понадобятся в будущем для хостинга большинства популярных проектов:

sudo apt install php-curl php-json php-cgi php-gd php-zip php-mbstring php-xml php-xmlrpc

Настройка брандмауэра

По умолчанию брандмауэр закрывает все неразрешённые входящие подключения. Поэтому, чтобы к вашему веб-серверу можно было получить доступ извне, необходимо добавить его порт в исключения:

sudo ufw allow in 80/tcp

Установка веб-сервера Apache

Apache — самый популярный в мире веб-сервер с открытым исходным кодом. Он позволяет размещать на сервере сайты и другие веб-приложения.

Установка выполняется в один шаг:

  • Ubuntu и Debian:

    apt update && apt -y install apache2

  • CentOS:

    yum -y install httpd

После установки нужно проверить, корректно ли запустился веб-сервер:

  • Ubuntu и Debian:

    systemctl status apache2

  • CentOS:

    systemctl status httpd

На Ubuntu и Debian службы после установки запускаются и добавляются в автозапуск автоматически, на Centos это нужно сделать вручную. Запустить веб-сервер и настроить его автоматический старт после загрузки системы можно следующим образом:

  • Ubuntu и Debian:

    systemctl start apache2 && systemctl enable apache2

  • CentOS:

    systemctl start httpd && systemctl enable httpd

На CentOS после установки нужно отредактировать настройки встроенного фаервола:

firewall-cmd –permanent –zone=public –add-service=http –add-service=https firewall-cmd –reload

Проверить, что настройки успешно применились, можно с помощью команды: 

firewall-cmd –list-all

В блоке Services в списке должны отображаться http и https.

Теперь можно открыть IP-адрес вашего сервера в браузере — откроется стартовая страница веб-сервера (при работе с CentOS 7; на CentOS 8 Apache по умолчанию не имеет приветственной страницы):

На Debian и Ubuntu можно сразу ввести IP-адрес вашего сервера в адресную строку браузера — откроется приветственная страница веб-сервера, размещённая в директории /var/www/html

Расширенные настройки веб-сервера доступны в конфигурационном файле:

  • Ubuntu и Debian:

    /etc/apache2/apache2.conf

  • CentOS:

    /etc/httpd/conf/httpd.conf

Настройка брандмауэра

Настоятельно рекомендуется настроить брандмауэр для обеспечения дополнительной безопасности вашего LAMP-стека в Ubuntu 20.04.

Мы начнем с добавления правила брандмауэра для SSH. Вы же не хотите получить блокировку при включении брандмауэра, когда настраиваете сервер удаленно? 

sudo ufw allow OpenSSH

Сообщение об ошибке «ERROR: could find a profile matching openSSH» означает, что вы не настраиваете сервер удаленно. Можно игнорировать. 

Теперь мы можем добавить правила брандмауэра для Apache:

sudo ufw allow in”Apache Full”

Теперь включите брандмауэр:

sudo ufw enable

Нажмите y, если вы видите сообщение «Command may disrupt existing ssh connections».

Если брандмауэр был активирован правильно, вы должны увидеть сообщение «Брандмауэр активен и включен при запуске системы»​.

Вы также можете проверить текущее состояние брандмауэра с помощью:

sudo ufw status

Ниже мы видим, что брандмауэр активен и имеет два правила для каждой службы. v6 это сокращение от IPv6.

Status: active To Action From — —— —- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)

Тестовый Apache

Чтобы узнать, правильно ли установлен Apache на Ubuntu 20.04, мы можем проверить текущее состояние службы:

sudoservice apache2 status

Если он включен и работает, вы должны увидеть зеленое активное состояние.

Если вы получаете следующую ошибку о полном доменном имени, вы можете игнорировать ее:

apache2.service – The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Sat 2020-03-31 08:44:04 CEST; 15min ago Main PID: 5727 (apache2) Tasks: 55 (limit: 4915) CGroup: /system.slice/apache2.service ├─5727 /usr/sbin/apache2 -k start ├─5728 /usr/sbin/apache2 -k start └─5729 /usr/sbin/apache2 -k start Mar 31 08:44:04 ubuntu2004 systemd[1]: Starting The Apache HTTP Server… Mar 31 08:44:04 ubuntu2004 apachectl[5675]: AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1. Mar 31 08:44:04 ubuntu2004 systemd[1]: Started The Apache HTTP Server.

Возможно, вам придется нажать кнопку q для выхода из проверки состояния сервера при использовании SSH-клиента.

Теперь, когда служба Apache запущена, вы имеете возможность просмотреть тестовую веб-страницу Apache через свой веб-браузер.

Введите IP-адрес вашего сервера в адресную строку и нажмите ENTER.

apache2

Все готово! Вы можете найти страницу приветствия Apache в папке /var/www/html. Чтобы отредактировать этот файл, необходимо ввести:

sudonano /var/www/html/index.html

Нажмите CTRL+X, чтобы выйти из текстового редактора nano.

Если у вас есть доменное имя, вы можете указать его в IP-адресе вашего сервера без дальнейшей настройки, так как Apache должен загрузить эту страницу по умолчанию. Но если вы хотите разместить несколько доменов на своем сервере или настроить SSL-сертификаты с помощью Let’s Encrypt, вам следует настроить виртуальный хост (инструкция будет в конце этого руководства).

Установка PHP и дополнительных расширений

Проверить доступную для установки версию PHP можно командой:

  • Ubuntu и Debian:

    apt show php

  • CentOS:

    yum info php

Знать её нужно для корректной установки нужных компонентов на следующем шаге (для Ubuntu и Debian). В примере версия PHP — 7.4. Вам при установке нужно заменить её в команде на ту, которая доступна для вашей операционной системы.

Если версия по умолчанию вам подходит, после этого можно запустить установку:

  • Ubuntu и Debian:

    apt -y install php7.4 libapache2-mod-php7.4 php-mysql php7.4-xml php7.4-gd php7.4-mbstring php7.4-zipБудьте внимательны — в названии пакетов вам нужно указать ту версию PHP, которую отобразила система при проверке на предыдущем шаге.

  • CentOS:

    yum -y install php php-mysqlnd php-common php-cli php-json php-opcache php-mbstring php-zip

Проверим установленную версию:

php -v

Установленная версия PHP автоматически настроится в качестве модуля Apache. После этого потребуется перезагрузить веб-сервер.

  • Ubuntu и Debian:

    systemctl restart apache2

  • CentOS:

    systemctl restart httpd

Дополнительные расширения PHP, доступные для установки, можно посмотреть командой:

  • Ubuntu и Debian:

    Для конкретной версии:

    apt-cache search php | egrep ‘7.4’ | grep module

    Версии по умолчанию:

    apt-cache search php | egrep ‘module’ | grep default

  • CentOS:

    yum search php | grep module

Установить выбранный модуль можно командой:

  • Ubuntu и Debian:

    apt -y install php7.4-soap

  • CentOS:

    yum -y install php-soap

Тест PHP в командной строке

После завершения установки пакета мы можем протестировать PHP в командной строке.

php -version

Если PHP установлен правильно, вы должны увидеть нечто подобное:

PHP 7.4.3 (cli) (built: Mar 26 2020 20:24:23) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

Тест PHP для Apache

Теперь давайте протестируем PHP для Apache.

Создайте новый файл с именем info.php в корневом каталоге документа.

sudonano /var/www/html/info.php

После открытия редактора nano введите следующий PHP-код:

/var/www/html / info.РНР CTRL+X, Y и затем ENTER).

Теперь мы можем загрузить этот файл в браузере, перейдя по http://your_ip/info.php или http://example.com/info.php.

Ниже мы видим, что страница info.php работает правильно.

PHP 7 тестовая страница на Apache и Ubuntu 20.04

После того как вы подтвердили, что PHP работает правильно, важно удалить info.php, поскольку он содержит информацию, которая может быть полезна хакерам.

sudorm /var/www/html/info.php

Если вы планируете загружать файлы размером более 2 Мб через WordPress или аналогичный движок, нужно будет изменить файл конфигурации PHP и установить максимальный размер загрузки. 

Установка стека LAMP на Ubuntu 20.04 завершена! Если вы хотите настроить виртуальные хосты или дополнительную конфигурацию для Apache, читайте далее.

Мало кто знает, но LAMP на VDS можно установить автоматически. Такую услугу предоставляет хостинг-провайдер Timeweb. Все просто:

  1. Выберите  тариф VDS .
  2. Оплатите его.
  3. При настройке сервера отметьте Ubuntu 20.04 и стек LAMP.

Установка MySQL

MySQL — самый популярный сервер баз данных. Установка состоит из двух этапов:

Установка самого сервера БД:

  • Ubuntu и Debian:

    apt -y install mysql-server

  • CentOS:

    yum -y install mysql-server

После установки нужно проверить, запустился ли MySQL:

  • Ubuntu и Debian:

    systemctl status mysql

  • CentOS:

    systemctl status mysqld

При необходимости — запустить его и добавить в автозапуск вручную:

  • Ubuntu и Debian:

    systemctl start mysql && systemctl enable mysql

  • CentOS:

    systemctl start mysqld && systemctl enable mysqld

Проверить версию установленного сервера баз данных можно командой:

mysql –version

По умолчанию после установки сервер MySQL имеет несколько небезопасных опций. Чтобы их отключить, нужно запустить автонастройку безопасности:

mysql_secure_installation

В процессе система предложит настроить компонент для проверки надёжности паролей, запросит новый пароль для пользователя root сервера MySQL. После этого будет предложено подтвердить или отклонить дополнительные настройки безопасности — для согласия введите y (yes), для отказа — любую другую клавишу и нажмите Enter. Рекомендуется подтвердить все параметры, так как они воплощают базовые рекомендации по безопасности сервера БД.

Список настраиваемых параметров по порядку: 

  • Активация модуля проверки надёжности паролей
  • Выбор уровня надёжности (0 — слабый / 1 — средний/ 2 — сильный)
  • Ввод и подтверждение нового пароля для root-пользователя MySQL
  • Удаление анонимных пользователей
  • Отключение удалённого подключения к БД для root-пользователя MySQL 
  • Удаление открытой тестовой базы данных
  • Перезагрузка таблиц привилегий для применения новых настроек

Настройка безопасности MySQL

Теперь вы должны запустить mysql_secure_installation, чтобы настроить безопасность для вашего сервера MySQL на Ubuntu 20.04.

sudo mysql_secure_installation

Компонент проверки пароля (необязательно)

Вас спросят, хотите ли вы настроить плагин проверки пароля. Если вы по какой-то причине не хотите применять строгую политику паролей, эта настройка не нужна.

Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No:

Нажмите ENTER, если не хотите настраивать плагин проверки пароля.

Создать пароль root

Если вы еще не создали пароль root для MySQL, вы должны создать его сейчас.

Please set the password for root here. New password: Re-enter new password:

Создайте надежный пароль  и введите его. Обратите внимание, что при вводе паролей в Linux ничего не отображается (никаких звездочек или точек тоже не будет).

Удаление анонимных пользователей

Далее вам будет предложено удалить анонимных пользователей.

By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) :

Нажмите y и ENTER, чтобы удалить анонимных пользователей.

Отключить удаленный корневой вход в систему

Normally, root should only be allowed to connect from ‘localhost’. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) :

Нажмите y и ENTER, чтобы удаленно запретить вход в систему root.

Удалить тестовую базу данных

By default, MySQL comes with a database named ‘test’ that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

Нажмите y и ENTER, чтобы удалить тестовую базу данных.

Тестовый сервис MySQL

Компонент MySQL вашего стека LAMP на Ubuntu 20.04 готов к работе.

Вы должны войти в систему сервера MySQL, чтобы убедиться, что она работает правильно. Поскольку вы запускаете эту команду как sudo, она автоматически войдет в MySQL, используя корневую учетную запись. Если вам будет предложено ввести пароль, введите пароль своей учетной записи Linux, а не MySQL.

sudo mysql

Вы увидите подобную информацию:

Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 15 Server version: 8.0.19-0ubuntu5 (Ubuntu) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the current input statement. mysql>

Чтобы выйти из MySQL, введите exit и нажмите ENTER.

exit

Вы успешно установили и настроили MySQL для вашего стека-«фонаря»​ на Ubuntu 20.04!

Удаление LAMP в Ubuntu

Чтобы полностью удалить LAMP из системы, достаточно удалить все пакеты, которые вы установили ранее:

sudo apt purge  apache2 mariadb-server php7.2 libapache2-mod-php7.2 php-mysql php-curl php-json php-cgi php-gd php-zip php-mbstring php-xml php-xmlrpc

Команда purge позволяет удалить не только пакеты, но и их конфигурационные файлы. Если вы хотите оставить конфигурационные файлы, используйте команду remove.

Если установка LAMP на Ubuntu выполнялась с помощью tasksel, то для удаления необходимо выполнить:

sudo tasksel uninstall lamp-server

Проверка установки LAMP-стека

С помощью текстового редактора создайте проверочный файл php:

vi /var/www/html/info.php

Добавьте в него следующее содержимое и сохраните изменения:

Выполните перезагрузку сервера Apache:

service apache2 restart

Перейдите в браузере по следующему адресу:

http://IP-адрес-сервера/info.php

Если все установлено верно, то вы увидите информационную страницу.

Информационная страница

Что такое LЕMP

LEMP – это аналог популярного стека LAMP, используемого для разработки и развертывания веб-приложений. Традиционно LAMP состоит из Linux, Apache, MySQL и PHP. Благодаря своей модульной природе компоненты легко могут быть заменены. В LEMP Apache заменяется легким, но мощным Nginx, который может обеспечить более предсказуемую производительность при высоких нагрузках.

Как установить LEMP в Ubuntu 20.04

LEMP это программный стек — набор инструментов, связанных вместе, для реализации задачи по построению WEB сервера. Этот акроним обозначает операционную систему Linux и Nginx, MySQL/MariaDB и PHP. LEMP — это аналог популярного стека LAMP, используемого для разработки и развертывания веб-приложений. Традиционно LAMP состоит из Linux, Apache, MySQL и PHP. 

В данной статье мы установим Nginx, MariaDB и PHP7.4 (я напишу пару слов и об установке других версий PHP). Также я покажу, как создавать сайты с доменами в Nginx и работать с базой данных на примере установки wordpress.

Технические требования

Перед тем как продолжить работу с данным руководством, у нас должен быть создан сервер с установленным дистрибутивом Ubuntu 14.04, а также настроено подключение к серверу по SSH для пользователя с административными (sudo) привилегиями.

Как это сделать – описано в руководстве “Vscale: создаём первый сервер”.

Настройка Firewall

Так как по умолчанию порты 80 и 443 закрыты настройками файрвола, следует выполнить несколько команд для получения доступа к веб-серверу из интернета.

Открываем порт 80:

sudo firewall-cmd –permanent –zone=public –add-service=http

Открываем порт 443:

sudo firewall-cmd –permanent –zone=public –add-service=https

Перезагружаем службу:

sudo systemctl restart firewalld

Проверяем внесенные изменения:

sudo firewall-cmd –zone=public –list-services

В итоге должно отобразиться следующее:

dhcpv6-client http https ssh

Установка Nginx

Чтобы поставить Nginx для LEMP вам необходимо подключиться к VPS с ОС Ubuntu и исполнить следующие команды:

sudo apt-get update
sudo apt-get install nginx

Чтобы проверить установку сервера nginx, перейдите в любом браузере по следующей ссылке, указав IP-адрес вашего VDS:

http:///
Например: http://5.101.77.24/

Примечание: если у вас не получается подключиться, проверьте настройки FireWall, веб-сервер Nginx по умолчанию работает на порту 80, чтобы добавить правило выполните следующую пару команд:

iptables -A INPUT -p tcp –dport 80 -j ACCEPT
iptables-save

Настройка Nginx

Откроем файл конфигураций Nginx:

sudo nano /etc/nginx/nginx.conf

Вносим следующие изменения в файл:

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name 46.243.182.96; #Пишем имя сервера или IP адрес
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm; #Добавляем index.php
}
error_page 404 /404.html;
location = /40x.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ .php$ { #Добавляем возможность обрабатывать запросы PHP
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

Настало время проверить наш веб-сервер. Создадим страницу по следующему пути:

nano /var/www/html/info.php

Вставим следующую строку и сохраним файл:

Перезапустим Nginx командой:

sudo systemctl restart nginx

Теперь, если вы зайдете через браузер на ваш веб-сервер по адресу http://server_name/info.php (http://xxx.xxx.xxx.xxx/info.php, где xxx.xxx.xxx.xxx — адрес), то увидите информационную страницу:

Установка MySQL(MariaDB) на Ubuntu

MySQL — это система управления базами данных (СУБД), которая используется для организации и получения контента.

Сегодня в LEMP стеке MySQL заменяется на популярный аналог – MariaDB. MariaDB имеет те же возможности, что и MySQL, и при этом является полностью бесплатной.

Примечание: если вы предпочитаете использовать базу данных MySQL в Ubuntu или ваш проект работает именно с ней, вам нужно будет добавить необходимые репозитории и установить БД с помощью инструкции.

Установите пакеты из главного репозитория Ubuntu с помощью менеджера пакетов:

sudo apt-get install mariadb-server mariadb-client

После успешной установки выполните настройки безопасности и удалите некоторые значения по умолчанию. Приведите в действие скрипт:

sudo mysql_secure_installation

Здесь MariaDB попросит вас задать пароль супер-пользователя БД. Затем система попросит ответить на несколько вопросов (они служебные и на каждый из них без лишних проблем можно ответить Yes).

После этого конфигурирование базы данных завершено, и можно переходить к следующему шагу настройки LEMP стека — установке PHP.

Установка PHP

Небольшое отступление по поводу версии PHP, ведь для некоторых проектов иногда требуется установка более ранних версий. Если тебе необходима другая версия php, например php5.6 или 7.0, тогда добавь в систему ppa ondrej/php и делай все по аналогии с инструкцией, но в первой команде установки PHP замени 7.4 на, например, 5.6 или 7.0 и далее используй не php7.4*, а php5.6* или 7.0. И, главное, обрати внимание, что в конфигурации сервера Nginx тебе тоже придется изменить адрес сокета PHP (с /run/php/php7.4-fpm.sock/run/php/php7.0-fpm.sock) Команда добавления ppa:

sudo add-apt-repository ppa:ondrej/php

Вернемся к установке актуальной версии — 7.4. Выполним команду по установке php из стандартных репозиториев Ubuntu 20.04:

sudo apt install php7.4 php7.4-fpm php7.4-mysql php-common php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline php7.4-mbstring php7.4-xml php7.4-gd php7.4-curl

Данная команда устанавливает не только сам препроцессор гипертекста, но и некоторые дополнительные расширения, необходимые для работы многих web-приложений, таких, как WordPress.

Запустим PHP:

sudo systemctl start php7.4-fpm

Остановка сервиса и его добавление и изъятие из автозагрузки происходит аналогично сервисам Nginx и MariaDB: systemctl stop — остановка, systemctl enable — автозапуск, systemctl disable — отключение автозапуска.

Проверим статус сервиса PHP:

systemctl status php7.4-fpmСтатус сервиса PHP

Установка MariaDB

MariaDB – это замена MySQL. Она представляет собой надежный и масштабируемый SQL-сервер с богатым набором расширений.
Для начала вы должны удалить все пакеты MySQL, если они у вас установлены:

[root@server ~]# yum remove mysql* mysql-server mysql-devel mysql-libs

Установите репозиторий REMI, чтобы решить проблему совместимости с MySQL, иначе при попытке установки MariaDB вы, скорее всего, увидите сообщения об ошибках с зависимостями.

[root@server ~]# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Теперь установите пакет compat-mysql55:

[root@server ~]# yum –enablerepo=remi-test –disablerepo=remi install compat-mysql55

Создайте файл репозитория для MariaDB, и добавьте в него следующие строки:

Для 32-битных систем:

[root@server ~]# vi /etc/yum.repos.d/mariadb.repo # MariaDB 5.5 CentOS repository list – created 2013-06-06 07:42 UTC # http://mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/5.5/centos6-x86 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1

Для 64-битных систем:

[root@server ~]# vi /etc/yum.repos.d/mariadb.repo # MariaDB 5.5 CentOS repository list – created 2013-06-06 07:53 UTC # http://mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/5.5/centos6-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1

Сохраните и закройте файл, после чего запустите yum update:

[root@server ~]# yum update

Теперь установите MariaDB:

[root@server ~]# yum install MariaDB-devel MariaDB-client MariaDB-server -y

Запустите службу MariaDB и настройте ее автоматический запуск при каждой загрузке:

[root@server ~]# /etc/init.d/mysql start Starting MySQL… SUCCESS! [root@server ~]# chkconfig mysql on Set MySQL root password

По умолчанию пароль root в MySQL пустой. Поэтому, чтобы предотвратить несанкционированный доступ к MySQL, установите пароль root:

[root@server ~]# /usr/bin/mysql_secure_installation /usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we’ll need the current password for the root user. If you’ve just installed MariaDB, and you haven’t set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on… Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have a root password set, so you can safely answer ‘n’. Change the root password? [Y/n] y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. … Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] … Success! Normally, root should only be allowed to connect from ‘localhost’. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] … Success! By default, MariaDB comes with a database named ‘test’ that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] – Dropping test database… ERROR 1008 (HY000) at line 1: Can’t drop database ‘test’; database doesn’t exist … Failed! Not critical, keep moving… – Removing privileges on test database… … Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] … Success! Cleaning up… All done! If you’ve completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!

Создание блока сервера Nginx и тест PHP

Серверный блок Nginx это нечто подобное виртуальному хосту в Apache. В блоке по умолчанию нужно много менять, чтобы добиться работы PHP, так что мы создадим другой стандартный блок.

Для начала удалим дефолтный:

sudo rm /etc/nginx/sites-enabled/default

И создадим свой:

sudo nano /etc/nginx/conf.d/default.conf

И вставим в него следующий текст (ничего менять не надо, это блок по умолчанию):

server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html/; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ /index.php; } location ~ .php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; } location ~ /.ht { access_log off; log_not_found off; deny all; } }

В окне редактора nano нужно нажать SHIFT+INSERT, чтобы вставить текст (или мышкой можно). Далее сохраним файл, нажав CTRL+O и выйдем — CTRL+W.

После этого нужно перезагрузить Nginx:

sudo systemctl restart nginx

Приступим к тесту php, создадим файл с функцией phpinfo() в корне сервера:

sudo nano /usr/share/nginx/html/phpinfo.php

Впишем в него:

Редактор nano

Редактор nano

После сохранения файла php перейдем в браузере по ссылке IP/phpinfo.php

phpinfo

phpinfo

Если мы видим информационную таблицу препроцессора, значит все работает.

Создание блоков для нескольких доменов

Для примера создадим домен test.ru на машине с только что установленным LEMP. Если машина локальная, то сначала нужно добавить домен в файл hosts, чтобы можно было обратиться к нему из браузера, на хостинге же нужно просто указать вручную в NS записях домена (у регистроатора домена), свой ip адрес сервера и дождаться обновления DNS и делать все по аналогии (в hosts добавлять не нужно, хотя и можно, чтобы не ждать, пока обновятся записи DNS).

Добавим домен в файл hosts:

sudo nano /etc/hosts

Впишем строку:

127.0.0.1 test.ru

Далее продолжим обязательные манипуляции и создадим каталог для домена (не обязательно он должен располагаться в /usr/share/nginx/html, он может быть, например в /var/www):

sudo mkdir /usr/share/nginx/html/test.ru

Зададим права и пользователя для каталога:

sudo chown www-data:www-data /usr/share/nginx/html/test.ru -R sudo chmod ug+rwx /usr/share/nginx/html/test.ru -R

Создадим в каталоге файл index.html:

nano /usr/share/nginx/html/test.ru/index.html

В него вставим html код:

Hello world!

Далее копируем наш файл default.conf в каталог sites-available и назовем его test.ru:

sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/sites-available/test.ru

Откроем его в текстовом редакторе и немного изменим:

sudo nano /etc/nginx/sites-available/test.ru server { listen 80; listen [::]:80; server_name test.ru www.test.ru; root /usr/share/nginx/html/test.ru; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ /index.php; } location ~ .php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; } location ~ /.ht { access_log off; log_not_found off; deny all; } }

Мы задали имя домена и указали путь к корневому каталогу сайта:

server_name test.ru www.test.ru;

root /usr/share/nginx/html/test.ru;

Теперь активируем сайт, задав на него ссылку:

sudo ln -s /etc/nginx/sites-available/test.ru /etc/nginx/sites-enabled/test.ru

Все, нужно перезагрузить Nginx, чтобы изменения вступили в силу:

sudo systemctl restart nginx

Открываем в браузере test.ru для проверки:

Тестовый сайт

Тестовый сайт

Настройки Nginx для сайта test.ru будут в созданном файле /etc/nginx/sites-available/test.ru (например настройка кэша или IP6). И по аналогии с созданием test.ru можно создать любое количество сайтов.

Установка PHP на Ubuntu

Для установки компонента обработки программного кода PHP установите пакеты из главного репозитория с помощью менеджера пакетов:

sudo apt-get install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi php7.0 libapache2-mod-php7.0 php7.0-xml

В процессе установки потребуется 1 или 2 раза ответить ‘Yes’ на вопросы системы.

Тест PHP

Создайте простой файл “testphp.php” в корневой директории Apache и добавьте в него строки, как показано ниже:

[root@server ~]# vi /usr/share/nginx/html/testphp.php

Сохраните и закройте файл. Перезапустите службу nginx:

[root@server ~]# /etc/init.d/nginx restart

Перейдите в браузере по адресу http://server-ip-address/testphp.php. Вы должны увидеть страницу с подробной информацией об установленной версии php.

тестовая страница PHP

Если вы хотите установить модули php, введите команду yum install php* и перезапустите службу nginx. Для верификации модулей откройте веб-браузер и перейдите по адресу http://server-ip-address/testphp.php. Вы увидите список всех установленных модулей php.

Создание тестовой веб-страницы

Последним шагом создадим тестовую веб-страницу, которая сгенерирует и выведет информацию о сервере. Создадим в корневой директории веб-сервера файл “phpinfo.php”:

sudo nano /var/www/html/phpinfo.php

В открывшемся редакторе вставим следующий PHP-код:

phpinfo();

Сохраним созданный файл (“Ctrl + o”) и выйдите из редактора (“Ctrl + x”).

Теперь мы можем убедиться, что веб-сервер передаст HTTP запрос в интерпретатор PHP, который в свою очередь сгенерирует информационную страницу и выведет результат в браузер.

Для этого нам нужно обратиться к адресу созданной выше страницы в браузере:

http://IP_адрес_сервера/phpinfo.php

После того, как мы убедились в том, что все компоненты настроены корректно, созданную тестовую страницу лучше удалить . Сторонним пользователям не нужно иметь представления о конкретных настройках вашего сервера.

Для удаления файла воспользуйтесь следующей командой:

sudo rm /usr/share/nginx/html/phpinfo.php

Установка PHP и дополнительных расширений

Проверить доступную для установки версию PHP можно командой:

  • Ubuntu и Debian:

    apt show php

  • CentOS:

    yum info php

Знать её нужно для корректной установки нужных компонентов на следующем шаге (для Ubuntu и Debian). В примере версия PHP — 7.4. Вам при установке нужно заменить её в команде на ту, которая доступна для вашей операционной системы.

Если версия вам подходит, после этого можно перейти к установке:

  • Ubuntu и Debian:

    apt -y install php7.4 php7.4-fpm php7.4-mysql php-common php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline php7.4-mbstring php7.4-xml php7.4-gd php7.4-curl php7.4-zip

  • CentOS:

    yum -y install php-fpm php-mysqlnd php-cli php-json php-mbstring php-xml php-gd php-curl php-zip

Дополнительные расширения PHP, доступные для установки, можно посмотреть командой:

  • Ubuntu и Debian:

    Для конкретной версии:

    apt-cache search php | egrep ‘7.4’ | grep module

    Версии по умолчанию:

    apt-cache search php | egrep ‘module’ | grep default

  • CentOS:

    yum search php | grep module

Установить выбранный модуль можно командой:

  • Ubuntu и Debian:

    apt -y install php7.4-soap

  • CentOS:

    yum -y install php-soap

После установки PHP запускаем менеджер процессов php-fpm и добавляем его в автозагрузку:

  • Ubuntu и Debian:

    systemctl start php7.4-fpm && systemctl enable php7.4-fpm

  • CentOS:

    systemctl start php-fpm && systemctl enable php-fpm

Проверим установленную версию PHP: 

php -v

После установки PHP нужно отредактировать настройки php-fpm по умолчанию, предназначенные для веб-сервера Apache:

  • Ubuntu и Debian:

    nano /etc/php/7.4/fpm/pool.d/www.conf

  • CentOS:

    vim /etc/php-fpm.d/www.conf

В файле ищем блок кода Unix user/group of processes и меняем apache на www-data для Debian и Ubuntu и nginx для CentOS.

Остался последний штрих. Открываем для редактирования конфигурационный файл PHP:

  • Ubuntu и Debian:

    nano /etc/php/7.4/fpm/php.ini

  • CentOS:

    vim /etc/php.ini

В файле ищем раздел Paths and Directories (он почти в самом конце файла), внутри находим параметр cgi.fix_pathinfo. Нужно раскомментировать его (удалить «;» в начале строки) и изменить значение с «1» на «0».

После этого сохраняем файл и перезапускаем веб-сервер, чтобы новые настройки применились:

  • Ubuntu и Debian:

    systemctl reload nginx && systemctl reload php7.4-fpm

  • CentOS:

    systemctl reload nginx && systemctl reload php-fpm

Настройка базового конфигурационного файла для сайта

Чтобы веб-сервер мог корректно обрабатывать запросы к сайтам, осталось добавить базовый конфигурационный файл вместо установленного по умолчанию. Для этого:

  1. Удаляем конфигурационный файл default, использующийся по умолчанию, и создаём его замену, default.conf:

    • Ubuntu и Debian:

      unlink /etc/nginx/sites-enabled/default touch /etc/nginx/sites-available/default.conf ln /etc/nginx/sites-available/default.conf /etc/nginx/sites-enabled/default.conf

    • CentOS:

      touch /etc/nginx/conf.d/default.conf

  2. Откроем новый файл в консольном текстовом редакторе и добавим туда содержимое:

    • Ubuntu и Debian:

      nano /etc/nginx/sites-available/default.conf

    • CentOS:

      vim /etc/nginx/conf.d/default.conf

    Скопируйте в файл следующий блок настроек:

    • Ubuntu и Debian:

      server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html/; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } location ~ .php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; } location ~ /.ht { access_log off; log_not_found off; deny all; } }

    • CentOS:

      server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html/; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } location ~ .php$ { fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /.ht { access_log off; log_not_found off; deny all; } }

Осталось проверить, что в конфигурационном файле отсутствуют ошибки, и перезапустить nginx для применения настроек:

nginx -t
systemctl reload nginx

Установка tasksel

По умолчанию tasksel обычно установлен, но если это не так, то вы можете установить tasksel командой

apt-get install tasksel

По зависимостям установится также пакет tasksel-data, включающий официальные задачи для установки. Дополнительно можно установить следующие пакеты:

education-tasks — Задачи для Debian Edu, включающие серверную часть и часть для тонких клиентов или рабочих станций

games-tasks — Задачи Debian Games, включающие большое количество игр, разделенных по жанрам, а также задачи для установки эмуляторов, лучших игр и разработки игр

gis-tasks — Задачи Debian GIS, включающие программы для работы с OpenStreetMap, GPS и другие программы, связанные с географической информацией

junior-tasks — Задачи Debian Jr. и Doudou Linux, включающие игры и обучающие программы, программы для видео, обучения печати и другие

и так далее. Полный список пакетов с заданиями можно посмотреть при помощи команды

apt-cache search tasksel

Использование tasksel

Программа tasksel может работать как в режиме командной строки, так и в интерактивном режиме. Если никакие параметры командной строки не указаны, программа будет работать в интерактивном режиме, будет показано меню с конфигурациями, вам только надо будет проставить флажки и затем нажать кнопку «OK».
tasksel001

В командном режиме программа будет работать только тогда, когда указаны параметры командной строки. Их немного:

—list-tasks Вывести список всех существующих задач
install задача Установить пакеты, определенные в задаче
remove задача Удалить пакеты, определенные в задаче
-t, —test Тестовый режим. Не удалять и не устанавливать пакеты на самом деле
—task-packages задача Вывести список пакетов, которые относятся к задаче и доступны в данный момент
—task-desc задача Вывести описание задачи
—new-install Автоматически выбрать задачи без отображения их пользователю. Используется при новой инсталляции Debian
—debconf-apt-progress опции Передать указанные опции команде debconf-apt-progress, которую запускает tasksel

Создание desc-файла для задачи tasksel

Tasksel позволяет достаточно быстро создавать собственные задачи. Для этого создается файл c расширением .desc, который размещается в директории /usr/share/tasksel/descs. Каждый файл .desc может включать одну и более задач, а каждая задача должна иметь определенную структуру, состоящую из полей с названием и значением. Вот эти поля:

Task Название задачи. Например. «Task: web-server» без кавычек
Section Секция, в которую входит задача. Например, «Section: httpd» или «Section: debian-games»
Description Описание задачи. Описание может занимать несколько строчек. Первая строчка — краткое описание задачи, а последующие, начинающиеся с пробела, — более подробное описание.
Relevance Релевантность. Обычно значение в этом поле выставляют равным 10. Пример: «Relevance: 10»
Enhances Задача, которую расширяет данная задача. Например, «Enhances: desktop»
Key Ключевое слово задачи. Часто совпадает с названием задачи
Packages Список пакетов, входящих в задачу. Если пакетов несколько, то после заголовка пишется слово «list», а сами пакеты перечисляются на следующих строках, каждый пакет с новой строки, перед названием пакета пробел

Это не все поля, которые могут быть использованы, но для большинства задач их обычно достаточно.

Пример задачи tasksel

Как пример давайте рассмотрим задачу для установки файлового менеджера Midnight Commander:

Task: mc-file-manager Section: utils Description: Midnight Commander – многофункциональный диспетчер файлов GNU Midnight Commander – полноэкранный текстовый файловый менеджер. В нём используется двухпанельный интерфейс и встроенная командная оболочка. Также имеется встроенный редактор с подсветкой синтаксиса и просмотрщик, поддерживающий двоичные файлы. Программа поддерживает виртуальную файловую систему (VFS), что позволяет работать с файлами на удалённых машинах (например, на серверах FTP, SSH) и с файлами внутри архивов, как с обычными файлами. Relevance: 10 Key: mc Packages: list e2fslibs libc6 libglib2.0-0 libgpm2 libslang2 libssh2-1 mc-data

Теперь можно сохранить этот файл в директории /usr/share/tasksel/descs под названием mc.desc и запустить tasksel без параметров. В появившемся меню вы увидите задачу для установки Midnight Commander.
Установка программ в Debian при помощи tasksel

Заключение

После чего в браузере пишем название свое доменное имя, или же можно “ip” адрес, либо “localhost”, в результате вы должный увидеть вывод информации php:

Теперь можно закидывать например тот же wordpress и устанавливать его на ваш только что созданный веб север. При необходимости можно установить необходимые те же php пакеты. После чего данный сервер нужно еще настроить правильно для того что бы он нормально функционировал.

”Источники”

  • https://serverspace.ru/support/help/ustanovka-lamp-steka-na-ubutu-18-04/
  • https://losst.ru/ustanovka-lamp-ubuntu-18-04
  • https://FirstVDS.ru/technology/lamp-install
  • https://timeweb.com/ru/community/articles/kak-ustanovit-stek-lamp-na-ubuntu-20-04
  • https://1cloud.ru/help/linux/ustanovka-lemp-steka-linux-nginx-mysql-php
  • https://maddot.ru/kak-ustanovit-lemp-v-ubuntu-20-04.html
  • https://community.vscale.io/hc/ru/community/posts/208340569-%D0%9A%D0%B0%D0%BA-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C-%D0%B8-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C-LEMP-Linux-Nginx-MySQL-PHP-%D0%BD%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5-%D1%81-Ubuntu-16-04
  • https://serverspace.by/support/help/ustanovka-lemp-steka-na-centos-7/
  • http://rus-linux.net/MyLDP/server/lemp.html
  • https://FirstVDS.ru/technology/lemp-install
  • https://mnorin.com/ustanovka-programm-v-debian-pri-pomoshhi-tasksel.html
  • https://cyber-x.ru/%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%B0%D0%B2%D0%BB%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC-%D1%81%D1%82%D0%B5%D0%BA-lamp-%D0%B2-ubuntu-20-04-%D0%B8-debian-10/

Содержание

  1. Как настроить брандмауэр с UFW в Ubuntu 20.04
  2. Подготовка
  3. Установить UFW
  4. Проверить статус UFW
  5. Политики UFW по умолчанию
  6. Профили приложений
  7. Включение UFW
  8. Открытие портов
  9. Портовые диапазоны
  10. Определенный IP-адрес и порт
  11. Подсети
  12. Конкретный сетевой интерфейс
  13. Отказ от подключений
  14. Удаление правил UFW
  15. Отключение UFW
  16. Сброс UFW
  17. IP-маскарадинг
  18. Выводы
  19. Основные команды UFW
  20. Введение:
  21. Проверка статуса UFW
  22. Включение UFW
  23. Отключение UFW
  24. Блокировка обращения IP-адреса
  25. Заблокировать подсеть
  26. Блокирование входящих подключений к сетевому интерфейсу
  27. Разрешить обращения IP-адреса
  28. Разрешение входящих подключений к сетевому интерфейсу
  29. Удалить правило брандмауэра
  30. Список доступных профилей приложений
  31. Включить профиль для определенного приложения
  32. Отключить профиль для определенного приложения
  33. Разрешить SSH
  34. Разрешить входящий SSH с определенного IP-адреса или подсети
  35. Разрешить входящий Rsync с определенного IP-адреса или подсети
  36. Разрешить Nginx HTTP / HTTPS
  37. Разрешить Apache HTTP / HTTPS
  38. Разрешить все входящие HTTP (порт 80)
  39. Разрешить все входящие HTTPS (порт 443)
  40. Разрешить все входящие HTTP и HTTPS
  41. Разрешить подключение к MySQL с определенного IP-адреса или подсети
  42. Разрешить подключение к PostgreSQL с определенного IP-адреса или подсети
  43. Разрешить подключение к PostgreSQL с определенного IP-адреса или подсети
  44. Заключение

Как настроить брандмауэр с UFW в Ubuntu 20.04

Брандмауэр — это инструмент для мониторинга и фильтрации входящего и исходящего сетевого трафика. Он работает, определяя набор правил безопасности, которые определяют, разрешить или заблокировать определенный трафик.

Ubuntu поставляется с инструментом настройки межсетевого экрана под названием UFW (Несложный межсетевой экран). Это удобный интерфейс для управления правилами брандмауэра iptables. Его основная цель — упростить или, как следует из названия, упростить управление межсетевым экраном.

В этой статье описывается, как использовать инструмент UFW для настройки и управления брандмауэром в Ubuntu 20.04. Правильно настроенный брандмауэр — один из наиболее важных аспектов общей безопасности системы.

Подготовка

Только root или пользователи с привилегиями sudo могут управлять системным брандмауэром. Лучше всего запускать административные задачи от имени пользователя sudo.

Установить UFW

UFW является частью стандартной установки Ubuntu 20.04 и должен присутствовать в вашей системе. Если по какой-то причине он не установлен, вы можете установить пакет, набрав:

Проверить статус UFW

По умолчанию UFW отключен. Вы можете проверить статус службы UFW с помощью следующей команды:

Вывод покажет, что состояние брандмауэра неактивно:

Если UFW активирован, вывод будет выглядеть примерно так:

Политики UFW по умолчанию

По умолчанию межсетевой экран UFW блокирует весь входящий и пересылаемый трафик и разрешает весь исходящий трафик. Это означает, что любой, кто пытается получить доступ к вашему серверу, не сможет подключиться, если вы специально не откроете порт. Приложения и службы, работающие на вашем сервере, смогут получить доступ к внешнему миру.

Политики по умолчанию определены в /etc/default/ufw и могут быть изменены либо путем изменения файла вручную, либо с помощью команды sudo ufw default

Политики брандмауэра — это основа для создания более сложных и определяемых пользователем правил. Как правило, исходные политики по умолчанию UFW являются хорошей отправной точкой.

Профили приложений

Профиль приложения — это текстовый файл в формате INI, который описывает службу и содержит правила брандмауэра для службы. Профили приложений создаются в каталоге /etc/ufw/applications.d во время установки пакета.

Вы можете просмотреть все профили приложений, доступные на вашем сервере, набрав:

В зависимости от пакетов, установленных в вашей системе, вывод будет выглядеть следующим образом:

Чтобы найти дополнительную информацию о конкретном профиле и включенных правилах, используйте следующую команду:

Выходные данные показывают, что профиль «Nginx Full» открывает порты 80 и 443 .

Вы также можете создавать собственные профили для своих приложений.

Включение UFW

Если вы подключаетесь к Ubuntu из удаленного места, перед включением брандмауэра UFW вы должны явно разрешить входящие соединения SSH. В противном случае вы больше не сможете подключиться к машине.

Чтобы настроить брандмауэр UFW для разрешения входящих соединений SSH, введите следующую команду:

Если SSH работает на нестандартном порту , вам необходимо открыть этот порт.

Например, если ваш демон ssh прослушивает порт 7722 , введите следующую команду, чтобы разрешить соединения на этом порту:

Теперь, когда брандмауэр настроен на разрешение входящих соединений SSH, вы можете включить его, набрав:

Вы будете предупреждены, что включение брандмауэра может нарушить существующие соединения ssh, просто введите y и нажмите Enter .

Открытие портов

В зависимости от приложений, которые работают в системе, вам также может потребоваться открыть другие порты. Общий синтаксис открытия порта следующий:

Ниже приведены несколько способов, как разрешить HTTP-соединения.

Первый вариант — использовать имя службы. UFW проверяет файл /etc/services предмет порта и протокола указанной службы:

Вы также можете указать номер порта и протокол:

Если протокол не указан, UFW создает правила как для tcp и для udp .

Другой вариант — использовать профиль приложения; в данном случае Nginx HTTP:

UFW также поддерживает другой синтаксис для указания протокола с помощью ключевого слова proto :

Портовые диапазоны

UFW также позволяет открывать диапазоны портов. Открывающий и закрывающий порты разделяются двоеточием ( : ), и вы должны указать протокол, либо tcp или udp .

Например, если вы хотите разрешить порты с 7100 до 7200 как на tcp и на udp , вы должны выполнить следующую команду:

Определенный IP-адрес и порт

Чтобы разрешить соединения на всех портах с заданного IP-адреса источника, используйте ключевое слово from за которым следует адрес источника.

Вот пример внесения IP-адреса в белый список:

Если вы хотите разрешить данному IP-адресу доступ только к определенному порту, используйте ключевое слово to any port за которым следует номер порта.

Например, чтобы разрешить доступ к порту 22 с машины с IP-адресом 64.63.62.61 , введите:

Подсети

Синтаксис разрешения подключений к подсети IP-адресов такой же, как и при использовании одного IP-адреса. Единственное отличие состоит в том, что вам нужно указать маску сети.

Ниже приведен пример, показывающий, как разрешить доступ для IP-адресов от 192.168.1.1 до 192.168.1.254 до порта 3360 ( MySQL ):

Конкретный сетевой интерфейс

Чтобы разрешить подключения к определенному сетевому интерфейсу, используйте ключевое слово in on за которым следует имя сетевого интерфейса:

Отказ от подключений

Политика по умолчанию для всех входящих подключений настроена на deny , и если вы не изменили ее, UFW заблокирует все входящие подключения, если вы специально не откроете подключение.

Написание запрещающих правил аналогично написанию разрешающих правил; вам нужно только использовать ключевое слово deny вместо allow .

Допустим, вы открыли порты 80 и 443 , и ваш сервер атакован из сети 23.24.25.0/24 . Чтобы запретить все соединения с 23.24.25.0/24 вы должны выполнить следующую команду:

Вот пример 23.24.25.0/24 доступа только к портам 80 и 443 из 23.24.25.0/24 вы можете использовать следующую команду:

Удаление правил UFW

Есть два разных способа удалить правила UFW по номеру правила и указав фактическое правило.

Удалять правила по номеру правила проще, особенно если вы новичок в UFW. Чтобы сначала удалить правило по номеру правила, вам нужно найти номер правила, которое вы хотите удалить. Чтобы получить список пронумерованных правил, используйте команду ufw status numbered :

Чтобы удалить правило номер 3 , которое разрешает подключения к порту 8080 , вы должны ввести:

Второй способ — удалить правило, указав фактическое правило. Например, если вы добавили правило для открытия порта 8069 вы можете удалить его с помощью:

Отключение UFW

Если по какой-либо причине вы хотите остановить UFW и деактивировать все правила, вы можете использовать:

Позже, если вы захотите снова включить UTF и активировать все правила, просто введите:

Сброс UFW

Сброс UFW отключит UFW и удалит все активные правила. Это полезно, если вы хотите отменить все изменения и начать все заново.

Чтобы сбросить UFW, введите следующую команду:

IP-маскарадинг

IP Masquerading — это вариант NAT (трансляция сетевых адресов) в ядре Linux, который преобразует сетевой трафик путем перезаписи исходных и целевых IP-адресов и портов. С помощью IP Masquerading вы можете разрешить одной или нескольким машинам в частной сети связываться с Интернетом, используя одну машину Linux, которая действует как шлюз.

Настройка IP-маскарадинга с помощью UFW включает несколько шагов.

Во-первых, вам нужно включить переадресацию IP. Для этого откройте файл /etc/ufw/sysctl.conf :

Найдите и раскомментируйте строку net.ipv4.ip_forward = 1 :

Затем вам нужно настроить UFW, чтобы разрешить пересылку пакетов. Откройте файл конфигурации UFW:

Найдите ключ DEFAULT_FORWARD_POLICY и измените значение с DROP на ACCEPT :

Теперь вам нужно установить политику по умолчанию для цепочки POSTROUTING в таблице nat и правило маскарада. Для этого откройте файл /etc/ufw/before.rules и добавьте строки, выделенные желтым, как показано ниже:

Добавьте следующие строки:

Не забудьте заменить eth0 в строке -A POSTROUTING чтобы он соответствовал имени публичного сетевого интерфейса:

Когда вы закончите, сохраните и закройте файл.

Наконец, перезагрузите правила UFW, отключив и снова включив UFW:

Выводы

Мы показали вам, как установить и настроить брандмауэр UFW на вашем сервере Ubuntu 20.04. Обязательно разрешите все входящие соединения, которые необходимы для правильного функционирования вашей системы, ограничив при этом все ненужные соединения.

Для получения дополнительной информации по этой теме посетитесправочную страницу UFW .

Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.

Источник

Основные команды UFW

Введение:

Инструментом настройки брандмауэра по умолчанию для Ubuntu является ufw. Разработанный для упрощения настройки брандмауэра iptables, ufw предоставляет удобный способ создания брандмауэра на базе хоста IPv4 или IPv6. По умолчанию UFW отключен.

Проверка статуса UFW

Проверить, включен ли брандмауэр, используйте эту команду:

  • Результат покажет, активен ли ваш брандмауэр или нет.

Включение UFW

Если при выполнении команды ufw status вы получили сообщение Status: inactive, это означает, что брандмауэр еще не включен в системе. Вам нужно выполнить команду, чтобы включить его.

По умолчанию, когда UFW включен, он блокирует внешний доступ ко всем портам на сервере. На практике это означает, что если вы подключены к серверу по SSH и включите ufw до разрешения доступа через порт SSH, вы будете отключены.

Чтобы включить UFW в вашей системе, выполните команду:

Чтобы увидеть, что в настоящее время заблокировано или разрешено, вы можете использовать параметр verbose при запуске ufw status, как показано ниже:

Отключение UFW

Если по какой-то причине вам нужно отключить брандмауэр, вы можете сделать это с помощью следующей команды:

Будьте внимательны, эта команда полностью отключит службу брандмауэра в вашей системе!

Блокировка обращения IP-адреса

Чтобы заблокировать все сетевые подключения, исходящие с определенного IP-адреса, выполните следующую команду, заменив выделенный IP-адрес на IP-адрес, который вы хотите заблокировать:

  • В этом примере “from 91.198.174.190” указывает IP-адрес источника «91.198.174.190».

Если вы запустите эту команду, вы увидите, что указанный IP-адрес находится в списке запрещенных:

  • Все соединения, входящие и исходящие, блокируются для указанного IP-адреса.

Заблокировать подсеть

Если вам нужно заблокировать всю подсеть, вы можете использовать адрес подсети в качестве параметра «from» в команде ufw deny. Это заблокирует все IP-адреса в приведенной в примере подсети 91.198.174.0/24:

Блокирование входящих подключений к сетевому интерфейсу

Чтобы заблокировать входящие подключения с определенного IP-адреса к определенному сетевому интерфейсу, выполните следующую команду, заменив IP-адрес на IP-адрес, который вы хотите заблокировать:

  • Параметр «in» указывает брандмауэру применять правило только для входящих соединений, а параметр «on eth0» указывает, что правило применяется только для интерфейса eth0. Это может быть полезно, если у вас есть система с несколькими сетевыми интерфейсами (включая виртуальные), и вам нужно заблокировать внешний доступ к некоторым из этих интерфейсов, но не ко всем.

Разрешить обращения IP-адреса

Чтобы разрешить все сетевые подключения, исходящие с определенного IP-адреса, выполните следующую команду, заменив выделенный IP-адрес на IP-адрес, к которому вы хотите разрешить доступ:

  • Если теперь вы запустите “sudo ufw status”, вы увидите вывод, похожий на этот, с надписью ALLOW рядом с IP-адресом, который вы только что добавили.

  • Вы также можете разрешить соединения из целой подсети, указав соответствующую маску подсети для хоста, например, 91.198.174.0/24.

Разрешение входящих подключений к сетевому интерфейсу

Чтобы разрешить входящие подключения с определенного IP-адреса к определенному сетевому интерфейсу, выполните следующую команду, заменив IP-адрес на тот, который вы хотите разрешить:

  • Параметр «in» указывает брандмауэру применять правило только для входящих соединений, а параметр «on eth0» указывает, что правило применяется только для интерфейса «eth0».

Если вы выполните команду , вы увидите результат, подобный этому:

  • Результат команды «sudo ufw status»

Удалить правило брандмауэра

Чтобы удалить правило, ранее установленное в UFW, используйте «ufw delete», затем введите правило (allow / deny) и целевую спецификацию. В следующем примере удаляется правило, ранее установленное для разрешения всех подключений с IP-адреса 91.198.174.192:

Другой способ указать, какое правило вы хотите удалить, — это указать ID правила. Эту информацию можно получить с помощью следующей команды:

  • Из вывода видно, что есть два активных правила. Первое правило, запрещает все соединения, исходящие с IP-адреса 91.198.174.190. Второе правило разрешает соединения на интерфейсе eth0, поступающие с IP-адреса 91.198.174.22.

Поскольку по умолчанию брандмауэр уже блокирует весь внешний доступ, если он не разрешен явным образом, первое правило является избыточным, поэтому его можно удалить. Чтобы удалить правило согласно его ID, выполните команду:

Вам будет предложено подтвердить операцию и убедиться, что указанный вами ID относится к правильному правилу, которое вы хотите удалить.

Если вы снова перечислите свои правила со статусом «sudo ufw», вы увидите, что правило было удалено.

Список доступных профилей приложений

При установке приложения, которые полагаются на сетевые коммуникации, обычно устанавливают профиль брандмауэра, который можно использовать для разрешения подключения с внешних адресов. Это часто то же самое, что запустить «ufw allow from», с тем преимуществом, что это ярлык, который абстрагирует конкретные номера портов, используемые службой, и обеспечивает удобную номенклатуру для ссылающихся служб.

Если вы установили службу, например, веб-сервер или другое сетезависимое программное обеспечение, и профиль не был доступен в брандмауэре, сначала убедитесь, что служба включена. Для удаленных серверов обычно доступен OpenSSH:

Включить профиль для определенного приложения

Чтобы включить профиль приложения брандмауэра, выполните команду «ufw allow», за которой следует имя профиля приложения, который вы хотите включить и который можно получить с помощью команды «sudo ufw app list». В следующем примере мы включаем профиль OpenSSH, который разрешит все входящие SSH-соединения на стандартном порту SSH.

Отключить профиль для определенного приложения

Чтобы отключить профиль приложения, который вы ранее настроили в брандмауэре, вам нужно удалить соответствующее правило. Например, рассмотрим следующий вывод из “sudo ufw status”

Если вы хотите разрешить только HTTPS-запросы к вашему веб-серверу, вам нужно сначала включить наиболее ограничивающее правило, которым в данном случае будет «Nginx HTTPS», а затем отключить активное правило «Nginx Full»:

sudo ufw delete allow «Nginx Full»

Помните, что вы можете перечислить все доступные профили приложений с помощью «sudo ufw app list».

Разрешить SSH

При работе с удаленными серверами вам необходимо убедиться, что порт SSH открыт для подключений, чтобы вы могли удаленно войти на свой сервер.

Следующая команда включит профиль приложения OpenSSH для брандмауэра и разрешит все соединения с портом SSH по умолчанию на сервере:

Хотя это менее удобно для пользователя, альтернативным синтаксисом является указание точного номера порта службы SSH, который по умолчанию обычно установлен на 22:

Разрешить входящий SSH с определенного IP-адреса или подсети

Чтобы разрешить входящие соединения с определенного IP-адреса или подсети, вы включите директиву «from» для определения источника соединения. Это необходимо, чтобы вы также указали адрес назначения с помощью параметра «to». Чтобы заблокировать это правило только для SSH, ограничьте «proto» (протокол) значением «tcp», а затем используйте параметр «port» и установите его на 22, порт по умолчанию SSH.

Следующая команда разрешит только соединения SSH, исходящие с IP-адреса 91.198.174.33:

Вы также можете использовать адрес подсети в качестве параметра «from», чтобы разрешить входящие соединения SSH из всей сети:

Разрешить входящий Rsync с определенного IP-адреса или подсети

Программа Rsync, которая работает на порту 873, может использоваться для передачи файлов с одного компьютера на другой.

Чтобы разрешить входящие соединения rsync с определенного IP-адреса или подсети, используйте параметр from для указания IP-адреса источника и параметр port для установки порта назначения 873. Следующая команда разрешит только соединения Rsync, поступающие с IP-адреса 91.198.174.33:

Чтобы разрешить всей подсети 91.198.174.0/24 возможность «rsync» на ваш сервер, выполните команду:

Разрешить Nginx HTTP / HTTPS

При установке веб-сервер Nginx устанавливает несколько различных профилей брандмауэра внутри сервера. После установки и включения Nginx в качестве службы выполните следующую команду, чтобы определить, какие профили доступны:

Чтобы разрешить трафик HTTP и HTTPS, выберите Nginx Full. В противном случае выберите либо Nginx HTTP, чтобы разрешить только HTTP, либо Nginx HTTPS, чтобы разрешить только HTTPS.

Следующая команда разрешит трафик HTTP и HTTPS на сервере (порты 80 и 443):

Разрешить Apache HTTP / HTTPS

При установке веб-сервер Apache устанавливает несколько различных профилей UFW внутри сервера. После установки и включения Apache в качестве службы выполните следующую команду, чтобы определить, какие профили доступны:

Чтобы включить трафик HTTP и HTTPS, выберите «Apache Full». В противном случае выберите либо «Apache» для HTTP, либо «Apache Secure» для HTTPS.

Следующая команда разрешит HTTP и HTTPS трафик на сервере (порты 80 и 443):

Разрешить все входящие HTTP (порт 80)

Веб-серверы, такие как Apache и Nginx, обычно прослушивают HTTP-запросы на порту 80. Если ваша политика по умолчанию для входящего трафика настроена на отклонение или запрет, вам необходимо создать правило UFW для разрешения внешнего доступа к порту 80. В качестве параметра этой команды можно использовать либо номер порта, либо имя службы (http).

Чтобы разрешить все входящие HTTP-соединения (порт 80), выполните команду:

Альтернативным синтаксисом является указание номера порта службы HTTP:

Разрешить все входящие HTTPS (порт 443)

HTTPS обычно работает на порту 443. Если ваша политика по умолчанию для входящего трафика настроена на отклонение или запрет, вам нужно создать правило UFW для разрешения внешнего доступа по порту 443. В качестве параметра этой команды можно использовать либо номер порта, либо имя службы (https).

Чтобы разрешить все входящие соединения HTTPS (порт 443), выполните:

Альтернативным синтаксисом является указание номера порта службы HTTPS:

Разрешить все входящие HTTP и HTTPS

Если вы хотите разрешить трафик HTTP и HTTPS, вы можете создать одно правило, которое разрешает оба порта. Это использование требует, чтобы вы также определили протокол с помощью параметра “proto”, который в данном случае должен быть установлен на tcp.

Чтобы разрешить все входящие соединения HTTP и HTTPS (порты 80 и 443), выполните команду:

Разрешить подключение к MySQL с определенного IP-адреса или подсети

MySQL прослушивает клиентские соединения на порту 3306. Если ваш сервер баз данных MySQL используется клиентом на удаленном сервере, вам необходимо создать правило UFW, чтобы разрешить такой доступ.

Чтобы разрешить входящие соединения MySQL с определенного IP-адреса или подсети, используйте параметр from для указания IP-адреса источника и параметр «port» для установки порта назначения 3306.

Следующая команда разрешит IP-адрес 91.198.174.33 для подключения к порту MySQL сервера:

Чтобы разрешить всей подсети 91.198.174.0/24 возможность подключения к вашему серверу MySQL, выполните команду:

Разрешить подключение к PostgreSQL с определенного IP-адреса или подсети

PostgreSQL прослушивает клиентские соединения на порту 5432. Если ваш сервер баз данных PostgreSQL используется клиентом на удаленном сервере, вам необходимо разрешить этот трафик.

Чтобы разрешить входящие соединения PostgreSQL с определенного IP-адреса или подсети, укажите источник с помощью параметра from и установите порт на 5432:

Чтобы разрешить всей подсети 91.198.174.0/24 возможность подключения к вашему серверу PostgreSQL, выполните команду:

Разрешить подключение к PostgreSQL с определенного IP-адреса или подсети

Почтовые серверы, такие как Sendmail и Postfix, обычно используют порт 25 для SMTP-трафика. Если ваш сервер не должен отправлять исходящую почту, вы можете заблокировать этот вид трафика. Чтобы заблокировать исходящие SMTP-соединения, выполните команду:

Это настроит ваш брандмауэр на блокирование всего исходящего трафика на порту 25. Если вам нужно отклонить исходящие соединения на другом номере порта, вы можете повторить эту команду и заменить 25 на номер порта, который вы хотите заблокировать.

Заключение

UFW — это мощный инструмент, который при правильной настройке может значительно повысить безопасность ваших серверов. В данном руководстве рассматриваются некоторые общие правила UFW, которые часто используются для настройки брандмауэра в Ubuntu. Большинство команд в этом руководстве можно адаптировать для различных случаев и сценариев использования, изменяя такие параметры, как IP-адрес источника и/или порт назначения. Для получения более подробной информации о каждом параметре команды и доступных модификаторах вы можете воспользоваться утилитой man, чтобы проверить руководство UFW:

Источник

This tutorial is aiming on Ubuntu 18.04
What you need:
Paid Host/Linux server
Recommended Options: (link removed due to advertisement).
Hetzner.com — hetasd (link removed due to advertisement).

Ovh.com/world — OVH Hosting Company (link removed due to advertisement).
Programs needed: (FileZilla works, but recommend WinSCP)
Putty — Download Putty (link removed due to advertisement).
WinSCP — Download WinSCP (link removed due to advertisement).

Server Files at the end of the tutorial (OTServBR 12.20 Linux comming soon)

Steps in the tutorial,


1. Install Apache
2. Install MySQL
3. Configure Firewall & MySQL Security

4. Install PHP
5. Encrypt SSL (Secured Website Traffic)

This is Encrypted Traffic/None encrypted Traffic

1b0fc5d594c7c002636016bf44116fae.png

638634bdec2e0658d527c6a3f1638f3d.png

Superuser Setup
example will be: john

add user john by typing:

Once you added the user, give it superuser privileges by typing:

Code:

sudo usermod -aG sudo john

Now switch over to the user by typing:

Check server Timezone
First of all, let us see if the timezone is correct by typing:

If the date is correct you can skip this.
Now, let us change the timezone into your timezone by typing:

Code:

timedatectl list-timezones

(Press SPACE to page down, b to page up and once you find your Timezone press q to exit)
Find your timezone, example. Iam in Sweden so I’ll be using Europe/Stockholm.
Update your Timezone by typing:

Code:

sudo timedatectl set-timezone YOUR_TIMEZONE

Now check if your Timezone is correct by typing:

Next step is to update Ubuntu, type:

Code:

sudo apt update && sudo apt upgrade && sudo apt dist-upgrade

Type Y and hit ENTER
Afther the installation is compleated reboot the server by typing:

Close down Putty and reopen it and login with your created user. Example: john
Configure a Web Server
You now have two alternatives [Apache] & [Negix]
[Apache Guide]

Install Apache, Type:

Code:

sudo apt update && sudo apt install apache2

Now configure firewall, type:
If you get an error “ERROR: could find a profile matching openSSH”, this probably means you are not configuring the server remotely and can ignore it.
Now add firewall rules for Apache, Type:

Code:

sudo ufw allow in "Apache Full"

Now we enable the firewall, type:
Press Y if you see a message
Now, check the current firewall status by typing:
You should see something like this:
Apache Full ALLOW Anywhere
Apache Full (v6) ALLOW Anywhere (v6)
Test Apache service, type:

Code:

sudo service apache2 status

You should see something like this:
Alot more but notice this line,

Active: active (running) since Sat 2018-03-31 08:44:04 CEST; 15min ago
Now we can enter our webpage to see if it works, enter SERVER_IP or DOMAINNAME.COM
If you do not know your server ip type this:

Code:

sudo ifconfig | grep -Eo 'inet (addr:)?([0-9]*.){3}[0-9]*' | grep -Eo '([0-9]*.){3}[0-9]*' | grep -v '127.0.0.1'

At the webpage you should see this.

Install MySQL
Two commands in one line, type:

Code:

sudo apt update && sudo apt install mysql-server

Press Y and hit ENTER when prompted to install the MySQL package.
Now check if the service is running, type:

Code:

sudo service mysql status

Agin, Focus this line:
Active: active (running) since Mon 2018-04-02 02:40:59 CEST; 2min 47s ago
Press q to exit, now we know the service is installed and running.
Configure MySQL Security
Recommended, GENERATE STRONG PASSWORD: Generate Password (link removed due to advertisement).

To configure security for MySQL, type:

Code:

sudo mysql_secure_installation

If you created a root password in Step 1, you may be prompted to enter it here. Otherwise you will be asked to create one.
You will be asked if you want to set up the Validate Password Plugin. It’s not really necessary unless you want to enforce strict password policies for some reason.

Code:

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

Press ENTER here if you dont want to setup the validate password plugin

Code:

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) :

Press Y and ENTER to remove anonymous users

Code:

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) :

Press Y and ENTER to disallow root login remotley. This will prevent bots and hackers from trying to guess the root password.

Code:

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

Press Y and ENTER to remove the test database

Code:

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) :

Press Y and ENTER to reload the privilege tables
Now we are done with the MySQL, lets login into the MySQL and run the version command

Code:

sudo mysqladmin -p -u root version

Press q to exit

Install PHP
Update by typing:

Code:

sudo apt update && sudo apt install php libapache2-mod-php php-mysql

Press Y and ENTER when prompted to install the PHP package
Test PHP
Type:

If PHP installed correctly, you should see something similar below:

Code:

PHP 7.2.3-1ubuntu1 (cli) (built: Mar 14 2018 22:03:58) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.3-1ubuntu1, Copyright (c) 1999-2018, by Zend Technologies

Now let’s test PHP for Apache
We’ll create a file called info.php which you can enter thru IP.COM/info.php or DOMAINNAME.COM/info.php.
NOTE! This file needs to be deleted due to dangerous information.
Create it by typing:

Code:

sudo nano /var/www/html/info.php

Once nano editor has opened, paste in the following PHP code.

Press CTRL + X, press Y and then press ENTER to save it and exit.
Now enter IP.COM/info.php or DOMAINNAME.COM/info.php
It should look like this:

NOTE!
Once you’ve confirmed PHP is working correctly, it’s important to delete info.php as it contains information that could be useful to hackers.
Delete it by typing:

Code:

sudo rm /var/www/html/info.php

Now we need to change Max upload file size, type: (This is a must for DATABASE SQL files)

Code:

sudo nano /etc/php/7.2/apache2/php.ini

Press CTRL + W, Search for

Change it to

Code:

upload_max_filesize = 64M

Press CTRL + W, search for

Change it to

Press CTRL + X, press Y and then hit ENTER to save & exit
Restart Apache/PHP
Type

Code:

sudo systemctl restart apache2

Install phpMyAdmin & Hide /phpmyadmin
Start with updating package and install phpmyadmin, type

Code:

sudo apt update && sudo apt install phpmyadmin

Do the following
[*] apache2
[ ] lightpd
Select Apache2 and press <OK>
Select Yes and press ENTER to install and configure the database.
Create a password for phpMyAdmin
Test phpMyAdmin
Enter IP.COM/phpmyadmin or DOMAINNAME.COM/phpmyadmin
it should look like this

Create MySQL User[/SIZE]
If you weren’t able to log in as root above, you can now create a superuser account just for phpMyAdmin.
In terminal, log into MySQL as root. You may have created a root password when you installed MySQL for the first time or the password could be blank, in which case you can just press ENTER when prompted for a password.
Type
Now add a new MySQL user with the username of your choice. In this example we are calling it pmauser (php my admin user). Make sure to replace password_here with your own (generate a password (link removed due to advertisement)).
The % symbol tells MySQL to allow this user to log in from anywhere remotely. If you want heightened security, you could replace this with an IP address.
type
Now add a new MySQL user with the username of your choice. In this example we are calling it pmauser (php my admin user). Make sure to replace password_here with your own (generate a password (link removed due to advertisement)).
The % symbol tells MySQL to allow this user to log in from anywhere remotely. If you want heightened security, you could replace this with an IP address.
type

Code:

CREATE USER 'pmauser'@'%' IDENTIFIED BY 'password_here';

Now we will grant superuser privileges to our new user pmauser.
type

Code:

GRANT ALL PRIVILEGES ON *.* TO 'pmauser'@'%' WITH GRANT OPTION;

Now exit MySQL.
type

  • Home
  • Forum
  • The Ubuntu Forum Community
  • Ubuntu Specialised Support
  • Security
  • [ubuntu] UFW-ERROR: Could not find a profile matching «xxxx»

  1. Everytime I try to add a rule to UFW I get- ERROR: Could not find a profile matching ‘xxxxx.’
    If I go sudo ufw deny 172.18.37.125, I get- ERROR: Could not find a profile matching ‘172.18.37.125’
    sudo ufw deny outgoing- ERROR: Could not find a profile matching ‘outgoing’
    No matter what rule whether it’s deny or allow.
    I have reset ufw and uninstalled and reinstalled UFW.
    Ubuntu 14.04×64


  2. Re: UFW-ERROR: Could not find a profile matching «xxxx»

    Not an expert on UFW, but for the last few days I have been playing around with UFW on Wiley Werewolf running from an external hard disk and have had similar issues. I also tried using GUFW and successfully denied all incoming and outgoing, then, subsequently, opened tcp ports 80 and 443 for http and https, along with UDP 53 for DNS, (port numbers need checked.) So, since GUFW is a front end for UFW, I am fairly sure the problem was with me.

    My advice is to set up some rules with GUFW, try: «sudo ufw status» to see how they work, then flush and disable GUFW before trying to write your own matching rules.

    Irvine


  3. Re: UFW-ERROR: Could not find a profile matching «xxxx»

    I know how to write rules for UFW. I just did a clean reinstall of Ubuntu 14.04. This is when the profile problem started.I am trying to setup UFW the way I had it before. What I want to know is why is UFW searching for profiles for every rule. As far as I know UFW profiles are for apps to allow a specific app access. Profiles have nothing to do with aloowing/denying IPs,ports,whatever. Thanks for your reply.


  4. Re: UFW-ERROR: Could not find a profile matching «xxxx»

    You need to express a direction.
    to or from


  5. Re: UFW-ERROR: Could not find a profile matching «xxxx»

    I think the syntax you’re looking for is ‘ufw default deny outgoing’

    Code:

    $ sudo ufw deny outgoing
    ERROR: Could not find a profile matching 'outgoing'

    Code:

    $ sudo ufw default deny outgoing
    Default outgoing policy changed to 'deny'
    (be sure to update your rules accordingly)

    The short-form needs to be followed by a port/protocol or application name, as described in the man page

    Code:

    EXAMPLES
           Deny all access to port 53:
    
             ufw deny 53
    
           Allow all access to tcp port 80:
    
             ufw allow 80/tcp


  6. Re: UFW-ERROR: Could not find a profile matching «xxxx»

    No if you don’t put in/out in is the default.


  7. Re: UFW-ERROR: Could not find a profile matching «xxxx»

    ufw allow is for apps that are in your app profile. not for other rules. In the past if I entered a rule I have never had «could not find profile for xxxx»Now that is all I am getting.sudo ufw allow from 123.45.67.89= ERROR: Could not find a profile matching ‘123.45.67..89’ same for deny, and that is the right syntax.


Bookmarks

Bookmarks


Posting Permissions

Понравилась статья? Поделить с друзьями:
  • Sudo service apache2 restart error
  • Sudo rmmod r8188eu ko rmmod error module r8188eu is not currently loaded
  • Sudo parse error in etc sudoers near line
  • Sudo mysql error 1045 28000 access denied for user root localhost using password no
  • Sudo error in etc sudo conf line 0 while loading plugin sudoers policy