- Создаем пользователя с правами root
- Настраиваем аутентификацию по ssh-ключу
- Устанавливаем Docker и Portainer
- Улучшаем безопасность SSH-доступа
- Устанавливаем базовые утилиты и автообновления
- Настраиваем Fail2Ban
- Docker: best practices
- Настройка домена и HTTPS (Nginx + Let's Encrypt)
- Финальная проверка чеклист
Для начала создадим отдельного пользователя с правами root в целях повышения безопасности.
Логинимся на сервер по ssh:
ssh root@your_server_ip
После успешного входа создаем нового пользователя:
adduser iposho
Выдаем пользователю root-привилегии:
usermod -aG sudo iposho
На локальном компьютере создаем 4096-битный ssh-ключ:
ssh-keygen -t rsa -b 4096
Копируем ключ на удаленный сервер:
ssh-copy-id -i ~/.ssh/key.pub iposho@your_server_ip
Добавляем ключ в агента:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/key
Файл ~/.ssh/config
:
Host your_server_ip
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/key
Установка Docker:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world
sudo usermod -aG docker iposho
Установка Portainer:
docker volume create portainer_data
docker run -d -p 9000:9000 -p 9443:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:2.21.4
Панель Portainer будет доступна по адресу: https://your_server_ip:9443
Отключаем вход по паролю и root-доступ:
sudo nano /etc/ssh/sshd_config
Измените строки:
PasswordAuthentication no
PermitRootLogin no
Перезапускаем SSH:
sudo systemctl restart ssh
sudo apt-get install -y git ufw fail2ban htop unzip apt-transport-https software-properties-common gnupg2
Настраиваем UFW:
sudo ufw allow OpenSSH
sudo ufw enable
Автоматические обновления:
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
Проверка:
cat /etc/apt/apt.conf.d/20auto-upgrades
Проверка:
sudo systemctl status fail2ban
Пример базовой конфигурации:
sudo nano /etc/fail2ban/jail.local
[sshd]
enabled = true
bantime = 1h
findtime = 10m
maxretry = 5
sudo systemctl enable docker
Для организации:
sudo mkdir -p /opt/containers/portainer
Алиас для удобства:
echo "alias dps='docker ps --format \"table {{.Names}}\t{{.Status}}\t{{.Ports}}\"'" >> ~/.bashrc
source ~/.bashrc
sudo apt install nginx certbot python3-certbot-nginx
Пример конфигурации:
server {
listen 80;
server_name your.domain.com;
location / {
proxy_pass https://localhost:9443;
proxy_ssl_verify off;
}
}
Сертификат:
sudo certbot --nginx -d your.domain.com
Шаг | Готово |
---|---|
Создан пользователь с sudo |
✅ |
Настроен вход по ssh-ключу | ✅ |
Отключен root-доступ | ✅ |
Установлены Docker и Portainer | ✅ |
Настроен фаервол UFW | ✅ |
Установлены автообновления | ✅ |
Подключен Fail2Ban | ✅ |
Настроен домен + HTTPS | ⬜️ |