Инструкция настройки Raspberry Pi 3b и установки Ubuntu 20.04.
Установка системы на флешку
Скачайте архив
_x000D_wget https://cdimage.ubuntu.com/releases/20.04.2/release/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz Распакуйте архив.
_x000D_xz -d ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz Подключите флекшу. Узнайте название устройства.
_x000D_fdisk -l У меня команда выводит следующую информацию:
_x000D_Disk /dev/mmcblk0: 29.1 GiB, 31268536320 bytes, 61071360 sectors_x000D_Units: sectors of 1 * 512 = 512 bytes_x000D_Sector size (logical/physical): 512 bytes / 512 bytes_x000D_I/O size (minimum/optimal): 512 bytes / 512 bytes_x000D_Disklabel type: dos_x000D_Disk identifier: 0x738a4d67 Запишите образ на флешку. Поставьте в параметр «of» свой диск.
_x000D_sudo dd bs=4M if=ubuntu-20.04.2-preinstalled-server-arm64+raspi.img of=/dev/mmcblk0 conv=fsync status=progress Подключение к raspberrypi
Установите флешку в raspberrypi, включите ее и подключитесь к ней через клавиатуру.
Когда система загрузится, подождите 2 минуты, до тех пор пока инициализируется cloud init. После этого он позволит ввойти в систему под стандартным паролем.
По умолчанию пароль:
ubuntu — логин
ubuntu — пароль
Когда вы первый раз зайдете в систему, она предложит поменять пароль.
После входа в систему и смены пароля, перейдите под рут
_x000D_sudo su Установите часовой пояс
Посмотрите список часовыъ поясов:
_x000D_timedatectl list-timezones Установите часовой пояс:
_x000D_timedatectl set-timezone Asia/Almaty Настройка локали
Откройте файл /etc/locale.gen и раскоментируйте строки:
_x000D_en_US.UTF-8 UTF-8_x000D_ru_RU.UTF-8 UTF-8 выполните комманду
_x000D_locale-gen Измените hostname
В файле /etc/hostname укажите название распы, например:
_x000D_raspa1 Выполните команду:
_x000D_echo "127.0.0.1 raspa1" >> /etc/hosts Подключение к Wi Fi через WPA Supplicant
Пропустите этот пункт, если у вас Ethernet.
Создайте файл:
_x000D_touch /root/wifi.sh_x000D_chmod +x /root/wifi.sh Посмотрите название вашего Wi Fi модуля:
_x000D_ip a Он может называться как wlp3s0 или wlan0.
Измените содержимое файла /root/wifi.sh и укажите в нем название вашего Wi Fi модуля. Вместо mynetwork и passphrase укажите свои данные.
_x000D_wpa_passphrase mynetwork passphrase > /root/wifi.conf_x000D_wpa_supplicant -i wlan0 -c /root/wifi.conf &_x000D_sleep 10_x000D__x000D_ip addr add 192.168.1.25/24 dev wlan0_x000D_ip route add 192.168.1.0/24 dev wlan0 metric 100_x000D_ip route add default via 192.168.1.1 dev wlan0 metric 10_x000D__x000D_echo "nameserver 8.8.8.8" > /etc/resolv.conf_x000D_echo "Connected" Подключитесь к Wi Fi:
_x000D_/root/wifi.sh Проверьте интернет:
_x000D_ping ya.ru Настройка ssh
Установите ssh:
_x000D_apt update_x000D_apt install openssh-server_x000D_systemctl enable ssh_x000D_systemctl start ssh Поменяйте стандартный порт ssh в конфиге nano /etc/ssh/sshd_config
Порт, следует изменить на нестандартный. например:
_x000D_Port 22050 Запретить авторизацию через root по паролю, только через ключ
_x000D_PermitRootLogin prohibit-password Также можете указать:
_x000D_ClientAliveInterval 5_x000D_ClientAliveCountMax 1000 Разрешить авторизацию только определенным пользователям, укажите в самом конце файла:
_x000D_AllowUsers ubuntu Сделайте перезапуск сервиса ssh
_x000D_service sshd reload Пробросьте свои ssh ключи на распу
Сгенереруйте у себя ключи, если они не были сгенерированы:
_x000D_ssh-keygen Выполните копирование ключей:
_x000D_ssh-copy-id -i ~/.ssh/id_rsa.pub -p22050 ubuntu@IP-Адрес-Распы Создайте ssh конфиг nano ~/.ssh/config
_x000D_Host *_x000D_ Protocol 2_x000D_ KeepAlive yes_x000D_ TCPKeepAlive yes_x000D_ ServerAliveInterval 5_x000D_ ServerAliveCountMax 100_x000D_ Compression no_x000D_ #CompressionLevel 9_x000D_ #ForwardX11 yes_x000D_ UseRoaming no_x000D__x000D__x000D_Host raspa1_x000D_ Hostname 192.168.1.25_x000D_ User pi_x000D_ Port 22050_x000D_ IdentityFile ~/.ssh/id_rsa_x000D_ Теперь можно подключаться через SSH командой:
_x000D_ssh raspa1 Изменение зеркала на mirror.yandex.ru
В файле /etc/apt/sources.list заменить ports.ubuntu.com на mirror.yandex.ru
_x000D_deb http://mirror.yandex.ru/ubuntu-ports focal main restricted_x000D_deb http://mirror.yandex.ru/ubuntu-ports focal-updates main restricted_x000D_deb http://mirror.yandex.ru/ubuntu-ports focal universe_x000D_deb http://mirror.yandex.ru/ubuntu-ports focal-updates universe_x000D_deb http://mirror.yandex.ru/ubuntu-ports focal multiverse_x000D_deb http://mirror.yandex.ru/ubuntu-ports focal-updates multiverse_x000D_deb http://mirror.yandex.ru/ubuntu-ports focal-backports main restricted universe multiverse_x000D_deb http://mirror.yandex.ru/ubuntu-ports focal-security main restricted_x000D_deb http://mirror.yandex.ru/ubuntu-ports focal-security universe_x000D_deb http://mirror.yandex.ru/ubuntu-ports focal-security multiverse_x000D__x000D_# deb-src http://mirror.yandex.ru/ubuntu-ports focal main restricted_x000D_# deb-src http://mirror.yandex.ru/ubuntu-ports focal-updates main restricted_x000D_# deb-src http://mirror.yandex.ru/ubuntu-ports focal universe_x000D_# deb-src http://mirror.yandex.ru/ubuntu-ports focal-updates universe_x000D_# deb-src http://mirror.yandex.ru/ubuntu-ports focal multiverse_x000D_# deb-src http://mirror.yandex.ru/ubuntu-ports focal-updates multiverse_x000D_# deb-src http://mirror.yandex.ru/ubuntu-ports focal-backports main restricted universe multiverse_x000D_# deb-src http://mirror.yandex.ru/ubuntu-ports focal-security main restricted_x000D_# deb-src http://mirror.yandex.ru/ubuntu-ports focal-security universe_x000D_# deb-src http://mirror.yandex.ru/ubuntu-ports focal-security multiverse Отключение ipv6
Если у вас провайдер не поддерживает ipv6 протокол, то имеет смысл его отключить, чтобы разные программы, такие как apt не пробовали обращаться к серверам по ip6 протоколу, который не работает.
Для этого в файл /etc/sysctl.conf нужно добавить строчки:
_x000D_net.ipv6.conf.all.disable_ipv6 = 1_x000D_net.ipv6.conf.default.disable_ipv6 = 1 и сделать:
_x000D_sysctl -p Удаление лишних пакетов
Удалите пакеты:
_x000D_apt purge fwupd plymouth plymouth-theme-ubuntu-text snapd cloud-init_x000D_apt autoremove перезагрузитесь:
_x000D_init 6 Настройка системы
Обновите систему и установите пакеты:
_x000D_apt-get update_x000D_apt-get upgrade_x000D_apt-get install mc nano htop aptitude iftop bwm-ng iperf iperf3 iotop tmux screen sshfs net-tools Отключение автообновлений
Откройте файл /etc/apt/apt.conf.d/20auto-upgrades и установите значение «0» для Unattended-Upgrade
_x000D_APT::Periodic::Update-Package-Lists "1";_x000D_APT::Periodic::Unattended-Upgrade "0"; Настройка сети
Network Manager очень хороший способ управлять сетью. По умолчанию в Ubuntu он отключен, и нужно поставить его вручную.
Подробная инструкция по настройке Network manager здесь .
Установите программы:
_x000D_apt-get install network-manager dnsmasq dnsmasq — это мини ДНС сервер. Он удобен, потому что в нем можно прописывать свои хосты, в том числе и wildcard. Плюс он кэширует ДНС запросы.
Настройка Network Manager
Включите сервис Network Dispatcher:
_x000D_systemctl enable NetworkManager-dispatcher.service_x000D_systemctl start NetworkManager-dispatcher.service Отключите systemd resolved
_x000D_systemctl stop systemd-resolved_x000D_systemctl disable systemd-resolved_x000D_ Отключите dchp4 в netplan. В файле /etc/netplan/50-cloud-init.yaml нужно закоментить строку:
_x000D_network:_x000D_ ethernets:_x000D_ eth0:_x000D_ dhcp4: false_x000D_ optional: true_x000D_ version: 2 В файле /usr/lib/NetworkManager/conf.d/10-dns-resolved.conf указать
_x000D_dns=none Измените файл /etc/NetworkManager/NetworkManager.conf
_x000D_[main]_x000D_#auth-polkit=false_x000D_plugins=ifupdown,keyfile_x000D_#systemd-resolved=false_x000D_#rc-manager=resolvconf_x000D_dns=none_x000D__x000D_[ifupdown]_x000D_managed=false_x000D__x000D_[device]_x000D_wifi.scan-rand-mac-address=no Создайте файл /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf
_x000D_[keyfile]_x000D_unmanaged-devices=*,except:type:wifi,except:type:gsm,except:type:cdma,except:type:ethernet,interface-name:lxc*,interface-name:docker*,interface-name:virtual*,interface-name:veth*_x000D_ Этот файл позволяет указать какие сети будут управляться через Network Manager.
Параметры могут быть следующими:
_x000D_type:bridge_x000D_interface-name:lxc*_x000D_interface-name:docker*_x000D_interface-name:virtual* Более подробнее о командах здесь
Отключите управление сетью через systemd
_x000D_systemctl disable systemd-networkd.socket_x000D_systemctl disable systemd-networkd.service_x000D_systemctl disable systemd-resolved_x000D_systemctl disable networkd-dispatcher_x000D_systemctl disable cloud-init_x000D__x000D_apt-get purge cloud-init_x000D_rm -rf /etc/cloud/ && sudo rm -rf /var/lib/cloud/ Настройка dnsmasq
Скопируйте конфиг
_x000D_cp /etc/dnsmasq.conf /etc/dnsmasq.conf.example_x000D_echo "" > /etc/dnsmasq.conf Создайте файл /etc/resolv.dnsmasq
_x000D_nameserver 8.8.8.8_x000D_nameserver 8.8.4.4_x000D_nameserver 1.1.1.1 В /etc/dnsmasq.conf пропишите:
_x000D_port=53_x000D_listen-address=0.0.0.0_x000D_no-dhcp-interface=_x000D_bind-interfaces_x000D_expand-hosts_x000D_local-ttl=1_x000D_no-negcache_x000D__x000D_# Динамические настройки DNS_x000D_resolv-file=/run/NetworkManager/resolv.conf_x000D__x000D_# Настройки DNS по умолчанию_x000D_#resolv-file=/etc/resolv.dnsmasq_x000D__x000D_conf-dir=/etc/dnsmasq.d_x000D_cache-size=150_x000D_max-cache-ttl=600_x000D_min-cache-ttl=60_x000D__x000D_# Одновременный запрос ко всем DNS серверам_x000D_# all-servers_x000D__x000D_# Запрещаем резолвить домены без точки (нужно для Docker Swarm)_x000D_domain-needed_x000D__x000D_# Для отладки_x000D_#log-queries Создайте файл /etc/NetworkManager/dispatcher.d/99-dnsmasq
_x000D_#!/bin/bash_x000D__x000D_if [[ "$1" = "enp2s0" || "$1" = "wlp3s0" ]]; then_x000D_ if [ "$2" = "up" ]; then_x000D_ kill -9 `cat /var/run/dnsmasq/dnsmasq.pid`_x000D_ sleep 1_x000D_ systemctl start dnsmasq_x000D_ fi_x000D_fi Если вы хотите прописать свои хосты в системе, вы можете использовать файл /etc/hosts или создать новый файл в папке /etc/dnsmasq.d/examle.conf со следующим содержанием:
_x000D_# Example_x000D_address=/.example/127.0.0.2_x000D_address=/ns.example/127.0.0.1_x000D_address=/test.example/127.0.0.5 Данный файл говорит dnsmasq резолвить домен .examle, учитывая wildcard запросы.
Выключите резолвер из внешней сети интернет. Создайте файл /etc/dnsmasq.d/disable-external-network
_x000D_bind-interfaces_x000D_except-interface=enp*_x000D_except-interface=wlp*_x000D_except-interface=wlan*_x000D_except-interface=eth* Подключение к Wi Fi через Network Manager
Отключитесь от Wi Fi:
_x000D_killall wpa_supplicant Перезагрузитесь:
_x000D_init 6 После перезагрузки, зайдите в систему.
Включите WiFi:
_x000D_nmcli radio wifi on Просмотрите список доступных WiFi сетей:
_x000D_nmcli device wifi list Подключитесь к сети, используя логин и пароль:
_x000D_nmcli device wifi connect YourWifiNetwork password YourWifiPassword Установите метрику по умолчанию (чем меньше число, тем выше приоритет):
_x000D_nmcli c m YourWifiNetwork ipv4.route-metric 10 Установите DNS:
_x000D_nmcli c m YourWifiNetwork ipv4.ignore-auto-dns yes_x000D_nmcli c m YourWifiNetwork ipv4.dns "8.8.8.8 8.8.4.4 1.1.1.1" Количество попыток подключения к wifi если он не доступен:
_x000D_nmcli c m YourWifiNetwork connection.autoconnect-retries 3_x000D_nmcli c m YourWifiNetwork connection.autoconnect-priority 0 Настройка сети через Ethernet
Введите команды:
_x000D_nmcli connection add type ethernet con-name Eth0 ifname eth0_x000D_nmcli c m Eth0 ipv4.route-metric 100_x000D_nmcli c m Eth0 ipv4.ignore-auto-dns yes_x000D_nmcli c m Eth0 ipv4.dns "8.8.8.8 8.8.4.4 1.1.1.1"_x000D_nmcli c m Eth0 connection.autoconnect-priority 999_x000D_ Установка статического IP адреса
_x000D_nmcli c m Eth0 ipv4.addresses "192.168.1.25/24"_x000D_nmcli c m Eth0 ipv4.gateway "192.168.1.1"_x000D_nmcli c m Eth0 ipv4.method manual Настройка iptables
Установите iptables
_x000D_apt install iptables-persistent -y На вопрос Save current IPv4 rules? и Save current IPv6 rules? ответьте No
При работе с iptables будьте осторожны. Одно неверное движение и доступ к серверу может быть заблокирован!!!
Обратите на порт SSH. Укажите свой порт, вместо 22050.
Пропишите в /etc/iptables/rules.v4 следующее содержимое:
_x000D_*filter_x000D_:INPUT ACCEPT [19:913]_x000D_:FORWARD ACCEPT [0:0]_x000D_:OUTPUT ACCEPT [39:3584]_x000D_:ALLOW-INPUT - [0:0]_x000D_-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT_x000D_-A INPUT -p icmp -j ACCEPT_x000D_-A INPUT -i lo -j ACCEPT_x000D__x000D_# Разрешаем входящие соединения ssh_x000D_-A INPUT -p tcp -m state --state NEW -m tcp --dport 22050 -j ACCEPT_x000D__x000D_# Перейти к цепочке ALLOW-INPUT_x000D_-A INPUT -j ALLOW-INPUT_x000D__x000D_# Запрещаем остальные входящие соединения_x000D_-A INPUT -j REJECT_x000D_-A FORWARD -j REJECT_x000D__x000D_# Разрешить http_x000D_-A ALLOW-INPUT -p tcp -m tcp --dport 80 -j ACCEPT_x000D_-A ALLOW-INPUT -p tcp -m tcp --dport 443 -j ACCEPT_x000D__x000D_# Разрешить Docker Swarm_x000D_-A ALLOW-INPUT -p tcp -m tcp --dport 2376 -j ACCEPT_x000D_-A ALLOW-INPUT -p tcp -m tcp --dport 2377 -j ACCEPT_x000D_-A ALLOW-INPUT -p tcp -m tcp --dport 7946 -j ACCEPT_x000D_-A ALLOW-INPUT -p udp -m udp --dport 7946 -j ACCEPT_x000D_-A ALLOW-INPUT -p udp -m udp --dport 4789 -j ACCEPT_x000D__x000D_# Разрешаем входящие соединения DNS_x000D_-A ALLOW-INPUT -i docker0 -p udp -m udp --dport 53 -j ACCEPT_x000D_-A ALLOW-INPUT -i docker0 -p tcp -m tcp --dport 53 -j ACCEPT_x000D_-A ALLOW-INPUT -i docker_gwbridge -p udp -m udp --dport 53 -j ACCEPT_x000D_-A ALLOW-INPUT -i docker_gwbridge -p tcp -m tcp --dport 53 -j ACCEPT_x000D__x000D_-A ALLOW-INPUT -j RETURN_x000D__x000D_COMMIT Обязателен ENTER в конце (перевод на новую строку).
Скопируйте rules.v4 в rules.v6
_x000D_cp /etc/iptables/rules.v4 /etc/iptables/rules.v6 Установите новые правила iptables
_x000D_iptables-restore < /etc/iptables/rules.v4_x000D_ip6tables-restore < /etc/iptables/rules.v6 Чтобы добавлять новые правила в iptables, например, тот же nginx нужно редактировать файл. Также вы можете выполнить команды
_x000D_iptables -I ALLOW-INPUT -p tcp -m tcp --dport 80 -j ACCEPT_x000D_iptables -I ALLOW-INPUT -p tcp -m tcp --dport 443 -j ACCEPT Они добавят в начало цепочки ALLOW-INPUT два новых правила, но при этом файл не изменят.
Проверьте настройки iptables:
_x000D_iptables-save Обязательно проверьте соединение ssh. Попробуйте залогиниться к серверу через отдельный терминал.
Перезагрузите систему:
_x000D_init 6 Включите проверку диска
В файле /boot/firmware/cmdline.txt добавьте параметры:
_x000D_fsck.mode=force fsck.repair=yes Это позволит запускать проверку диска при старте распы.
Ограничьте размер логов systemd
Пропишите в /etc/systemd/journald.conf строчку:
_x000D_SystemMaxUse=2G Это строчка ограничивает максимальный размер логов в 2 гигабайт. Перезагрузите конфигурацию systemd:
_x000D_systemctl daemon-reload Можно также в крон прописать строчку через команду sudo crontab -e
_x000D_0 0 * * * journalctl --vacuum-time=30d --vacuum-size=2G > /dev/null Она будет оставлять логи за 30 дней
Дополнительная настройка локали
создайте файл nano /etc/profile.d/0.locale.sh со следующим содержимым:
_x000D_export LANG="en_US.UTF-8"_x000D_export LANGUAGE="en_US:en"_x000D_export LC_CTYPE="en_US.UTF-8"_x000D_export LC_NUMERIC="en_US.UTF-8"_x000D_export LC_TIME="en_US.UTF-8"_x000D_export LC_COLLATE="en_US.UTF-8"_x000D_export LC_MONETARY="en_US.UTF-8"_x000D_export LC_MESSAGES="en_US.UTF-8"_x000D_export LC_PAPER="en_US.UTF-8"_x000D_export LC_NAME="en_US.UTF-8"_x000D_export LC_ADDRESS="en_US.UTF-8"_x000D_export LC_TELEPHONE="en_US.UTF-8"_x000D_export LC_MEASUREMENT="en_US.UTF-8"_x000D_export LC_IDENTIFICATION="en_US.UTF-8"_x000D_export EDITOR=nano Если для пользователя хотите локализацию русскую, то в домашней папке в ~/.bashrc пропишите:
_x000D_LANG="ru_RU.UTF-8"_x000D_LANGUAGE="ru"_x000D_export LANG_x000D_export LANGUAGE Отключите лишние службы
_x000D_systemctl disable apport_x000D_systemctl disable cups.service_x000D_systemctl disable nmbd.service_x000D_systemctl disable ondemand.service_x000D_systemctl disable openvpn.service_x000D_systemctl disable pppd-dns.service_x000D_systemctl disable rsync.service_x000D_systemctl disable smbd.service_x000D_systemctl disable ufw.service_x000D_systemctl disable avahi-daemon.service_x000D_systemctl disable cups-browsed.service_x000D_systemctl disable bluetooth.service_x000D_systemctl disable ModemManager.service_x000D_systemctl disable strongswan.service_x000D_systemctl disable udisks2.service_x000D_systemctl disable multipathd.service_x000D_systemctl disable cloud-config.service_x000D_systemctl disable cloud-final.service_x000D_systemctl disable cloud-init-local.service_x000D_systemctl disable cloud-init.service_x000D_systemctl disable cryptdisks-early.service_x000D_systemctl disable cryptdisks.service_x000D_systemctl disable e2scrub@.service_x000D_systemctl disable e2scrub_all.service_x000D_systemctl disable e2scrub_fail@.service_x000D_systemctl disable e2scrub_reap.service _x000D_systemctl disable fwupd-offline-update.service_x000D_systemctl disable fwupd.service_x000D_systemctl disable lvm2-lvmpolld.service_x000D_systemctl disable lvm2-monitor.service_x000D_systemctl disable lvm2-pvscan@.service_x000D_systemctl disable lvm2.service_x000D_systemctl disable lxd-agent-9p.service_x000D_systemctl disable lxd-agent.service_x000D_systemctl disable ondemand.service_x000D_systemctl disable systemd-networkd.socket_x000D_systemctl disable systemd-networkd.service_x000D_systemctl disable systemd-resolved_x000D_systemctl disable networkd-dispatcher_x000D_systemctl disable packagekit_x000D_systemctl enable NetworkManager-dispatcher.service_x000D_systemctl start NetworkManager-dispatcher.service