Cockpit¶
sudo apt install -y cockpit-storaged
sudo apt install -y cockpit-networkmanager
sudo apt install -y cockpit-packagekit packagekit packagekit-tools
sudo systemctl enable --now packagekit
sudo apt install -y cockpit-pcp pcp
sudo systemctl enable --now pmcd pmlogger
sudo apt install -y cockpit-machines qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt,kvm $USER
sudo apt install -y cockpit-podman podman
systemctl --user enable --now podman.socket
loginctl enable-linger $USER
sudo apt install -y cockpit-sosreport
sudo systemctl restart cockpit.socket
Docker¶
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker
sudo systemctl status docker
sudo usermod -aG docker $USER
newgrp docker
docker --version
docker run --rm hello-world
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r .tag_name)/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
sudo apt update && sudo apt install -y lm-sensors htop smartmontools i7z dstat sysstat btop python3-pip nvtop glances iotop iftop nload
sudo sensors-detect
sensors htop
Заменить /dev/sda на нужный диск sudo smartctl -a /dev/sda
sudo i7z dstat iostat mpstat pidstat btop
pip3 install s-tui s-tui
nvtop glances sudo iotop sudo iftop nload
Деплой сервисов в linux¶
Nextcloud¶
Docker deploy¶
docker-compose.yml¶
services:
nextcloud:
image: nextcloud:28.0
container_name: nextcloud
restart: unless-stopped
ports:
- "21103:80"
volumes:
- /mnt/vortex/nextcloud/config:/var/www/html/config
- /mnt/vortex/nextcloud/data:/var/www/html/data
- /mnt/vortex/nextcloud/apps:/var/www/html/custom_apps
- /mnt/vortex/nextcloud/themes:/var/www/html/themes
environment:
- POSTGRES_HOST=nextcloud_db
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=210605
- NEXTCLOUD_ADMIN_USER=ramil
- NEXTCLOUD_ADMIN_PASSWORD=210605
depends_on:
- nextcloud_db
networks:
- nextcloud_network
nextcloud_db:
image: postgres:16.3
container_name: nextcloud_db
restart: unless-stopped
volumes:
- /mnt/vortex/nextcloud/postgres:/var/lib/postgresql/data
environment:
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=210605
networks:
- nextcloud_network
networks:
nextcloud_network:
name: nextcloud_network
Можно указать в "127.0.0.1:8080:80" чтобы иметь доступ только в localhost
Можно указать Trusted domains сразу через env
environment:
- NEXTCLOUD_TRUSTED_DOMAINS=ваш-домен.com
- NEXTCLOUD_TRUSTED_DOMAINS=ваш_домен.com,localhost,192.168.xxx.xxx
Запуск контейнера:
Добавить доверенные доменны для деплоя:
Добавить в vim /mnt/vortex/nextcloud/config/config.php
После изменений в volumes - docker restart <container_name>
SSL сертификаты¶
Добавить в vim /mnt/vortex/nextcloud/config/config.php
Добавить nginx конфиг стандартный сначала без ssl сертификатов
server {
listen 80;
server_name aze-umma.ru;
location / {
proxy_pass http://127.0.0.1:45001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
sudo dnf install certbot python3-certbot-nginx - для fedora dnf install certbot
sudo pacman -S certbot certbot-nginx - для archlinux
Выдать сертификат
sudo certbot --nginx
sudo certbot --nginx -d cloud.domain-example.ru
Проверка
openssl s_client -connect cloud.ramil21.ru:443
sudo ss -tulnp | grep 9090
После выдачи ssl сертификата на сайт конфиг поменяется на
server {
server_name cloud.ramil21.ru;
location / {
proxy_pass http://127.0.0.1:21103;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/cloud.ramil21.ru/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/cloud.ramil21.ru/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = cloud.ramil21.ru) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name cloud.ramil21.ru;
return 404; # managed by Certbot
}
Ошибка загрузки больших данных - ограничение nginx body¶
Gitlab¶
docker run --detach --publish 443:443 --publish 80:80 --publish 22:22 --name gitlab --restart always --shm-size 256m gitlab/gitlab-ee:
пароль из гитлаб по умолчанию
sudo docker exec -it
Wireguard¶
Docker deploy¶
docker-compose.yml¶
Задать хэшированный пароль
docker run --detach \
--name wg-easy \
--env LANG=ru \
--env WG_HOST=45.93.5.140 \
--env PASSWORD_HASH='$2a$12$K/hAkEbJhkE2HFtpVQ.Ly.YofSCJCmkCg6Vuu/YbFt653h1X1VQTS' \
--env PORT=51821 \
--env WG_PORT=51820 \
--volume ~/.wg-easy:/etc/wireguard \
--publish 51820:51820/udp \
--publish 51821:51821/tcp \
--cap-add NET_ADMIN \
--cap-add SYS_MODULE \
--sysctl 'net.ipv4.conf.all.src_valid_mark=1' \
--sysctl 'net.ipv4.ip_forward=1' \
--restart unless-stopped \
ghcr.io/wg-easy/wg-easy
Включить IP forwarding на хосте напрямую:
Либо добавить в /etc/sysctl.conf:
Чтобы получить доступ к админке роутера, на клиенте в конфиг вручную надо добавить в AllowedIPs:
НО, иногда не работает, и придется прокидывать порт через ssh -L
motd¶
статический MOTD cat /etc/motd
(Все исполняемые скрипты из этой директории выполняются по порядку) ls -l /etc/update-motd.d/
run-parts /etc/update-motd.d/ bash /etc/update-motd.d/99-harbor
sudo chmod -x /etc/update-motd.d/* sudo chmod +x /etc/update-motd.d/99-justheader-harbor
входы и юзеры¶
who - Кто в системе прямо сейчас
w - Кто в системе прямо сейчас подробнее с ip и idle
users - Быстрый список логинов
last -a - История успешных логинов (и ребутов)
last -a | grep -E "sshd|pts/" - только ssh сессии
lastlog - кто логинился последний раз
lastlog -u ramil - по конкретному юзеру
Неудачные попытки входа
sudo grep -i "failed password" /var/log/auth.log | tail -n 50
sudo grep -i "invalid user" /var/log/auth.log | tail -n 50
Список активных SSH-сессий из логов
Процессы конкретного пользователя
Fail2ban¶
sudo fail2ban-client status - Какие jail’ы активны
sudo fail2ban-client status sshd - Статус конкретного jail (обычно sshd)
логи:
Снять бан с IP
sudo fail2ban-client set sshd unbanip 101.91.192.9
Посмотреть, какие IP сейчас в nft-наборе (реально забанены)
sudo nft list set inet f2b-table addr-set-sshd
sudo fail2ban-client status sshd | sed -n '/Banned IP list/p' - что делает команда?
Создание ключей под мой sshd конфиг:¶
На локальной машине
ssh-keygen -t ed25519 -a 64 -f ~/.ssh/id_ed25519_harbor -C "ramil@harbor"
приватный ключ: ~/.ssh/id_ed25519_harbor (никому не показывать) публичный ключ: ~/.ssh/id_ed25519_harbor.pub (его можно копировать)
на сервер:
ssh-copy-id -i ~/.ssh/id_ed25519_harbor.pub ramil@harbor
Он сам добавит ключ в:
/home/ramil/.ssh/authorized_keys
либо
cat ~/.ssh/id_ed25519_harbor.pub
На сервере:
Вставить одной строкой публичный ключ, сохранить, затем:
chmod 600 ~/.ssh/authorized_keys
Настроить на локальной машине удобный вход (config)
vim ~/.ssh/config