Raspbian на Raspberry Pi 3b
Инструкция установки и настройки системы Raspbian на Raspberry Pi 3b.
Инструкция устарела. Используйте Ubuntu.
Установка системы на флешку
Скачайте архив https://www.raspberrypi.org/downloads/raspbian/
wget https://downloads.raspberrypi.org/raspios_lite_armhf_latest
Распакуйте архив.
unzip raspios_lite_armhf_latest
Подключите флекшу. Узнайте название устройства.
fdisk -l
У меня команда выводит следующую информацию:
Disk /dev/mmcblk0: 29.1 GiB, 31268536320 bytes, 61071360 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x738a4d67
Запишите образ на флешку. Поставьте в параметр "of" свой диск.
sudo dd bs=4M if=2020-08-20-raspios-buster-armhf-lite.img of=/dev/mmcblk0 conv=fsync status=progress
Подключение к raspberrypi
Установите флешку в raspberrypi, включите ее и подключитесь к ней через клавиатуру.
По умолчанию пароль:
pi - логин
raspberry - пароль
Войдите в систему и подключитесь под рут:
sudo su
Смените пароль от пользователя pi:
passwd pi
Два раза введите новый пароль
Запустите мастер конфигурации:
raspi-config
Настройка Клавиатуры
1) Выберите Пункт 4 Localisation Options в меню raspi-config
2) Затем пункт 3 Change Keyboard Layout.
3) Укажите Generic 105-key PC (intl.)
4) Выберите Other и найдите English (US), переключитесь табом на OK и нажмите Enter. Выйдет список с раскладками, нужно выбрать снова English US и нажать Enter.
5) Затем укажите The default for the keyboard layout
6) После этого No compose key
7) Завершите настройку, выберите параметр <Finish>
Подключение к сети
Первое подключение к сети производиться через raspi-config.
1) Выберите пункт 2 Network Options
2) Затем пункт N2 Wireless LAN
3) Укажите страну
4) Введите ваш SSID. Это название сети.
5) Затем пароль
Проверьте подключение через команды:
ip a
ping google.com
Настройка локали
Откройте файл /etc/locale.gen и раскоментируйте строки:
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8
выполните комманду locale-gen -a
Обновите систему
apt update
apt upgrade
apt install aptitude mc nano htop iftop bwm-ng iperf iperf3 iotop tmux screen openntpd sshfs net-tools -y
Настройка сети
Рекомендуется использовать NetworkManager для управления сетью и WiFi. Для этого установите Network Manager и удалите старые программы для управления сетью
apt-get install network-manager
apt purge openresolv
apt purge dhcpcd5
systemctl disable wpa_supplicant
Пересоздайте resolv.conf
rm /etc/resolv.conf
nano /etc/resolv.conf
Пропишите в нем ДНС сервера
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 1.1.1.1
Измените файл /etc/NetworkManager/NetworkManager.conf
[main]
#auth-polkit=false
plugins=ifupdown,keyfile
dns=none
[ifupdown]
managed=false
[device]
wifi.scan-rand-mac-address=no
Создайте файл /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf
[keyfile]
#unmanaged-devices=*,except:type:wifi,except:type:wwan
unmanaged-devices=type:bridge,interface-name:lxc*,interface-name:docker*;interface-name:virtual*
Перезагрузите распу
init 6
Настройка локальной сети
nmcli connection add type ethernet con-name Eth0 ifname eth0
nmcli c m Eth0 ipv4.route-metric 20
Если нужно указать статический IP адрес выполните:
nmcli c m Eth0 ipv4.method manual
nmcli c m Eth0 ipv4.dns 8.8.8.8;8.8.4.4;
nmcli c m Eth0 ipv4.address1 192.168.1.25/24,192.168.1.1
Настройка WiFi
Выполните команду
nmcli device wifi list
она покажет список WiFi сетей. Подключитесь к WiFi сети:
nmcli device wifi connect "YourWifiNetwork" password "YourWifiPassword"
Просмотрите список подключений:
nmcli c show
Установите метрику 10 для подключения wifi
nmcli c m YourWifiNetwork ipv4.route-metric 10
Metric 10 нужен, чтобы все пакеты в интернет шли через Wi-Fi. Нужно указать минимальное число больше нуля. Рекомендуется поставить метрику 10.
Настройка ssh
Узнайте IP адрес распы через команду:
ifconfig
Установите ssh:
apt update
apt install openssh-server -y
systemctl enable ssh
systemctl start ssh
Поменяйте стандартный порт ssh в конфиге nano /etc/ssh/sshd_config
Порт, следует изменить на нестандартный. например:
Port 22050
Запретить авторизацию через root по паролю, только через ключ
PermitRootLogin prohibit-password
Также можете указать:
ClientAliveInterval 5
ClientAliveCountMax 1000
Разрешить авторизацию только определенным пользователям, укажите в самом конце файла:
AllowUsers pi
Сделайте перезапуск сервиса ssh
service sshd reload
Пробросьте свои ssh ключи на распу
Сгенереруйте у себя ключи, если они не были сгенерированы:
ssh-keygen
Выполните копирование ключей:
ssh-copy-id -i ~/.ssh/id_rsa.pub -p22050 pi@IP-Адрес-Распы
Создайте ssh конфиг nano ~/.ssh/config
Host *
Protocol 2
KeepAlive yes
TCPKeepAlive yes
ServerAliveInterval 5
ServerAliveCountMax 100
Compression no
#CompressionLevel 9
#ForwardX11 yes
UseRoaming no
Host raspberry1
Hostname 192.168.1.25
User pi
Port 22050
IdentityFile ~/.ssh/id_rsa
теперь можно подключаться командой:
ssh raspberry1
Настройка iptables
Установите iptables
apt install iptables-persistent -y
На вопрос Save current IPv4 rules? и Save current IPv6 rules? ответьте No
При работе с iptables будьте осторожны. Одно неверное движение и доступ к серверу может быть заблокирован!!!
Обратите на порт SSH. Укажите свой порт, вместо 22050.
Пропишите в /etc/iptables/rules.v4 следующее содержимое:
*filter
:INPUT ACCEPT [19:913]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [39:3584]
:ALLOW-INPUT - [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
# Разрешаем входящие соединения ssh
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22050 -j ACCEPT
# Перейти к цепочке ALLOW-INPUT
-A INPUT -j ALLOW-INPUT
# Запрещаем остальные входящие соединения
-A INPUT -j REJECT
-A FORWARD -j REJECT
# Разрешить http
-A ALLOW-INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A ALLOW-INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A ALLOW-INPUT -j RETURN
COMMIT
Обязателен ENTER в конце (перевод на новую строку).
Скопируйте rules.v4 в rules.v6
cp /etc/iptables/rules.v4 /etc/iptables/rules.v6
Установите новые правила iptables
iptables-restore < /etc/iptables/rules.v4
ip6tables-restore < /etc/iptables/rules.v6
Чтобы добавлять новые правила в iptables, например, тот же nginx нужно редактировать файл. Также вы можете выполнить команды
iptables -I ALLOW-INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -I ALLOW-INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Они добавят в начало цепочки ALLOW-INPUT два новых правила, но при этом файл не изменят.
Проверьте настройки iptables:
iptables-save
Обязательно проверьте соединение ssh. Попробуйте залогиниться к серверу через отдельный терминал.
Ограничьте размер логов systemd
Пропишите в /etc/systemd/journald.conf строчку:
SystemMaxUse=10G
Это строчка ограничивает максимальный размер логов в 10 гигабайт. Перезагрузите конфигурацию systemd:
systemctl daemon-reload
Можно также в крон прописать строчку:
journalctl --vacuum-time=30d --vacuum-size=10G
Она будет оставлять логи за 30 дней
Дополнительная настройка локали
создайте файл nano /etc/profile.d/0.locale.sh со следующим содержимым:
export LANG="en_US.UTF-8"
export LANGUAGE="en_US:en"
export LC_CTYPE="en_US.UTF-8"
export LC_NUMERIC="en_US.UTF-8"
export LC_TIME="en_US.UTF-8"
export LC_COLLATE="en_US.UTF-8"
export LC_MONETARY="en_US.UTF-8"
export LC_MESSAGES="en_US.UTF-8"
export LC_PAPER="en_US.UTF-8"
export LC_NAME="en_US.UTF-8"
export LC_ADDRESS="en_US.UTF-8"
export LC_TELEPHONE="en_US.UTF-8"
export LC_MEASUREMENT="en_US.UTF-8"
export LC_IDENTIFICATION="en_US.UTF-8"
Если для пользователя хотите локализацию русскую, то в домашней папке в ~/.bashrc пропишите:
LANG="ru_RU.UTF-8"
LANGUAGE="ru"
export LANG
export LANGUAGE
Настройте ntpd
Установите:
aptitude install ntpdate
NTPD обеспечивает синхронизацию времени.
Откройте файл /etc/ntpd.conf и пропишите:
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server 3.pool.ntp.org
server 0.ubuntu.pool.ntp.org
server 1.ubuntu.pool.ntp.org
server 2.ubuntu.pool.ntp.org
server 3.ubuntu.pool.ntp.org
В конце нужен ENTER
Перезапустите ntp
systemctl stop openntpd
systemctl start openntpd
systemctl enable openntpd
Автоматическая синхронизация времени
Запустите команду
sudo crontab -e
Добавьте в крон строчку, каждые 12 часов будет производиться синхронизация времени
26 */12 * * * python -c 'import random; import time; time.sleep(random.random() * 12 * 3600)' && ntpdate -s time.nist.gov
В файл /etc/rc.local добавьте строчку ntpdate -s time.nist.gov, чтобы при запуске часы синхронизировались:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
sleep 30
ntpdate -s time.nist.gov
fi
exit 0