Подробное step-by-step описание процедуры установки в облаке Amazon EC2 вашего личного VPN, обладающего, в отличие от многих используемых продуктов такого рода, безукоризненными по-дефолту настройками безопасности - опубликовано, разумеется, с целью предоставить читателям блога возможность попрактиковаться в работе такого рода. Несмотря на то, что ссылка на Algo VPN опубликована на веб-страничке РосКомСвободы (не является на момент публикации иностранным агентом или любой иной ипостасью "врагов народа"), при выборе решения для обзора автор руководствовался сугубо достоинствами кода и простотой использования, делающей данный скрипт оптимальным решением для абсолютного большинства потенциальных его пользователей.
Сходу вынужден сообщить, основная трудность, с которой предстоит столкнуться жителю РФ - это номер банковской карты, которую необходимо привязать к аккаунту AWS. Проявите смекалку, решите как-нибудь эту проблему, я же ее как-то решаю. Прошу прощения за краткость ремарки.
Приступаем к работе. И для начала выберем из каталога AWS Marketplace AMIs (отсортировав по наивысшему рейтингу пользователей, например) - Fedora 32.
Новички, поднимающие сегодня в облаке Амазона свой первый сервер, избегнут некоторых "танцев с бубнами", если выберут в контексте описанной далее реализации уже не новый на момент данной публикации релиз Fedora 32: Fedora-Cloud-Base-32-1.6.x86_64-hvm. В дальнейшем, в процессе эксплуатации вашего нового безопасного VPN и при вашем желании, вы сможете апгрейдить Fedora до любой актуальной версии.
Итак, процедура Launch instance. В instance type рекомендую выбрать t2.micro, снабженный ярлыком Free tier eligible (новый аккаунт ожидают 12 месяцев бесплатного использования; это личный вам подарок от, надо полагать, коварного руководства Пентагона). Создаем новую пару ключей, нажав Create new key pair и оставив все опции (только название введите) по-умолчанию; загружаем ключ на свой ПК. Далее Create security group, все по умолчанию (нам нужен сейчас только вход по ssh, Allow SSH traffic from anywhere, ничего больше). Configure storage, 10 или 12 GiB gp2 Root volume рекомендую, запас шею не печет. Все, жмем Launch instance. Subscribing to Marketplace AMI требует максимум около часа, но, вероятнее всего, уже через минуту ваша подписка будет оформлена, в Manage subscriptions появится Fedora 32 Cloud Base Images (x86_64) HVM by Amazon Web Services, а на вкладке Instances в левом сайдбаре EC2 вы увидите запущенную и готовую к работе виртуальную машину с федорой на борту. Последний шажок перед тем, как заходить по ssh - откройте ElasticIPs, нажмите Allocate Elastic IP address и затем associate an Elastic IP address to an instance с вашим инстансом.
Вы можете почитать про Algo здесь.
Установите для загруженного файла с расширением .pem владельцу "только просмотр", группе и остальным запретите вообще все (chmod 400).
ОК. В линуксе с SSH все просто, в Windows вы можете использовать putty или уже можно и без него, кажется. Разбирайтесь и поехали:
$ ssh -i path-to-file/fedora.pem Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.
Ну и начнем, разумеется, с обновления системы:
$ sudo dnf update
$ sudo reboot
Отлично, а вот теперь в консоли AWS найдите меню политик: Services > IAM > Policies. Создайте политику: Create Policy.
Вне зависимости от того, один ли проект имеет место в вашей консоли AWS, или же их несколько, не будем довольствоваться назначением всеобъемлющих разрешений, а сделаем правильно: создадим для развертывания Algo минимально необходимую политику AWS. Переключаемся на вкладку JSON и копируем:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PreDeployment",
"Effect": "Allow",
"Action": [
"ec2:DescribeImages",
"ec2:DescribeKeyPairs",
"ec2:DescribeRegions",
"ec2:ImportKeyPair",
"ec2:CopyImage"
],
"Resource": [
"*"
]
},
{
"Sid": "DeployCloudFormationStack",
"Effect": "Allow",
"Action": [
"cloudformation:CreateStack",
"cloudformation:UpdateStack",
"cloudformation:DescribeStacks",
"cloudformation:DescribeStackEvents",
"cloudformation:ListStackResources"
],
"Resource": [
"*"
]
},
{
"Sid": "CloudFormationEC2Access",
"Effect": "Allow",
"Action": [
"ec2:DescribeRegions",
"ec2:CreateInternetGateway",
"ec2:DescribeVpcs",
"ec2:CreateVpc",
"ec2:DescribeInternetGateways",
"ec2:ModifyVpcAttribute",
"ec2:CreateTags",
"ec2:CreateSubnet",
"ec2:AssociateVpcCidrBlock",
"ec2:AssociateSubnetCidrBlock",
"ec2:AssociateRouteTable",
"ec2:AssociateAddress",
"ec2:CreateRouteTable",
"ec2:AttachInternetGateway",
"ec2:DescribeRouteTables",
"ec2:DescribeSubnets",
"ec2:ModifySubnetAttribute",
"ec2:CreateRoute",
"ec2:CreateSecurityGroup",
"ec2:DescribeSecurityGroups",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:RunInstances",
"ec2:DescribeInstances",
"ec2:AllocateAddress",
"ec2:DescribeAddresses"
],
"Resource": [
"*"
]
}
]
}
Назначаем для удобства тэг, присваиваем новой политике название и сохраняем.
Вновь Services > IAM, где оптимально включить многофакторную аутентификацию (MFA) в своей учетной записи root. Простейший вариант — мобильное приложение "Google Authenticator".
Здесь же, Access management > Users > Add Users. Присваиваем пользователю произвольное имя и отмечаем чекбокс Access key - Programmatic access. Next: Permissions. Выбираем Attach existing policies directly, находим в перечне только что созданную политику, отмечаем чекбокс и жмем Next. Создаем пользователя и в последнем окне не забываем Download .csv. Close.
Зайдем на сервер по ssh и установим Midnight Commander:
$ sudo dnf install mc
, затем отредактируем опции ssh-сессии, как описано в этом сообщении форума:
$ sudo mc -b
, и вперед. Закончив, ребутните сервис или даже попросту весь сервак, сейчас без разницы. Далее:
$ sudo dnf install git
$ git clone https://github.com/trailofbits/algo.git
$ sudo dnf install python3-virtualenv
$ cd algo
$ TMPDIR=/var/tmp
Будьте внимательны, это все одна команда:
$ python3 -m virtualenv --system-site-packages --python="$(command -v python3)" .env &&
source .env/bin/activate &&
python3 -m pip install -U pip virtualenv &&
python3 -m pip install -r requirements.txt
Процесс пошел, не правда ли? Несколько минут ждем благополучного его окончания, после чего в консоли (или же в mc, если соберётесь редактировать):
$ cat ~/algo/config.cfg
Как видите, здесь уже есть перечень трех профилей доступа к вашему новому VPN:
users:
- phone
- laptop
- desktop
Если этого хватит - можно ничего не менять в конфиге. Если нет - добавьте/отредактируйте (только не увлекайтесь) необходимое. Повторюсь, конфигурация по-дефолту здесь вполне секьюрная, оптимально менять что-либо лишь в том случае, если хорошо понимаете, чего именно пытаетесь добиться. Есть и третий вариант: в ходе инсталляции скрипт задаст вам несколько вопросов, и на один из них - Do you want to retain the keys (PKI)? - ответьте y(yes), это позволит редактировать список пользователей в дальнейшем.
На самом деле почти на все вопросы вы можете отвечать нажатием клавиши Enter, подтверждая дефолтное значение. Исключение составляет Enter the number of your desired provider: - введите 3, таков порядковый номер Amazon EC2 в перечне облачных провайдеров, ну и еще я бы советовал не отказываться от блокиратора рекламы, штука полезная: Do you want to enable DNS ad blocking on this VPN server?
В конце вас попросят ввести credentials. Помните, загружали файлик с расширением .csv? - открываем и поочередно копируем в консоль (через буфер обмена, разумеется) значения двух столбцов:
Enter your AWS Access Key ID (output is hidden):
Enter your AWS Secret Access Key (output is hidden):
В итоге получаем в консоли зелененькое Congratulations! Your Algo server is running, etc. Но это еще не все; скачайте на свой ПК QR-код (Quick Response code), картинку, соответствующую любому из указанных в конфиге профилей. Как-то так (подставьте правильные значения):
scp -i path-to-file/fedora.pem Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. :/home/fedora/algo/configs/XX.XXX.XXX.XXX/wireguard/phone.png /home/your_name
Установите на свой смартфон (на андроиде, например, о других осях читаем страничку Algo на гитхабе) WireGuard VPN Client из Google Play, и скормите ему QR-код. Можно работать, безопасно и бесплатно.
NB. "Да, но бесплатно только один год? А дальше как?" - ну, что мне вам ответить, уважаемые. Могу лишь выразить слабую надежду на то, что больше года бесплатность и не потребуется: или разбогатеем безмерно, как всем нам многократно обещано, или же наконец "ишак сдохнет", как в анекдоте про падишаха.