October 3, 2021

Server Set Up Instruction

update all packages

sudo apt update && apt upgrade -y && sudo apt install libffi-dev
sudo apt install -y mosh tmux htop git curl wget unzip zip gcc build-essential make

sudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

sudo apt install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev zlib1g-dev libssl-dev openssl libgdbm-dev libgdbm-compat-dev liblzma-dev libreadline-dev libncursesw5-dev libffi-dev uuid-dev

sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \ libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \ xz-utils tk-dev libffi-dev liblzma-dev python-openssl git

sudo apt-get install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev \ zlib1g-dev libssl-dev openssl libgdbm-dev libgdbm-compat-dev liblzma-dev libreadline-dev \ libncursesw5-dev libffi-dev uuid-dev

sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus

sudo apt-get install libncursesw5-dev libgdbm-dev libc6-dev

sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev

sudo apt-get install libssl-dev openssl

sudo apt-get install libffi-dev

sudo apt install libffi-dev

Generate ssh key:

ssh-keygen

ssh-copy-id {username}@{ip-сервера}

or copy from /root/.ssh/id_rsa.pub

If your SSH folder does not yet exist, create it manually:

mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys

Paste the SSH public key into your ~/.ssh/authorized_keys file (see Installing and Using the Vim Text Editor on an Cloud Server):

sudo vim ~/.ssh/authorized_keys

Для putty требуется скачать PuTTy Key Generator, чтобы сделать .ppk ключ из .pub

Загружаем RSA-ключ:

И сохраняем его под новым именем:

Далее убедимся, что директория ~/.ssh и файл authorized_keys имеют подходящие права доступа:

chmod -R go= ~/.ssh

Эта команда удаляет права доступа для “group” и “other” для директории

~/.ssh/.

~/.ssh/id_rsa.pub — открытый ключ. Его копируют на сервера, куда нужно получить доступ.
~/.ssh/id_rsa — закрытый ключ. Его нельзя никому показывать.

Если вы используете аккаунт root для настройки ключей для аккаунта пользователя, важно, чтобы директория ~/.ssh принадлежала этому самому пользователю, а не пользователю root:

chown -R {username}:{groupname} ~/.ssh

Configure SSH:

sudo nano /etc/ssh/sshd_config
    AllowUsers www
    PermitRootLogin no 
    PasswordAuthentication no # Отключает доступ с паролем на сервер
    MaxAuthTries 2
    LoginGraceTime 120 #*на* 30
    Port 22  # *на* 2223
    Protocol 2
    
    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile      .ssh/authorized_keys
    PermitEmptyPasswords no
    UsePAM no
    
    DenyUsers nginx
    DenyGroups nginx
    UsePrivilegeSeparation sandbox
    

Создаем пользователя

Restart SSH server

sudo service ssh restart // sudo reload ssh

Install python 3.x

check latest python.org/downloads

mkdir ~/code

Build from source python 3.x, install with prefix to ~/.python folder:

mkdir ~/.python ; \
wget https://www.python.org/ftp/python/3.x.x/Python-3.x.x.tgz ; \
tar xvf Python-3.x.x.tgz ; \
cd Python-3.x.x ; \
./configure --enable-optimizations --prefix=/home/{username}/.python ; \
make -j4 ; \
sudo make altinstall 

*"sudo make install" или в папку local: "sudo make altinstall"
* # alternatively `make -j 4` will utilize 4 threads

удалить файлы дистрибутива:

sudo rm -rf cd /home/{username}/Python-3.x.x
sudo rm -rf cd /home/{username}/Python-3.x.x.tgz

Создадим окружение

sudo /home/{username}/.python/bin/python3.x -m venv /home/{username}/venv
source /home/{username}/venv/bin/activate

Now python3.x in /home/{username}/.python/bin/python3.x. Update pip:

sudo /home/{username}/.python/bin/python3.x -m pip install -U pip

sudo /home/{username}/.python/bin/python3.x -m pip install -U --index-url=http://pypi.python.org/simple/ --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org pip

Ok, now we can pull our project from Git repository (or create own), create and activate Python virtual environment:

cd code git pull project_git cd project_dir python3.x -m venv env . ./env/bin/activate

configure systemd...

nginx

sudo apt install nginx
service nginx start

/etc/nginx/sites-available/default

crontab -u {username} -e

измменить время сервера:
"dpkg-reconfigure tzdata"

# Ограничим возможности потенциальных злоумышленников к подбору паролей SSH. Воспользуемся утилитой fail2ban. Также позже мы настроим fail2ban для блокирования возможности подбора пароля к WordPress.
"sudo apt-get install fail2ban"

nano /etc/fail2ban/jail.d/sshd.conf
[sshd]
enabled   = true
port      = 9724
filter    = sshd
ignoreip  = 127.0.0.1/8
logpath   = /var/log/auth.log
findtime  = 300 
maxretry  = 3
bantime   = 3600

port — по какому порту банить IP, попавший на bantime. Если на сервере нестандартный порт SSH, укажите его здесь ignoreip — белый список IP, меняем на свои значения findtime — время, в течение которого можно ошибиться не более maxretry раз maxretry — максимальное число попыток авторизоваться по SSH в течение findtime bantime — время бана

[sshlongterm]
enabled   = true
filter    = sshd
logpath   = %(sshd_log)s
banaction = iptables-allports
findtime  = 1d
maxretry  = 21
bantime   = 1w

banaction — как банить. Чтобы банить по всем портам, указываем iptables-allports, в таком случае, указывать port не обязательно


После внесения изменений нужно перезагрузить fail2ban
Как перезагрузить fail2ban
# sudo service fail2ban start
service fail2ban restart
https://sheensay.ru/ssh

Устанавливаем fail2ban:

apt­-get install fail2ban
Отредактируем файлик jail

nano /etc/fail2ban/jail.conf

Находим секцию ssh и приводим к такому виду:

[ssh]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
findtime = 3600
maxretry = 6
bantime = 86400