При создании нового VPS необходимо убедиться, что вы защитите свой сервер из страшного Интернета. Единственный, который должен быть в состоянии администрировать сервер, должен быть вы и Только ты!
Есть несколько (простых) шагов, участвующих в том, как вы можете защитить свой сервер и хорошо выспаться ночью, не опасаясь, что кто-то может взломать ваш сервер.
Предварительные условия
У вас должен быть существующий или недавно установленный сервер, работающий на Ubuntu 20.08 VPS, доступный и в состоянии войти в систему.
Создайте свой первый VPS на Vultt
Флориан Капфенбергер · 12 февраля · 4 мин прочитаны
Если вы не знаете, как вы можете создать свой собственный сервер, ознакомьтесь с моим постом блога Создайте свой первый VPS на Vultr Развернуть ваш самый первый VPS, используя Vult * Отказ
Vult — это просто мой выбор для хостинга серверов в Интернете, но вы можете использовать другие поставщики, такие как Линоума или Digitalocean * слишком. Вы не можете ошибоваться, выбирая любой из упомянутых поставщиков.
Отказ от ответственности: Ссылки, содержащие a * в конце, являются партнерскими ссылками, что означает, что если вы зарегистрируетесь, используя эту ссылку, я бы получил небольшую комиссию, и это поможет мне!
Создание нового пользователя для администрирования сервера
Когда вы создаете новый VPS, вы обычно получаете доступ к root
пользователь с паролем. По соображениям безопасности мы создаем новый пользователь, который будет использоваться для администрирования сервера. Это хорошая практика, чтобы работать только с наименьшим количеством привилегий, которые вам нужны и используются Sudo
Когда вам нужно больше разрешений.
Мы отключим возможность войти в систему как root
Пользователь, использующий пароль, но мы позвольте ему войти в систему, используя аутентификацию открытого ключа.
Чтобы добавить нового пользователя, вы можете использовать AddUser
команда.
adduser phiilu
Вам будет задано несколько вопросов, включая какой пароль, который вы хотите использовать. Убедитесь, что пароль безопасен, и в лучшем случае, сгенерированный и хранится в диспетчере паролей, как 1Password или LastPass Отказ
Adding user `phiilu' ... Adding new group `phiilu' (1000) ... Adding new user `phiilu' (1000) with group `phiilu' ... Creating home directory `/home/phiilu' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for phiilu Enter the new value, or press ENTER for the default Full Name []: Florian Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n]
Теперь у нас есть новый пользователь, который мы можем использовать для входа в систему. Если вы корень
Пользователь Вы можете просто ввести
su phiilu
И вы будете войти в систему как пользователь без запроса пароля. Вы также можете использовать войти с Вход
команда.
login phiilu
Далее мы хотим дать пользователю разрешения на администрирование сервера. Прямо сейчас у нас есть новый пользователь, но у пользователя нет никакого разрешения, чтобы внести какие-либо изменения в качестве суперпользователя.
Вы можете подтвердить это при попытке обновить пакеты:
sudo apt install
[sudo] password for phiilu: phiilu is not in the sudoers file. This incident will be reported.
Как видите, нам нужно добавить новый пользователь в файл sudoers, чтобы иметь возможность выполнять команды в качестве суперпользователя.
Нам нужно выйти из нашей текущей сессии с Выход
Отказ Теперь вы должны войти в систему как root
Пользователь.
Если вы root
Вы можете ввести Visudo
Чтобы проверить текущие файл sudoers.
# # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d
Вы можете увидеть, что если пользователь находится в Sudo
Группа, он должен иметь возможность выполнять команды как корень
. Есть также Админ
Группа в моем Sudoers
Файл, который позволит пользователю в этой группе выполнить некоторые команды как корень
. Мы хотим иметь возможность сделать то же самое, что пользователь root может сделать, поэтому мы выберем Sudo
группа.
Чтобы добавить пользователя в группу, вы можете использовать УМИНМОД
Команда с использованием параметров -
для добавления и -G
Для альтернативных групп, а затем имя группы и пользователь, который вы хотите изменить.
usermod -a -G sudo phiilu
С ID
Вы можете проверить группы (и IDS) пользователя и можете подтвердить, что пользователь теперь является частью Sudo
группа.
id phiilu uid=1000(phiilu) gid=1000(phiilu) groups=1000(phiilu),27(sudo)
Теперь, когда наш пользователь находится в Sudo
Группа, вы можете войти в систему, как этот пользователь и попытаться обновить пакеты снова и на этот раз он должен работать!
Обеспечение SSH.
Теперь, когда у нас есть новый пользователь, который может выполнять команды как корень
мы можем идти вперед и укрепить наш сервер еще больше, изменив некоторые настройки для SSH
Отказ
Прежде чем делать то, что мы хотим настроить аутентификацию ключей для наших пользователей корень
И тот, который мы создали раньше.
Использование аутентификации открытого ключа
Это рекомендация «пропустить пароли с публичным ключом аутентификации» моего использования Visual Studio Code Remote для редактирования файлов на почте серверов.
Используйте Remote Remote Code Studio Code для редактирования файлов на серверах
Флориан Капфенбергер · Июль 12 · 6 мин прочитан
Общественный ключ аутентификация Безопасный способ подключения к серверу с SSH с помощью набора ключевых пар. Открытый ключ сохраняется на сервере, а закрытый ключ должен храниться на вашем локальном компьютере. Это ключ для разблокировки сервера и никогда не должен быть пропущенным или поделиться с кем-то еще.
Если вы используете Windows, вы должны иметь Git для Windows Установлено и используйте следующие команды внутри Git Bash .
Следующие команды должны быть одинаковыми для Windows и MacO, за исключением того, что вам может придеться закончить команды в Windows с .EXE
.
Создание ключа SSH
Если у вас уже есть ключ SSH, который вы можете уже использовать с портить
Вы можете пропустить этот шаг.
ssh-keygen -b 4096
Который приводит к следующему выходу.
Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/flori/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /c/Users/flori/.ssh/id_rsa. Your public key has been saved in /c/Users/flori/.ssh/id_rsa.pub. The key fingerprint is: SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx flori@Windows
Вы можете установить пароль для ключа, если хотите, но затем вы должны ввести пароль для журнала, в котором мы хотим избежать.
Скопируйте открытый ключ на сервер
Вы можете либо вручную вставить ключ на сервер, либо можно использовать программу, называемую SSH-COPY-ID
который я предпочитаю.
На MacOS вы должны установить SSH-COPY-ID
Использование заваривать
На окнах он должен быть уже присутствует в Git Bash.
brew install ssh-copy-id
Чтобы скопировать ключ на сервер, вам просто нужно войти на сервер, используя SSH-COPY-ID
полезность. Делайте этот шаг дважды для обоих пользователей.
Замените VPS_IP с реальным IP вашего VPS
ssh-copy-id root@VPS_IP
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/florian/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@VPS_IP's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@VPS_IP'" and check to make sure that only the key(s) you wanted were added.
Проверка аутентификации открытого ключа
Теперь, если вы попытаетесь войти в систему с SSH.
Вам не следует просить пароль.
Если вы все еще просят пароль, проверьте, если разрешения на autorized_keys.
Файл на сервере правильно:
ls -la ~/.ssh
drwx------ 2 root root 4096 Sep 18 17:23 . drwx------ 7 root root 4096 Sep 21 14:48 .. -rw------- 1 root root 416 Sep 18 17:23 authorized_keys
Если ваши разрешения разные, вам, возможно, придется их изменить:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
Более безопасный SSH Config
Чтобы изменить конфигурацию для SSH
Открыть /etc/ssh/sshd_config
Файл с вашим любимым текстовым редактором или вы можете проверить мое сообщение в блоге Используйте RUB CODE STUDIO CODE для редактирования файлов на серверах Чтобы использовать редактор GUI для изменения файлов серверов.
Прежде всего, я хочу изменить это root
Пользователь не может войти в систему с паролем, но должен быть в состоянии использовать аутентификацию открытого ключа для входа.
Найдите линию, которая говорит: PermitrootLogin. Да
и изменить его в Permitrootlogin без пароля
Отказ
Если вы хотите, чтобы вы могли только аутентификацию ключей, найдите следующие ключи конфигурации и измените их:
PubkeyAuthentication yes PasswordAuthentication no
Последнее, но не менее важное, разрешайте пользователям, которые вы явно определены для входа на свой сервер. Перейдите в конец файла и добавьте следующую строку:
AllowUsers phiilu root dokku
Здесь вы должны добавлять имена пользователей, разделенные пространством. В моем случае я позволяю пользователям Phiilu.
root
и Докку
войти на мой сервер, используя SSH.
После изменения конфигурации вы должны перезапустить SSHD
сервер.
sudo service sshd restart
Запретить плохие люди с Fail2ban
Интернет — это страшное место И вам нужно знать, что все там хотят захватить свой сервер. Очень важно убедиться, что плохие люди или в этом случае плохие IP-адреса отправляются в тюрьму и никогда не будут беспокоить наш сервер снова.
Вот почему мы установим Fail4ban
Отказ Fail2Ban — это небольшой сервис, который будет работать на вашем сервере и будет прочитать ваши файлы журналов и обязательно запрещает IP-адреса, которые пытаются войти на свой сервер.
В этом посте я только покажу вам, как вы настраиваете Fail4ban
Чтобы проверить только журналы SSH
Сервис, но Fail4ban
Также можно использовать для проверки других файлов журналов, таких как nginx
или Почта
.
Установка и настройка
Установка очень проста и только одна команда.
sudo apt install fail2ban
Именно поэтому нам не нужно делать какую-либо дополнительную конфигурацию, сейчас работает Fail2Ban и удостоверится, что он запрещает плохим журналом.
Если вы хотите внести изменения в файл конфигурации, вы должны скопировать оригинал /etc/fail2ban/jail.conf
Файл и создать /etc/fail2ban/jail.local
файл
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Теперь вы могли бы внести изменения в Jail.Local
и отрегулируйте запрет времени или повторы, но я думаю, что по умолчанию уже довольно хорошо.
Ubanan IP-адрес
Иногда вы можете захотеть разблокировать IP-адрес, потому что вы как-то заблокировали себя, но у вас все еще есть доступ, используя веб-консоль VPS поставщиков.
К счастью Fail4ban
Давайте легко не разблокировать IP-адреса с помощью включенного клиента:
sudo fail2ban-client set sshd unbanip IP
Здесь вы можете увидеть пример того, как я не передумал IP.
root@dokku:~# fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 1114 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 2 |- Total banned: 241 `- Banned IP list: 199.38.121.35 49.88.112.112 root@dokku:~# fail2ban-client set sshd unbanip 199.38.121.35 1 root@dokku:~# fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 1114 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 1 |- Total banned: 241 `- Banned IP list: 49.88.112.112
Проверьте, сколько IPS уже запрещено
Fail4ban поставляется с легким в использовании клиента, где вы можете проверить статус определенного сервиса и увидеть Сколько IPS уже запрещено
fail2ban-client status sshd
Это мой сервер после того, как он в сети около недели. Вы можете увидеть и подтвердить, что Интернет — это страшное место, и все хотят взять на себя ваш сервер!
Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 663 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 1 |- Total banned: 129 `- Banned IP list: 49.88.112.76
Межсетевой экран
Что такое брандмауэр? Вы можете спросить. Брандмауэр определяет правила, в которых службы могут подключаться к нашему серверу (входящими) или разрешено разговаривать с другими в Интернете (исходящие). Сервер без брандмауэра будет разрешено делать все и не имеет ограничений и может говорить со всеми, но, как мы уже узнали, мы не хотим, потому что мы не можем доверять никому в Интернете.
Многие поставщики VPS позволяют вам настроить брандмауэр внутри своей приборной панели, но для тех из вас, которые не могут сделать это, вы все еще можете использовать программный брандмауэр, такой как UFW
Отказ UFW — это программный брандмауэр, и мы можем защитить наш сервер с четырьмя командами!
ufw default deny incoming ufw default allow outgoing ufw allow ssh ufw enable
Теперь ваш сервер разрешено отвечать только на запросы, которые разговаривают по порту 22 (SSH), и каждый другой сервис отключен.
UFW Разрешить SSH
просто простой способ написать UFW Разрешить 22/TCP
. Известно, что некоторые услуги работают на конкретном порту Итак, UFW.
Уже знает много из них!
Если у вас тоже есть веб-сервер, вы, вероятно, хотите включить http
и HTTPS.
. Так что просто введите UFW Разрешить http
и UFW Разрешить HTTPS
И ваш сервер теперь разрешено отвечать на http
и https
Запросы!
Для дополнительных услуг вы можете запустить на своем сервере, вы в конечном итоге откроете больше портов.
Заключение
Хостинг вашего сервера может быть немного страшно, но если вы внимательно следили по почте, вы должны быть в порядке. Конечно, вы все равно должны войти в сервер, время от времени в Tome и запустите обновления с Sudo APT Update && Sudo APT обновление
Чтобы убедиться, что вы получите последние патчи безопасности.
Дайте мне знать в комментариях, если это было полезно, и если бы я мог пропустить то, что каждый сервер должен настроить, чтобы быть более безопасным!
Оригинал: «https://dev.to/phiilu/make-your-ubuntu-server-vps-more-secure-against-unauthorized-access-1e7c»