Compare commits

...

3 Commits

Author SHA1 Message Date
TheSt1tch d999b77188 fix page
continuous-integration/drone/push Build is passing Details
5 months ago
TheSt1tch 193087ba7a add secure linux 5 months ago
TheSt1tch 9d0bff8ea1 add helpfull links 5 months ago

@ -247,10 +247,12 @@ networks:
!!! warning "Внимание"
никогда не открывайте порт 2375 для доступа в Интернет. Вас взломают/ Это еще более важно для виртуальных частных серверов, которые обычно предоставляют доступ ко всем портам. Включите брандмауэр, чтобы разрешить только порты 80 и 443 (и заблокировать остальные) для прохождения на ваш сервер, а также реализовать обходной путь Docker IP Tables, описанный далее в этом руководстве.
Никогда не открывайте порт 2375 для доступа в Интернет. Вас взломают. Это еще более важно для виртуальных частных серверов, которые обычно предоставляют доступ ко всем портам. Включите брандмауэр, чтобы разрешить только порты 80 и 443 (и заблокировать остальные) для прохождения на ваш сервер, а также реализовать обходной путь Docker IP Tables, описанный далее в этом руководстве.
!!! note
Кроме того, порт `2375` должен быть открыт только для внутренней сети (*127.0.0.1:2375*).
Кроме того, порт `2375` должен быть открыт только для внутренней сети (*127.0.0.1:2375*).
В блоке **environment:** указываем раздел Docker API, который хотим открыть или закрыть. Я добавил комментарии, чтобы описать, какие службы требуют каких разделов API. Например, если вы не используете WatchTower, вы можете ввести **0** для нескольких разделов API.

@ -0,0 +1,4 @@
# Полезные ресурсы
[HTPasswd Generator](https://www.web2generators.com/apache-tools/htpasswd-generator)

@ -0,0 +1,130 @@
# Защита Linux
## Юзер без прав рута
Длоя начала, сделаем себе юзера, у которого не будет прав рута. Root имеет полные права в системе и если разрешать для него удаленное администрирование, то это будет не безопасно.
Новый пользователь создается командой [`adduser`](https://manpages.ubuntu.com/manpages/oracular/en/man8/adduser.8.html), во время создания вводится имя пользователя, устанавливается пароль. По умолчанию, команда `adduser` выберет первый доступный UID из диапазона обычных пользователей, заданного в файле настройки. UID может быть изменён с помощью параметра `--uid`.
```bash
adduser user1
```
После, добавим созданного пользователя в группу, которая имеет право выполнять команды с повышением привилегий `sudo`. В различных дистрибутивах это могут быть разные команды:
=== "CentOS и Red Hat"
```bash
usermod -aG wheel <username>
```
=== "Ubuntu"
```bash
usermod -aG sudo <username>
```
## SSH Ключи вместо паролей
Пароли это конечно хорошо, но в случае утечки - это вектор атаки. Так же, не забываем, что пароль всегда можно подобрать через брутфорс. Если брутфорс можно отсеить через fail2ban, то как быть с утечкой? Все просто - можно вместо паролей использовать аутентификацию по ключам.
Рассмотрим самую популярную реализации протокола SSH - OpenSSH
=== "Клиентская"
```bash
sudo apt install openssh-client
```
=== "Серверная"
```bash
# Установка на сервере
sudo apt install openssh-server
#Запуск демона SSH (sshd) на сервере под Ubuntu
sudo systemctl start sshd
#
Автоматический запуск демона при каждой загрузке
sudo systemctl enable sshd
```
!!! tip
Замечу, что серверная часть OpenSSH включает в себя клиентскую. То есть через openssh-server можно подключаться к другим серверам.
Нет смысла на обычном пк, не являющимся сервером, ставить полноценный сервер OpenSSH - это только даст возможность удалённого подключения к компьютеру (кроме случаев когда это дейсвтительно нужно)
После того, как OpenSSH поставлен, нужно сгенерировать ключи SSH на компьютере, с которого вы будете заходить на сервер:
```bash
ssh-keygen -t rsa
```
Публичный ключ хранится в файле `.pub` и выглядит как строка случайных символов, которые начинаются с `ssh-rsa`.
```
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname
```
Затем нужно из-под рута создать на сервере директорию SSH в домашнем каталоге пользователя и добавить публичный ключ SSH в файл authorized_keys, используя текстовый редактор вроде nano:
```bash
mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys
nano /home/user_name/.ssh/authorized_keys
```
После устанавливаем корректные разрешения для файла и меняем владельца:
```bash
chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys
chown -R username:username /home/username/.ssh
```
На стороне клиента указываем местоположение секретного ключа для аутентификации:
```bash
ssh-add DIR_PATH/keylocation
```
Теперь можно залогиниться на сервер под именем юзера по этому ключу:
```bash
ssh [username]@hostname
```
!!! warning
Настоятельно рекомендую сделать несколько резервных копий приватного ключа. Так как если авторизация по паролю будет отключена, а приватный ключ утерян, то для того чтобы войти на сервер, нужен будет или прямой доступ к клавиатуре или KVM консоль.
По умолчанию, в Убунте отключен вход через ssh под рутом, но в Debian и других ОС нет. Чтобы отключить, нужно в файле `/etc/ssh/sshd_config` найти строчку `PermitRootLogin yes` и изменить значение на `no`.
После, можно отключить авторизацию пользователя по паролю. Для этого все в том же файле `/etc/ssh/sshd_config` меняем параметр у строки `PasswordAuthentication` yes на `no`.
## Fail2Ban
Ранее, я уже уопминал про защиту от брутфорса, используя Fail2Ban. Fail2Ban - это сервис, который анализирует логи и считает количество авторизаций за период времени с каждого IP адреса. К примеру, можно блокировать доступ к серверу, если за последний час было 5 проваленных авторизаций.
Установка обычная, через пакет:
```bash
sudo apt install fail2ban
systemctl start fail2ban
systemctl enable fail2ban
```
У сервиса есть 2 конфига: `/etc/fail2ban/fail2ban.conf` и `/etc/fail2ban/jail.conf`. Параметры ограничений указываются во втором файле:
```text
[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5
```
## Смена портов по умолчанию
По умолчанию, SSH работает на 22 порту и если не стоит fail2ban, а сервер смотрит в интернет, то в логах начнут попадатся брутфорс. Даже с учетом отключенной авторизации через пароли. Чтобы лишний раз не триггерить сканеры, рекоменудю сменить порт у SSH на любой другой.
Сделать это можно в файле `/etc/ssh/sshd_config` в параметре `Port 22`
Чтобы подключиться к серверу через кастомный порт, используется команда вида:
```
ssh server -p port
```

@ -78,6 +78,7 @@ nav:
- Обновление дистрибутива: ubuntu/upgrade-dist.md
- Русский язык в консоли: ubuntu/add-locale-russian.md
- Отключение AppArmor: ubuntu/disable-apparmor.md
- Защита Linux: ubuntu/secure-linux.md
- Backup:
- Google Диск: ubuntu/backup/google.md
- Yandex: ubuntu/backup/yandex.md
@ -173,6 +174,7 @@ nav:
- Wirenboard:
- Новый контроллер: smart-home/wirenboard/new-controller.md
- Другое:
- Полезные ресурсы: other/helpfull-links.md
- Закрыть фишинговый сайт: other/close-phishing-site.md
- SSL для сайта: other/ssl-for-site.md
- Self Hosted: other/self-hosted.md

Loading…
Cancel
Save