<?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>CentOS &#8902; Clip-Clap</title>
	<atom:link href="https://clip-clap.ru/tag/centos/feed/" rel="self" type="application/rss+xml" />
	<link>https://clip-clap.ru/tag/centos/</link>
	<description></description>
	<lastBuildDate>Tue, 05 Jan 2021 19:21:37 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.8</generator>

<image>
	<url>https://clip-clap.ru/wp-content/uploads/2020/07/cropped-favicon-32x32.png</url>
	<title>CentOS &#8902; Clip-Clap</title>
	<link>https://clip-clap.ru/tag/centos/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Настройка FAIL2BAN в CENTOS</title>
		<link>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-fail2ban-%d0%b2-centos/</link>
					<comments>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-fail2ban-%d0%b2-centos/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sat, 05 Dec 2020 22:28:49 +0000</pubDate>
				<category><![CDATA[CentOS]]></category>
		<category><![CDATA[fail2ban]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=3118</guid>

					<description><![CDATA[<p>Если у вас есть сервер или компьютер, напрямую подключены к интернету, то они подвержены определенному риску. Сейчас любой интернет сервер</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-fail2ban-%d0%b2-centos/">Настройка FAIL2BAN в CENTOS</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Если у вас есть сервер или компьютер, напрямую подключены к интернету, то они подвержены определенному риску. Сейчас любой интернет сервер или VPS является потенциальной мишенью для хакерских атак. Правильно <a href="https://clip-clap.ru/it/mikrotik/%d0%b1%d0%b0%d0%b7%d0%be%d0%b2%d0%b0%d1%8f-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%84%d0%b0%d0%b5%d1%80%d0%b2%d0%be%d0%bb%d0%b0-%d0%b2-%d0%bc%d0%b8%d0%ba%d1%80%d0%be%d1%82%d0%b8/">настроенный фаервол</a> может предотвратить многие из атак. Но вам по-прежнему нужно оставить открытыми некоторые службы, чтобы иметь возможность администрировать сервер, например, SSH.</p>



<p>Этот протокол часто является мишенью перебора. Но к счастью есть решение. Инструмент Fail2ban позволяет блокировать доступ с IP адресов при большом количестве неверных логинов. Программа fail2ban может использоваться не только для SSH, она может защитить различные формы веб-аутентификации, FTP, и предотвратить DoS атаки на сервер. В этой статье мы рассмотрим как выполняется установка и настройка Fail2ban CentOS 7 поскольку эта операционная система часто используется для серверов.<br></p>


</br>



<h2 class="wp-block-heading">УСТАНОВКА FAIL2BAN</h2>



<p>Программа fail2ban очень часто используется для защиты серверов, поэтому она есть в официальном репозитории EPEL. Для установки программы сначала добавим репозиторий:</p>



<p><code>&nbsp;yum update &amp;&amp; sudo yum install epel-release</code></p>



<p>Затем установка fail2ban centos 7:</p>



<p><code> sudo yum install fail2ban</code></p>



<figure class="wp-block-image size-large is-resized"><img fetchpriority="high" decoding="async" src="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-09-21-13-52-768x4321-1.png" alt="" class="wp-image-3119" width="1140" height="641" srcset="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-09-21-13-52-768x4321-1.png 768w, https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-09-21-13-52-768x4321-1-300x169.png 300w" sizes="(max-width: 1140px) 100vw, 1140px" /></figure>



<p>После установки уже будет загружена базовая конфигурация программы, так что чтобы уже начать защищать ваш сервер, запустите ее с помощью системы управления службами:</p>



<p><code>&nbsp;sudo systemctl start fail2ban</code></p>


</br>



<h2 class="wp-block-heading">НАСТРОЙКА FAIL2BAN CENTOS 7</h2>



<p>Все конфигурационные файлы программы находятся в папке /etc/fail2ban. Вот основные файлы, которые мы будем использовать:</p>



<ul><li><strong>fail2ban.conf</strong>&nbsp;&#8212; пример выполнения основных настроек программы;</li><li><strong>jail.conf</strong>&nbsp;&#8212; пример настройки запрещающих правил;</li><li><strong>jail.d</strong>&nbsp;&#8212; папка с конфигурационными файлами пользователя, для настройки правил запрета;</li><li><strong>action.d</strong>&nbsp;&#8212; файлы, в которых описываются действия, выполняемые при блокировке;</li><li><strong>filter.d</strong>&nbsp;&#8212; в этих файлах описываются способы разбора журналов программ для поиска неудачных попыток входа.</li></ul>



<p>Никакие параметры в существующих файлах менять нельзя, они будут обновлены при обновлении программы, а значит что все ваши изменения будут стерты. Для установки своих настроек необходимо создать файл с таким же именем и расширением .local. Например, создаем файл для настройки jail.conf:</p>



<p><code>&nbsp;cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</code></p>



<p>Теперь мы можем изменить здесь любые настройки, которые вам не нравятся в основном файле. Конфигурационный файл разделен на секции в зависимости от назначения опций. В секции [DEFAULT] находятся общие настройки, затем следуют отдельные секции для каждой блокировки отдельно. Опции по умолчанию и так неплохо работают, но в некоторых случаях дополнительная настройка может быть очень полезной.</p>



<p>Блокировку можно настроить, с помощью различных параметров. Вот самые важные из них:</p>



<ul><li><strong>ignoreip</strong>&nbsp;&#8212; задает список ip адресов, которые нужно исключить из алгоритмов Fail2ban. К ним не будут применяться ограничения, так что выбирайте их аккуратно. Диапазоны и IP адреса стоит разделить пробелом. Сюда можно добавить локальный ip, а также свой домашний адрес, чтобы у вас не возникло проблем при входе;</li><li><strong>bantime</strong>&nbsp;&#8212; указывает время, на которое клиенту буде закрыт доступ к серверу, если он не сможет авторизоваться, в секундах;</li><li><strong>maxretry</strong>&nbsp;&#8212; указывает количество попыток перед тем, как доступ будет заблокирован;</li><li><strong>findtime</strong>&nbsp;&#8212; время в секундах, на протяжении которого рассчитывается maxretry.</li></ul>



<p>В нашем примере пользователь будет заблокирован на 600 секунд после 5-ти неудачных попыток:</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-16-09-768x4321-1.png" alt="" class="wp-image-3120" width="1145" height="644" srcset="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-16-09-768x4321-1.png 768w, https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-16-09-768x4321-1-300x169.png 300w" sizes="(max-width: 1145px) 100vw, 1145px" /></figure>



<p>По умолчанию, в CentOS все блокировки отключены, чтобы их включить замените значение строчки enabled на true. Но не рекомендуется так делать, потому что вам придется удалить из конфига все ненужные правила блокировки, иначе они вызовут ошибку запуска. Также можно включить обработку каждого приложения отдельно:</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-21-55-768x4321-1.png" alt="" class="wp-image-3121" width="1140" height="641" srcset="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-21-55-768x4321-1.png 768w, https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-21-55-768x4321-1-300x169.png 300w" sizes="(max-width: 1140px) 100vw, 1140px" /></figure>



<p>Дальше нам необходимо настроить действия для запрета, а поддерживается их несколько вариантов. Как только нужно выполнить блокировку, программа примет решение на основе следующих параметров:</p>



<ul><li><strong>banaction</strong>&nbsp;&#8212; этот параметр определяет файл конфигурации способа блокировки, который нужно использовать. Обычно указывает на файл в папке /etc/fail2ban/action.d/ в котором записаны команды для блокировки. По умолчанию применяется iptables;</li><li><strong>action</strong>&nbsp;&#8212; с помощью параметров action задаются ярлыки дополнительных действий, которые выполняется после banaction. Сценарию передается имя, порт, протокол, цель и сценарий.</li></ul>


</br>



<h3 class="wp-block-heading">НАСТРОЙКА EMAIL ОПОВЕЩЕНИЙ</h3>



<p>Если вы хотите настроить оповещение о срабатывании блокировки Fail2ban по электронной почте, это тоже настраивается в разделе [DEFAULT]. Только необходимо чтобы на вашей машине был настроен почтовый сервер и он мог отправлять письма на внешний адрес. Иначе все письма будут доставлены к локальной учетной записи Linux.</p>



<p>Для настройки используются два параметра:</p>



<ul><li><strong>destemail</strong> &#8212; этот параметр задает адрес электронной почты, на который вы хотите получать сообщения. Значение по умолчанию root@localhost;</li><li><strong>mta</strong> &#8212; определяет почтовый агент, который будет использоваться для доставки почты. Если у вас настроен Sendmail, оставьте значение по умолчанию. Если же письма нужно доставлять на локальную машину поменяйте значение на mail.</li><li>Также для локальной почты нужно заменить строчку <strong>action_mw</strong> на<strong> action_mwl</strong>:</li></ul>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-18-07-768x4321-1.png" alt="" class="wp-image-3122" width="1136" height="638" srcset="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-18-07-768x4321-1.png 768w, https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-18-07-768x4321-1-300x169.png 300w" sizes="(max-width: 1136px) 100vw, 1136px" /></figure>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-18-44-768x4321-1.png" alt="" class="wp-image-3123" width="1142" height="642" srcset="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-18-44-768x4321-1.png 768w, https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-18-44-768x4321-1-300x169.png 300w" sizes="(max-width: 1142px) 100vw, 1142px" /></figure>



<p>Дальше для проверки почты можно посмотреть файл /var/mail/mail:</p>



<p><code>&nbsp;cat /var/mail/mail</code></p>


</br>



<h3 class="wp-block-heading">НАСТРОЙКА ОТДЕЛЬНЫХ ПРИЛОЖЕНИЙ</h3>



<p>Сразу после настроек раздела по умолчанию вы увидите разделы, обозначенные вот так: [имя_приложения]. Рассмотрим основные используемые параметры:</p>



<ul><li><strong>filter</strong>&nbsp;&#8212; указывает имя файла в каталоге /etc/fail2ban/filter.d/ Он сообщает программе как анализировать журнал сервиса и находить неудачные попытки входа;</li><li><strong>logpath</strong>&nbsp;&#8212; путь к лог файлу службы, куда она записывает неудачные попытки входа;</li></ul>



<p>Также здесь можно переопределять любой из параметров по умолчанию, например, maxretry, а с помощью параметра enabled вы можете включить только нужные блокировщики. По умолчанию настроены правила блокировки не только для ssh, но и для многих других сервисов, например, различных способов аутентификации http, ftp, аутентификации в почте и так далее.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-19-18-768x4321-1.png" alt="" class="wp-image-3124" width="1140" height="641" srcset="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-19-18-768x4321-1.png 768w, https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-19-18-768x4321-1-300x169.png 300w" sizes="(max-width: 1140px) 100vw, 1140px" /></figure>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-20-08-768x4321-1.png" alt="" class="wp-image-3125" width="1139" height="641" srcset="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-20-08-768x4321-1.png 768w, https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-20-08-768x4321-1-300x169.png 300w" sizes="(max-width: 1139px) 100vw, 1139px" /></figure>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-20-46-768x4321-1.png" alt="" class="wp-image-3126" width="1140" height="641" srcset="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-20-46-768x4321-1.png 768w, https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-20-46-768x4321-1-300x169.png 300w" sizes="(max-width: 1140px) 100vw, 1140px" /></figure>



<p>Например, для активации блокировки неверных входов SSH, приведите секцию [sshd] к такому виду:</p>



<p><code>enabled = true<br>port = ssh<br>logpath = %(sshd_log)s<br>backend = %(sshd_backend)s</code></p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-09-05-49-768x4321-1.png" alt="" class="wp-image-3127" width="1140" height="641" srcset="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-09-05-49-768x4321-1.png 768w, https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-09-05-49-768x4321-1-300x169.png 300w" sizes="(max-width: 1140px) 100vw, 1140px" /></figure>


</br>



<h3 class="wp-block-heading">НАСТРОЙКА IPTABLES</h3>



<p>Обычно, никаких дополнительных настроек для iptables не требуется. Но давайте рассмотрим конфигурационный файл, который отвечает за блокировку, чтобы вы понимали как все работает. Имя этого файла указано в параметре&nbsp;banaction. По умолчанию это&nbsp;iptables-multiport.conf:</p>



<p><code>&nbsp;vi&nbsp;/etc/fail2ban/action.d/iptables-multiport.conf</code></p>



<p>Тут мы можем увидеть что приходит после того, как fail2ban решает, что нужно заблокировать доступ для определенного IP адреса. Сначала выполняются такие команды iptables:</p>



<p><code>actionstart = iptables -N fail2ban-&lt;name><br>iptables -A fail2ban-&lt;name> -j RETURN # questionable usefulness<br>iptables -I &lt;chain> -p &lt;protocol> -m multiport --dports &lt;port> -j fail2ban-&lt;name></code></p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-29-31-768x4321-1.png" alt="" class="wp-image-3128" width="1137" height="641" srcset="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-29-31-768x4321-1.png 768w, https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-29-31-768x4321-1-300x169.png 300w" sizes="(max-width: 1137px) 100vw, 1137px" /></figure>



<p>Они используются для организации среды передачи трафика в фильтрующей цепочке. Iptables управляет трафиком на основе цепей и каждая из них может иметь правила для всего трафика, которые определяют нужно ли его пропускать или нет. В первой строчке создается новая цепочка с именем fail2ban-имя_службы. Именно в ней будут содержаться все запрещающие правила для этого ip адреса. Вторая строчка возвращает управление цепочке, вызвавшей эту, а третья добавляет правило в основную цепь, которое передает управление на нашу цепочку.</p>



<p>Таким образом, весь входящий трафик с нужного порта обрабатывается нашей цепочкой fail2ban-имя_службы. Сейчас первое правило в ней отправляет трафик обратно в вызывающую цепь, это значит что правление просто передается нам и назад. Но теперь мы можем добавить дополнительные правила.</p>



<p>Для разрушения цепочки используются такие правила:</p>



<p><code>actionstop = iptables -D &lt;chain> -p &lt;protocol> -m multiport --dports &lt;port> -j fail2ban-&lt;name><br>iptables -F fail2ban-&lt;name><br>iptables -X fail2ban-&lt;name></code></p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-29-39-768x4321-1.png" alt="" class="wp-image-3129" width="1142" height="642" srcset="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-29-39-768x4321-1.png 768w, https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-29-39-768x4321-1-300x169.png 300w" sizes="(max-width: 1142px) 100vw, 1142px" /></figure>



<p>Теперь, когда нам нужно забанить пользователя программа выполнит команду:</p>



<p><code>actionban = iptables -I fail2ban-&lt;name> 1 -s &lt;ip> -j DROP</code></p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-29-51-768x4321-1.png" alt="" class="wp-image-3130" width="1140" height="641" srcset="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-29-51-768x4321-1.png 768w, https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-29-51-768x4321-1-300x169.png 300w" sizes="(max-width: 1140px) 100vw, 1140px" /></figure>



<p>Эта команда говорит, что необходимо отбрасывать все пакеты с этого ip адреса и уже не пытаться определить подлинность данных. Когда время блокировки вышло, она снимается такой командой:</p>



<p><code>actionunban = iptables -D fail2ban-&lt;name> -s &lt;ip> -j DROP</code></p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-29-57-768x4321-1.png" alt="" class="wp-image-3131" width="1139" height="641" srcset="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-29-57-768x4321-1.png 768w, https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-08-29-57-768x4321-1-300x169.png 300w" sizes="(max-width: 1139px) 100vw, 1139px" /></figure>



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



<p><code>sudo iptables -L</code></p>


</br>



<h3 class="wp-block-heading">ЗАВЕРШЕНИЕ НАСТРОЙКИ</h3>



<p>Когда вы завершите настройку, сохраните изменения в конфигурационном файле и перезагрузите сервис fail2ban. Сначала проверяем правильность конфигурации:</p>



<p><code>&nbsp;sudo fail2ban-client -d</code></p>



<p>Если все правильно, перезагружаем сервис:</p>



<p><code>&nbsp;sudo systemctl restart&nbsp;fail2ban</code></p>



<p>Для проверки своих правил, вы можете выполнить несколько попыток входа с неправильным логином и паролем, например, для службы ssh, если вы настраивали именно ее, как описано в этой статье. Когда вы достигните лимита запросов, ваш сервер даже не будет запрашивать пароля. Затем вы можете еще раз посмотреть правила:</p>



<p><code> sudo iptables -L</code></p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-09-15-33-768x4321-1.png" alt="" class="wp-image-3132" width="1143" height="644" srcset="https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-09-15-33-768x4321-1.png 768w, https://clip-clap.ru/wp-content/uploads/2020/12/Snimok-ekrana-iz-2017-03-10-09-15-33-768x4321-1-300x169.png 300w" sizes="(max-width: 1143px) 100vw, 1143px" /></figure>



<p>В самом низу, в нашей цепочке вы можете увидеть список забаненых ip fail2ban. Чтобы разбанить любой ip адрес достаточно удалить для него правило.</p>


</br>



<p>В этой статье мы рассмотрели как выполняется настройка fail2ban CentOS 7. Теперь вы можете настроить дополнительный уровень защиты для вашего сервера чтобы обезопасить его от взлома.</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-fail2ban-%d0%b2-centos/">Настройка FAIL2BAN в CENTOS</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-fail2ban-%d0%b2-centos/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Лучшие дистрибутивы Linux для программистов</title>
		<link>https://clip-clap.ru/it/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/%d0%bb%d1%83%d1%87%d1%88%d0%b8%d0%b5-%d0%b4%d0%b8%d1%81%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82%d0%b8%d0%b2%d1%8b-linux-%d0%b4%d0%bb%d1%8f-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%81/</link>
					<comments>https://clip-clap.ru/it/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/%d0%bb%d1%83%d1%87%d1%88%d0%b8%d0%b5-%d0%b4%d0%b8%d1%81%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82%d0%b8%d0%b2%d1%8b-linux-%d0%b4%d0%bb%d1%8f-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%81/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sun, 04 Oct 2020 17:02:51 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[Софт и ОС]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Raspbian]]></category>
		<category><![CDATA[Solus]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=2255</guid>

					<description><![CDATA[<p>Более популярные версии Linux, такие, как Ubuntu, фокусируются на том, чтобы улучшать опыт пользователя, автоматически обновляя пакеты и предоставляяресурсоемкие версии</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/%d0%bb%d1%83%d1%87%d1%88%d0%b8%d0%b5-%d0%b4%d0%b8%d1%81%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82%d0%b8%d0%b2%d1%8b-linux-%d0%b4%d0%bb%d1%8f-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%81/">Лучшие дистрибутивы Linux для программистов</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Более популярные версии Linux, такие, как Ubuntu, фокусируются на том, чтобы улучшать опыт пользователя, автоматически обновляя пакеты и предоставляя<br>ресурсоемкие версии ОС с графическим интерфейсом.</p>



<p>В этом руководстве мы расскажем о дистрибутивах ОС, которые программисты могут кастомизировать под себя.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://clip-clap.ru/wp-content/uploads/2020/10/linux.jpg" alt="" class="wp-image-2256" width="1133" height="592" srcset="https://clip-clap.ru/wp-content/uploads/2020/10/linux.jpg 624w, https://clip-clap.ru/wp-content/uploads/2020/10/linux-300x156.jpg 300w, https://clip-clap.ru/wp-content/uploads/2020/10/linux-390x205.jpg 390w" sizes="(max-width: 1133px) 100vw, 1133px" /></figure>


</br>



<p>Из статьи вы узнаете:</p>



<ul><li><a href="#a1">Arch Linux</a></li><li><a href="#a2">Debian</a></li><li><a href="#a3">Raspbian</a></li><li><a href="#a4">Gentoo</a></li><li><a href="#a5">Ubuntu</a></li><li><a href="#a6">Fedora</a></li><li><a href="#a7">OpenSUSE</a></li><li><a href="#a8">CentOS</a></li><li><a href="#a9">Solus</a></li><li><a href="#a10">Puppy Linux</a></li></ul>



<h2 class="wp-block-heading" id="a1">Arch Linux</h2>



<p>Arch Linux предоставляет большой функционал для кастомизации во время установки. Это позволяет вам загружать и устанавливать нужные пакеты.</p>



<p>Этот дистрибутив не для новичков. Вы можете установить минимальный набор программ на машину, используя Arch Build System и Arch User Repository. Это снижает риск того, что какое-то приложение вмешается в ваш код.</p>



<p><a href="https://www.archlinux.org/" target="_blank" rel="noreferrer noopener nofollow">Загрузить Arch Linux</a></p>



<h2 class="wp-block-heading" id="a2">Debian</h2>



<p>Debian — один из самых старых и стабильных дистрибутивов Linux. Все программы, включенные в Debian, должны соответствовать <a href="https://www.debian.org/social_contract" target="_blank" rel="noreferrer noopener nofollow">стандартам бесплатного ПО Debian</a>.</p>



<p>Пакеты аккуратно выбираются и тестируются в ветке Stable Debian. Это значит, что даже если некоторые из них устаревшие, они точно стабильные. Это идеальная ОС для программистов.</p>



<p>На сайте Debian есть много руководств, включая <a href="https://www.debian.org/doc/manuals/debian-reference/ch12.en.html" target="_blank" rel="noreferrer noopener nofollow">главу по программированию</a>.<br>В ней рассказывается о том, как создать скрипт, скомпилировать его и с помощью<br>Autoconf разрешить скриптам компилироваться на других дистрибутивах Linux.</p>



<p><a href="https://www.debian.org/" target="_blank" rel="noreferrer noopener nofollow">Загрузить Debian</a></p>


</br>



<h2 class="wp-block-heading" id="a3">Raspbian</h2>



<p>Raspbian — дефолтная ОС, которая включена в <a href="https://www.techradar.com/reviews/pc-mac/pc-mac-desktops/raspberry-pi-3-1316838/review" target="_blank" rel="noreferrer noopener nofollow">Raspberry Pi</a>. Так как Pi был разработан как образовательный инструмент, Raspbian — отличная ОС для тех, кто хочет начать писать код.</p>



<p>На сайте Raspberry Pi выложено много руководств о том, как использовать визуальный инструмент программирования <a href="https://www.raspberrypi.org/learning/getting-started-with-scratch/" target="_blank" rel="noreferrer noopener nofollow">Scratch</a>. Его используют, чтобы создавать анимацию и игры. Есть также отличный раздел о том, как начать работать с Python.</p>



<p>Более молодые программисты могут начать изучать язык программирования для <a href="https://projects.raspberrypi.org/en/projects/getting-started-with-minecraft-pi" target="_blank" rel="noreferrer noopener nofollow">Minecraft Pi</a>. Это мини-версия очень популярной игры в песочнице.</p>



<p><a href="http://raspbian.org/" target="_blank" rel="noreferrer noopener nofollow">Загрузить Raspbian</a></p>



<h2 class="wp-block-heading" id="a4">Gentoo</h2>



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



<p>У Gentoo есть своя <a href="https://wiki.gentoo.org/wiki/Main_Page" target="_blank" rel="noreferrer noopener nofollow">вики</a>, в которой вы найдете много полезной информации — включая <a href="https://wiki.gentoo.org/wiki/Handbook:Main_Page" target="_blank" rel="noreferrer noopener">Gentoo </a><a href="https://wiki.gentoo.org/wiki/Handbook:Main_Page" target="_blank" rel="noreferrer noopener nofollow">H</a><a href="https://wiki.gentoo.org/wiki/Handbook:Main_Page" target="_blank" rel="noreferrer noopener">andbook</a>.</p>



<p><a href="https://www.gentoo.org/" target="_blank" rel="noreferrer noopener nofollow">Загрузить Gentoo</a></p>


</br>



<h2 class="wp-block-heading" id="a5">Ubuntu</h2>



<p>В отличие от голых дистрибутивов таких, как Arch Linux и Gentoo, Ubuntu — идеальная ОС для начинающих. У нее есть десктопный интерфейс, и она автоматически обновляется.</p>



<p>Ubuntu теперь поддерживает формат упаковки приложений snaps с помощью инструмента <a href="https://snapcraft.io/" target="_blank" rel="noreferrer noopener nofollow">Snapcraft</a>. Он позволяет писать приложения на языке программирования, который вам подходит, и упаковать их со всеми необходимыми зависимостями. За более подробной информацией заходите на <a href="https://developer.ubuntu.com/" target="_blank" rel="noreferrer noopener nofollow">портал Ubuntu Developer</a>.</p>



<p><a href="https://www.ubuntu.com/" target="_blank" rel="noreferrer noopener nofollow">Загрузить Ubuntu</a></p>



<h2 class="wp-block-heading" id="a6">Fedora</h2>



<p>Fedora — производный дистрибутив от Red Hat Linux. Кроме того, что его очень легко настраивать и устанавливать, у Fedora также есть отдельный <a href="https://developer.fedoraproject.org/" target="_blank" rel="noreferrer noopener nofollow">Developer Portal</a>. Нажмите на “Start a Project”, чтобы посмотреть руководства по программированию, командной строке, десктопным и мобильным приложениям.</p>



<p>Репозитории Fedora также включают <a href="https://developer.fedoraproject.org/tools/eclipse/about.html" target="_blank" rel="noreferrer noopener nofollow">Eclipse</a>, полнофункциональную и мультиязычную внутреннюю среду разработки. Eclipse прежде всего известен Java, но он также подходит для разработки на C/C++ и PHP. Вы также можете расширять функционал Eclipse с помощью плагинов.</p>



<p><a href="https://getfedora.org/" target="_blank" rel="noreferrer noopener nofollow">Загрузить Fedora</a></p>



<h2 class="wp-block-heading" id="a7">OpenSUSE</h2>



<p>OpenSUSE — дистрибутив, специально разработанный для разработчиков ПО и системных администраторов. Его легко устанавливать и настраивать благодаря интегрированному инструменту <a href="https://en.opensuse.org/Portal:YaST" target="_blank" rel="noreferrer noopener nofollow">YaST</a>. Этот инструмент позволяет устанавливать все нужные программистам ‘-devel’ пакеты в один клик.</p>



<p>OpenSUSE поставляется предустановленным — в него включены все базовые инструменты, которые могут понадобиться программистам. Это текстовые редакторы Vim и Emacs, такие автоматизированные инструменты, как CMake и упаковывающие инструменты, как, например, RPM. ОС также включает <a href="https://en.opensuse.org/Portal:Build_Service" target="_blank" rel="noreferrer noopener nofollow">OBS</a> — инструмент, с помощью которого программисты создают ПО для разных дистрибутивов и платформ.</p>



<p><a href="https://www.opensuse.org/" target="_blank" rel="noreferrer noopener nofollow">Загрузить OpenSUSE</a></p>


</br>



<h2 class="wp-block-heading" id="a8">CentOS</h2>



<p>Как и Fedora, CentOS — бесплатный вариант коммерческой версии Linux Red Hat.<br>CentOS — очень стабильная система.</p>



<p>Репозиторий CentOS включает Developer Toolset, который предоставляет <a href="https://developers.redhat.com/products/developertoolset/overview/" target="_blank" rel="noreferrer noopener nofollow">набор основных инструментов программирования</a>.</p>



<p>Для программистов есть <a href="https://wiki.centos.org/TipsAndTricks/Xen" target="_blank" rel="noreferrer noopener nofollow">платформа с XEN-виртуализацией</a>. С помощью нее можно структурировать проекты и безопасно запускать приложения внутри виртуальной машины. Вы можете найти инструкции о том, как это делать, и другие полезные лайфхаки для программистов <a href="https://wiki.centos.org/FrontPage" target="_blank" rel="noreferrer noopener nofollow">в вики CentOS</a>.</p>



<p><a href="https://www.centos.org/" target="_blank" rel="noreferrer noopener nofollow">Загрузить CentOS</a></p>



<h2 class="wp-block-heading" id="a9">Solus</h2>



<p>Solus — дистрибутив Linux уникальный тем, что он основывается на модели контролируемого плавающего релиза. Это значит, что после того, как вы устанавливаете ОС, вы можете продолжать устанавливать отдельные обновления для нее вместо того, чтобы обновлять ОС полностью. Solus старается не устанавливать новейшие пакеты и ПО в стадии бета, чтобы поддерживать стабильность системы.</p>



<p>Solus поддерживает несколько редакторов и внутренних сред разработки, — такие, как Atom, Idea и Gnome Builder, а также Git GU и GitKraken. На сайте Solus говорится, что ОС поддерживает множество языков программирования — например, Go, Rust, PHP, Node.js и Ruby.</p>



<p><a href="https://solus-project.com/" target="_blank" rel="noreferrer noopener nofollow">Загрузить Solus</a></p>



<h2 class="wp-block-heading" id="a10">Puppy Linux</h2>



<p>Puppy Linux — очень легкий дистрибутив на Ubuntu или Slackware. Вся ОС весит около 330 МБ. Это значит, что она может полностью запускаться в RAM и устанавливаться на обычный жесткий диск. В нее входит минимальное количество пакетов, куда вы можете добавить свои — например, пакеты ‘devx’, в которые входят различные инструменты программирования.</p>



<p><a href="http://puppylinux.org/wikka/HowToProgramming" target="_blank" rel="noreferrer noopener nofollow">В вики Puppy Linux</a> подробно описываются языки программирования, которые поддерживает ОС. Один из примечательных языков — BaCon, который может превращать код, написанный на BASIC, в C. В вики также есть подборка инструкций о том, как писать скрипты Bash и начать писать на Python.</p>



<p><a href="http://puppylinux.org/" target="_blank" rel="noreferrer noopener nofollow">Загрузить Puppy Linux</a></p>


</br>
<p>Сообщение <a href="https://clip-clap.ru/it/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/%d0%bb%d1%83%d1%87%d1%88%d0%b8%d0%b5-%d0%b4%d0%b8%d1%81%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82%d0%b8%d0%b2%d1%8b-linux-%d0%b4%d0%bb%d1%8f-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%81/">Лучшие дистрибутивы Linux для программистов</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://clip-clap.ru/it/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/%d0%bb%d1%83%d1%87%d1%88%d0%b8%d0%b5-%d0%b4%d0%b8%d1%81%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82%d0%b8%d0%b2%d1%8b-linux-%d0%b4%d0%bb%d1%8f-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%81/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Настройка шлюза на CentOS 7</title>
		<link>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%88%d0%bb%d1%8e%d0%b7%d0%b0-%d0%bd%d0%b0-centos-7/</link>
					<comments>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%88%d0%bb%d1%8e%d0%b7%d0%b0-%d0%bd%d0%b0-centos-7/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sun, 09 Aug 2020 06:31:22 +0000</pubDate>
				<category><![CDATA[CentOS]]></category>
		<category><![CDATA[шлюз]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1492</guid>

					<description><![CDATA[<p>В данной заметке я хочу рассмотреть простой и быстрый вариант настройки шлюза для организации доступа в интернет из локальной сети</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%88%d0%bb%d1%8e%d0%b7%d0%b0-%d0%bd%d0%b0-centos-7/">Настройка шлюза на CentOS 7</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>В данной заметке я хочу рассмотреть простой и быстрый вариант настройки шлюза для организации доступа в интернет из локальной сети на базе CentOS 7. Не будет никакого дополнительного функционала, только самое необходимое для доступа к интернету компьютеров за шлюзом.</p>


</br>



<h2 class="wp-block-heading">Введение</h2>



<p>В нашем распоряжении будет следующий сервер для настройки шлюза:</p>



<pre class="wp-block-preformatted"># cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)</pre>



<p>Использовался <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-centos-7/" target="_blank" rel="noreferrer noopener">образ minimal для установки CentOS 7</a>. Если вы еще не выполнили установку, рекомендую воспользоваться моим материалом на эту тему. На сервере две сетевые карты <strong>eth0</strong> и <strong>eth1</strong>:</p>



<ul><li>eth0 подключена к интернету</li><li>eth1 подключена к локальной сети вместе с компьютерами</li></ul>



<p>В данной статье мы выполним необходимые предварительные настройки на сервере, включим nat, настроим firewall и установим средство мониторинга сетевой активности.</p>



<p>Если у вас недостаточно опыта и вы не чувствуете в себе сил разобраться с настройкой шлюза самому с помощью консоли сервера &#8212; попробуйте дистрибутив на основе centos для организации шлюза и прокси сервера в локальной сети &#8212; clearos. С его помощью можно через браузер настроить весь необходимый функционал. В отдельной статье я подробно рассказал о <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%88%d0%bb%d1%8e%d0%b7%d0%b0-%d0%b8-%d0%bf%d1%80%d0%be%d0%ba%d1%81%d0%b8-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-%d0%bd%d0%b0-%d0%b1%d0%b0/" target="_blank" rel="noreferrer noopener">настройке clearos</a>.</p>


</br>



<h2 class="wp-block-heading">Предварительная настройка&nbsp;сервера</h2>



<p>Любую настройку сервера я рекомендую начинать с обновления:</p>



<pre class="wp-block-preformatted"># yum -y update</pre>



<p>После этого я устанавливаю mc, так как привык к нему и постоянно пользуюсь:</p>



<pre class="wp-block-preformatted">#&nbsp;yum -y install mc</pre>



<p>Дальше отключаем selinux. Находим&nbsp;файл&nbsp;/etc/sysconfig/selinux и редактируем его:</p>



<pre class="wp-block-preformatted"># mcedit /etc/sysconfig/selinux</pre>



<p>Приводим строку с соответствующим параметром к следующему виду:</p>



<pre class="wp-block-preformatted">SELINUX=disabled</pre>



<p>Чтобы применить изменения, перезагружаем сервер:</p>



<pre class="wp-block-preformatted"># reboot</pre>



<p>Более подробно о <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/centos-7-%d0%b8-8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-%d0%bf%d0%be%d1%81%d0%bb%d0%b5-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba/" target="_blank" rel="noreferrer noopener">базовой настройке сервера CentOS 7</a> читайте отдельно. Мы же двигаемся дальше.</p>



<p>Теперь настроим сеть.</p>



<p>Сначала удаляем&nbsp;NetworkManager. Он нам не понадобится, выполним все настройки вручную. Иногда он может вызывать непонятные ошибки, я предпочитаю им не пользоваться:</p>



<pre class="wp-block-preformatted"># systemctl stop NetworkManager.service
# systemctl disable NetworkManager.service</pre>



<p>Теперь включаем классическую службу сети в CentOS 7:</p>



<pre class="wp-block-preformatted"># systemctl enable network.service</pre>



<p>Настраиваем сетевые интерфейсы:</p>



<pre class="wp-block-preformatted"># mcedit&nbsp;/etc/sysconfig/network-scripts/ifcfg-eth0

HWADDR=00:15:5D:01:0F:06
TYPE="Ethernet"
BOOTPROTO="dhcp"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
NAME="eth0"
UUID="4e65030c-da90-4fb8-bde4-028424fe3710"
ONBOOT="yes"</pre>



<pre class="wp-block-preformatted"># mcedit&nbsp;/etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
HWADDR=00:15:5d:01:0f:12
TYPE=Ethernet
ONBOOT=yes
IPADDR=192.168.10.1
NETMASK=255.255.255.0</pre>



<p>Перезапускаем службу сети:</p>



<pre class="wp-block-preformatted"># systemctl restart network.service</pre>



<p>Смотрим, что получилось:</p>



<pre class="wp-block-preformatted"># ip a</pre>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/11/centos-gate-01.png" alt="Сетевые параметры в CentOS 7" class="wp-image-2337"/></figure></div>



<p>Вы настраивайте&nbsp;сеть в зависимости от своих условий. Если внешний адаптер получает настройки не по dhcp, как у меня, а в статике, то не забудьте настроить шлюз по-умолчанию и dns сервер. Как это сделать написано в моей&nbsp;статье о сетевых параметрах, ссылку на которую я приводил выше.Прежде чем двигаться дальше, убедитесь, что вы все верно настроили &#8212;&nbsp;на сервере работает интернет, компьютеры из локальной сети пингуют сервер по адресу на eth1.</p>


</br>



<h2 class="wp-block-heading">Включаем маршрутизацию, firewall и nat</h2>



<p>Чтобы сервер мог маршрутизировать пакеты между сетевыми адаптерами, необходимо выполнить следующую настройку. Находим&nbsp;файл&nbsp;/etc/sysctl.conf и вставляем&nbsp;туда строку:</p>



<pre class="wp-block-preformatted"># mcedit&nbsp;/etc/sysctl.conf
net.ipv4.ip_forward = 1</pre>



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



<pre class="wp-block-preformatted">#&nbsp;sysctl -p</pre>



<p>Теперь приступаем к самому главному &#8212; настройке фаерволла. Опять же отсылаю вас к своему материалу, где я <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-iptables-%d0%b2-centos-7/" target="_blank" rel="noreferrer noopener">очень подробно рассмотрел вопрос настройки iptables в CentOS 7</a>. Там же приведен готовый скрипт для iptables. Так что выполняем все необходимые действия без пояснений.</p>



<p>Отключаем firewalld:</p>



<pre class="wp-block-preformatted"># systemctl stop firewalld
# systemctl disable firewalld</pre>



<p>Устанавливаем службы iptables:</p>



<pre class="wp-block-preformatted"># yum -y install iptables-services</pre>



<p>Скачиваем скрипт с правилами <a href="https://clip-clap.ru/wp-content/uploads/2020/08/iptables.zip" target="_blank" rel="noreferrer noopener">iptables.sh</a>. Данные правила включают NAT, закрывают доступ к серверу снаружи, разрешают пинги, разрешают всем пользователям локальной сети доступ в интернет. Дополнительный функционал отключен. В скрипте подробно описаны все правила. Вам необходимо только заменить в начале переменные на свои. В моем случае это будет выглядеть так:</p>



<pre class="wp-block-preformatted"># Внешний интерфейс
export WAN=eth0
export WAN_IP=192.168.1.25
# Локальная сеть
export LAN1=eth1
export LAN1_IP_RANGE=192.168.10.1/24</pre>



<p>Помещаем отредактированный скрипт в /etc/iptables.sh и делаем его исполняемым:</p>



<pre class="wp-block-preformatted"># chmod 0740 /etc/iptables.sh</pre>



<p>Запускаем iptables:</p>



<pre class="wp-block-preformatted"># systemctl start iptables.service</pre>



<p>Добавляем их в автозагрузку:</p>



<pre class="wp-block-preformatted"># systemctl enable&nbsp;iptables.service</pre>



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



<pre class="wp-block-preformatted"># /etc/iptables.sh</pre>



<p>Проверяем установленные правила:</p>



<pre class="wp-block-preformatted"># iptables -L -v -n</pre>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2015/11/centos-gate-02.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/11/centos-gate-02.png" alt="активные правила iptables" class="wp-image-2338"/></a></figure></div>



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



<p>По сути наш шлюз уже готов и может обслуживать клиентов. Но не работает одна важна служба, без которой нормальной работы с интернетом не получится. Нам нужно настроить кэширущий dns сервер для клиентов локальной сети. Можно пойти по простому и очень простому пути. Простой путь это выполнить простейшую настройку dns сервера bind. Как это сделать у меня опять же&nbsp;подробно написано отдельно &#8212;&nbsp;<a href="https://serveradmin.ru/nastroyka-dns-servera-bind-v-centos-7/" target="_blank" rel="noreferrer noopener">настройка Bind 9 в CentOS 7</a>. Рекомендую ознакомиться, там рассмотрены интересные нюансы настройки.</p>



<p>Очень простой путь это установить dnsmasq, который помимо dns сервера включает в себя еще и dhcp сервер, который нам может пригодиться.</p>


</br>



<h2 class="wp-block-heading">Установка и настройка&nbsp;dnsmasq в CentOS 7</h2>



<p>С большой долей вероятности&nbsp;<strong>dnsmasq&nbsp;</strong>у вас уже установлен. Проверить это можно следующей командой:</p>



<pre class="wp-block-preformatted"># rpm -qa | grep dnsmasq
dnsmasq-2.66-14.el7_1.x86_64</pre>



<p>Если вывод такой же, значит пакет уже стоит. Если нет, то устанавливаем dnsmasq командой:</p>



<pre class="wp-block-preformatted">#&nbsp;yum -y install dnsmasq</pre>



<p>Редактируем файл конфигурации /etc/dnsmasq.conf и приводим его к очень простому виду:</p>



<pre class="wp-block-preformatted"># mcedit&nbsp;/etc/dnsmasq.conf

domain-needed
bogus-priv
interface=eth1
dhcp-range=192.168.10.50,192.168.10.150,24h</pre>



<p>Запускаем dnsmasq:</p>



<pre class="wp-block-preformatted"># systemctl start dnsmasq</pre>



<p>Либо перезапускаем, если он был у вас запущен:</p>



<pre class="wp-block-preformatted"># systemctl restart&nbsp;dnsmasq</pre>



<p>Добавляем&nbsp;dnsmasq в автозагрузку:</p>



<pre class="wp-block-preformatted">#&nbsp;systemctl enable&nbsp;dnsmasq</pre>



<p>Я редактировал конфиг, когда у меня уже был установлен и запущен dnsmasq. И он то ли завис, то ли просто затупил, но я не мог его перезагрузить или остановить с помощью&nbsp;systemctl. Пришлось перезагрузить сервер. После этого все нормально заработало. Клиент на windows получил сетевые настройки. Информация об этом появилась в логе /var/log/messages. Я проверил на клиенте интернет, все было в порядке, он работал.</p>



<p>На этом настройка завершена, шлюзом под CentOS 7 можно пользоваться.</p>


</br>



<h2 class="wp-block-heading">Анализ сетевой активности на шлюзе в linux</h2>



<p>В данной конфигурации шлюз может успешно функционировать. Но иногда хочется посмотреть, а что вообще на нем происходит. Например, кто-то занимает весь канал, интернет тормозит, а мы как слепые котята сидим и не видим ничего. Нужно какое-то средство для просмотра загрузки сети на шлюзе. И такое средство есть &#8212; программа&nbsp;<strong>iftop</strong>.</p>



<p>Она отсутствует в стандартном репозитории CentOS 7. Для ее установки необходимо подключить репозиторий epel:</p>



<pre class="wp-block-preformatted"># yum -y install epel-release</pre>



<p>Устанавливаем iftop на CentOS 7:</p>



<pre class="wp-block-preformatted"># yum -y install iftop</pre>



<p>Теперь мы можем смотреть загрузку сети на шлюзе в режиме реального времени. Чтобы увидеть сетевую активность, достаточно запустить iftop:</p>



<pre class="wp-block-preformatted"># iftop</pre>



<p>По-умолчанию она слушает интерфейс eth0. Это внешний интерфейс шлюза, на нем все подключения будут отображены от имени самого шлюза и определить, кто же в сети занимает канал мы не сможем. Чтобы это увидеть, необходимо запустить просмотр сетевой активности на локальном интерфейсе. Сделать это не сложно, достаточно запустить iftop с параметром:</p>



<pre class="wp-block-preformatted"># iftop -i eth1 -P</pre>



<p>Теперь уже гораздо интереснее. Я еще добавил параметр&nbsp;<strong>-P</strong>, который отображает порты, по которым проходят соединения. Посмотрим, кто больше всех загружает канал интернета:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/11/centos-gate-03.png" alt="Анализ сетевой активности на шлюзе" class="wp-image-2339"/></figure></div>



<p>В моем случае это пользователь с ip&nbsp;192.168.10.98, на котором я запустил проверку скорости интернета с серверов Яндекса.</p>



<p>Если у вас не большая сеть и не много пользователей, то с помощью этой простой и эффективной утилиты вы сможете легко определить, кто, к примеру, качает торренты или чем-то еще загружает канал.</p>


</br>



<h2 class="wp-block-heading">Заключение</h2>



<p>С помощью бесплатного дистрибутива Linux мы смогли за считанные минуты настроить шлюз для организации доступа в интернет компьютеров из локальной сети. У меня ушло минут 10 на настройку шлюза по этой инструкции. Если вы делаете это первый раз, то конечно у вас уйдет гораздо больше времени. Нужно будет разобраться в нюансах, к тому же я дал много ссылок на дополнительный материал.</p>



<p>Давайте разберемся в том, что мы сделали:</p>



<ol><li>Выполнили предварительную настройку сервера, подготовили его к работе.</li><li>Включили маршрутизацию.</li><li>Настроили firewall.</li><li>Включили NAT.</li><li>Установили и настроили dnsmasq для организации служб dns и dhcp.</li><li>Проанализировали сетевую активность шлюза, узнали кто загружает канал интернета.</li></ol>



<p>Это минимально необходимый функционал для организации работы шлюза на CentOS 7. Следующим этапом может быть настройка прокси сервера, шейпера траффика, настройка 2-х и более провайдеров и много другое. Что-то из этого я рассмотрю в своих будущих статьях.</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%88%d0%bb%d1%8e%d0%b7%d0%b0-%d0%bd%d0%b0-centos-7/">Настройка шлюза на CentOS 7</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%88%d0%bb%d1%8e%d0%b7%d0%b0-%d0%bd%d0%b0-centos-7/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Настроить openvpn на CentOS 7</title>
		<link>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b8%d1%82%d1%8c-openvpn-%d0%bd%d0%b0-centos-7/</link>
					<comments>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b8%d1%82%d1%8c-openvpn-%d0%bd%d0%b0-centos-7/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sun, 09 Aug 2020 06:23:31 +0000</pubDate>
				<category><![CDATA[CentOS]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1487</guid>

					<description><![CDATA[<p>В современном интернете вопрос анонимности встает с каждым годом все острее. Запреты на доступ к контенту вынуждают пользователей искать обходные</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b8%d1%82%d1%8c-openvpn-%d0%bd%d0%b0-centos-7/">Настроить openvpn на CentOS 7</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>В современном интернете вопрос анонимности встает с каждым годом все острее. Запреты на доступ к контенту вынуждают пользователей искать обходные пути, одним из которых является использование приватных тоннелей. Установка на CentOS openvpn сервера для подключения удаленных клиентов является одной из реализаций шифрованного vpn канала. Этой задачей мы и займемся в текущей статье &#8212; поднимем шифрованный тоннель и подключим клиентов.</p>


</br>



<h2 class="wp-block-heading">Введение &#8212; что такое vpn server?</h2>



<p>Упомянутое во вступлении применение технологии vpn и openvpn сервера в частности не ограничивается созданием каналов для анонимного трафика пользователей. Более того, я думаю это не основная сфера применения данных технологий. Давайте поподробнее познакомимся с этими вещами, чтобы иметь полное представление о том, что мы будем настраивать.</p>



<p><strong>VPN</strong>&nbsp;&#8212; набор&nbsp;технологий, которые позволяют организовать логическую сеть поверх других. Чаще всего в роли других сетей выступает Интернет. Если простыми словами, то с помощью VPN можно организовать единую локальную сеть разделенных интернетом сегментов сети. Так как Интернет &#8212; общедоступная сеть, то трафик внутри созданной логической сети шифруется различными средствами для организации защиты передаваемых данных.</p>



<p><strong>OpenVPN&nbsp;</strong>&#8212; одна из реализаций технологии VPN с открытым исходным кодом, а значит бесплатная. С ее помощью можно объединять в единую сеть компьютеры в том числе и находящиеся за NAT, что очень удобно.&nbsp;<a href="https://openvpn.net/" target="_blank" rel="noreferrer noopener">Openvpn</a>&nbsp;поддерживает все популярные на сегодняшний день операционные системы, в том числе и Windows.</p>



<p>Среди малого и среднего бизнеса сервер openvpn очень популярен благодаря своей бесплатности, кроссплатформенности, быстроте и гибкости настроек. Лично я предпочитаю именно его для объединения удаленных локальных сетей. Его же предпочитают использовать vpn-провайдеры для оказания своих услуг по организации анонимного серфинга&nbsp;в интернете.</p>



<p>В своей статье я рассмотрю не абстрактную установку и настройку сервера, а приведу конкретный пример соединения локальных сетей двух офисов в единую логическую сеть с совместным доступом к ресурсам друг друга.</p>



<h2 class="wp-block-heading">Объединение офисов с помощью openvpn</h2>



<p>У нас имеется офис с шлюзом&nbsp;CentOS 7, на который мы будем устанавливать openvpn сервер. И есть филиал с таким же шлюзом, где будет установлен openvpn client для подключения сети филиала к офису:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/openvpn-logo.png" alt="установка openvpn" class="wp-image-1642"/></figure></div>



<figure class="wp-block-table"><table><tbody><tr><td>Имя</td><td>Centos-server</td><td>PC1</td><td>Centos-client</td><td>PC2</td></tr><tr><td>Внешний ip</td><td>192.168.1.25</td><td></td><td>192.168.1.26</td><td></td></tr><tr><td>Локальный&nbsp;ip</td><td>192.168.10.1</td><td>192.168.10.50</td><td>192.168.20.1</td><td>192.168.20.50</td></tr><tr><td>Комментарий</td><td>Сервер openvp и шлюз в&nbsp;офисе</td><td>Компьютер с Windows 7 в офисе</td><td>Клиент&nbsp;openvp и шлюз в&nbsp;филиале</td><td>Компьютер с Windows 7 в филиале</td></tr></tbody></table></figure>



<p>В данном случае сервер в филиале может быть без&nbsp;внешнего белого IP адреса, это не принципиально, все будет работать и так. Нам необходим только один внешний IP адрес на сервере. Все остальные клиенты могут быть за NAT, это не помешает успешному объединению локальных сетей.</p>



<p>Наша задача в данном случае будет сводиться к тому, чтобы компьютеры PC1 и PC2 увидели друг друга и могли совместно использовать свои сетевые ресурсы в обе стороны. То есть как за сервером, так и за клиентом openvpn мы должны видеть сеть.</p>



<p>Хочу отметить, что конфигурация openvpn кроссплатформенная и отлично переносится с одной системы на другую, необходимо только пути проверить, так как в каждой системе они свои. Моя инструкция подойдет для настройки openvpn сервера на любой операционной системе, отличаться будут только специфичные для каждой системы команды установки и проверки, но сама суть настройки vpn будет такой же.</p>



<p>Данный материал&nbsp;я создавал на тестовом стенде, который специально собрал для написания статьи. Но все настройки взяты с реально работающих серверов, причем разных систем, в том числе и freebsd. Для практического применения нужно просто поменять IP адреса на свои. У меня на стенде&nbsp;192.168.1.25 и&nbsp;192.168.1.26 по сути внешние IP адреса, которые смотрят в интернет.</p>


</br>



<h2 class="wp-block-heading">Где скачать openvpn</h2>



<p>Прежде чем приступить к установке и настройке, давайте посмотрим, где можно скачать все, что нам понадобится в нашей работе. Свежие и актуальные версии всегда можно найти на страничке&nbsp;<a href="https://openvpn.net/index.php/open-source/downloads" target="_blank" rel="noreferrer noopener">downloads</a>&nbsp;официального сайта.</p>



<figure class="wp-block-table"><table><tbody><tr><td>Исходники</td><td><a href="https://swupdate.openvpn.org/community/releases/openvpn-2.4.5.zip" target="_blank" rel="noreferrer noopener">openvpn-2.4.5.zip</a></td></tr><tr><td>Openvpn client Windows XP 32 bit</td><td><a href="http://swupdate.openvpn.org/community/releases/openvpn-install-2.3.18-I002-i686.exe" target="_blank" rel="noreferrer noopener">openvpn-install-2.3.18-I002-i686.exe</a></td></tr><tr><td>Openvpn client Windows XP 64&nbsp;bit</td><td><a href="http://swupdate.openvpn.org/community/releases/openvpn-install-2.3.18-I002-x86_64.exe" target="_blank" rel="noreferrer noopener">openvpn-install-2.3.18-I002-x86_64.exe</a></td></tr><tr><td>Openvpn client Windows Vista, 7, 8, 10</td><td><a href="https://swupdate.openvpn.org/community/releases/openvpn-install-2.4.5-I601.exe" target="_blank" rel="noreferrer noopener">openvpn-install-2.4.5-I601.exe</a></td></tr><tr><td>Openvpn Portable</td><td><a href="http://sourceforge.net/projects/ovpnp/" target="_blank" rel="noreferrer noopener">OpenVPNPortable_1.8.2.paf.exe</a></td></tr></tbody></table></figure>



<p>Сразу же прокомментирую по поводу&nbsp;<strong>portable</strong>&nbsp;версии openvpn. На текущий момент актуальной портированной версии openvpn не существует. Та версия, на которую я дал ссылку была выпущена&nbsp;2014-03-26 и проект с тех пор закрыт. В некоторых случаях эта версия работает, но не всегда и не везде. Я специально по этому поводу почитал форум&nbsp;Community Openvpn и нашел там неутешительные ответы. Разработчики говорят, что portable версия openvpn не поддерживается и выпускать ее они даже не собираются. А жаль, это было бы удобно.</p>



<p>Для Linux систем дистрибутив проще всего получить в системных репозиториях и устанавливать с помощью стандартных установщиков пакетов.</p>



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



<p>Теперь вернемся к нашей задаче. Я подразумеваю, что у вас уже есть установленный и настроенный сервер CentOS 7. Если еще нет, то можете воспользоваться моими материалами. В них&nbsp;раскрыты следующие темы:</p>



<ul><li><a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-centos-7/" target="_blank" rel="noreferrer noopener">Подробное описание установки CentOS 7</a> с разбором всех этапов и параметров.</li><li><a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/centos-7-%d0%b8-8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-%d0%bf%d0%be%d1%81%d0%bb%d0%b5-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba/" target="_blank" rel="noreferrer noopener">Настройка CentOS 7 шаг за шагом</a> &#8212; базовая конфигурация сервера.</li></ul>



<p>Устанавливаем openvpn на оба наших сервера, которые являются шлюзами в своих сегментах сети. Первым делом подключаем репозиторий epel к centos 7:</p>



<pre class="wp-block-preformatted">#&nbsp;yum -y install epel-release</pre>



<p>Выполняем непосредственно установку:</p>



<pre class="wp-block-preformatted"># yum -y install openvpn</pre>



<h2 class="wp-block-heading">Создание сертификатов</h2>



<p>Для работы сервера openvpn необходимо создать соответствующие сертификаты. Для этого воспользуемся программой&nbsp;Easy-RSA, которая генерирует сертификаты с помощью утилиты openssl. Все работы в этом разделе выполняем только на centos-server.</p>



<p>Создаем директорию для ключей:</p>



<pre class="wp-block-preformatted"># mkdir /etc/openvpn/keys</pre>



<p>Устанавливаем&nbsp;архиватор zip:</p>



<pre class="wp-block-preformatted"># yum -y install unzip zip</pre>



<p>Скачиваем и устанавливаем утилиту&nbsp;Easy-RSA:</p>



<pre class="wp-block-preformatted"># cd&nbsp;/etc/openvpn/keys
#&nbsp;wget https://github.com/OpenVPN/easy-rsa/archive/master.zip</pre>



<p>Если получаете сообщение:</p>



<pre class="wp-block-preformatted">-bash: wget: command not found</pre>



<p>То устанавливаете&nbsp;<strong>wget</strong>:</p>



<pre class="wp-block-preformatted"># yum -y install wget</pre>



<p>Продолжаем:</p>



<pre class="wp-block-preformatted">#&nbsp;unzip master.zip
#&nbsp;cd /etc/openvpn/keys/easy-rsa-master/easyrsa3</pre>



<p>Создаем структуру&nbsp;публичных PKI ключей:</p>



<pre class="wp-block-preformatted"># mv vars.example vars
# ./easyrsa init-pki
Note: using Easy-RSA configuration from: ./vars
init-pki complete; you may now create a CA or requests.
 Your newly created PKI dir is: /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki</pre>



<p>Создайте удостоверяющий центр CA:</p>



<pre class="wp-block-preformatted">#&nbsp;./easyrsa build-ca</pre>



<pre class="wp-block-preformatted">Note: using Easy-RSA configuration from: ./vars
 Generating a 2048 bit RSA private key
 .+++
 .........................................................................+++
 writing new private key to '/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/ca.key.GKwCGouHpy'
 Enter PEM pass phrase:
 Verifying - Enter PEM pass phrase:
 -----
 You are about to be asked to enter information that will be incorporated
 into your certificate request.
 What you are about to enter is what is called a Distinguished Name or a DN.
 There are quite a few fields but you can leave some blank
 For some fields there will be a default value,
 If you enter '.', the field will be left blank.
 -----
 Common Name (eg: your user, host, or server name) [Easy-RSA CA]:serveradmin.ru
CA creation complete and you may now import and sign cert requests.
 Your new CA certificate file for publishing is at:
 /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/ca.crt</pre>



<p>Не забудьте указанный пароль. Его нужно будет вводить каждый раз при создании нового сертификата openvpn.</p>



<p>Мы получили 2 ключа:</p>



<ul><li>/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/<strong>ca.key</strong></li><li>/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/<strong>ca.crt</strong></li></ul>



<p>Первый ключ секретный, его нужно оставить на сервере и никому не отдавать. Второй &#8212; открытый, его мы будем вместе с пользовательскими сертификатами передавать клиентам.</p>



<p>Создаем запрос сертификата для сервера без пароля с помощью опции&nbsp;<strong>nopass</strong>, иначе придется вводить пароль с консоли при каждом запуске сервера:</p>



<pre class="wp-block-preformatted">#&nbsp;./easyrsa gen-req server nopass</pre>



<pre class="wp-block-preformatted">Note: using Easy-RSA configuration from: ./vars
 Generating a 2048 bit RSA private key
 ........................+++
 ..............................................................................................+++
 writing new private key to '/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/server.key.vCUQuueIih'
 -----
 You are about to be asked to enter information that will be incorporated
 into your certificate request.
 What you are about to enter is what is called a Distinguished Name or a DN.
 There are quite a few fields but you can leave some blank
 For some fields there will be a default value,
 If you enter '.', the field will be left blank.
 -----
 Common Name (eg: your user, host, or server name) [server]:
Keypair and certificate request completed. Your files are:
 req: /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/reqs/server.req
 key: /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/server.key</pre>



<p>Подписываем запрос на получение сертификата у нашего CA:</p>



<pre class="wp-block-preformatted">#&nbsp;./easyrsa sign-req server server</pre>



<pre class="wp-block-preformatted">Note: using Easy-RSA configuration from: ./vars
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 3650 days:

subject=
commonName = server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /etc/openvpn/keys/easy-rsa-master/easyrsa3/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :PRINTABLE:'server'
Certificate is to be certified until Sep 10 00:31:21 2025 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/server.crt</pre>



<p>В процессе работы скрипта вводим пароль от CA, который указывали раньше и отвечаем на вопрос yes. Мы получили подписанный удостоверяющим центром сертификат для сервера &#8212; /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/<strong>server.crt</strong></p>



<p>Нам еще пригодится&nbsp;ключ Диффи-Хелмана, генерируем его:</p>



<pre class="wp-block-preformatted"># ./easyrsa gen-dh</pre>



<p>По завершению работы скрипта получаем файл dh сертификата &#8212;&nbsp;/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/<strong>dh.pem</strong>.</p>



<p>Копируем в папку /etc/openvpn все необходимые для работы openvpn сервера ключи:</p>



<pre class="wp-block-preformatted"># cp pki/ca.crt /etc/openvpn/ca.crt
# cp pki/dh.pem /etc/openvpn/dh.pem
# cp pki/issued/server.crt /etc/openvpn/server.crt
# cp pki/private/server.key /etc/openvpn/server.key</pre>



<p>Создадим ключ для клиента openvpn:</p>



<pre class="wp-block-preformatted"># ./easyrsa gen-req client nopass
# ./easyrsa sign-req client client</pre>



<p>Процедура аналогична созданию сертификата для сервера. Так же вводим пароль, отвечаем yes. В результате получаем подписанный сертификат клиента:</p>



<ul><li>&nbsp;/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/<strong>client.crt</strong></li><li>/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/<strong>client.key</strong></li></ul>



<p>Клиенту, которым у нас является шлюз филиала нужно будет передать следующий набор файлов &#8212;&nbsp;<strong>client.crt,&nbsp;client.key,&nbsp;ca.crt</strong>.</p>


</br>



<h2 class="wp-block-heading">Настройка openvpn на CentOS 7</h2>



<p>Теперь приступаем к настройке. Создаем файл конфигурации openvpn:</p>



<pre class="wp-block-preformatted"># mcedit /etc/openvpn/server.conf</pre>



<pre class="wp-block-preformatted">port&nbsp;13555 # я предпочитаю использовать нестандартные порты для работы
proto udp # протокол может быт и tcp, если есть необходимость в этом
dev tun

ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem

server 10.0.0.0 255.255.255.0 # подсеть для туннеля, может быть любой
route 192.168.20.0 255.255.255.0 # указываем подсеть, к которой будем обращаться через vpn
push "route 192.168.20.0 255.255.255.0" # передаем маршрут клиентам

ifconfig-pool-persist ipp.txt # файл с записями соответствий clinet - ip
client-to-client # позволяет клиентам openvpn подключаться друг к другу
client-config-dir /etc/openvpn/ccd # директория с индивидуальными настройками клиентов

keepalive 10 120
comp-lzo
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 3</pre>



<p>Создаем необходимые директории:</p>



<pre class="wp-block-preformatted"># mkdir /etc/openvpn/ccd &amp;&amp;&nbsp;mkdir /var/log/openvpn</pre>



<p>Создаем файл конфигурации клиента в папке, указанной в параметре&nbsp;client-config-dir&nbsp;:</p>



<pre class="wp-block-preformatted">mcedit /etc/openvpn/ccd/client</pre>



<pre class="wp-block-preformatted">iroute 192.168.20.0 255.255.255.0</pre>



<p>Здесь&nbsp;<strong>client&nbsp;</strong>&#8212; имя сертификата пользователя. Параметр&nbsp;<strong>iroute&nbsp;</strong>означает, что за подсеть&nbsp;192.168.20.0/24 отвечает именно этот клиент. Если в openvpn не передать эту настройку, то сеть, находящуюся за клиентом&nbsp;будет не видно, при этом сам клиент будет видеть всю сеть, которую обслуживает сервер. Такой вариант подходит для подключения удаленных сотрудников.</p>



<h3 class="wp-block-heading">Выбор устройства openvpn &#8212; TAP или TUN</h3>



<p>Чуть подробнее остановлюсь на этом моменте. В моей конфигурации я использую&nbsp;<strong>tun</strong>&nbsp;интерфейс. В чем отличие tun от tap можно прочитать на&nbsp;<a href="https://ru.wikipedia.org/wiki/TUN/TAP" target="_blank" rel="noreferrer noopener">википедии</a>. Прокомментирую своими словами. Если вам нужно объединить две разные локальные сети в одну условно общую, но с разной адресацией, то вам нужен tun. То есть в нашем случае мы объединяем две сети 192.168.10.0/24 и&nbsp;192.168.20.0/24 для взаимного совместного доступа.</p>



<p>Если же у вас&nbsp;стоит задача объединить 2 удаленные сети в единое адресное пространство, например сделать и в офисе и в филиале единую сеть&nbsp;192.168.10.0/24, то тогда бы мы использовали&nbsp;<strong>tap</strong>&nbsp;интерфейс и указывали бы на компьютерах в обоих сетях не пересекающиеся адреса из одной подсети. В таком состоянии openvpn&nbsp;работает в режиме моста. По мне так удобнее первый вариант. Я еще не сталкивался с задачей, где бы мне нужен был tap. Вернемся к настройке.</p>



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



<pre class="wp-block-preformatted"># systemctl start openvpn@server</pre>



<p>Если сервер не запустился, а в логе ошибка:</p>



<pre class="wp-block-preformatted">TCP/UDP: Socket bind failed on local address [undef]: Permission denied</pre>



<p>Значит вам нужно либо правильно настроить, либо отключить SELinux. В данном материале я не хочу касаться настройки SELinux, поэтому просто отключаем его:</p>



<pre class="wp-block-preformatted"># mcedit /etc/sysconfig/selinux</pre>



<p>меняем значение</p>



<pre class="wp-block-preformatted">SELINUX=disabled</pre>



<p>Чтобы изменения вступили в силу, перезагружаемся:</p>



<pre class="wp-block-preformatted"># reboot</pre>



<p>Пробуем снова запустить openvpn сервер:</p>



<pre class="wp-block-preformatted"># systemctl start openvpn@server</pre>



<p>Проверяем, запустился или нет:</p>



<pre class="wp-block-preformatted"># netstat -tulnp | grep 13555

udp 0 0 0.0.0.0:13555 0.0.0.0:* 2472/openvpn</pre>



<p>Отлично, запустился на указанном порту.</p>



<p>Добавляем&nbsp;сервер openvpn в автозагрузку:</p>



<pre class="wp-block-preformatted">#&nbsp;systemctl enable openvpn@server

ln -s '/usr/lib/systemd/system/openvpn@.service' '/etc/systemd/system/multi-user.target.wants/openvpn@server.service'</pre>



<p>Теперь внимательно проверим корректность всех настроек на сервере. Сначала посмотрим информацию о сетевых интерфейсах:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-netstat.png" alt="centos-netstat" class="wp-image-1650"/></figure></div>



<p>Обращаем внимание на адреса туннеля vpn. Теперь проверяем статические маршруты:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-ifconfig.png" alt="centos-ifconfig" class="wp-image-1651"/></figure></div>



<p>Тут тоже все в порядке. Траффик из подсети филиала 192.168.20.0/24 будет маршрутизироваться в тоннель. С настройкой сервера закончили, идем теперь на клиент.</p>


</br>



<h2 class="wp-block-heading">Настройка в CentOS 7 клиента openvpn</h2>



<p>На centos-client отключаем SELinux, создаем в директории /etc/openvpn файл конфигурации client.conf:</p>



<pre class="wp-block-preformatted"># mcedit /etc/openvpn/client.conf</pre>



<pre class="wp-block-preformatted">dev tun
proto udp
remote 192.168.1.25 13555
client
resolv-retry infinite
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client.crt
key /etc/openvpn/client.key
route 192.168.10.0 255.255.255.0
persist-key
persist-tun
comp-lzo
verb 3
status /var/log/openvpn/openvpn-status.log 1
status-version 3
log-append /var/log/openvpn/openvpn-client.log</pre>



<p>Не забываем скопировать в /etc/openvpn сохраненные ранее ключи&nbsp;ca.crt,&nbsp;client.crt,&nbsp;client.key.</p>



<p>Обращаю внимание на параметр&nbsp;<strong>route&nbsp;</strong>в данном конфиге. Его можно здесь не указывать, сделав конфиг более унифицированным для множества клиентов. Вместо этого данную настройку можно передавать с сервера openvpn, указав в файле настроек клиента параметр&nbsp;<strong>push route</strong>&nbsp;следующим образом:</p>



<pre class="wp-block-preformatted">push "route 192.168.10.0 255.255.255.0"</pre>



<p>Создаем каталог для логов:</p>



<pre class="wp-block-preformatted"># mkdir /var/log/openvpn</pre>



<p>Запускаем openvpn client:</p>



<pre class="wp-block-preformatted">#&nbsp;systemctl start openvpn@client</pre>



<p>Добавляем в автозагрузку:</p>



<pre class="wp-block-preformatted"># systemctl enable openvpn@client</pre>



<p>Теперь смотрим картину настроек на клиенте:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/openvpn-client-ifconfig.png" alt="openvpn-client-ifconfig" class="wp-image-1652"/></figure></div>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/openvpn-client-netstat.png" alt="openvpn-client-netstat" class="wp-image-1653"/></figure></div>



<p>Все в порядке, подключение к vpn серверу есть, маршруты прописаны верно.</p>



<p>В принципе, этого уже достаточно, чтобы трафик забегал в обе стороны из одной&nbsp;подсети в другую. Но для этого у вас должны быть соответствующим образом настроены сами шлюзы, фаерволы на них, маскарадинг, в том числе на интерфейсе&nbsp;<strong>tun</strong>. Я приведу вам свои настройки iptables с обоих серверов, чтобы вам было проще сравнить конфиги и диагностировать возможные проблемы.</p>



<p>Перед этим напомню важный момент, если вдруг вы с нуля настраиваете шлюз и не проверили его в реальной работе. Для роутинга трафика между сетевыми интерфейсами, необходимо добавить строку:</p>



<pre class="wp-block-preformatted">net.ipv4.ip_forward = 1</pre>



<p>в файл&nbsp;/etc/sysctl.conf и применить настройку:</p>



<pre class="wp-block-preformatted"># sysctl -p</pre>



<p>Если у вас этого не сделано, то трафик между интерфейсами&nbsp;ходить не будет. Ниже&nbsp;мои конфиги iptables.</p>



<p><strong>Centos-server</strong>:</p>



<pre class="wp-block-preformatted">#!/bin/bash
#
# Объявление переменных
export IPT="iptables"

# Интерфейс который смотрит в интернет
export WAN=eth0
export WAN_IP=192.168.1.25

# Локалка
export LAN=eth1
export LAN_IP_RANGE=192.168.10.0/24

# Очистка всех цепочек iptables
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

# Установим политики по умолчанию для трафика, не соответствующего ни одному из правил
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# разрешаем трафик для loopback и локалки
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A INPUT -i $LAN -j ACCEPT
$IPT -A OUTPUT -o $LAN -j ACCEPT

# разрешаем пинги
$IPT -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# Разрешаем исходящие соединения самого сервера
$IPT -A OUTPUT -o $WAN -j ACCEPT

# Разрешаем OpenVPN
$IPT -A INPUT -i tun+ -j ACCEPT
$IPT -A OUTPUT -o tun+ -j ACCEPT
$IPT -A FORWARD -i tun+ -j ACCEPT
# Разрешаем доступ из внутренней сети в vpn
$IPT -A FORWARD -i $LAN -o tun+ -j ACCEPT

# Разрешаем доступ из внутренней сети наружу
$IPT -A FORWARD -i $LAN -o $WAN -j ACCEPT

# Маскарадинг
$IPT -t nat -A POSTROUTING -o tun0 -j MASQUERADE
$IPT -t nat -A POSTROUTING -o $WAN -s $LAN_IP_RANGE -j MASQUERADE

# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
# Пропускать все уже инициированные соединения, а также дочерние от них
$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Пропускать новые, а так же уже инициированные и их дочерние соединения
$IPT -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешить форвардинг для уже инициированных и их дочерних соединений
$IPT -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# Отбрасывать все пакеты, которые не могут быть идентифицированы
# и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP

# Приводит к связыванию системных ресурсов, так что реальный
# обмен данными становится не возможным.
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# Открываем порт для ssh
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT

# Открываем порт для openvpn
$IPT -A INPUT -i $WAN -p udp --dport 13555 -j ACCEPT

# Записываем правила
/sbin/iptables-save &gt; /etc/sysconfig/iptables</pre>



<p>В<strong>&nbsp;сentos-client&nbsp;</strong>настройки абсолютно такие же, кроме переменных WAN, LAN и&nbsp;LAN_IP_RANGE.</p>


</br>



<p>Подробнее <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-iptables-%d0%b2-centos-7/" target="_blank" rel="noreferrer noopener">о настройке iptables</a> читайте в соответствующем материале.</p>



<p>Если ваш openvpn клиент не подключается, то в первую очередь проверяйте настройки firewall &#8212; входящие подключения к серверу и исходящие клиента. Обратите внимание на номер порта и тип (TCP или UDP) если вы их меняли. У меня были затупы, когда никак не мог разобраться, почему нет соединения. Оказывалось, что я менял порт c UDP на TCP, но по привычке на фаерволе оставлял UDP.</p>



<p>Теперь давайте проверим, как бегают пакеты в нашей vpn сети. Заходим на centos-client (192.168.20.1)&nbsp;и пингуем centos-server (192.168.10.1)&nbsp;и pc1 (192.168.10.50):</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-client-ping.png" alt="centos-client-ping" class="wp-image-1657"/></figure></div>



<p>Заходим на pc2 (192.168.20.50) и пингуем&nbsp;centos-server&nbsp;и pc1:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/pc2-ping.png" alt="pc2-ping" class="wp-image-1660"/></figure></div>



<p>Теперь в обратную сторону. Заходим на&nbsp;pc1 (192.168.10.50) и пингуем&nbsp;centos-client (192.168.20.1) и&nbsp;pc2 (192.168.20.50):</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/pc1-ping.png" alt="pc1-ping" class="wp-image-1659"/></figure></div>



<p>И напоследок&nbsp;пропингуем с vpn сервера подсеть клиента:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-server-ping.png" alt="centos-server-ping" class="wp-image-1658"/></figure></div>



<p>В завершение темы объединения удаленных офисов, проверим доступ к общим сетевым ресурсам. Расшарим папку на PC2 и зайдем на нее с PC1:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/openvpn-share.png" alt="openvpn-share" class="wp-image-1661"/></figure></div>



<p>Все получилось. Мы реально объединили удаленные офисы в единую логическую сеть с помощью openvpn сервера.</p>


</br>



<h2 class="wp-block-heading">Настройка openvpn client&nbsp;в windows</h2>



<p>Теперь рассмотрим вариант подключения к нашей логической сети удаленного сотрудника с рабочей станцией windows. Допустим, мы объединили наши офисы в единую сеть, доступ работает в обе стороны. Нам необходимо, чтобы удаленный пользователь смог подключиться либо к обоим сетям, либо выборочно только к основному офису, либо только к филиалу.</p>



<p>Первым делом идем на сервер и создаем для клиента сертификаты.</p>



<pre class="wp-block-preformatted"># cd /etc/openvpn/keys/easy-rsa-master/easyrsa3
# ./easyrsa gen-req user1 nopass
# ./easyrsa sign-req client user1</pre>



<p>Процедура такая же, как и при создании первого сертификата клиента, который мы уже сгенерировали ранее. На выходе имеем два файла:&nbsp;<strong>user1.key</strong>&nbsp;и&nbsp;<strong>user1.crt</strong>. Добавляем сюда ключ&nbsp;<strong>ca.crt</strong>&nbsp;и передаем пользователю на компьютер.</p>



<p>Дальше создаем файл конфигурации для этого клиента:</p>



<pre class="wp-block-preformatted"># cd&nbsp;/etc/openvpn/ccd
# mcedit user1
push "route 192.168.10.0 255.255.255.0"
push "route 192.168.20.0 255.255.255.0"</pre>



<p>Этими параметрами мы передаем клиенту маршруты к обоим сетям офисов. Если нужно подключать клиента только к какой-то одной сети, то оставляйте одну сеть, вторую удаляйте.</p>



<p>Теперь нужно скачать openvpn client под нашу версию windows. Ссылки для скачивания я давал в самом начале статьи.&nbsp;Дальше выполняем установку клиента. Обращаю внимание, что запускать установщик нужно обязательно с правами администратора:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/openvpn-install-as-admin.png" alt="установка openvpn client в windows 7" class="wp-image-1673"/></figure></div>



<p>Приступаем к настройке клиента в windows. Для этого нам понадобится файл конфигурации. Можно взять уже готовый config, который мы создавали ранее и немного изменить его. Файл конфигурации openvpn клиента должен выглядеть вот так:</p>



<pre class="wp-block-preformatted">dev tun
proto udp
remote 192.168.1.25
port 13555
client
resolv-retry infinite
ca ca.crt
cert user1.crt
key user1.key
persist-key
persist-tun
comp-lzo</pre>



<p>У нас нет задачи видеть сеть за клиентом, да и он скорее всего не будет являться шлюзом, поэтому параметра&nbsp;<strong>route</strong>&nbsp;в конфиге&nbsp;нет. Плюс убраны пути для логов &#8212; openvpn будет создавать их в папке по-умолчанию. Сохраняем конфигурацию под именем&nbsp;openvpn.ovpn в папку C:\Program Files\OpenVPN\config, туда же копируем файлы сертификатов и запускаем OpenVPN GUI от имени&nbsp;<strong>администратора</strong>!</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/openvpn-start-as-admin.png" alt="openvpn запуск от администратора" class="wp-image-1674"/></figure></div>



<p>Это важно, без прав администратора openvpn client для правильной маршрутизации не сможет прописать необходимые &nbsp;маршруты.</p>



<p>Ищем серый мониторчик в трее, нажимаем правой кнопкой мыши на него и выбираем &#171;Подключиться&#187;.</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/openvpn-client-connect.png" alt="openvpn client подключение" class="wp-image-1676"/></figure></div>



<p>Во время подключения мониторчик будут гореть желтым цветом. Как только подключение будет установлено, цвет сменится на зеленый. Это означает, что openvpn клиент успешно создал туннель&nbsp;и можно начинать работать по vpn.</p>



<p>Для того, чтобы openvpn client автоматически подключался при запуске, нужно создать для него ярлык с параметрами:</p>



<pre class="wp-block-preformatted">--connect "openvpn.ovpn"</pre>



<p>Для этого выбираем ярлык на рабочем столе&nbsp;OpenVPN GUI, выбираем его и нажимаем правой кнопкой мыши, открываем &#171;Свойства&#187;. &nbsp;На вкладке &#171;Ярлык&#187; в поле &#171;Объект&#187; в самом конце дописываем указанные параметры. Вся строка должна выглядеть следующим образом:</p>



<pre class="wp-block-preformatted">"C:\Program Files\OpenVPN\bin\openvpn-gui.exe"&nbsp;--connect "openvpn.ovpn"</pre>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/openvpn-autoconnect.png" alt="openvpn client автоподключение" class="wp-image-1677"/></figure></div>



<p>Теперь при запуске ярлыка openvpn будет автоматически подключаться к серверу и устанавливать vpn соединение.</p>



<p>Мы подключились к корпоративной vpn сети, объединяющую 2 офиса. Давайте попробуем получить доступ к компьютерам внутри этой сети. &nbsp;Пингуем все машины из нашей схемы:</p>



<figure class="wp-block-table"><table><tbody><tr><td>192.168.10.1</td><td>192.168.10.50</td><td>192.168.20.1</td><td>192.168.20.50</td></tr></tbody></table></figure>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/openvpn-client-ping.png" alt="openvpn client проверка сети" class="wp-image-1679"/></figure></div>



<p>Отлично, связь есть. Теперь попробуем зайти на сетевой ресурс, который мы создали ранее на компьютере сети филиала PC2:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/openvpn-client-share-access.png" alt="openvpn client настройка в windows" class="wp-image-1681"/></figure></div>



<p>Доступ есть, все в порядке.</p>


</br>



<h2 class="wp-block-heading">Заключение</h2>



<p>Теперь подведем итоги того, что мы сделали:</p>



<ol><li>В первую очередь настроили сервер openvpn на CentOS 7. Для этого создали инфраструктуру для удостоверяющего центра СА, с помощью которого мы создаем сертификаты.</li><li>Затем с помощью этого центра сформировали сертификаты для сервера и клиента, в роли которых выступает головной офис компании и его филиал.</li><li>Потом&nbsp;мы настроили openvpn сервер в офисе компании и подключили к нему в качестве клиента сервер филиала. Проверили это соединение, взаимную доступность узлов обоих сетей.</li><li>В завершении сформировали сертификат для удаленного сотрудника и настроили ему подключение openvpn клиента в windows. Проверили доступность всех узлов обоих сетей.</li></ol>



<p>По этой схеме можно добавить любое количество филиалов или удаленных сотрудников к общей сети. Я с крупными сетями не работал, но лично подключал до 5-ти удаленных филиалов к головной сети офисов, плюс удаленных пользователей к ним. У пользователей маршрутами настраивал доступ к той или иной сети. Единственная проблема, которая тут может возникнуть, это если нумерация подключаемых сетей будет совпадать. Но тут уже ничего не поделаешь, придется ее где-то менять.</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b8%d1%82%d1%8c-openvpn-%d0%bd%d0%b0-centos-7/">Настроить openvpn на CentOS 7</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b8%d1%82%d1%8c-openvpn-%d0%bd%d0%b0-centos-7/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Настройка прокси сервера на CentOS 7 (squid+AD+sams2)</title>
		<link>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%bf%d1%80%d0%be%d0%ba%d1%81%d0%b8-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-%d0%bd%d0%b0-centos-7-squidadsams2/</link>
					<comments>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%bf%d1%80%d0%be%d0%ba%d1%81%d0%b8-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-%d0%bd%d0%b0-centos-7-squidadsams2/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sat, 08 Aug 2020 22:47:56 +0000</pubDate>
				<category><![CDATA[CentOS]]></category>
		<category><![CDATA[sams2]]></category>
		<category><![CDATA[squid]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1485</guid>

					<description><![CDATA[<p>Когда у меня появилась необходимость настроить полноценный прокси сервер на базе CentOS 7, оказалось, что в интернете почти нет актуальной</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%bf%d1%80%d0%be%d0%ba%d1%81%d0%b8-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-%d0%bd%d0%b0-centos-7-squidadsams2/">Настройка прокси сервера на CentOS 7 (squid+AD+sams2)</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Когда у меня появилась необходимость настроить полноценный прокси сервер на базе CentOS 7, оказалось, что в интернете почти нет актуальной информации на эту тему. Статьи в целом есть, но большинство из них про 6-ю версию, плюс нету полноценной связки с active directory. В своей статье я восполню тематический пробел.</p>


</br>



<p>Существует проверенная временем связка для прокси сервера &#8212; squid + sams. Я настраивал ее еще лет 8 назад на Freebsd. Недавно у меня появилась необходимость настроить что-то подобное на CentOS 7, и я с удивлением обнаружил, что ничего принципиально нового с тех пор не появилось. Никакой более удобной и информативной web панели к squid не придумали.</p>



<p>Так что будем настраивать проверенный временем набор программ. Ко всему прочему, удобнее его сразу интегрировать с виндовым доменом, для простой&nbsp;авторизации на прокси с помощью учетных записей домена. Так проще будет смотреть статистику и давать доступ. Особенно это актуально, если у вас есть терминальные пользователи, работающие с одного ip. Здесь у вас вообще нет других вариантов, если вам нужна статистика и ограничение доступа по пользователям.</p>



<p>Приступим к настройке. В своей работе я буду подразумевать, что вы установили и <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/centos-7-%d0%b8-8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-%d0%bf%d0%be%d1%81%d0%bb%d0%b5-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba/" target="_blank" rel="noreferrer noopener">настроили</a> centos по моим рекомендациям. Советую ознакомиться с материалом. Это позволит здесь не тратить время на второстепенные настройки, которые не имеют прямого отношения к теме статьи.</p>



<h2 class="wp-block-heading">Добавление CentOS 7 в домен Windows</h2>



<p>Здесь нужно быть очень внимательным. Это сложный&nbsp;и не любимый мной момент, так как все очень сильно привязано к версиям системы и софта. Порой какой-нибудь точки или регистра достаточно, чтобы ничего не работало. Так вышло и у меня, когда я готовил этот материал.</p>



<p>Я без проблем ввел компьютер в домен, прошел все проверки, но потом в squid напрочь отказывалась работать ntlm авторизация. Все на вид выглядело нормально, но не работало. Я несколько раз восстанавливал виртуалку и начинал все сначала, перечитав практически все, что смог найти по теме в рунете и буржунете. В какой-то момент все заработало. Я зафиксировал результат и несколько раз проверил последовательность действий и отточил ее до каждого шага. Проверил несколько раз на чистой системе. По крайней мере на момент написания статьи конфигурация на 100% рабочая, если аккуратно повторить все мои действия. Приступаем.</p>



<p>Сначала остановим и отключим firewalld:</p>



<pre class="wp-block-preformatted">#&nbsp;systemctl stop firewalld &amp;&amp; systemctl disable firewalld</pre>



<p>Это не значит, что его не надо настраивать. Сейчас другая тема статьи, для локализации проблем необходимо убрать все, что теоретически может мешать при неправильной настройке. Firewall нужно настраивать и у меня есть <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-iptables-%d0%b2-centos-7/" target="_blank" rel="noreferrer noopener">подробная инструкция по настройке iptables</a>. Рекомендую с ней ознакомиться и аккуратно настроить iptables, когда все получится со squid.</p>



<p>Установим софт для добавления сервера в домен windows:</p>



<pre class="wp-block-preformatted"># yum -y install samba-winbind samba-winbind-clients pam_krb5 krb5-workstation ntp ntpdate</pre>



<p>Для продолжения настройки вам необходимо знать следующие вещи &#8212; FQDN имя контроллера домена, его ip адрес и учетную запись с правами на ввод компьютера в домен.</p>



<p>Первым делом вручную синхронизируем часы компьютера с контроллером домена:</p>



<pre class="wp-block-preformatted">#&nbsp;ntpdate winsrv.xs.local</pre>



<p>Добавляем наш контроллер в список серверов для обновления в файле&nbsp;/etc/ntp.conf, запускаем ntp и добавляем в автозагрузку:</p>



<pre class="wp-block-preformatted"># systemctl enable ntpd
# systemctl start ntpd</pre>



<p>Синхронизация времени с контроллером домена не является обязательным действием. Но в случае расхождения времени более чем на 5 минут, будут возникать проблемы, которые на первый взгляд будут неочевидными и решать их трудно. Поэтому на всякий случай процедуру лучше провести. Очень подробно <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%ba%d0%b0%d0%ba-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d1%8c-%d0%b8%d0%b7%d0%bc%d0%b5%d0%bd%d0%b8%d1%82%d1%8c-%d0%b2%d1%80%d0%b5%d0%bc%d1%8f-%d0%b8-%d1%87%d0%b0%d1%81%d0%be%d0%b2/" target="_blank" rel="noreferrer noopener">о настройке времени в CentOS 7</a> рассказано отдельно.</p>



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



<pre class="wp-block-preformatted"># authconfig --enablekrb5 --krb5kdc=winsrv.xs.local --krb5adminserver=winsrv.xs.local --krb5realm=WINSRV.XS.LOCAL --enablewinbind --enablewinbindauth --smbsecurity=ads --smbrealm=XS.LOCAL --smbservers=winsrv.xs.local --smbworkgroup=XS --winbindtemplatehomedir=/home/%U --winbindtemplateshell=/bin/bash --enablemkhomedir --enablewinbindusedefaultdomain --update</pre>



<p>Команда вся идет в одну строчку. Скопируйте ее сначала в текстовый файл и подредактируйте под свои параметры. Проверьте, что нигде не пропали и не добавились лишние пробелы, либо какие-то еще символы, тире должно быть двойным перед параметром. В данном случае:</p>



<ul><li><strong>xs</strong>&nbsp;&#8212; название домена</li><li><strong>winsrv</strong>&nbsp;&#8212; имя контроллера домена</li><li><strong>winsrv.xs.local</strong>&nbsp;&#8212; полное имя домена</li></ul>



<p>Вывод после работы команды будет такой:</p>



<pre class="wp-block-preformatted">Job for winbind.service failed. See 'systemctl status winbind.service' and 'journalctl -xn' for details.
getsebool: SELinux is disabled</pre>



<p>Это нормально. Обращаю внимание, что SELinux у меня отключен.</p>



<p>Теперь заводим машину&nbsp;в домен:</p>



<pre class="wp-block-preformatted"># net ads join -U administrator
Enter administrators's password:
Using short domain name -- XS
Joined 'PROXY' to dns domain 'xs.local'</pre>



<p>Вводим пароль, ждем некоторое время. Если ошибки не появилось, значит компьютер успешно включен в домен.</p>



<p>Теперь нужно запустить и добавить в автозагрузку winbind:</p>



<pre class="wp-block-preformatted"># systemctl start winbind
# systemctl enable&nbsp;winbind</pre>



<p>Проверяем, все ли у нас корректно работает. Для начала&nbsp;проверим наличие доверительной учетной записи сервера на КД:</p>



<pre class="wp-block-preformatted"># wbinfo -t 
checking the trust secret for domain XS via RPC calls succeeded</pre>



<p>Все в порядке. Теперь проверяем, может ли наш сервер получать списки пользователей и групп. Первая команда выводит список всех групп домена, вторая &#8212; всех пользователей:</p>



<pre class="wp-block-preformatted">#&nbsp;wbinfo -g
# wbinfo -u</pre>



<p>Проверим авторизацию пользователя через winbind:</p>



<pre class="wp-block-preformatted"># wbinfo -a XS\\control%'pass'
plaintext password authentication succeeded
challenge/response password authentication succeeded</pre>



<p>В данном случае&nbsp;<strong>control</strong>&nbsp;&#8212; имя пользователя домена,&nbsp;<strong>pass</strong>&nbsp;&#8212; его пароль. Успешная проверка выглядит так, как у меня.</p>



<p>Теперь запросим билетик кербероса:</p>



<pre class="wp-block-preformatted"># kinit administrator@XS.LOCAL</pre>



<p>Дальше вводите пароль. Если ошибки не выскочило, значит все в порядке. Проверим билет командой:</p>



<pre class="wp-block-preformatted"># klist
Ticket cache: KEYRING:persistent:0:0
Default principal: administrator@XS.LOCAL

Valid starting Expires Service principal
12/04/2015 23:19:33 12/05/2015 09:19:33 krbtgt/XS.LOCAL@XS.LOCAL
renew until 12/11/2015 23:19:29</pre>



<p>Все в порядке, проверки прошли. Мы полностью подготовили сервер к авторизации пользователей доменными учетными записями.</p>


</br>



<h2 class="wp-block-heading">Настройка SQUID с ntlm авторизацией через домен</h2>



<p>Дальше будет попроще. Если на предыдущем этапе вы все сделали правильно, то squid заработает без проблем. Устанавливаем его:</p>



<pre class="wp-block-preformatted"># yum -y install squid</pre>



<p>Открываем файл конфигурации&nbsp;<em>/etc/squid/squid.conf</em>&nbsp;и добавляем в самое начала следующие параметры:</p>



<pre class="wp-block-preformatted">auth_param ntlm program /usr/bin/ntlm_auth --diagnostics --helper-protocol=squid-2.5-ntlmssp --domain=<strong>XS</strong>
auth_param ntlm children 10
auth_param ntlm keep_alive off
acl auth proxy_auth REQUIRED</pre>



<p>Не забудьте указать свой домен. Обращаю внимание на первую строку. В большинстве инструкций в интернете она выглядит немного не так, в ней нет дополнительных параметров. Без них у меня ntlm авторизация не хотела работать, я очень долго ее мучал.</p>



<p>Дальше находим в конфиге строку:</p>



<pre class="wp-block-preformatted">http_access allow localnet</pre>



<p>Комментируем ее, она позволяет получить доступ всем компьютерам из локальной сети. После этой строки добавляем новую:</p>



<pre class="wp-block-preformatted">http_access allow auth</pre>



<p>Разрешаем доступ только тем, кто прошел авторизацию. Запускаем squid и добавляем в автозагрузку:</p>



<pre class="wp-block-preformatted"># systemctl start squid
# systemctl enable squid</pre>



<p>Все, можно идти проверять. Открываем браузер у какого-нибудь компьютера и указываем в качестве прокси ip адрес сервера, порт 3128. Пробуйте выйти в интернет.</p>



<p>Как понять, что все работает правильно:</p>



<ol><li>Пользователя должно пустить в интернет.</li><li>В лог файле сквида должна быть информация об имени пользователя, который получает доступ. У меня это выглядит примерно вот так при открытии страницы яндекса:</li></ol>



<pre class="wp-block-preformatted"># cat /var/log/squid/access.log | grep control

1449261311.346 9 10.1.4.189 TCP_MISS/304 438 GET http://yastatic.net/islands/_/S1-qWWyv85yFAtoHVvuxJXpOKA4.svg <strong>control</strong> HIER_DIRECT/178.154.131.217 -
 1449261311.351 11 10.1.4.189 TCP_MISS/200 622 GET http://yastatic.net/www/_/_/y/ljN5poHcx67T3HSZuHbvf2NNk.png <strong>control</strong> HIER_DIRECT/178.154.131.217 image/png
 1449261311.404 9 10.1.4.189 TCP_MISS/304 440 GET http://yastatic.net/morda-logo/i/disaster/metro11072015.png <strong>control</strong> HIER_DIRECT/178.154.131.217 -
 1449261311.488 97 10.1.4.189 TCP_MISS/302 355 GET http://kiks.yandex.ru/fu <strong>control</strong> HIER_DIRECT/213.180.204.143 -
 1449261311.507 9 10.1.4.189 TCP_MISS/304 341 GET http://kiks.yandex.ru/system/fc07.swf <strong>control</strong> HIER_DIRECT/213.180.204.143 -</pre>



<p>В данном случае&nbsp;<strong>control</strong>&nbsp;&#8212; доменная учетная запись.</p>



<p>У нас получилась полностью дефолтная конфигурация, в которую мы просто добавили ntlm авторизацию и разрешили доступ в интернет только для тех, кто эту авторизацию прошел. Если компьютер находится не в домене, то при работе через прокси выскочит окно с авторизацией, в которую нужно будет ввести данные от учетной записи домена, чтобы получить доступ в интернет.</p>



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


</br>



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



<p>И вот мы подошли &nbsp;самому главному и трудному. Когда я решил написать статью на эту тему, я подозревал, что установить sams2 в CentOS 7 будет тяжело, но не думал, что настолько. Пришлось разбить работу на два этапа. Первый этап мы уже прошли, а со вторым мне пришлось поковыряться не один день, пока все не получилось так, как хотелось.</p>



<p>Трудности тут с тем, что проект sams2 давно заброшен, под CentOS 7 он вообще не планировался, готового пакета нет. Есть только старые пакеты для 6-й версии и исходники. Я буду собирать sams2 из исходников и очень аккуратно опишу все этапы, по которым прошел. Столкнулся с множеством ошибок, пришлось немного править исходники, чтобы собранные версии нормально работали. Потом с настройками много нюансов, которые нигде не описаны, пришлось&nbsp;ковыряться самому.</p>



<p>Если все сделать&nbsp;<a href="http://sams.perm.ru/sams2/doc/RU/install.html" target="_blank" rel="noreferrer noopener">по инструкции</a>&nbsp;с сайта разработчика, то в CentOS 7 ничего не получится. Там как минимум есть 2 бага, которые не позволят собрать работающие программы и провести нормально установку.</p>



<p>В итоге у меня получилась конфигурация sams2, которая импортирует пользователей из AD, создает списки доступа к сайтам и позволяет отдельным пользователям блокировать различные сайты, плюс ведет статистику по пользователям в удобном виде.</p>



<p>Это тот функционал в sams2, который я настроил у себя и проверил. Возможно работает что-то еще, нужно проверять. Не все заявленные функции самс работают из коробки, их нужно с костылями настраивать и проверять. Я добился удовлетворяющего меня результата и остановился на этом.</p>



<p>Приступаем к работе. Нам нужно <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-web-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-nginx-php-fpm-php7-%d0%bd%d0%b0-centos-8/" target="_blank" rel="noreferrer noopener">настроить web сервер</a> для работы интерфейса sams. Можно воспользоваться моей инструкцией, можно чем-то еще. Не обязательно ставить apache, можно <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-web-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-nginx-php-fpm-php7-%d0%bd%d0%b0-centos-8/" target="_blank" rel="noreferrer noopener">настроить на nginx и php-fpm</a>, либо на lighttpd. Я для простоты все сделаю на апаче. Останавливаться подробно не буду на каждом из этапов, все описание есть в первой ссылке абзаца. Привожу только команды.</p>



<p>Устанавливаем httpd:</p>



<pre class="wp-block-preformatted"># yum install -y httpd</pre>



<p>Добавляем в автозапуск и запускаем:</p>



<pre class="wp-block-preformatted">#&nbsp;systemctl enable httpd
# systemctl start httpd</pre>



<p>Устанавливаем php и некоторые модули:</p>



<pre class="wp-block-preformatted">yum install -y php
yum install -y&nbsp;php-mysql php-mbstring php-mcrypt php-devel php-xml php-gd</pre>



<p>Устанавливаем mariadb</p>



<pre class="wp-block-preformatted">yum install -y mariadb mariadb-server <strong>mariadb-devel</strong></pre>



<p>Обращаю внимание на последний пакет. Без него установить sams2 не получится, хотя его наличие в списке необходимых пакетов не очевидно. Я сначала его не установил и при сборке самс не видел у меня установленного сервера mysql.</p>



<p>Добавляем в автозапуск и запускаем:</p>



<pre class="wp-block-preformatted"># systemctl enable mariadb.service
#&nbsp;systemctl start mariadb</pre>



<p>Задаем пароль рута:</p>



<pre class="wp-block-preformatted"># /usr/bin/mysql_secure_installation</pre>



<p>Подключаем репозиторий epel и устанавливаем phpmyadmin. Это не обязательно, но мне с ним удобнее:</p>



<pre class="wp-block-preformatted">#&nbsp;yum -y install epel-release
# yum -y install phpmyadmin</pre>



<p>Все подготовительные работы сделаны. Убедитесь, что у вас нормально работает веб сервер и скрипты php. Я не буду на этом останавливаться. Так удобнее будет для вас. Если сейчас не проверить веб сервер, то потом, если у вас недостаточно опыта в работе, вы не поймете, что у вас не работает &#8212; сам самс или что-то другое. Лучше все подготовить и проверить по отдельности.</p>



<p>Скачиваем исходники sams2 в домашний каталог root. Все работы будут проделываться под этой учетной записью.</p>



<pre class="wp-block-preformatted"># yum -y install wget
# cd /root
# wget&nbsp;https://github.com/PavelVinogradov/sams2/archive/master.zip</pre>



<p>Ставим unzip и распаковываем архив:</p>



<pre class="wp-block-preformatted">#&nbsp;yum -y install unzip
# unzip&nbsp;master.zip</pre>



<p>Исходники программы лежат в папке&nbsp;<em>/root/sams2-master</em>. В ней ищем папку&nbsp;<em>src</em>&nbsp;и файл&nbsp;<em>proxy.h</em>. Его нужно будет отредактировать. Открываем редактором, ищем все строчки со значением&nbsp;<strong>enum</strong>&nbsp;и правим их:</p>



<pre class="wp-block-preformatted"># mcedit /root/sams2-master/src/proxy.h</pre>



<p>Было так:</p>



<pre class="wp-block-preformatted">enum TrafficType</pre>



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



<pre class="wp-block-preformatted">enum TrafficType<strong>: long</strong></pre>



<p>И так все строчки с этим значением. Их должно быть 5 штук. Сохраняем файл и закрываем. Если не внести эти изменения и собрать исходники как есть, то sams2daemon будет падать с ошибкой:</p>



<pre class="wp-block-preformatted">kernel: sams2daemon[27541]: segfault at ffffffffffffffe8 ip 00007fc54880944b sp 00007ffc8da37d20 error 5 in libstdc++.so.6.0.19[7fc54874b000+e9000]</pre>



<p>Это связано с тем, что CentOS 7 64-x битная система, а из этих исходников программа нормально собирается только на 32-х битных системах.</p>



<p>Теперь установим необходимые для сборки пакеты:</p>



<pre class="wp-block-preformatted"># yum -y install&nbsp;autoconf&nbsp;automake&nbsp;libtool&nbsp;pcre-devel&nbsp;libstdc++-devel&nbsp;gcc-c++</pre>



<p>Переходим в каталог с исходниками и начинаем компиляцию:</p>



<pre class="wp-block-preformatted"># cd /root/sams2-master
#&nbsp;make -f Makefile.cvs</pre>



<p>Запускаем скрипт автоматической конфигурации:</p>



<pre class="wp-block-preformatted">#&nbsp;sh ./configure</pre>


</br>



<p>Он должен отработать без ошибок и в конце вывести полезную информацию:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-01.png" alt="компиляция sams2 из исходников" class="wp-image-2404"/></figure></div>



<p>Сохраните пути, они позже пригодятся во время настройки. Обратите внимание на подчеркнутые строки. Без первой строки не будет поддержки mysql, без второй не заработают списки запрета доступа. Убедитесь, что все в порядке с ними.</p>



<p>Выполняем установку sams2:</p>



<pre class="wp-block-preformatted">#&nbsp;make install</pre>



<p>У меня она почему-то проходит с ошибкой:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-02.png" alt="ошибка установки sams2" class="wp-image-2405"/></figure></div>



<p>Суть ошибки в этой строке:</p>



<pre class="wp-block-preformatted">chmod: cannot access '//usr/local/share/sams2/data': No such file or directory</pre>



<p>Я не знаю, почему инсталлятор не может создать эту папку сам. Хотя проблема возможно просто в ошибке в исходниках, в пути почему-то стоят два слеша в начале. Я просто&nbsp;руками создал эту директорию и заново запустил установку:</p>



<pre class="wp-block-preformatted"># cd&nbsp;/usr/local/share/sams2/
# mkdir data
# cd /root/sams2-master
#&nbsp;make install</pre>



<p>Установка прошла успешно. Добавляем директорию с web интерфейсом sams2 в httpd. Для этого идем в директорию с конфигурациями и рисуем следующий&nbsp;файл настроек для самса:</p>



<pre class="wp-block-preformatted"># mcedit&nbsp;/etc/httpd/conf.d/sams2.conf</pre>



<pre class="wp-block-preformatted">Alias /sams2 /usr/local/share/sams2
&lt;Directory /usr/local/share/sams2/&gt;
 AddDefaultCharset UTF-8
 &lt;IfModule mod_authz_core.c&gt;
  &lt;RequireAny&gt;
   Require ip 10.1.3.0/24 10.1.4.0/24
  &lt;/RequireAny&gt;
 &lt;/IfModule&gt;
&lt;/Directory&gt;</pre>



<p>10.1.3.0/24 10.1.4.0/24 &#8212; подсети из которых будет доступ к web интерфейсу. Можете просто указать ip адрес администратора, если доступ будет нужен только с его компьютера.</p>



<p>Удаляем те конфиги, которые самс сгенерировал автоматически, я с ними не мог зайти на сайт, не стал разбираться почему, просто сделал быстро сам настройки:</p>



<pre class="wp-block-preformatted"># rm&nbsp;/etc/httpd/conf.modules.d/doc4sams2.conf
# rm&nbsp;/etc/httpd/conf.modules.d/sams2.conf</pre>



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



<pre class="wp-block-preformatted"># systemctl restart httpd</pre>



<p>Теперь если зайти по адресу&nbsp;<em>htpp://ip-сервера/sams2</em>&nbsp;вы увидите сообщение:</p>



<pre class="wp-block-preformatted">Invalid query: Access denied for user 'apache'@'localhost' (using password: NO)</pre>



<p>Это нормально. Пока так и должно быть.</p>



<p>Редактируем конфигурационный файл&nbsp;<em>sams2.conf</em>:</p>



<pre class="wp-block-preformatted"># mcedit /usr/local/etc/sams2.conf</pre>



<pre class="wp-block-preformatted">DB_ENGINE=MySQL
DB_SERVER=localhost
SAMS_DB=sams2db
ODBC=0
PDO=0
ODBCSOURCE=sams_mysql
<strong>DB_USER</strong>=root
<strong>DB_PASSWORD</strong>=rootpass
SQUIDCACHEFILE=access.log
SQUIDROOTDIR=/etc/squid
SQUIDLOGDIR=/var/log/squid
SQUIDCACHEDIR=/var/spool/squid
WBINFOPATH=/usr/local
SAMSPATH=/usr/local
SQUIDPATH=/usr/sbin
SQUIDGUARDLOGPATH=/var/log
SQUIDGUARDDBPATH=/var/db/squidguard
RECODECOMMAND=iconv -f KOI8-R -t 866 %finp &gt; %fout
REJIKPATH=/usr/local/rejik
SHUTDOWNCOMMAND=shutdown -h now
CACHENUM=1</pre>



<p>В качестве пользователя mysql указываем пока рута. Сохраняем файл и идем снова в веб-интерфейс, обновляем страничку. У вас должна загрузиться следующая информация:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-03.png" alt="install sams2 на CentOS 7" class="wp-image-2406"/></figure></div>



<p>Нажимаем&nbsp;<strong>Run setup program &gt;&gt;</strong>&nbsp;. И получаем сообщение об ошибке:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-04.png" alt="sams2 ошибка" class="wp-image-2407"/></figure></div>



<p>При этом в логе httpd следующая информация:</p>



<pre class="wp-block-preformatted"># cat /var/log/httpd/error_log

PHP Parse error: syntax error, unexpected '$configbuttom_7_log_2' (T_VARIABLE) in /usr/local/share/sams2/lang/lang.EN on line 1100, referer: http://10.1.4.14/sams2/index.php</pre>


</br>



<p>Это очередной баг самс2. Чтобы его исправить, открываем на редактирование файл&nbsp;<em>/usr/local/share/sams2/lang/lang.EN</em>&nbsp;идем на строку 1100 и после нее убираем все пробелы перед последующими строками:</p>



<pre class="wp-block-preformatted"># mcedit&nbsp;/usr/local/share/sams2/lang/lang.EN</pre>



<p>Делаем так:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-05.png" alt="баг в sams2" class="wp-image-2408"/></figure></div>



<p>Сохраняем файл, идем в веб интерфейс и перезагружаем страничку. Должны увидеть форму выбора языка. Выбираем русский:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-10.png" alt="sams2 setup" class="wp-image-2412"/></figure></div>



<p>Проходит проверка требований. У меня такие результаты:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-07.png" alt="проверка установки sams2" class="wp-image-2409"/></figure></div>



<p>Создаем базу данных. Убедитесь, что пользователя и базы данных для самс, которые вы будете указывать, у вас еще нет в mysql, иначе получите ошибку. Заполняете данные для root и для нового пользователя:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-08.png" alt="создание базы данных для sams2" class="wp-image-2410"/></figure></div>



<p>Установка прошла успешно:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-09.png" alt="успешная установка sams2" class="wp-image-2411"/></figure></div>



<p>Теперь нужно снова отредактировать файл&nbsp;<em>sams2.conf</em>&nbsp;и заменить пользователя mysql на только что созданного:</p>



<pre class="wp-block-preformatted"># mcedit /usr/local/etc/sams2.conf</pre>



<p>Проверим работу веб интерфейса. Переходим снова по адресу http://ip-сервера/sams2. Мы должны увидеть окно авторизации. Нажимаем снизу на&nbsp;<em>Авторизация администратора SAMS&nbsp;</em>и вводим пользователя&nbsp;<strong>admin</strong>, пароль &#8212;&nbsp;<strong>qwerty</strong>. Открывается главное окно системы:</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-11.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-11.png" alt="главная страница sams" class="wp-image-2413"/></a></figure></div>



<p>Теперь нам нужно запустить демон&nbsp;<strong>sams2daemon</strong>. Создадим скрипт запуска. Для этого идем в папку&nbsp;<em>/root/sams2-master/redhat</em>&nbsp;и редактируем файл&nbsp;<strong>init.d</strong>:</p>



<pre class="wp-block-preformatted"># mcedit /root/sams2-master/redhat/init.d</pre>



<p>Находим там значение&nbsp;&nbsp;<strong>__CONFDIR</strong>&nbsp;и меняем его на&nbsp;<strong>/usr/local/etc/</strong>, значение&nbsp;<strong>__PREFIX</strong>&nbsp;меняем на&nbsp;<strong>/usr/local/bin/</strong>.&nbsp;У вас должны получиться&nbsp;2 измененные строки следующего вида, остальные оставляем как есть:</p>



<pre class="wp-block-preformatted">[ -f /usr/local/etc/sams2.conf ] || exit 0
DAEMON=/usr/local/bin/sams2daemon</pre>



<p>Копируем скрипт запуска в папку /etc/<em>init.d</em>:</p>



<pre class="wp-block-preformatted"># cp /root/sams2-master/redhat/init.d /etc/init.d/sams2</pre>



<p>Запускаем демон:</p>



<pre class="wp-block-preformatted">#&nbsp;/etc/init.d/sams2 start
Starting sams2 (via systemctl): [ OK ]</pre>



<p>Если будут какие-то ошибки, то смотрите общий лог messages.</p>



<p>На этом установка sams2 закончена. Можно приступать к настройке. Здесь она может отличаться, в зависимости от того, что вы хотите получить. Добавим в sams пользователей из домена. Для этого заходим в веб интерфейс и идем в раздел&nbsp;<strong>Авторизация</strong>. Убираем все галочки, оставляем только NTLM и жмем Конфигурировать. Появляется новый подпункт NTLM. Заходим в него и нажимаем снизу на отвертку и ключ:</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-12.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-12.png" alt="настройка ntlm авторизации в sams2" class="wp-image-2414"/></a></figure></div>



<p>Заполняем настройки. В моем случае они выглядели вот так:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-13.png" alt="подключение к AD в sams2" class="wp-image-2415"/></figure></div>



<p>Если все правильно ввели, то при нажатии на кнопку&nbsp;<strong>Тестировать NTLM-подключение</strong>&nbsp;вы увидите список пользователей и групп домена.</p>



<p>Чтобы добавить пользователей домена в качестве пользователей самс, необходимо в разделе NTLM снизу нажать на кнопку с домиком и подписью&nbsp;<em>Регистрация новых пользователей, входящих в домен Windows</em>. Выбрать через контрол всех пользователей, которых хотите добавить и нажать&nbsp;<strong>Добавить</strong>.</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-14.png" alt="добавление пользователей в sams2" class="wp-image-2416"/></figure></div>



<p>Они появятся в списке пользователей:</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-15.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-15.png" alt="пользователи в sams2" class="wp-image-2417"/></a></figure></div>



<p>Чтобы не было ограничения по трафику (вряд ли оно кому-то нужно в наше время), необходимо отредактировать соответствующий параметр в шаблоне&nbsp;<strong>Default</strong>.</p>



<p>Теперь нужно применить сделанные настройки. Для этого идем в раздел&nbsp;<strong>SQUID -&gt;&nbsp;Proxy server</strong>&nbsp;и жмем снизу на вторую кнопку слева со стрелочками. Нажимаем на&nbsp;<strong>Реконфигурировать</strong>. В случае успеха увидите надпись:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-16.png" alt="перезапуск squid через web интерфейс sams" class="wp-image-2418"/></figure></div>



<p>На всякий случай можно проверить конфиг squid. Там должны появиться только что созданные acl. В моем случае появились следующие строки в конфигурации. Пошел проверять конфиг и обнаружил, что там ничего не появилось. Это связано с тем, что sams редактирует конфиг сквида, ориентируясь на комментарии с метками&nbsp;<strong>TAG:</strong>. В CentOS 7 после установки конфиг сквида очень сокращен, в нем почти нет комментариев, представлена минимальная конфигурация. Указанных меток там тоже нет, нам их нужно добавить самим. Добавляем в&nbsp;<em>/etc/squid/squid.conf</em>&nbsp;следующие комментарии с метками:</p>



<pre class="wp-block-preformatted"># TAG: acl

# TAG: url_rewrite_access

# TAG: url_rewrite_program

# TAG: url_rewrite_children

# TAG: delay_pools

# TAG: delay_class

# TAG: delay_access

# TAG: delay_parameters

# TAG: http_access

# TAG: http_access2

# TAG: icp_access

</pre>


</br>



<p>Обязательно пустая строка&nbsp;после каждой метки. Теперь заново&nbsp;перезапускаем squid через веб интерфейс самса. Должны появиться изменения в конфиге. У меня добавились следующие строки:</p>



<pre class="wp-block-preformatted"># TAG: acl
acl Sams2Time1 time MTWHFAS 23:00-23:59
acl Sams2Template1 proxy_auth admin51
acl Sams2Template1 proxy_auth control

# TAG: http_access
# Setup Sams2 HTTP Access here
http_access allow Sams2Template1 Sams2Time1</pre>



<p>Обращаю внимание на параметр на acl Sams2Time1. По-умолчанию там указан временной интервал с 23:00 до 23:59. В соответствии с этими настройками доступ в интернет будет предоставлен только в это время. Подозреваю, что это ошибка автора, но мне пришлось потратить некоторое время, чтобы понять, почему правильная на первый взгляд конфигурация не работает. Если вам не нужен этот параметр, то уберите вообще временной интервал, либо исправьте его на 00:00-23:59.</p>



<p>Для корректной работы конфигурации необходимо убрать все остальные acl и&nbsp;http_access от предыдущей конфигурации squid, когда самс еще не был установлен.</p>



<p>Еще у меня были добавлены следующие строки:</p>



<pre class="wp-block-preformatted"># TAG: url_rewrite_access
acl Sams2Proxy dst your.ip.address
url_rewrite_access deny Sams2Proxy</pre>



<p>Из-за значения&nbsp;<strong>your.ip.address</strong>&nbsp;сквид писал об ошибке конфигурации. Чтобы самс писал сюда нормальное значение в виде ip адреса сервера, необходимо изменить его настройки. Делается это в разделе&nbsp;<strong>SQUID -&gt;&nbsp;Proxy server</strong>, снизу кнопочка с отверткой и ключом. Нажимаем на нее и изменяем снизу 2 настройки, указывая свой&nbsp;ip адрес:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-17.png" alt="настройка sams2" class="wp-image-2419"/></figure></div>



<p>Попутно на всякий случай проверьте остальные настройки. Я кое-что подредактировал под свои нужды. Сохраняете настройки и снова перезапускаете сквид через самс. Проверяем файл конфигурации squid.conf:</p>



<pre class="wp-block-preformatted"># cat squid.conf | grep Sams2Proxy
acl Sams2Proxy dst 10.1.4.14</pre>



<p>В строке появился реальный адрес и сквид больше не ругается на ошибку конфигурации.</p>



<p>Сейчас можно проверять работу. Заходим добавленными пользователями на компьютеры домена, указываем настроенный прокси сервер и серфим. Через некоторое время проверяем статистику в sams. Должны побежать килобайты:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-18.png" alt="подсчет трафика пользователей" class="wp-image-2420"/></figure></div>



<p>Теперь добавим ограничение для доступа к некоторым сайтам. Для этого идем в раздел&nbsp;<strong>Запрет доступа по URL</strong>&nbsp;и создаем новый список. Я создал список&nbsp;<strong>social</strong>&nbsp;и добавил в него адрес социальных сетей для теста: vk.com и&nbsp;ok.ru:</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-19.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-19.png" alt="создание списка на запрет доступа к сайту в sams2" class="wp-image-2421"/></a></figure></div>



<p>Теперь нужно подключить этот список шаблону по-умолчанию. Идем в шаблон Default, заходим в редактирование и ставим галочку напротив списка social:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-20.png" alt="подключение списка запретов в sams2" class="wp-image-2422"/></figure></div>



<p>Сохраняем изменения шаблона и перезапускаем конфигурацию сквида. Идем к пользователям и проверяем запрет:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-21.png" alt="запрет доступа по URL" class="wp-image-2423"/></figure></div>



<p>При попытке открыть запрещенный сайт, пользователь получит сообщение о запрете. Реализован этот функционал с помощью встроенного в самс редиректора. Никакие другие редиректоры в sams2 не работают. Но как по мне, так и этого достаточно. Что делать если у вас по какой-то причине не работает запрет доступа, как это было у меня?</p>



<p>В первую очередь надо проверить настройки прокси сервера в самс, там где мы указывали ip адрес сервера. Должен быть выбран редиректор&nbsp;<strong>встроенный в SAMS</strong>. Путь к каталогу, где лежат файлы запрета запроса у меня указан&nbsp;<strong>http://10.1.4.14/sams2</strong>:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/12/centos-squid-sams-22.png" alt="настройка редиректора в sams" class="wp-image-2424"/></figure></div>



<p>Я не знаю, почему именно такой путь должен быть, я указал наугад, так как по-умолчанию там стоял вообще не существующий адрес. И у меня заработало. Некоторое время я проковырялся с этим параметром, потому что в настройках httpd разрешил доступ к алиасу /sams2 только с машины администратора. А при запрете адреса пользователя редиректит на этот же алиас,&nbsp;и если он не имеет к нему доступа, то просто получает ошибку соединения в браузере и не понятно, то ли сработал запрет, то ли сайт недоступен, то ли с интернетом какие-то проблемы. В общем, было неудобно.</p>



<p>Дальше у меня были проблемы с тем, что сам редиректор не запускался. Я сначала скомпилировал исходники без редактирования под 64 бита, и демон не стартовал. Проверить, запущен ли он можно просто по списку процессов. Если все в порядке, то должен быть запущен &nbsp;<strong>sams2daemon</strong>&nbsp;и&nbsp;несколько&nbsp;<strong>sams2redir</strong>. Проверить можно просто:</p>



<pre class="wp-block-preformatted"># ps ax | grep sams
22721 ? S 0:01 /usr/local/bin/sams2daemon -l syslog
28498 ? S 0:00 (sams2redir)
28667 ? S 0:00 (sams2redir)
28860 pts/1 R+ 0:00 grep --color=auto sams</pre>



<p>Если у вас по какой-то причине сам редиректор не запускаются, запустить его можно вручную:</p>



<pre class="wp-block-preformatted"># /usr/local/bin/sams2redir</pre>



<p>После запуска у вас будет доступен терминал для ввода. Тут же можно проверить, как отрабатываются запреты. Вводите адрес сайта, пользователя, запрос GET и смотрите результат. Вот как выглядит реакция на нормальный сайт, доступ к которому разрешен:</p>



<pre class="wp-block-preformatted">http://ya.ru 10.1.4.189 control - GET
http://ya.ru 10.1.4.189 control - GET</pre>



<p>То есть вы вводите первую строку и редиректор тут же выводит точно такую же сам. А вот какая реакция должна быть на сайт под запретом:</p>



<pre class="wp-block-preformatted">http://vk.com 10.1.4.189 control - GET
http://10.1.4.14/sams2/blocked.php?action=urldenied&amp;id=control 10.1.4.189 control -</pre>



<p>Идет редирект на страничку&nbsp;<strong>blocked.php</strong>. Для разбора ситуации можно пойти в логи апача и посмотреть, что там есть на эту тему. Я так заметил, что у пользователей нет доступа к этому адресу, так как он был закрыт настройкой веб сервера. Отмечу еще для справки, что список заблокированных сайтов sams2 хранит в своей базе в таблице url. Возможно вам пригодится эта информация во время отладки.</p>



<p>Вот все, что касается настройки sams2 под CentOS 7. Надеюсь вам будет полезна&nbsp;эта информация. Бесплатных продуктов, аналогичных самсу я лично не знаю, поэтому ничего лучше не нашел, как использовать в очередной раз его, хоть и с такими большими трудностями пришлось столкнуться во время настройки. Но на выходе получился вполне рабочий вариант.</p>


</br>



<h2 class="wp-block-heading">Заключение</h2>



<p>Пришло время подвести итог того, что мы сделали. Проведена большая работа по настройке прокси сервера на базе CentOS 7. Были выполнены следующие шаги:</p>



<ol><li>Сервер был введен в домен Windows для настройки авторизации доменных пользователей на прокси сервере.</li><li>Настроен прокси сервер squid для работы с доменными учетными записями.</li><li>Собран из исходников многофункциональный web интерфейс для управления squid &#8212; sams2 самой последней на текущий момент версии.</li></ol>



<p>Первые два этапа сами по себе позволяют полноценно пользоваться прокси сервером, но не дают удобства и гибкости настройки. Иногда это и не нужно и можно не заморачиваться с установкой и настройкой sams. Как ни крути, но установка достаточно хлопотная и нет гарантии, что через некоторое время после смены версий каких-нибудь пакетов или исходников, не появятся новые нюансы, которые не будут отражены в этой статье. С ними придется разбираться заново.</p>



<p>Уровень данной статьи получился чуть выше, чем может рассчитывать новичок в линуксе, но тем не менее я постарался расписать все максимально&nbsp;подробно. Все этапы проверены на чистой системе, чтобы убедиться в достоверности данных и отсутствии ошибок. То есть сначала была исследована тема, настроена конфигурация на тестовой машине. После того, как я убедился, что все работает так, как мне нужно, я на чистой системе еще раз с нуля провел всю конфигурацию по своей шпаргалке и зафиксировал эту чистую настройку в статье.</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%bf%d1%80%d0%be%d0%ba%d1%81%d0%b8-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-%d0%bd%d0%b0-centos-7-squidadsams2/">Настройка прокси сервера на CentOS 7 (squid+AD+sams2)</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%bf%d1%80%d0%be%d0%ba%d1%81%d0%b8-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-%d0%bd%d0%b0-centos-7-squidadsams2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Установка и настройка удаленного доступа на CentOS 7 с помощью Webmin</title>
		<link>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%83%d0%b4%d0%b0%d0%bb%d0%b5%d0%bd%d0%bd%d0%be%d0%b3%d0%be-%d0%b4%d0%be%d1%81/</link>
					<comments>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%83%d0%b4%d0%b0%d0%bb%d0%b5%d0%bd%d0%bd%d0%be%d0%b3%d0%be-%d0%b4%d0%be%d1%81/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sat, 08 Aug 2020 19:14:14 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Webmin]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1445</guid>

					<description><![CDATA[<p>Существует много web панелей управления сервером, как специализированных для хостинга, так и общего назначения. Сегодня я займусь установкой одной из</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%83%d0%b4%d0%b0%d0%bb%d0%b5%d0%bd%d0%bd%d0%be%d0%b3%d0%be-%d0%b4%d0%be%d1%81/">Установка и настройка удаленного доступа на CentOS 7 с помощью Webmin</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Существует много web панелей управления сервером, как специализированных для хостинга, так и общего назначения. Сегодня я займусь установкой одной из таких панелей &#8212; Webmin на сервер CentOS 7. На мой взгляд это одно из самых популярных средств удаленного управления сервером через браузер.</p>


</br>



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



<p>Webmin это web панель для администрирования unix сервера. Она кроссплатформенная, ставится на различные unix дистрибутивы. С помощью webmin можно выполнять практически все популярные административные действия на сервере, такие как:</p>



<ul><li>Настраивать сетевые подключения</li><li>Добавлять пользователей</li><li>Монтировать разделы</li><li>Настраивать фаерволл</li><li>Выключать или перезагружать сервер</li><li>Обновлять пакеты</li></ul>



<p>и многое другое. Существуют модули для различного софта, которым можно управлять через webmin. Например самбой, или веб сервером, mysql сервером и множеством других пакетов. Список модулей обширный, можно посмотреть на&nbsp;<a href="http://www.webmin.com/cgi-bin/search_third.cgi?modules=1" target="_blank" rel="noreferrer noopener">официальном сайте</a>&nbsp;список сторонних пользовательских модулей, или в самой панели после установки список официальных модулей. Через webmin можно получить доступ к консоли сервера, загрузить или скачать файлы с сервера. Иногда это бывает удобно.</p>



<p>Сам я практически никогда не пользуюсь этой панелью, нет необходимости, привык все в консоли настраивать. Но я знаю людей, которые активно админили серверы с помощью webmin. Это были не очень продвинутые в линуксе админы, но тем не менее эта панелька позволяла им нормально управлять сервером без должных знаний и навыков.</p>



<p>Я почти всегда использую webmin на почтовых серверах. Мне удобно анализировать и что-то искать в огромных почтовых логах с помощью модуля просмотра логов. Чего-то более простого и удобного мне не попадалось. К примеру, у вас есть лог за день на 100-300 мегабайт, в нем каждую секунду фиксируются десятки событий. У вас есть id письма. Можно ввести в строку поиска id письма и увидеть все строки лога, в которых оно фигурирует. Это очень удобно. Обычным поиском в такой ситуации не обойтись. Можно, конечно, грепать вывод cat, либо что-то еще придумывать, но это менее удобно. Особенно, если надо сопоставить значения из разных лог-файлов. Просто открываешь в двух окнах браузера разные логи и анализируешь.</p>



<p>Приступим к установке webmin. Статья подразумевает, что у вас уже установлена и настроена операционная система. Если это не так, то читайте про установку и <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/centos-7-%d0%b8-8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-%d0%bf%d0%be%d1%81%d0%bb%d0%b5-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba/" target="_blank" rel="noreferrer noopener">настройку</a> CentOS 7.</p>


</br>



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



<p>Приступим к установке Webmin на сервер под упралвением СentOS 7. Процесс описан на официальном сайте в соответствущем разделе. Ничего сложного нет. Нужно добавить репозиторй webmin, а потом произвести установку самого пакета и зависимостей.</p>



<p>Добавляем репозиторий:</p>



<pre class="wp-block-preformatted"># mcedit /etc/yum.repos.d/webmin.repo</pre>



<pre class="wp-block-preformatted">[Webmin]
name=Webmin Distribution Neutral
#baseurl=http://download.webmin.com/download/yum
mirrorlist=http://download.webmin.com/download/yum/mirrorlist
enabled=1</pre>



<p>Импортируем GPG ключ:</p>



<pre class="wp-block-preformatted"># rpm --import http://www.webmin.com/jcameron-key.asc</pre>



<p>Устанавливаем Webmin:</p>



<pre class="wp-block-preformatted"># yum install -y webmin</pre>



<p>После установки он автоматически запустится. Нам остается только добавить его в автозагрузку:</p>



<pre class="wp-block-preformatted"># chkconfig webmin on</pre>


</br>



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



<p>Заходим в web интерфейс webmin по ссылке&nbsp;<em><strong>https</strong>://192.168.56.10:10000</em>, где&nbsp;192.168.56.10 ip адрес сервера. Обязательно указывайте протокол https, без этого не зайти. Вводите логин и пароль root. Открывается главная страница webmin:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2016/08/webmin-centos-01.png" alt="Установка webmin на centos" class="wp-image-3465"/></figure></div>



<p>Описывать все возможности я не буду, можете сами полазить по меню слева и посмотреть, что можно настроить через webmin. Обращаю внимание на несколько важных моментов. Бытует мнение, что webmin не безопасен и через него могут взломать сервер. Я не знаю, насколько эти опасения оправданы, но на всякий случай доступ к серверу лучше ограничить.</p>


</br>



<p>Если он будет в открытом доступе, то рекомендую хотя бы сменить стандартный порт на какой-то более высокий и непопулярный. Делается это в разделе&nbsp;<strong>Webmin -&gt; Webmin configuration -&gt;&nbsp;Ports and Addresses</strong></p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2016/08/webmin-centos-02.png" alt="Настройка webmin" class="wp-image-3466"/></figure></div>



<p>Если будете заходить со статических адресов, то ограничьте доступ только этим адресам. Делается тут же, в соседней настройке&nbsp;<strong>IP Access Control</strong>. Рекомендую именно эту настройку. Открывать в мир webmin лично я бы не стал без особой надобности.</p>


</br>



<p>Если хотитите видеть панель с русским языком, то нет никакой проблемы. Его можно выбрать в разеделе&nbsp;<strong>Language</strong>. Переведено в целом нормально, все понятно. Но лучше, конечно, привыкать к английскому, без него в системном администрировании никуда. Но если не разбираетесь, можно и русский использовать. В конце концов webmin больше всего полезен именно тем, кто не разбирается в серверах, но нужно что-то админить. После смены языка нужно принудительно обновить страницу бразера, чтобы весь интерфейс стал русским.</p>



<p>На этом все, с остальными возможностями и настройками можно самостоятельно разобраться, в вебмине ничего сложного нет.</p>


</br>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%83%d0%b4%d0%b0%d0%bb%d0%b5%d0%bd%d0%bd%d0%be%d0%b3%d0%be-%d0%b4%d0%be%d1%81/">Установка и настройка удаленного доступа на CentOS 7 с помощью Webmin</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%83%d0%b4%d0%b0%d0%bb%d0%b5%d0%bd%d0%bd%d0%be%d0%b3%d0%be-%d0%b4%d0%be%d1%81/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Centos 8 и TLS 1.0 и 1.1</title>
		<link>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/centos-8-%d0%b8-tls-1-0-%d0%b8-1-1/</link>
					<comments>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/centos-8-%d0%b8-tls-1-0-%d0%b8-1-1/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sat, 08 Aug 2020 19:06:46 +0000</pubDate>
				<category><![CDATA[CentOS]]></category>
		<category><![CDATA[TLS]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1443</guid>

					<description><![CDATA[<p>Информация для тех, кто уже использует Centos 8. По-умолчанию, на уровне системы отключена поддержка устаревших протоколов TLS 1.0 и 1.1.</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/centos-8-%d0%b8-tls-1-0-%d0%b8-1-1/">Centos 8 и TLS 1.0 и 1.1</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Информация для тех, кто уже использует Centos 8. По-умолчанию, на уровне системы отключена поддержка устаревших протоколов TLS 1.0 и 1.1. Но зачастую они еще много где используются. Отсутствие их поддержки создает некоторые неудобства, но это легко исправить, и я расскажу как.</p>


</br>



<p>Лично я столкнулся с этой проблемой на обновленном почтовом сервере, который я настроил на Centos 8. Я предполагал, что может возникнуть такая проблема и подстраховался параметрами postfix.</p>



<pre class="wp-block-preformatted">smtpd_tls_security_level = may
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3
smtpd_tls_protocols = !SSLv2,!SSLv3
smtpd_tls_ciphers = low</pre>



<p>Ожидал, что это позволит подключаться клиентам со старыми версиями TLS. А тем, кто совсем никак не может, оставил возможность подключаться по нешифрованному соединению. По факту некоторым не помогло. У клиентов были различные ошибки. Чаще всего это те, у кого сам tls устарел, но при этом запрещены нешифрованные подключения. Вот несколько вариантов ошибок.</p>



<pre class="wp-block-preformatted">TLS connect failed: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:<strong>tlsv1 alert protocol version</strong>;</pre>



<pre class="wp-block-preformatted">14969:error:1409442E:SSL routines:SSL3_READ_BYTES:<strong>tlsv1 alert protocol version</strong>:s3_pkt.c:1092:SSL alert number 70</pre>



<pre class="wp-block-preformatted">warning: TLS library problem: error:1420918C:SSL routines:tls_early_post_process_client_hello:<strong>version too low</strong>:ssl/statem/statem_srvr.c:1655:</pre>


</br>



<p>И все в таком духе. Сервер в активной работе. Таких клиентов хоть и не много было, но тем не менее несколько нашлось. Настройки postfix в части разрешенных протоколов tls не работали, так как они запрещены на уровне системы. Подробнее об этом написано в <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/considerations_in_adopting_rhel_8/security_considerations-in-adopting-rhel-8#tls-v10-v11_security" target="_blank" rel="noreferrer noopener nofollow">документации Red Hat</a>.</p>



<p>Для того, чтобы разрешить приложениям работать по протоколам TLS v1.0 и 1.1 необходимо выполнить команду на сервере.</p>



<pre class="wp-block-preformatted"># update-crypto-policies --set LEGACY
Setting system policy to LEGACY
Note: System-wide crypto policies are applied on application start-up.
It is recommended to restart the system for the change of policies
to fully take place.</pre>



<p>После этого надо перезапустить postfix и проверить с какого-нибудь другого сервера подключиться к целевому по протоколу tls 1.0, например вот так.</p>



<pre class="wp-block-preformatted"># openssl s_client -starttls smtp -connect mail.site.ru:25 -tls1</pre>



<p>Если увидите информацию о сертификате, значит все в порядке. Если какие-то ошибки, то разбирайтесь, почему не работает.</p>


</br>



<p>Если же вам не повезло настолько, что надо разрешить работу по протоколу ssl3, то я вам сочувствую <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Я не знаю, каким образом это можно сделать на современной системе. Наверное, придется самим собирать openssl из старых исходников и как-то ставить в систему. Задача не простая.</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/centos-8-%d0%b8-tls-1-0-%d0%b8-1-1/">Centos 8 и TLS 1.0 и 1.1</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/centos-8-%d0%b8-tls-1-0-%d0%b8-1-1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Установка CentOS 7</title>
		<link>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-centos-7/</link>
					<comments>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-centos-7/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sat, 01 Aug 2020 06:08:00 +0000</pubDate>
				<category><![CDATA[CentOS]]></category>
		<category><![CDATA[установка]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1488</guid>

					<description><![CDATA[<p>Любая работа по администрированию сервера начинается с самого очевидного и обязательного процесса &#8212; инсталляции необходимой ОС, чем мы и займемся.</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-centos-7/">Установка CentOS 7</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Любая работа по администрированию сервера начинается с самого очевидного и обязательного процесса &#8212; инсталляции необходимой ОС, чем мы и займемся. Скачаем и установим CentOS 7 server в конфигурации minimal или netinstall с загрузочной флешки или по сети на обычный диск или raid раздел. Перед этим выполним небольшую подготовительную работу и познакомимся с подробностями нашего дистрибутива, которые могут быть полезны в будущем.</p>


</br>



<h2 class="wp-block-heading">Cистемные требования CentOS 7</h2>



<p>7 июля 2014 года увидел свет релиз дистрибутива CentOS 7. Перед его установкой рекомендуется ознакомиться с системными требованиями. Подробно посмотреть&nbsp;полный список максимальных и минимальных системных требований можно на&nbsp;<a href="https://wiki.centos.org/About/Product" target="_blank" rel="noreferrer noopener">официальном wiki</a>. Я же приведу только самые важные параметры:</p>



<figure class="wp-block-table"><table><tbody><tr><td>Поддержка i386 архитектуры</td><td>нет</td></tr><tr><td>Минимальное количество памяти</td><td>1GB</td></tr><tr><td>Рекомендуемое количество памяти</td><td>1GB на каждое ядро процессора</td></tr><tr><td>Минимальное&nbsp;место на диске</td><td>10GB</td></tr><tr><td>Рекомендуемое место на диске</td><td>20GB</td></tr><tr><td>Максимальный размер файла (ext3)</td><td>2TB</td></tr><tr><td>Максимальный размер файловой системы (ext3)</td><td>16TB</td></tr><tr><td>Максимальный размер файла (ext4)</td><td>16TB</td></tr><tr><td>Максимальный размер файловой системы (ext4)</td><td>50TB</td></tr></tbody></table></figure>



<p>Это официальные данные с сайта CentOS. У RHEL они такие же, я проверял. У меня лично на VDS благополучно все работает и с 512MB памяти, меньше не пробовал ставить, думаю и с 256 заведется.</p>



<h2 class="wp-block-heading">Типы iso образов CentOS 7</h2>



<p>Релиз CentOS содержал в себе несколько видов&nbsp;<strong>iso</strong>&nbsp;образов. Подробное описание каждого из них представлено в таблице:</p>



<figure class="wp-block-table"><table><tbody><tr><td>CentOS-7-x86_64-DVD</td><td>Этот&nbsp;<strong>DVD&nbsp;</strong>образ содержит все пакеты, которые могут быть установлены с помощью инсталлера. Рекомендуется для большинства пользователей.</td></tr><tr><td>CentOS-7-x86_64-NetInstall</td><td>Этот&nbsp;<strong>NetInstall&nbsp;</strong>образ для установки по сети и для восстановления. Инсталлятор спросит, откуда будет производиться установка пакетов. Удобно использовать, если у вас есть локальный репозиторий пакетов.</td></tr><tr><td>CentOS-7-x86_64-Everything</td><td>В этом&nbsp;<strong>Everything</strong>&nbsp;образе содержится полный набор пакетов CentOS 7. Он может быть использован для установки, либо обновления локального зеркала. Для этого образа требуется двухсторонний DVD, либо флешка на 8 Гб.</td></tr><tr><td>CentOS-7-x86_64-LiveGNOME<br>CentOS-7-x86_64-LiveKDE</td><td>Эти два образа являются LiveCD CenOS 7. В зависимости от названия используется та или иная графическая оболочка. Они разработаны для тестирования окружения CentOS 7. Они не устанавливаются на жесткий диск, если вы не собираетесь этого делать принудительно. Набор установленного программного обеспечения поменять нельзя, это можно сделать только на установленной операционной системе с помощью yum.</td></tr><tr><td>CentOS-7-x86_64-Minimal</td><td>С помощью этого&nbsp;<strong>Minimal&nbsp;</strong>образа можно установить базовую систему CentOS с минимальным набором пакетов, необходимых для работоспособности системы. Все остальное можно доустановить позже с помощью yum. Набор пакетов в этом образе будет такой же, как и на DVD при выборе установки minimal.</td></tr></tbody></table></figure>



<p>Я обычно использую для установки либо&nbsp;<strong>minimal</strong>&nbsp;образ, либо&nbsp;<strong>netinstall</strong>.</p>


</br>



<h2 class="wp-block-heading">Cкачать CentOS 7</h2>



<p>Скачать свежую на текущий момент версию&nbsp;<strong>CentOS 7.2.1511</strong>&nbsp;можно двумя способами:</p>



<ol><li>Через torrent сеть</li><li>С ближайшего зеркала</li></ol>



<p>Я в качестве такого зеркала предпочитаю использовать CentOS Yandex Mirror:</p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Torrent</strong></td><td><strong>Yandex Mirror</strong></td><td><strong>Размер</strong></td></tr><tr><td><a href="http://mirror.yandex.ru/centos/7/isos/x86_64/" target="_blank" rel="noreferrer noopener">Скачать CentOS 7 DVD torrent</a></td><td><a href="http://mirror.yandex.ru/centos/7/isos/x86_64/" target="_blank" rel="noreferrer noopener">Скачать CentOS 7 DVD iso</a></td><td>4G</td></tr><tr><td><a href="http://mirror.yandex.ru/centos/7/isos/x86_64/" target="_blank" rel="noreferrer noopener">СкачатьCentOS 7 NetInstall torrent</a></td><td><a href="http://mirror.yandex.ru/centos/7/isos/x86_64/" target="_blank" rel="noreferrer noopener">СкачатьCentOS 7 NetInstall iso</a></td><td>360M</td></tr><tr><td><a href="http://mirror.yandex.ru/centos/7/isos/x86_64/" target="_blank" rel="noreferrer noopener">СкачатьCentOS 7 Everything torrent</a></td><td><a href="http://mirror.yandex.ru/centos/7/isos/x86_64/" target="_blank" rel="noreferrer noopener">СкачатьCentOS 7 Everything iso</a></td><td>7G</td></tr><tr><td><a href="http://mirror.yandex.ru/centos/7/isos/x86_64/" target="_blank" rel="noreferrer noopener">СкачатьCentOS 7 LiveGNOME&nbsp;torrent</a></td><td><a href="http://mirror.yandex.ru/centos/7/isos/x86_64/" target="_blank" rel="noreferrer noopener">СкачатьCentOS 7 LiveGNOME iso</a></td><td>1G</td></tr><tr><td><a href="http://mirror.yandex.ru/centos/7/isos/x86_64/" target="_blank" rel="noreferrer noopener">СкачатьCentOS 7 LiveKDE&nbsp;torrent</a></td><td><a href="http://mirror.yandex.ru/centos/7/isos/x86_64/" target="_blank" rel="noreferrer noopener">СкачатьCentOS 7 LiveKDE iso</a></td><td>1G</td></tr><tr><td><a href="http://mirror.yandex.ru/centos/7/isos/x86_64/" target="_blank" rel="noreferrer noopener">СкачатьCentOS 7 Minimal&nbsp;torrent</a></td><td><a href="http://mirror.yandex.ru/centos/7/isos/x86_64/" target="_blank" rel="noreferrer noopener">СкачатьCentOS 7 Minimal iso</a></td><td>634M</td></tr></tbody></table></figure>



<p>Напоминаю, что&nbsp;<strong>32 bit</strong>&nbsp;или&nbsp;<strong>i386</strong>&nbsp;редакции CentOS 7 не существует. Все дистрибутивы только<strong>&nbsp;x86_64</strong>, то есть&nbsp;<strong>64 bit</strong>.</p>



<h2 class="wp-block-heading">Загрузочная флешка для CentOS 7</h2>



<p>Последнее время лично я практически не пользуюсь обычными CD, предпочитая им загрузочные флешки. Они удобнее, занимают меньше места, проще обновить дистрибутив на них. Но иногда приходится заморочиться для создания загрузочной флешки. Например, для создания загрузочной флешки CentOS 6 я раньше пользовался программой&nbsp;<strong>unetbootin</strong>, но с 7-й версией этот номер не прошел. Созданная в ней флешка не позволяет установить CentOS 7, так как сам инсталлятор в какой-то момент не видит источник установки на флешке.</p>



<p>Но на выручку пришла бесплатная программа&nbsp;<a href="http://sourceforge.net/projects/win32diskimager/" target="_blank" rel="noreferrer noopener">Win32DiskImager</a>. С ее помощью без проблем удается&nbsp;<strong>создать загрузочную флешку CentOS 7</strong>. Вот как это делается:</p>



<ol><li>Скачиваем дистрибутив программы.</li><li>Скачиваем дистрибутив CentOS 7. Я для теста использовал версию&nbsp;<strong>Minimal</strong>.</li><li>Вставляем чистую флешку, запускаем программу и указываем настройки:<img loading="lazy" decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/08/centos-usb-install.png" alt="загрузочная флешка centos 7" width="438" height="230" srcset="https://serveradmin.ru/wp-content/uploads/2015/08/centos-usb-install.png 438w, https://serveradmin.ru/wp-content/uploads/2015/08/centos-usb-install-300x158.png 300w"></li><li>Нажимаем&nbsp;<strong>Write&nbsp;</strong>и ждем окончания записи.</li><li>Загрузочная флешка CentOS 7 готова.</li></ol>



<p>Этого достаточно для создания флешки. Теперь ей можно пользоваться для установки операционной системы с флешки.</p>



<h2 class="wp-block-heading">Установка CentOS 7 с флешки</h2>



<p>После создания загрузочной флешки, можно приступить к установке. Вставляем флешку в сервер, указываем в качестве источника загрузки USB и запускаем компьютер. Нас встречает начальное меню установки CentOS:</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-usb-ustanovka.png" alt="установка centos 7 с флешки" class="wp-image-1571" title="Меню установки CentOS 7"/></figure>



<p>Выбираем первый пункт:&nbsp;<strong>Install CentOS 7</strong>&nbsp;и жмем&nbsp;enter. После загрузки инсталлера, нас встречает окно с выбором языка, который будет использоваться во время установки. Я всегда выбираю&nbsp;Еnglish, мне так привычнее:</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-install-language.png" alt="язык установки centos 7" class="wp-image-1572" title="Выбор языка во время установки CentOS 7"/></figure>



<p>Дальше загружается страница с выбором основных параметров установки. Она уже будет отличаться в зависимости от типа ISO образа, с которого происходит установка центос.</p>



<h2 class="wp-block-heading">CentOS 7 minimal</h2>



<p>Если вы используете диск&nbsp;<strong>centos minimal iso</strong>, то увидите следующий экран:</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-install-menu.png" alt="меню установки centos 7" class="wp-image-1573"/></figure>



<p>Здесь вам предлагают указать параметры установки. Восклицательным знаком помечен раздел, без настройки которого продолжение невозможно. Для настройки доступны следующие параметры установки:</p>



<ol><li>Выбор <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%ba%d0%b0%d0%ba-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d1%8c-%d0%b8%d0%b7%d0%bc%d0%b5%d0%bd%d0%b8%d1%82%d1%8c-%d0%b2%d1%80%d0%b5%d0%bc%d1%8f-%d0%b8-%d1%87%d0%b0%d1%81%d0%be%d0%b2/" target="_blank" rel="noreferrer noopener">часового пояса centos</a>.</li><li>Выбор раскладки клавиатуры.</li><li>Поддержка каких языков будет осуществляться на сервере.</li><li>Откуда будет происходить установка. Так как у нас дистрибутив centos minimal, установка будет с локального iso.</li><li>Выбор пакетов для установки. В образе minimal доступен только минимальный набор софта.</li><li>Разбивка жесткого диска. Подробнее коснемся этого пункта, когда будем разбирать установку на raid.</li><li>Настройка сетевых интерфейсов.</li></ol>



<p>Для продолжения установки необходимо выполнить как минимум разбивку жесткого диска. Без этого продолжение установки невозможно. Но мы пройдемся по всем параметрам и установим необходимые для нас значения.</p>



<p>Итак, нажимаем на&nbsp;DATE &amp; TIME&nbsp;и настраиваем параметры времени:</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-install-date.png" alt="настройка времени centos 7" class="wp-image-1575"/></figure>



<ol><li>Указываем регион.</li><li>Выбираем город.</li><li>Включаем при необходимости службу времени для синхронизации часов centos с внешними серверами.<br>Это возможно сделать только если вы уже настроили сетевые параметры. Если нет, то вернитесь к этой настройке позже.</li><li>Выбираем список внешних серверов для синхронизации времени:&nbsp;<img loading="lazy" decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-install-ntp.png" alt="настройка ntp серверов" width="521" height="422" srcset="https://serveradmin.ru/wp-content/uploads/2015/09/centos-install-ntp.png 521w, https://serveradmin.ru/wp-content/uploads/2015/09/centos-install-ntp-300x243.png 300w"></li><li>Указываем формат, в котором будет отображаться текущее время.</li><li>При необходимости изменяем дату сервера.</li></ol>


</br>



<p>После завершения настроек жмем сверху&nbsp;синюю кнопку&nbsp;Done.</p>



<p>Идем в следующую настройку &#8212;&nbsp;KEYBOARD LAYOUT:</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-install-keyboard.jpg" alt="centos 7 выбор раскладки" class="wp-image-1577"/></figure>



<ol><li>Добавляем необходимые раскладки. Я добавил&nbsp;Russian.</li><li>Нажимаем&nbsp;<strong>Options&nbsp;</strong>и выбираем, как будет происходить переключение раскладок.</li><li>Тестируем раскладки и переключение. Если все в порядке, идем дальше.</li></ol>



<p>Нажимаем&nbsp;LANGUAGE SUPPORT:</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/cenos-install-language-support.jpg" alt="centos 7 настройка языка" class="wp-image-1578"/></figure>



<p>Выбираем дополнительные языки, которые будет поддерживать система. Чаще всего мне это не нужно, но для примера добавим поддержку русского языка. Это может пригодиться, например, при создании файлового архива с русскими названиями в файлах. С поддержкой русского языка можно работать в консоли с русскими названиями папок и файлов. Если у вас, к примеру, сервер настраивается для работы в качестве шлюза, поддержка дополнительных языков скорее всего не пригодится. После выбора снова жмем&nbsp;Done.</p>



<p>Теперь выполним сетевые настройки. Идем в раздел NETWORK &amp; HOSTNAME. Включаем ползунок в положение ON и получаем автоматически настройки по <strong>dhcp</strong>:</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-install-network.png" alt="centos 7 настройка сети" class="wp-image-1580"/></figure>



<ol><li>Включение ползунка в положение&nbsp;ON&nbsp;активирует интерфейс, он получает настройки по dhcp.</li><li>Если вы хотите изменить эти настройки, нажимаете&nbsp;<strong>Configure</strong>.</li><li>Указываете&nbsp;hostname.&nbsp;Если забудете, то после установки этот параметр можно изменить.</li></ol>



<p>Завершаем настройку нажатием на&nbsp;Done. Теперь можно вернуться в настройки часов и активировать&nbsp;Network Time.</p>



<p>Теперь перейдем в раздел&nbsp;INSTALLATION SOURCE. При установке&nbsp;<strong>centos minimal</strong>&nbsp;менять этот параметр нет необходимости. Там по-умолчанию установлен локальный источник, нам это подходит. Можно ничего не трогать:</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-install-source.png" alt="centos 7 minimal install" class="wp-image-1581"/></figure>



<p>В разделе&nbsp;SOFTWARE SELECTION&nbsp;при minimal установке тоже нечего выбрать, уже указан единственно возможный вариант:</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-minimal-install.jpg" alt="centos 7 minimal программы" class="wp-image-1582"/></figure>



<p>Нам осталось рассмотреть последнюю обязательную настройку, без которой установка centos не начнется &#8212;&nbsp;INSTALLATION DESTINATION. Зайдя в нее вы увидите список подключенных к серверу дисков. В моем случае это один жесткий диск.</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-install-disk.png" alt="centos 7 выбор диска" class="wp-image-1584"/></figure>


</br>



<p>Если ваш диск определился правильно, выбираете его и нажимаете&nbsp;Done. Выскакивает окошко с предупреждением, что для установки системе понадобится примерно 1 Гб места на жестком диске, а на вашем жестком диске нет необходимого свободного места. Это происходит потому, что раньше на этом диске была установлена другая система и она занимала весь жесткий диск. Нам нужно удалить всю старую информацию для установки новой системы. Делаем это, нажимая&nbsp;<strong>Reclaim space</strong>:</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-reclaim-space.png" alt="centos 7 очистка разделов" class="wp-image-1585"/></figure>



<p>Выбираем диск и удаляем все существующие разделы на нем &#8212; жмем сначала&nbsp;<strong>Delete all</strong>, а потом&nbsp;<strong>Reclaim space</strong>:</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-delete-partition.png" alt="centos 7 удаление разделов" class="wp-image-1586"/></figure>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-create-partition.png" alt="centos 7 reclaim space" class="wp-image-1587"/></figure>



<p>После этого установщик выберет весь диск в качестве диска для установки. После этого можно начать непосредственно установку centos, нажав кнопку&nbsp;<strong>Begin Installation</strong>.</p>



<p>Дальше рассмотрим вариант, когда вы выполняете установку с образа netinstall.</p>


</br>



<h2 class="wp-block-heading">CentOS 7 netinstall</h2>



<p>Установка Centos 7 с образа&nbsp;<strong>netinstall</strong>&nbsp;отличается от прочих только одним моментом. Во время подготовки к установке по сети в разделе&nbsp;INSTALLATION SOURCE&nbsp;вам вместо локального источника необходимо указать путь к образу, расположенному где-то в сети. Очевидно, что перед этим необходимо выполнить настройку сети и убедиться, что у компьютера есть доступ в интернет.</p>



<p>В качестве источника для установки я буду использовать упомянутое ранее зеркало яндекса. <strong>CentOS netinstall url</strong> &#8212;  <a href="https://mirror.yandex.ru/centos/7/os/x86_64/" target="_blank" rel="noreferrer noopener">https://mirror.yandex.ru/centos/7/os/x86_64/</a>На скриншоте указан старый url. После череды обновлений он стал неактуален. Правильная ссылка выше в тексте.</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-netinstall-url.png" alt="CentOS netinstall url" class="wp-image-1588"/></figure>



<p>Указываем путь и жмем&nbsp;Done. После проверки доступности источника, в разделе&nbsp;SOFTWARE SELECTION можно выбрать необходимый для установки набор софта:</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-install-software.png" alt="centos 7 выбор программ для установки" class="wp-image-1589"/></figure>



<p>Дальше можно начинать установку, указав все остальные&nbsp;параметры, которые мы рассмотрели выше.</p>



<h2 class="wp-block-heading">CentOS 7 установка на raid</h2>



<p>Теперь рассмотрим наиболее сложный вариант установки. Мы будем ставить CentOS 7 на программный рейд. Для примера возьмем 2 диска и raid 1. Все установки будут такие же, как мы рассмотрели ранее, кроме одной &#8212;&nbsp;INSTALLATION DESTINATION.</p>



<p>Подключаем 2 диска к системе, загружаемся с установочного диска и идем в раздел разбивки диска. Видим 2 жестких диска. Выбираем оба и отмечаем пункт&nbsp;<strong>I will configure partition</strong>:</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-install-2-disks.png" alt="centos 7 установка на raid" class="wp-image-1591" title="Установка CentOS 7 на программный raid"/></figure>



<p>Жмем&nbsp;Done. Открывается немного кривое окно управления разделами жесткого диска.</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-manual-partition.png" alt="centos 7 разбивка диска" class="wp-image-1592"/></figure>



<p>Здесь мы первым делом удаляем все существующие разделы:</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-delete-all-partitions.png" alt="centos 7 удаление файловых систем" class="wp-image-1593"/></figure>



<p>И создаем свои новые, нажимая плюсик. Нам нужно создать 3 раздела:&nbsp;boot,&nbsp;swap&nbsp;и корень&nbsp;/. Размеры разделов выбирайте сами, исходя из своих потребностей и оперативной памяти на сервере. Для раздела boot достаточно 500Мб, для swap хватит объема оперативной памяти. Все остальное можно либо заполнить одним корневым разделом, либо создать несколько, если в этом есть необходимость.&nbsp;<strong>Device Type</strong>&nbsp;ставим&nbsp;RAID. Тип файловой системы выбирайте на свое усмотрение. Что лучше &#8212;&nbsp;xfs&nbsp;или&nbsp;ext4&nbsp;зависит от конкретной ситуации. Считается, что xfs работает лучше с большими файлами, ext4 с кучей мелких. Это тема отдельного разговора.&nbsp;<strong>RAID Level</strong>&nbsp;указываем&nbsp;RAID1.</p>


</br>



<p>Должно получиться примерно так:</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-create-partitions.png" alt="centos 7 создание raid1" class="wp-image-1594"/></figure>



<p>Нажимаем&nbsp;Done, когда закончим. В новом окне подтверждаем разбивку диска, нажимая&nbsp;<strong>Accept Сhanges</strong>:</p>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-destroy-partition.png" alt="centos 7 destroy partitions" class="wp-image-1595"/></figure>



<p>Все остальные параметры выставляем как было рассказано выше. Теперь можно начинать установку CentOS 7 на программный raid, который мы только что создали.</p>



<p>Во время установки нужно указать пароль&nbsp;root, либо создать дополнительных пользователей. Пароль рекомендую установить, пользователей по необходимости.</p>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2015/09/centos-install-process.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-install-process.png" alt="centos install process" class="wp-image-1596"/></a></figure>



<p>После завершения установки на raid зайдем в систему и проверим состояние массива:</p>



<pre class="wp-block-preformatted"># df -h
# cat /proc/mdstat</pre>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/centos-df-mdadm.png" alt="cat /proc/mdstat" class="wp-image-1598"/></figure>



<p>Посмотрим информацию о корневом массиве:</p>



<pre class="wp-block-preformatted"># mdadm -D /dev/md126</pre>



<figure class="wp-block-image"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/09/cantos-mdadm.png" alt="информация о mdadm массиве" class="wp-image-1599"/></figure>



<p>Все в порядке, установка сервера закончена. Рейд раздел нормально функционирует, обеспечивая отказоустойчивость сервера.</p>


</br>



<p>Я очень рекомендую использовать софтовый raid линукса mdadm в повседневной деятельности. Он намного надежнее, понятнее и стабильнее встроенных в материнскую плату контроллеров. Отдавать предпочтение аппаратному рейду следует только в том случае, если он действительно аппаратный, он имеет батарейку и он действительно увеличивает производительность сервера. Во всех остальных случаях рекомендую пользоваться mdadm.</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-centos-7/">Установка CentOS 7</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-centos-7/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Rsync настройка бэкапа на CentOS/Debian/Ubuntu</title>
		<link>https://clip-clap.ru/it/rsync-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%b1%d1%8d%d0%ba%d0%b0%d0%bf%d0%b0-%d0%bd%d0%b0-centos-debian-ubuntu/</link>
					<comments>https://clip-clap.ru/it/rsync-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%b1%d1%8d%d0%ba%d0%b0%d0%bf%d0%b0-%d0%bd%d0%b0-centos-debian-ubuntu/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Mon, 27 Jul 2020 13:55:00 +0000</pubDate>
				<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Софт и ОС]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[Rsync]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1518</guid>

					<description><![CDATA[<p>Существует много способов организации backup на CentOS/Debian/Ubuntu серверах &#8212; бесплатные утилиты, самописные скрипты с использованием tar, система бэкапа bacula и</p>
<p>Сообщение <a href="https://clip-clap.ru/it/rsync-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%b1%d1%8d%d0%ba%d0%b0%d0%bf%d0%b0-%d0%bd%d0%b0-centos-debian-ubuntu/">Rsync настройка бэкапа на CentOS/Debian/Ubuntu</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Существует много способов организации backup на CentOS/Debian/Ubuntu серверах &#8212; бесплатные утилиты, самописные скрипты с использованием tar, система бэкапа bacula и много другое. Все это в той или иной мере я использовал или использую в своей работе. Сегодня я хочу с вами поделиться своим методом организации простого, удобного и быстрого способа настройки инкрементного backup с использованием популярной утилиты rsync на серверах под управлением CentOS/Debian/Ubuntu. Способ одинаково работает на этих истемах, небольшие отличия только в самой установке rsync, о чем я отдельно упомяну для каждой системы.</p>


</br>



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



<p>Устанавливаем&nbsp;xinetd для автоматического запуска rsync:</p>



<pre class="wp-block-preformatted">#&nbsp;yum install -y xinetd</pre>



<p>Устанавливаем непосредственно rsync:</p>



<pre class="wp-block-preformatted">#&nbsp;yum install -y rsync</pre>



<p>Редактируем конфиг rsync для xinetd:</p>



<pre class="wp-block-preformatted"># mcedit&nbsp;/etc/xinetd.d/rsync</pre>



<p>В конфиге находим строку&nbsp;<strong>disable = yes</strong>и меняем на&nbsp;<strong>no</strong>:</p>



<pre class="wp-block-preformatted">disable = no</pre>



<p>Запускаем xinetd:</p>



<pre class="wp-block-preformatted"># /etc/init.d/xinetd start</pre>



<p>И добавляем его в автозапуск:</p>



<pre class="wp-block-preformatted"># chkconfig xinetd on</pre>



<p>Проверяем, слушает ли xinetd 873 порт rsync:</p>



<pre class="wp-block-preformatted">#&nbsp;netstat -lnpt | grep 873

tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1431/xinetd</pre>



<p>Все в порядке, можно приступать к настройке rsync.</p>


</br>



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



<p>Ставим rsync:</p>



<pre class="wp-block-preformatted">#&nbsp;yum install -y rsync</pre>



<p>Добавляем в автозагрузку:</p>



<pre class="wp-block-preformatted">#&nbsp;systemctl enable rsyncd

ln -s '/usr/lib/systemd/system/rsyncd.service' '/etc/systemd/system/multi-user.target.wants/rsyncd.service'</pre>



<p>Проверяем автозагрузку:</p>



<pre class="wp-block-preformatted"># systemctl list-unit-files --type service | grep rsyncd

rsyncd.service enabled</pre>



<p>Запускаем rsync:</p>



<pre class="wp-block-preformatted"># systemctl start rsyncd</pre>



<p>Проверяем, как запустился:</p>



<pre class="wp-block-preformatted"># netstat -tulpn | grep rsync

tcp &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp;0 0.0.0.0:873 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.0.0.0:* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LISTEN &nbsp; &nbsp; &nbsp;2782/rsync</pre>



<p>Все в порядке, можно приступать к настройке rsync.</p>


</br>



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



<p>Устанавливаем rsync:</p>



<pre class="wp-block-preformatted"># apt-get install -y rsync</pre>



<p>Правим&nbsp;конфиг:</p>



<pre class="wp-block-preformatted"># mcedit /etc/default/rsync</pre>



<p>Находим строку&nbsp;<strong>RSYNC_ENABLE=false</strong>и меняем на&nbsp;<strong>true</strong>:</p>



<pre class="wp-block-preformatted">RSYNC_ENABLE=true</pre>



<p>Запускаем rsync:</p>



<pre class="wp-block-preformatted"># /etc/init.d/rsync start

[ ok ] Starting rsync daemon: rsync.</pre>



<p>Проверяем, что работает:</p>



<pre class="wp-block-preformatted">#&nbsp;netstat -tulpn | grep rsync

tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1767/rsync</pre>



<p>Все в порядке, можно приступать к настройке rsync.</p>


</br>



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



<p>Теперь приступаем к настройке. Логика наших бэкапов будет следующая.&nbsp;При первом запуске мы делаем полный бэкап интересующей нас информации в папку&nbsp;<strong>current</strong>. Потом раз в сутки мы сверяем имеющийся архив с источником и делаем его вновь актуальным, перезаписывая все изменившиеся файлы, но при этом не удаляем их, а складываем в папку&nbsp;<strong>increment</strong>, где каждый день создается папка с именем в виде даты, в которую складываются все измененные файлы за текущий день. Таким образом, у нас всегда будет полный архив, актуальный на момент последней синхронизации, плюс набор папок за каждый день с изменившимися в этот день файлами. Сколько дней хранить можно выбрать по необходимости.</p>



<p>Получается у нас такая картинка:</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2015/05/rsync.jpg"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/05/rsync.jpg" alt="rsync" class="wp-image-991"/></a></figure></div>



<p>Приступаем к реализации. В первую очередь настраиваем rsync на серверах источниках информации, с которых мы будем забирать данные для backup.</p>



<p>Создаем файл конфигурации rsync:</p>



<pre class="wp-block-preformatted"># mcedit /etc/rsyncd.conf</pre>



<pre class="wp-block-code"><code>pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
transfer logging = true
munge symlinks = yes

# папка источник для бэкапа
&#091;data]
path = /data
uid = root
read only = yes
list = yes
comment = Data backup Dir
auth users = backup
secrets file = /etc/rsyncd.scrt</code></pre>



<p>Создаем файл с учетными данными для подключения:</p>



<pre class="wp-block-preformatted"># mcedit /etc/rsyncd.scrt</pre>



<pre class="wp-block-preformatted">backup:12345</pre>


</br>



<p>где&nbsp;<strong>backup</strong>&nbsp;&#8212; имя пользователя,&nbsp;<strong>12345</strong>&nbsp;&#8212; пароль.<br>Делаем права на чтение только&nbsp;<strong>root</strong>, иначе rsync не запустится:</p>



<pre class="wp-block-preformatted"># chmod 0600 /etc/rsyncd.scrt</pre>



<p>После настройки перезапускаем rsync.<br>На Centos 6:</p>



<pre class="wp-block-preformatted"># /etc/init.d/xinetd restart</pre>



<p>На Centos 7:</p>



<pre class="wp-block-preformatted">systemctl restart rsyncd</pre>



<p>На Debian/Ubuntu:</p>



<pre class="wp-block-preformatted"># /etc/init.d/rsync restart</pre>



<p>Теперь идем на сервер приемник, в котором будут храниться архивные копии с серверов источников. Там создаем скрипт инкрементного бэкапа c использованием rsync:</p>



<pre class="wp-block-preformatted"># mcedit /root/bin/backup-server1.sh</pre>



<pre class="wp-block-preformatted">#!/bin/bash
date
# Папка, куда будем складывать архивы
syst_dir=/backup/
# Имя сервера, который архивируем
srv_name=server1
# Адрес сервера, который архивируем
srv_ip=10.10.1.55
# Пользователь rsync на сервере, который архивируем
srv_user=backup
# Ресурс на сервере для бэкапа
srv_dir=data
echo "Start backup ${srv_name}"
# Создаем папку для инкрементных бэкапов
mkdir -p ${syst_dir}${srv_name}/increment/
# Запускаем непосредственно бэкап с параметрами
/usr/bin/rsync -a --delete --password-file=/etc/rsyncd.scrt ${srv_user}@${srv_ip}::${srv_dir} ${syst_dir}${srv_name}/current/ --backup --backup-dir=${syst_dir}${srv_name}/increment/`date +%Y-%m-%d`/
# Чистим папки с инкрементными архивами старше 30-ти дней
/usr/bin/find ${syst_dir}${srv_name}/increment/ -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;
date
echo "Finish backup ${srv_name}"</pre>


</br>



<p>Делаем скрипт исполняемым:</p>



<pre class="wp-block-preformatted"># chmod 0744 /root/bin/backup-server1.sh</pre>



<p>Создаем файл с паролем для авторизации на сервере источнике:</p>



<pre class="wp-block-preformatted"># mcedit /etc/rsyncd.scrt</pre>



<pre class="wp-block-preformatted">12345</pre>



<p>Делаем права на чтение только root, иначе rsync выдаст ошибку:<br><strong>ERROR: password file must not be other-accessible</strong><br>Исправляем это:</p>



<pre class="wp-block-preformatted"># chmod 0600 /etc/rsyncd.scrt</pre>



<p>На этом все, теперь можно запускать скрипт и ожидать его выполнения. Осталось добавить его в cron:</p>



<pre class="wp-block-preformatted"># mcedit /etc/crontab</pre>



<pre class="wp-block-preformatted">30 23 * * * root /root/bin/backup-server1.sh</pre>



<p>Я обычно создаю несколько скриптов для каждого сервера отдельно. Потом объединяю их запуск в одном общем скрипте и уже его добавляю в cron. А потом по мере необходимости редактирую уже его, добавляю или удаляю сервера.</p>



<h2 class="wp-block-heading">Ротация логов rsync</h2>



<p>Мы указали в настройках ведение лога в файл&nbsp;<em>/var/log/rsyncd.log</em>. Необходимо настроить ротацию этого лога, чтобы он не рос до бесконечности. На больших файловых серверах он очень быстро вырастет до сотен мегабайт и более.</p>



<p>Для этого создаем в папке&nbsp;<em>/etc/logrotate.d</em>&nbsp;файл с конфигурацией ротации:</p>



<pre class="wp-block-preformatted"># mcedit&nbsp;/etc/logrotate.d/rsyncd

/var/log/rsyncd.log {
size=500k
compress
rotate 4
missingok
notifempty
}</pre>



<p>С такими настройками ротация будет происходить каждый раз, когда файл лога превысит размер в 500 кб. Храниться будут 4 версии лог файла. Эти настройки вы можете сами поменять по своему усмотрению.</p>


</br>



<h2 class="wp-block-heading">Пример бэкапа windows сервера с помощью rsync</h2>



<p>Еще один пример из моей практики. Допустим, у нас есть windows сервер с некоторой информацией, которую мы хотим так же бэкапить. Никаких проблем, это делается достаточно просто.</p>



<p>Создаем на windows сервере сетевую шару с информацией. Создаем пользователя и добавляем его в доступ к этой папке. Этого пользователя мы будем использовать для подключения виндовой шары к linux серверу.</p>



<p>Монтируем шару с информацией, которую будем бэкапить:</p>



<pre class="wp-block-preformatted"># mount -t cifs //192.168.0.16/docs /mnt/docs -o user=backup,password=12345,iocharset=utf8,codepage=cp866</pre>



<p>192.168.0.16 &#8212; адрес виндовой шары<br>backup и 12345 &#8212; пользователь и пароль виндовой машины с доступом к шаре&nbsp;docs.</p>



<p>Все, теперь папку&nbsp;/mnt/docs можно использовать в качестве приемника в нашем скрипте бэкапа с rsync. Если папка примонтирована непосредственно к серверу с бэкапами, то нужно на нем самом настроить конфиг rsyncd на примере серверов источников, запустить на нем rsyncd и в скрипте в качестве ip адреса сервера указывать 127.0.0.1.</p>



<p>Я в таких случаях создаю несколько скриптов: на монтирование шары, бэкап и размонтирование, объединяю их в один и запускаю последовательно. В итоге получается, что подключаем диск, делаем бэкап и отключаем его.</p>
<p>Сообщение <a href="https://clip-clap.ru/it/rsync-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%b1%d1%8d%d0%ba%d0%b0%d0%bf%d0%b0-%d0%bd%d0%b0-centos-debian-ubuntu/">Rsync настройка бэкапа на CentOS/Debian/Ubuntu</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://clip-clap.ru/it/rsync-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%b1%d1%8d%d0%ba%d0%b0%d0%bf%d0%b0-%d0%bd%d0%b0-centos-debian-ubuntu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Настройка postfix + dovecot + mysql база + postfixadmin + roundcube + dkim на CentOS 7</title>
		<link>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-postfix-dovecot-mysql-%d0%b1%d0%b0%d0%b7%d0%b0-postfixadmin-roundcube-dkim-%d0%bd%d0%b0-centos-7/</link>
					<comments>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-postfix-dovecot-mysql-%d0%b1%d0%b0%d0%b7%d0%b0-postfixadmin-roundcube-dkim-%d0%bd%d0%b0-centos-7/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sat, 18 Jul 2020 21:56:20 +0000</pubDate>
				<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Сервер]]></category>
		<category><![CDATA[Софт и ОС]]></category>
		<category><![CDATA[roundcube]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1198</guid>

					<description><![CDATA[<p>Некоторое время назад я рассказывал, как настроить почтовый сервер на базе готовой сборки&#160;iredmail. Я подробно разобрал все актуальные вопросы почтового</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-postfix-dovecot-mysql-%d0%b1%d0%b0%d0%b7%d0%b0-postfixadmin-roundcube-dkim-%d0%bd%d0%b0-centos-7/">Настройка postfix + dovecot + mysql база + postfixadmin + roundcube + dkim на CentOS 7</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Некоторое время назад я рассказывал, как настроить почтовый сервер на базе готовой сборки&nbsp;<a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%bf%d0%be%d1%87%d1%82%d0%be%d0%b2%d0%be%d0%b3%d0%be-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-iredmail-%d0%bd%d0%b0-centos-7/" target="_blank" aria-label="undefined (откроется в новой вкладке)" rel="noreferrer noopener">iredmail</a>. Я подробно разобрал все актуальные вопросы почтового сервера на linux на базе postfix. Сейчас хочу настроить похожий функционал, но с нуля, за основу взяв postfix + dovecot. Я расскажу про установку и настройку postfix на centos 7, причем только тех модулей и дополнений, которые сам считаю нужными и полезными на почтовом сервере.</p>



<p>Я буду настраивать почтовый сервер на ОС linux, а точнее на&nbsp;<strong>CentOS 7</strong>. За основу будет взят&nbsp;<strong>postfix</strong>, который присутствует в этой системе из коробки. Инструкция получится универсальной, можно использовать и для других дистрибутивов. Все основные конфиги легко переносятся на разные&nbsp;системы, требуя минимальной правки, в основном путей.</p>



<p>Я напишу статью на самом что ни на есть реальном примере, без какой-либо правки доменов, ip и прочего, чтобы не ошибиться и показать максимально возможный реальный пример. У меня есть технический домен zeroxzed.ru. Я буду использовать его в своей работе. Почтовый сервер будет иметь имя mail.zeroxzed.ru. Всю теорию по подготовке dns к установке и настройке почтового сервера я рассказывал в&nbsp;<a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%bf%d0%be%d1%87%d1%82%d0%be%d0%b2%d0%be%d0%b3%d0%be-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-iredmail-%d0%bd%d0%b0-centos-7/" target="_blank" aria-label="undefined (откроется в новой вкладке)" rel="noreferrer noopener">предыдущей статье</a>&nbsp;о почтовом сервере. Не хочу здесь повторяться. Уточню только список действий, которые вам нужно проделать c ДНС:</p>


</br>



<ol><li>Создаем A запись в DNS — mail.zeroxzed.ru.</li><li>Добавляем или редактируем MX запись, указывая в качестве почтового сервера&nbsp;mail.zeroxzed.ru.</li><li>Просим провайдера прописать PTR для внешнего ip адреса, который будет использовать почтовый сервер. В качестве ptr записи просим установить имя нашего сервера — mail.zeroxzed.ru.</li></ol>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-01.png" alt="Настройка dns записей для почтового сервера" class="wp-image-5028"/></figure></div>



<p>Я предпочитаю в качестве dns хостинга использовать&nbsp;<a href="https://pdd.yandex.ru/" target="_blank" rel="noreferrer noopener">сервера яндекса</a>, даже если не прикрепляю его почту к домену. На картинке показан минимально необходимый набор записей, кроме PTR. Этими записями управляете не вы, а провайдер, который вам выдает ip. Пока с днс все. Позже мы вернемся к этому вопросу, когда будем добавлять dkim и spf записи. Но обо всем по порядку.</p>



<p>Подготовим систему centos к установке и настройке почтового сервера postfix. Если у вас еще нет готовой системы, то рекомендую воспользоваться моими статьями по&nbsp;установке&nbsp;и&nbsp;настройке centos. Отдельно потратьте время на&nbsp;<a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-iptables-%d0%b2-centos-7/" target="_blank" aria-label="undefined (откроется в новой вкладке)" rel="noreferrer noopener">настройку iptables</a>. Я не буду касаться этого вопроса в данной статье, чтобы не раздувать ее второстепенными вещами. Удобнее, когда все по отдельности рассказано и описано с должной глубиной. Сваливать все в одну кучу не хочется.</p>



<p>По вступлению вроде все, основное рассказал. Приступим к настройке нашего почтового сервера.Сразу хочу сделать предупреждение. Настройка почтового сервера достаточно трудоемкий процесс, требует определенных навыков, знаний и понимания принципов работы используемых средств. Я не ставлю для себя цель расписать максимально подробно так, чтобы было понятно даже неподготовленному администратору linux. Вы должны быть так или иначе подготовлены, либо запаситесь терпением и разбирайтесь внимательно сами в нюансах. Эта статья на полный копипаст не подходит, что-то остается за кадром для самостоятельного выполнения. Иначе нельзя, получится очень большой и громоздкий материал.</p>



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



<p>Начнем с установки и настройки панели управления почтовым сервером postfix —&nbsp;<strong>postfixadmin</strong>. Без него начинать что-то делать неудобно, так как управлять пользователями, ящиками, алиасами будет нечем. По своей сути postfixadmin — набор php скриптов для управления записями в mysql базе данных, которую использует сервер postfix во время своей работы. Соответственно, для работы postfixadmin нам нужен web сервер. Подробно о&nbsp;<a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-web-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-apache-%d0%b2-centos-8/" target="_blank" aria-label="undefined (откроется в новой вкладке)" rel="noreferrer noopener">настройке web сервера на centos</a>&nbsp;читайте отдельно. Сейчас же мы быстро установим все необходимое. Привожу только команды, без комментариев. Все подробности по приведенной выше ссылке.</p>



<pre class="wp-block-preformatted"># yum install httpd php phpmyadmin&nbsp;mariadb mariadb-server php-imap</pre>



<p>Этих пакетов со всеми зависимостями будет достаточно для установки всех необходимых компонентов веб сервера. Я специально ставлю phpmyadmin, с ним удобно работать с базой. В&nbsp;нашем случае все пользователи будут храниться в mysql, иногда может понадобиться туда заглянуть. Подробнее с&nbsp;установкой и настройкой phpmyadmin&nbsp;можете ознакомиться отдельно.</p>



<p>Запускаем httpd и mariadb и добавляем их в автозагрузку.</p>



<pre class="wp-block-preformatted"># systemctl start httpd
# systemctl enable httpd
# systemctl start mariadb
# systemctl enable mariadb</pre>



<p>Задаем пароль root для mysql.</p>



<pre class="wp-block-preformatted"># /usr/bin/mysql_secure_installation</pre>



<p>Проверяем работу web сервера. Заходим по ip адресу сервера —&nbsp;<em>http://188.35.19.125/</em>, а также проверяем работу phpmyadmin —&nbsp;<em>http://188.35.19.125/phpmyadmin/</em>. Его нужно настроить, об этом рассказано в статье, которую я привел чуть выше. По-умолчанию в phpmyadmin доступ закрыт. Если все сделали правильно, то увидите примерно следующее.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-02.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-02.png" alt="Вход в phpmyadmin" class="wp-image-5029"/></a></figure></div>



<p>Сразу создадим тут пользователя postfix и одноименную базу данных. Запомните учетные данные, они нам далее понадобятся.</p>


</br>



<p>Веб сервер готов, продолжаем настройку почтового сервера. Скачиваем последнюю версию postfixadmin.</p>



<pre class="wp-block-preformatted"># cd /usr/src
# wget&nbsp;https://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-3.0.2/postfixadmin-3.0.2.tar.gz</pre>



<p>Скорее всего во время вашей установки версия postfixadmin изменится и ссылка может быть неактуальной. Но даже если она будет актуальна, возможно выйдет более новая версия. Проверьте ее по ссылке&nbsp;<a href="https://sourceforge.net/projects/postfixadmin/" target="_blank" rel="noreferrer noopener">https://sourceforge.net/projects/postfixadmin/</a>&nbsp;и скачайте самую свежую версию.</p>



<p>Распаковываем архив и копируем в директорию веб сервера.</p>



<pre class="wp-block-preformatted"># tar -xvzf postfixadmin-*
# mv /usr/src/postfixadmin-3.0.2 /var/www/html/postfixadmin</pre>



<p>Назначаем владельцем пользователя веб сервера:</p>



<pre class="wp-block-preformatted"># chown -R apache. /var/www/html/postfixadmin/</pre>



<p>Дальше редактируем конфигурационный файл postfixadmin.</p>



<pre class="wp-block-preformatted"># mcedit&nbsp;/var/www/html/postfixadmin/config.inc.php</pre>



<p>Приводим параметры к следующему виду:</p>



<pre class="wp-block-preformatted">$CONF['configured'] = true;
$CONF['default_language'] = 'ru';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = '12345678';
$CONF['database_name'] = 'postfix';
$CONF['admin_email'] = 'root@zeroxzed.ru';
$CONF['encrypt'] = '<strong>md5crypt</strong>';
$CONF['default_aliases'] = array (
 'abuse' =&gt; 'root',
 'hostmaster' =&gt; 'root',
 'postmaster' =&gt; 'root',
 'webmaster' =&gt; 'root'
);
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'YES';</pre>



<p>Обращаю внимание на выделенный параметр. Он указывает на то, в каком виде хранить пароли пользователей в базе данных. Конечно, хранить обычным текстом без шифрования это дурной тон и может быть опасно. Я указал хранение в шифрованном виде. Но если мы говорим о небольшой компании без публичного доступа к серверу, можно использовать нешифрованные пароли. Для этого указываем значение параметра&nbsp;<strong>cleartext</strong>. Я сам так часто делаю просто из соображений удобства. Объясню, в чем удобство.</p>



<p>К примеру, у пользователя несколько устройств подключены к почте и он забыл свой пароль. Админ при создании почему-то тоже его никуда не записал, или забыл, или потерял. Вам придется сбросить пароль и перенастроить все устройства. Если же у вас пароль хранится в открытом виде, вы просто смотрите в базу и говорите пользователю пароль. Пароли в открытом виде удобно просто выгрузить дампом из базы, если понадобится кому-то все учетки передать. Но тут как посмотреть <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> С одной стороны плюс, с другой минус — кто-то очень просто может спереть все ваши пароли. В общем, тут от ситуации зависит, решайте сами, как вам удобнее хранить пароли.</p>



<p>У меня распространены ситуации, когда я удаленно администрирую сервера, а на месте эникеи работают с пользователями. Чаще всего это не очень аккуратные и ответственные люди, иначе они бы работали с серверами <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Они часто забывают записать пароль, путают что-то и т.д. В итоге, когда один человек увольняется и приходит другой, оказывается, что найти пароли на некоторые ящики просто невозможно. Тут очень выручает возможность посмотреть пароль в базе. Я новому админу либо пароль говорю, либо весь дамп сразу отдаю, пусть работает.</p>



<p>Если вы сами работаете с сервером и все аккуратно ведете, записываете, например, в keepass все пароли от почтовых ящиков, то смело шифруйте все пароли, так будет спокойнее.</p>



<p>Последние 2 параметра&nbsp;<strong>domain_path</strong>&nbsp;и&nbsp;<strong>domain_in_mailbox</strong>&nbsp;указывайте по своему усмотрению. В файле конфигурации в комментариях расписано, за что они отвечают и в чем отличие. Мне кажется, удобно хранить директории именно в таком виде, как я указал. Получится следующий путь до ящика, если у вас архив почты будет жить, к примеру, в директории&nbsp;<em>/mnt/mail</em>&nbsp;—&nbsp;/mnt/mail/zeroxzed.ru/root@zeroxzed.ru.</p>



<p>С параметрами разобрались. Сохраняем конфиг. Идем по адресу&nbsp;<em>http://188.35.19.125/postfixadmin/setup.php</em>&nbsp;и начинаем установку postfixadmin. Первым делом идет проверка всех необходимых для установки и работы компонентов. Для продолжения установки у вас должна быть такая картинка.</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-03.png" alt="Установка postfixadmin" class="wp-image-5030"/></figure></div>



<p>Если чего-то не хватает, разбирайтесь по месту. Если делаете по моей инструкции, то все должно быть в порядке. Указывайте пароль установки и продолжайте. Вы должны получить строку с хэшем этого пароля.</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-04.png" alt="Добавление пароля установки" class="wp-image-5031"/></figure></div>



<p>Добавляем полученную строку в файл конфигурации postfixadmin.</p>


</br>



<pre class="wp-block-preformatted"># mcedit&nbsp;/var/www/html/postfixadmin/config.inc.php</pre>



<pre class="wp-block-preformatted">$CONF['setup_password'] = '67e46bdcc7aeb431f7af9a6d02f43352:30672e5a9deacaf505d32807b967caf9fd0c32ef';</pre>



<p>Используя этот пароль, можно создать учетную запись администратора панели управления. Делаем это, учитывая, что пароль должен содержать не менее двух цифр. Если все сделали правильно, то увидите сообщение.</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-05.png" alt="Добавление администратора postfixadmin" class="wp-image-5032"/></figure></div>



<p>Переходим по ссылке и авторизуемся с помощью учетной записи администратора, которую только что сделали. Вы должны увидеть основную страницу интерфейса postfixadmin.</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-06.png" alt="Главная страница postfixadmin" class="wp-image-5033"/></figure></div>



<p>Теперь нам нужно добавить домен в панель управления. Идем в раздел&nbsp;Список доменов -&gt; Новый домен&nbsp;и добавляем свой домен.</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-07.png" alt="Создание нового домена" class="wp-image-5034"/></figure></div>



<p>При создании домена были добавлены стандартные алиасы, получателя для которых мы указали еще в конфиге — ящик root@zeroxzed.ru. Создание таких алиасов требование стандартов, но по факту, кроме спама, вы скорее всего ничего не будете получать по этим адресам. Так что их создание оставляйте на свое усмотрения. Я обычно их не делаю, так как ящик для этих алиасов все равно не читаю.</p>



<p>Далее создадим почтовый ящик администратора —&nbsp;root@zeroxzed.ru. Для этого идем в раздел&nbsp;Обзор -&gt; Создать ящик&nbsp;и заполняем поля.</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-08.png" alt="Добавление почтового ящика" class="wp-image-5035"/></figure></div>



<p>Непосредственно ящик на диске создан не будет, так как у нас еще не настроена почтовая система, но запись в базе данных появится. Это можно проверить через phpmyadmin.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-09.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-09.png" alt="Проверка нового ящика в mysql базе" class="wp-image-5036"/></a></figure></div>



<p>Как мы видим, пароль указан в зашифрованном виде. На этом установку и настройку postfixadmin завершаем. Интерфейс для управления почтовым сервером мы подготовили. Теперь можно заняться непосредственно настройкой postfix.</p>



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



<p>Сердце нашего почтового сервера на linux — postfix. В дистрибутиве centos он уже установлен, можно сразу переходить к настройке. Рисуем следующий конфиг.</p>



<pre class="wp-block-preformatted"># mcedit&nbsp;/etc/postfix/main.cf</pre>



<pre class="wp-block-preformatted">soft_bounce = no
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix

myhostname = <strong>mail.zeroxzed.ru</strong>
mydomain = <strong>zeroxzed.ru</strong>
myorigin = $myhostname

inet_interfaces = all
inet_protocols = ipv4

mydestination = localhost.$mydomain, localhost
unknown_local_recipient_reject_code = 550
mynetworks = 127.0.0.0/8

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

smtpd_banner = $myhostname ESMTP $mail_name

debug_peer_level = 2
# Строки с PATH и ddd должны быть с отступом в виде табуляции от начала строки
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id &amp; sleep 5

sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.10.1/samples
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES

relay_domains = mysql:/etc/postfix/mysql/relay_domains.cf
virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf,
 mysql:/etc/postfix/mysql/virtual_alias_domain_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_mailbox_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf

smtpd_discard_ehlo_keywords = etrn, silent-discard
smtpd_forbidden_commands = CONNECT GET POST
broken_sasl_auth_clients = yes
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtp_always_send_ehlo = yes
disable_vrfy_command = yes

smtpd_helo_restrictions = permit_mynetworks,
 permit_sasl_authenticated,
 reject_non_fqdn_helo_hostname,
 reject_invalid_helo_hostname

smtpd_data_restrictions = permit_mynetworks,
 permit_sasl_authenticated,
 reject_unauth_pipelining,
 reject_multi_recipient_bounce,

smtpd_sender_restrictions = permit_mynetworks,
 permit_sasl_authenticated,
 reject_non_fqdn_sender,
 reject_unknown_sender_domain

smtpd_recipient_restrictions = reject_non_fqdn_recipient,
 reject_unknown_recipient_domain,
 reject_multi_recipient_bounce,
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_unauth_destination,

smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtp_tls_session_cache_database = btree:$data_directory/smtp_tls_session_cache
smtpd_tls_key_file = /etc/postfix/certs/key.pem
smtpd_tls_cert_file = /etc/postfix/certs/cert.pem
tls_random_source = dev:/dev/urandom

# Ограничение максимального размера письма в байтах
message_size_limit = 20000000
smtpd_soft_error_limit = 10
smtpd_hard_error_limit = 15
smtpd_error_sleep_time = 20
anvil_rate_time_unit = 60s
smtpd_client_connection_count_limit = 20
smtpd_client_connection_rate_limit = 30
smtpd_client_message_rate_limit = 30
smtpd_client_event_limit_exceptions = 127.0.0.0/8
smtpd_client_connection_limit_exceptions = 127.0.0.0/8

maximal_queue_lifetime = 1d
bounce_queue_lifetime = 1d

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/dovecot-auth

# Директория для хранения почты
virtual_mailbox_base = <strong>/mnt/mail</strong>
virtual_minimum_uid = 1000
virtual_uid_maps = static:1000
virtual_gid_maps = static:1000
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

sender_bcc_maps = hash:/etc/postfix/sender_bcc_maps
recipient_bcc_maps = hash:/etc/postfix/recipient_bcc_maps</pre>


</br>



<p>Я выделил жирным имя домена и путь для директории с почтовыми ящиками. Не забудьте поменять эти параметры на свои. Сохраняем конфиг и продолжаем настройку. В таком виде сервер еще не готов. Нужно теперь создать все то, что описано в файле конфигурации. Создаем папку для файлов с конфигурацией подключения к mysql и сами файлы подключения.</p>



<pre class="wp-block-preformatted"># mkdir /etc/postfix/mysql &amp;&amp; cd&nbsp;/etc/postfix/mysql</pre>



<pre class="wp-block-preformatted"># mcedit relay_domains.cf

hosts = localhost
user =&nbsp;postfix
password =&nbsp;12345678
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1'</pre>



<pre class="wp-block-preformatted">#&nbsp;mcedit &nbsp;virtual_alias_domain_maps.cf

hosts = localhost
user = postfix
password = 12345678
dbname = postfix
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1</pre>



<pre class="wp-block-preformatted">#&nbsp;mcedit&nbsp;virtual_alias_maps.cf

hosts = localhost
user = postfix
password = 12345678
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'</pre>



<pre class="wp-block-preformatted">#&nbsp;mcedit&nbsp;virtual_mailbox_domains.cf</pre>



<pre class="wp-block-preformatted">hosts = localhost
user = postfix
password = 12345678
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'</pre>



<pre class="wp-block-preformatted">#&nbsp;mcedit&nbsp;virtual_mailbox_maps.cf

hosts = localhost
user = postfix
password = 12345678
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'</pre>



<p>Редактируем файл&nbsp;<em>/etc/postfix/master.cf</em>. Нам надо добавить строки, касающиеся настройки&nbsp;Submission для того, чтобы почтовый сервер работал на 587 порту. Смартфоны очень часто при настройке используют этот порт по-умолчанию, где-то даже без возможности изменить эту настройку. Приводим секцию, отвечающую за эту работу к следующему виду.</p>



<pre class="wp-block-preformatted">submission inet n - n - - smtpd
 -o syslog_name=postfix/submission
 -o smtpd_tls_wrappermode=no
 -o smtpd_tls_security_level=encrypt
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
 -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
 -o milter_macro_daemon_name=ORIGINATING</pre>



<p>Обращаю внимание на пробел в начале строки, начиная со второй. Его надо обязательно оставить. Добавляем еще настройки для того, чтобы наш сервер поддерживал протокол SSL/TLS и слушал порт 465</p>



<pre class="wp-block-preformatted">smtps inet n - n - - smtpd
 -o syslog_name=postfix/smtps
 -o smtpd_tls_wrappermode=yes
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
 -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
 -o milter_macro_daemon_name=ORIGINATING</pre>



<p>В этот же файл добавляем еще одну настройку, которая будет указывать postfix, что доставкой почты у нас будет заниматься dovecot, который мы настроим следом. Добавляем в master.cf в самый конец.</p>



<pre class="wp-block-preformatted">dovecot unix - n n - - pipe
 flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}</pre>



<p>Сгенерируем самоподписанные ssl сертификаты для нашего почтового сервера. Позже отдельным пунктом я расскажу как использовать полноценные сертификаты. Они не всем нужны, поэтому показываю быструю настройку postfix на использование своих сертификатов, которые уже указаны в конфиге postfix.</p>



<p>Создаем директорию и сами сертификаты:</p>



<pre class="wp-block-preformatted"># mkdir /etc/postfix/certs
#&nbsp;openssl req -new -x509 -days 3650 -nodes -out /etc/postfix/certs/cert.pem -keyout /etc/postfix/certs/key.pem</pre>



<p>Для генерации вам зададут несколько вопросов по поводу данных о сертификате. В принципе, можете там писать все, что угодно. Вот мои данные.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-10.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-10.png" alt="Создание ssl сертификата для postfix" class="wp-image-5037"/></a></figure></div>


</br>



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



<pre class="wp-block-preformatted"># mcedit&nbsp;/etc/postfix/recipient_bcc_maps</pre>



<pre class="wp-block-preformatted">@zeroxzed.ru all_in@zeroxzed.ru</pre>



<pre class="wp-block-preformatted"># mcedit /etc/postfix/sender_bcc_maps</pre>



<pre class="wp-block-preformatted">@zeroxzed.ru all_out@zeroxzed.ru</pre>



<p>Создаем индексированные базы данных из этих файлов. Это нужно делать каждый раз, после изменения.</p>



<pre class="wp-block-preformatted"># postmap&nbsp;/etc/postfix/recipient_bcc_maps&nbsp;/etc/postfix/sender_bcc_maps</pre>



<p>Теперь создайте два почтовых ящика&nbsp;all_in@zeroxzed.ru и&nbsp;all_out@zeroxzed.ru через postfixadmin.</p>



<p>Немного поясню по этим ящикам — для чего они нужны. Изначально я их делал, когда пользователи использовали протокол pop3 без сохранения писем на сервере. Это позволяло организовать бэкап всей переписки. Эти ящики очень быстро заполняются и занимают огромный объем, поэтому их обязательно надо чистить. Я просто скриптами регулярно собирал всю почту в архивы с именами в виде дат. Если нужно было какое-то письмо найти, то просто распаковывал нужный архив.</p>



<p>В случае с imap роль бэкапа отпадает, так как вся почта хранится на сервере. Но эти ящики все равно бывают полезны, когда пользователь, к примеру, удалил какое-то важное письмо и потом делает вид, что его и не было. Если это письмо пришло только сегодня и еще не успело улететь в бэкап, то кроме записи в логах об этом письме, вы не увидите само содержимое. А с такими ящиками все сразу будет понятно, и вопросы отпадут. Последнее применение — служба безопасности. Если у вас есть кто-то, кому положено читать всю переписку, то реализовать этот функционал можно таким простым способом.</p>



<p>Все основные настройки для postfix мы сделали. Некоторые из них завязаны на работу с dovecot, который мы еще не настроили. Поэтому больше postfix не трогаем, не перезапускаем. Идем настраивать dovecot — imap сервер нашей почтовой системы.</p>



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



<p>Займемся настройкой dovecot — сервер доставки почты пользователю по протоколам pop3 и imap. Я не вижу причин использовать pop3. Он неудобен по сравнению с&nbsp;imap. Чаще всего pop3 отключаю вовсе. Но это уже на ваше усмотрение. Приведу пример с настройкой обоих протоколов. Помимо основного функционала по доставке почты, я настрою несколько полезных плагинов. Расскажу о них поподробнее:</p>



<ul><li><strong>Sieve</strong>&nbsp;— выполняет фильтрацию почты по заданным правилам в момент локальной доставки на почтовом сервере. Удобство такого подхода в том, что вы один раз можете настроить правило сортировки, и оно будет работать во всех клиентах, которыми вы будете получать почту по imap. Правила создаются, хранятся и исполняются на самом сервере.</li><li><strong>Acl</strong>&nbsp;— позволяет пользователям расшаривать папки в своем почтовом ящике и предоставлять доступ к этим папкам другим пользователям. Не часто видел, чтобы этот функционал настраивали и использовали. Думаю, просто по незнанию. По мне так очень удобный и полезный функционал.</li></ul>



<p>Часто вижу, что люди настраивают плагин&nbsp;<strong>quota</strong>, который позволяет ограничивать максимальный размер почтового ящика. Я лично в своей работе его не использую. Возможно, когда у тебя клиентов сотни и тысячи это имеет значение и надо обязательно настроить ограничение. Когда же ящиков меньше, нет смысла напрягать людей постоянной чисткой. Сейчас диски стоят не так дорого. Мне кажется, проще и дешевле увеличить место на сервере, нежели постоянно беспокоить пользователей необходимостью чистки ящика. Лучше ограничить максимальный размер письма, скажем 20-ю мегабайтами. Тогда сильно забить ящик даже при большом желании быстро не получится. А почта все-таки важный инструмент в работе. Мне кажется, ее лучше хранить как можно дольше.</p>



<p>Есть еще один полезный плагин&nbsp;<strong>expire</strong>, который позволяет удалять устаревшие письма в определенных папках. Например, удалять все письма старше 30-ти дней в корзине и папке со спамом. Но реально пользоваться им не получается по простой причине. Разные почтовые клиенты создают различные папки для корзины и спама. Thunderbird создает папки с латинскими именами trash и spam, outlook с русскими, которые на почтовом сервере преобразуются в кодировку UTF7, мобильные клиенты тоже используют разные имена папок. В итоге нет единообразия, плагин полноценно не работает.</p>



<p>Я рассказал об этих плагинах для наводки. Сам их не настраиваю, но если вам захочется реализовать описанный функционал, можете сами разобраться и настроить.</p>



<p>Небольшую теорию я дал, теперь переходим к практике. Устанавливаем необходимые для dovecot пакеты.</p>



<pre class="wp-block-preformatted"># yum install dovecot dovecot-mysql dovecot-pigeonhole</pre>



<p>Изначально конфиг dovecot разбит на отдельные сегменты и лежат в директории&nbsp;<em>/etc/dovecot/conf.d</em>. Каждый файл — отдельный функционал. Мне не нравится прыгать по файлам, поэтому я храню все в едином общем файле конфигурации&nbsp;<em>/etc/dovecot/dovecot.conf</em>. С ним мы и будем работать. Приводим его к следующему виду.</p>



<pre class="wp-block-preformatted"># mcedit&nbsp;/etc/dovecot/dovecot.conf</pre>



<pre class="wp-block-preformatted">listen = * [::]

mail_plugins = mailbox_alias acl

protocols = imap pop3 sieve lmtp

mail_uid = 1000
mail_gid = 1000

first_valid_uid = 1000
last_valid_uid = 1000

log_path = /var/log/dovecot/main.log
info_log_path = /var/log/dovecot/info.log
debug_log_path = /var/log/dovecot/debug.log

ssl_protocols = !SSLv2 !SSLv3
ssl = required
verbose_ssl = no
ssl_cert = &lt;/etc/postfix/certs/cert.pem
ssl_key = &lt;/etc/postfix/certs/key.pem

ssl_cipher_list = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
ssl_dh_parameters_length = 2048
ssl_prefer_server_ciphers = yes

disable_plaintext_auth = yes

mail_location = maildir:/mnt/mail/%d/%u/

auth_default_realm = zeroxzed.ru

auth_mechanisms = PLAIN LOGIN

service auth {
 unix_listener /var/spool/postfix/private/dovecot-auth {
 user = postfix
 group = postfix
 mode = 0666
 }
unix_listener auth-master {
 user = vmail
 group = vmail
 mode = 0666
 }

unix_listener auth-userdb {
 user = vmail
 group = vmail
 mode = 0660
 }
}

service lmtp {
 unix_listener /var/spool/postfix/private/dovecot-lmtp {
 user = postfix
 group = postfix
 mode = 0600
 }

 inet_listener lmtp {
 address = 127.0.0.1
 port = 24
 }
}

userdb {
 args = /etc/dovecot/dovecot-mysql.conf
 driver = sql
 }

passdb {
 args = /etc/dovecot/dovecot-mysql.conf
 driver = sql
 }

auth_master_user_separator = *
 
plugin {
 auth_socket_path = /var/run/dovecot/auth-master

 acl = vfile
 acl_shared_dict = file:/mnt/mail/shared-folders/shared-mailboxes.db
 sieve = /mnt/mail/sieve/%u.sieve
 mailbox_alias_old = Sent
 mailbox_alias_new = Sent Messages
 mailbox_alias_old2 = Sent
 mailbox_alias_new2 = Sent Items
}

protocol lda {
 mail_plugins = $mail_plugins sieve
 auth_socket_path = /var/run/dovecot/auth-master
 deliver_log_format = mail from %f: msgid=%m %$
 log_path = /var/log/dovecot/lda-errors.log
 info_log_path = /var/log/dovecot/lda-deliver.log
 lda_mailbox_autocreate = yes
 lda_mailbox_autosubscribe = yes
 postmaster_address = root
}

protocol lmtp {
 info_log_path = /var/log/dovecot/lmtp.log
 mail_plugins = quota sieve
 postmaster_address = postmaster
 lmtp_save_to_detail_mailbox = yes
 recipient_delimiter = +
}

protocol imap {
 mail_plugins = $mail_plugins imap_acl
 imap_client_workarounds = tb-extra-mailbox-sep
 mail_max_userip_connections = 30
}

protocol pop3 {
 mail_plugins = $mail_plugins
 pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
 pop3_uidl_format = %08Xu%08Xv
 mail_max_userip_connections = 30
}

service imap-login {
 service_count = 1
 process_limit = 500
 }

service pop3-login {
 service_count = 1
 }

service managesieve-login {
 inet_listener sieve {
 port = 4190
 }
}

namespace {
 type = private
 separator = /
 prefix =
 inbox = yes

 mailbox Sent {
 auto = subscribe
 special_use = \Sent
 }
 mailbox "Sent Messages" {
 auto = no
 special_use = \Sent
 }
 mailbox "Sent Items" {
 auto = no
 special_use = \Sent
 }
 mailbox Drafts {
 auto = subscribe
 special_use = \Drafts
 }
 mailbox Trash {
 auto = subscribe
 special_use = \Trash
 }
 mailbox "Deleted Messages" {
 auto = no
 special_use = \Trash
 }
 mailbox Junk {
 auto = subscribe
 special_use = \Junk
 }
 mailbox Spam {
 auto = no
 special_use = \Junk
 }
 mailbox "Junk E-mail" {
 auto = no
 special_use = \Junk
 }
 mailbox Archive {
 auto = no
 special_use = \Archive
 }
 mailbox Archives {
 auto = no
 special_use = \Archive
 }
}

namespace {
 type = shared
 separator = /
 prefix = Shared/%%u/
 location = maildir:%%h:INDEX=%h/shared/%%u
 subscriptions = yes
 list = children
}</pre>


</br>



<p>Создаем группу и пользователя с указанными в конфиге uid 1000.</p>



<pre class="wp-block-preformatted">#&nbsp;groupadd &nbsp;-g 1000 vmail
#&nbsp;useradd -d /mnt/mail/ -g 1000 -u 1000 vmail
# chown vmail. /mnt/mail</pre>



<p>Создаем конфигурационные файлы для доступа к mysql базе.</p>



<pre class="wp-block-preformatted"># mcedit /etc/dovecot/dovecot-mysql.conf</pre>



<pre class="wp-block-preformatted">driver = mysql
default_pass_scheme = CRYPT
connect = host=127.0.0.1 dbname=postfix user=postfix password=12345678
user_query = SELECT '/mnt/mail/%d/%u' as home, 'maildir:/mnt/mail/%d/%u' as mail, 1000 AS uid, 1000 AS gid, concat('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u' AND active = '1'
password_query = SELECT username as user, password, '/mnt/mail/%d/%u' as userdb_home, 'maildir:/mnt/mail/%d/%u' as userdb_mail, 1000 as userdb_uid, 1000 as userdb_gid, concat('*:bytes=', quota) AS userdb_quota_rule FROM mailbox WHERE username = '%u' AND active = '1'</pre>



<p>Создадим директорию и файлы для логов.</p>



<pre class="wp-block-preformatted"># mkdir /var/log/dovecot
# cd /var/log/dovecot &amp;&amp; touch&nbsp;main.log&nbsp;info.log&nbsp;debug.log&nbsp;lda-errors.log&nbsp;lda-deliver.log&nbsp;lmtp.log
# chown -R&nbsp;vmail:dovecot /var/log/dovecot</pre>



<p>Создаем пару служебных папок для плагинов sieve и acl.</p>



<pre class="wp-block-preformatted"># mkdir&nbsp;/mnt/mail/sieve &amp;&amp; mkdir&nbsp;/mnt/mail/shared-folders
#&nbsp;chown -R vmail. /mnt/mail</pre>



<p>И небольшой штрих в завершении настройки.</p>



<pre class="wp-block-preformatted"># chown vmail.&nbsp;/var/run/dovecot/auth-master</pre>



<p>Уже не помню, зачем это было нужно, запись осталась в черновиках. Знаю только, что какая-то ошибка всплывала без этого.</p>



<p>На этом основная настройка почтового сервера на базе postfix и dovecot завершена. Можно перезапускать службы и проверять работу системы.</p>



<pre class="wp-block-preformatted"># systemctl restart postfix
# systemctl start dovecot
# systemctl enable dovecot</pre>



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



<p>Самаый простой и быстрый способ проверить работу почтового сервера — отправить на него письмо. Я буду отправлять со своего почтового адреса zeroxzed@gmail.com на адрес root@zeroxzed.ru. Вот что должно быть в логе, если у вас все правильно настроено и почтовый сервер нормально работает.</p>



<pre class="wp-block-preformatted"># cat /var/log/maillog</pre>



<pre class="wp-block-preformatted">Mar 10 21:56:27 mail postfix/smtpd[28075]: connect from mail-yw0-f172.google.com[209.85.161.172]
Mar 10 21:56:28 mail postfix/smtpd[28075]: Anonymous TLS connection established from mail-yw0-f172.google.com[209.85.161.172]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Mar 10 21:56:28 mail postfix/smtpd[28075]: D4263420BB7B: client=mail-yw0-f172.google.com[209.85.161.172]
Mar 10 21:56:29 mail postfix/cleanup[28086]: D4263420BB7B: message-id=&lt;CAHWPLcOeqf6uNHRg34+wuppDUGPDLY=fp8s-E=o9fmxYMS48cQ@mail.gmail.com&gt;
Mar 10 21:56:29 mail postfix/qmgr[28042]: D4263420BB7B: from=&lt;zeroxzed@gmail.com&gt;, size=2533, nrcpt=2 (queue active)
Mar 10 21:56:29 mail postfix/pipe[28089]: D4263420BB7B: to=&lt;all_in@zeroxzed.ru&gt;, relay=dovecot, delay=0.39, delays=0.33/0.02/0/0.05, dsn=2.0.0, status=sent (delivered via dovecot service)
Mar 10 21:56:29 mail postfix/pipe[28090]: D4263420BB7B: to=&lt;root@zeroxzed.ru&gt;, relay=dovecot, delay=0.4, delays=0.33/0.03/0/0.04, dsn=2.0.0, status=sent (delivered via dovecot service)
Mar 10 21:56:29 mail postfix/qmgr[28042]: D4263420BB7B: removed
Mar 10 21:56:29 mail postfix/smtpd[28075]: disconnect from mail-yw0-f172.google.com[209.85.161.172]</pre>



<p>Пояснять тут нечего, по логу все понятно. Письмо было доставлено в указанный ящик и в общий ящик для сбора всей входящей почты. В директории&nbsp;<em>/mnt/mail</em>&nbsp;была создана директория с именем домена zeroxzed.ru, а в ней созданы 3 папки с именами ящиков:</p>



<ul><li>all_in@zeroxzed.ru</li><li>all_out@zeroxzed.ru</li><li>root@zeroxzed.ru</li></ul>



<p>Директории с почтовыми ящиками создаются в момент получения первого письма в ящик. Непрочитанное письмо помещается в директорию /new в почтовом ящике. После прочтения переносится в /cur.</p>



<p>Попробуем теперь подключиться к почтовому ящику по imap, прочитать письмо и отправить ответ. Настроим любой&nbsp;почтовый клиент для проверки работы настроенного почтового сервера. Я для этих целей буду использовать Thunderbird. Из всех почтовых клиентов мне он нравится больше всего. В основном из-за его портированной версии. Указываем следующие настройки.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-11.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-11.png" alt="Настройка подключения к почтовому серверу" class="wp-image-5038"/></a></figure></div>



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



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-12.png" alt="Добавление ssl сертификата в исключения" class="wp-image-5039"/></figure></div>



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



<p>Я подключился к почтовому ящику и увидел тестовые письма. Отвечу на одно из них и посмотрю в логе, как прошла отправка. У меня еще раз выскочило окно с предупреждением о небезопасном сертификате. Еще раз добавляю его в исключения. Это нормально, сертификат проверяется во время получения почты в dovecot, а во время отправки в postfix. Так что нужны 2 подтверждения. Отправляю письмо еще раз и смотрю лог.</p>



<pre class="wp-block-preformatted"># cat /var/log/maillog</pre>


</br>



<pre class="wp-block-preformatted">Mar 10 22:10:12 mail postfix/smtpd[28764]: connect from broadband-75-37-235-139.moscow.gw.ru[75.37.235.139]
Mar 10 22:10:12 mail postfix/smtpd[28764]: Anonymous TLS connection established from broadband-75-37-235-139.moscow.gw.ru[75.37.235.139]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Mar 10 22:10:12 mail postfix/smtpd[28764]: B24C2420BB70: client=broadband-75-37-235-139.moscow.gw.ru[75.37.235.139], sasl_method=PLAIN, sasl_username=root@zeroxzed.ru
Mar 10 22:10:12 mail postfix/cleanup[28779]: B24C2420BB70: message-id=&lt;aaac96c3-197e-c6bd-4dfe-85d09bce216a@zeroxzed.ru&gt;
Mar 10 22:10:12 mail postfix/qmgr[28042]: B24C2420BB70: from=&lt;root@zeroxzed.ru&gt;, size=955, nrcpt=2 (queue active)
Mar 10 22:10:12 mail postfix/smtpd[28764]: disconnect from broadband-75-37-235-139.moscow.gw.ru[75.37.235.139]
Mar 10 22:10:12 mail postfix/pipe[28784]: B24C2420BB70: to=&lt;all_out@zeroxzed.ru&gt;, relay=dovecot, delay=0.14, delays=0.07/0.01/0/0.06, dsn=2.0.0, status=sent (delivered via dovecot service)
Mar 10 22:10:13 mail postfix/smtp[28783]: B24C2420BB70: to=&lt;zeroxzed@gmail.com&gt;, relay=gmail-smtp-in.l.google.com[64.233.163.26]:25, delay=0.62, delays=0.07/0.01/0.28/0.26, dsn=2.0.0, status=sent (250 2.0.0 OK 1489173013 13si2106703ljv.3 - gsmtp)
Mar 10 22:10:13 mail postfix/qmgr[28042]: B24C2420BB70: removed
</pre>



<p>Все в порядке. Видно подключение с моего ip, успешную sasl авторизацию, формирование письма на сервере, присваивание ему message-id, отправка копии письма в ящик для сбора исходящей почты и отправка оригинала в ящик получателя. Все этапы прошли без ошибок.</p>



<p>Расскажу, куда еще надо смотреть для отладки почтовой системы. Да и не только отладки, во время работы периодически придется разбираться, куда ушло то или иное письмо, кто и когда подключался к ящику. Разные ситуации бывают. В файле&nbsp;<em>/var/log/dovecot/lda-deliver.log</em>&nbsp;содержится информация обо всех пришедших письмах — когда, от кого и в какой ящик было положено.</p>



<pre class="wp-block-preformatted">Mar 10 22:25:29 lda(all_in@zeroxzed.ru): Info: mail from zeroxzed@gmail.com: msgid=&lt;CAHWPLcNG=WMOoWW2Y_Lw4qn9+V4TOrbxZpwtA=O+CSEBaiwuBg@mail.gmail.com&gt; saved mail to INBOX
Mar 10 22:25:29 lda(root@zeroxzed.ru): Info: mail from zeroxzed@gmail.com: msgid=&lt;CAHWPLcNG=WMOoWW2Y_Lw4qn9+V4TOrbxZpwtA=O+CSEBaiwuBg@mail.gmail.com&gt; saved mail to INBOX
Mar 10 22:25:49 lda(all_out@zeroxzed.ru): Info: mail from root@zeroxzed.ru: msgid=&lt;75358e4d-7c8e-24c2-a21f-7ee0df2a4704@zeroxzed.ru&gt; saved mail to INBOX</pre>



<p>В&nbsp;<em>/var/log/dovecot/info.log</em>&nbsp;информация о подключениях к почтовым ящикам — кто, когда, откуда и каким способом авторизовывался на сервере.</p>



<pre class="wp-block-preformatted">Mar 10 22:10:20 imap-login: Info: Login: user=&lt;root@zeroxzed.ru&gt;, method=PLAIN, rip=75.37.235.139, lip=188.35.19.125, mpid=28790, TLS, session=&lt;3tDeHGVKpQBNJeCL&gt;
Mar 10 22:19:39 imap-login: Info: Login: user=&lt;root@zeroxzed.ru&gt;, method=PLAIN, rip=75.37.235.139, lip=188.35.19.125, mpid=29248, TLS, session=&lt;7VY8PmVKbwBNJeCL&gt;</pre>



<p>Остальное уже не так полезно. Сами посмотрите, что собирается в остальных лог файлах.</p>



<p>На текущий момент сервер полностью работоспособен. В таком виде им без проблем можно пользоваться. Но функционал полностью не раскрыт. Использовать плагины sieve и acl через удаленные почтовые клиенты неудобно. Проще всего их настроить через web почту&nbsp;roundcube. Установим эту web панель на наш почтовый сервер.</p>



<h2 class="wp-block-heading">Установка web интерфейса roundcube</h2>



<p>Установим и настроим самый популярный web интерфейс для postfix — roundcube. Скачиваем исходники.</p>



<pre class="wp-block-preformatted"># cd /usr/src
# wget&nbsp;https://github.com/roundcube/roundcubemail/releases/download/1.2.9/roundcubemail-1.2.3-complete.tar.gz</pre>



<p>Не забудьте проверить в момент установки, какая версия является самой свежей на текущий момент. Нет необходимости устанавливать устаревшую версию. Рекомендую ставить самую последнюю на момент настройки.</p>



<pre class="wp-block-preformatted"># yum install php-pear php-mcrypt php-intl php-ldap php-pear-Net-SMTP php-pear-Net-IDNA2 php-pear-Mail-Mime php-pear-Net-Sieve
# tar -xzvf roundcubemail-*
# mv&nbsp;roundcubemail-1.2.9 /var/www/html/webmail
# chown -R apache.&nbsp;/var/www/html/webmail</pre>



<p>Переходим в браузер по следующей ссылке для установки roundcube —&nbsp;<em>http://188.35.19.125/webmail/installer/</em>. Вы увидите несколько незначительных замечаний. На них можно не обращать внимание, если установщик позволяет нажать кнопку NEXT. Единственное, рекомендую установить правильный часовой пояс в&nbsp;<em>/etc/php.ini</em>&nbsp;и перезапустить после этого httpd.</p>



<p>На следующем этапе нам надо указать настройки подключения к mysql базе. Предварительно ее следует создать через phpmyadmin. Я создал пользователя roundcube и такую же базу с полными правами пользователя на нее. Эти параметры указал в настройках.</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-13.png" alt="Установка roundcube" class="wp-image-5040"/></figure></div>



<p>Так же на этой странице нужно будет указать несколько параметров:</p>



<ul><li>smtp_server —&nbsp;пусто (ничего не пишем)</li><li>language — ru_RU</li><li>Выбираем плагины —&nbsp;managesieve, userinfo, acl. Остальные на свое усмотрение.</li></ul>



<p>Жмем CREATE CONFIG. Должны увидеть сообщение:</p>



<pre class="wp-block-preformatted">The config file was saved successfully into RCMAIL_CONFIG_DIR directory of your Roundcube installation.</pre>



<p>Жмем CONTINUE. Открывается страница с проверкой настроек. Тут проверять неудобно, можно этого не делать. Зайдем в почтовый ящик и там все проверим. Если что, конфиг потом все равно можно вручную отредактировать. Папку&nbsp;<em>/var/www/html/webmail/installer</em>&nbsp;удаляем. Заходим в почтовый ящик через roundcube —&nbsp;<em>http://188.35.19.125/webmail/</em>&nbsp;Набирать нужно полное имя ящика и пароль. Если все сделали правильно, должны попасть в свой почтовый ящик.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-14.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-14.png" alt="Вход в почтовый ящик через roundcube" class="wp-image-5041"/></a></figure></div>



<p>Ну вот и все. Можно пользоваться web интерфейсом для почтового сервера. Рекомендую ее настроить, если есть необходимость. Тема качественная и добротная. Пользоваться удобно.</p>



<p>Дальше рассмотрим настройку и использование плагинов acl и sieve с помощью roundcube.</p>



<h2 class="wp-block-heading">Настройка фильтра почты sieve</h2>



<p>Sieve очень удобная штука, но вот хорошего интерфейса для управления через почтовый клиент я не знаю. Существует плагин для thunderbird, который так и называется sieve. Но лично мне он не понравился вообще, так как предлагает писать правила определенным кодом. Для этого надо знать синтаксис, тратить время. Можете сами на него посмотреть —&nbsp;<a href="https://github.com/thsmi/sieve" target="_blank" rel="noreferrer noopener">https://github.com/thsmi/sieve</a>.</p>



<p>К счастью, есть удобный способ писать правила фильтрации для sieve через roundcube. Там это реализовано отдельным плагином&nbsp;<strong>managesieve</strong>, который мы активировали во время установки. Для создания правила фильтрации, зайдите в свой почтовый ящик через&nbsp;roundcube. Переходите в раздел&nbsp;Настройки -&gt; Фильтры&nbsp;и создавайте новое правило.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-15.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-15.png" alt="Настройка фильтра почты в roundcube" class="wp-image-5042"/></a></figure></div>



<p>После этого письма будут обрабатываться правилом сразу после поступления в почтовый сервер, в независимости от вашего подключения к ящику. В папке&nbsp;<em>/mnt/mail/sieve</em>&nbsp;появилась запись с настроенным правилом. Можете познакомиться с синтаксисом написания правил. Он не сложный.</p>



<h2 class="wp-block-heading">Настройка&nbsp;автоответчика</h2>



<p>В roundcube есть замечательная возможность настроить автоответчик в почтовом ящике. Это актуально, к примеру, если вы уходите в отпуск. Вы можете сами настроить автоответчик, который будет отправлять письмо с указанной вами информацией всем, от кого будут приходить письма в ваш ящик. Возможность эта реализована на базе того же плагина&nbsp;managesieve. По-умолчанию она отключена. Активировать ее нужно вручную.</p>



<p>Для того, чтобы модуль автоответчика заработал, отредактируйте конфигурационный файл плагина. Для этого открываем его в моем случае по следующему адресу:</p>



<pre class="wp-block-preformatted"># mcedit /var/www/html/webmail/plugins/managesieve/config.inc.php</pre>



<p>Изменяем там параметр:</p>



<pre class="wp-block-preformatted">$config['managesieve_vacation'] = 1;</pre>



<p>После этого достаточно просто обновить веб интерфейс roundcube, и появятся новые настройки по адресу&nbsp;Настройки -&gt; Отпуск</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-16.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-16.png" alt="Настройка автоответчика" class="wp-image-5043"/></a></figure></div>



<p>На вкладке&nbsp;Дополнительные настройки&nbsp;есть возможность настроить различные полезные действия, в том числе пересылку входящей почты вашему заместителю.</p>


</br>



<h2 class="wp-block-heading">Общие папки по imap</h2>



<p>Рассмотрим настройку необычного и полезного функционала в виде общих папок. С их помощью один пользователь почтового ящика может предоставить другому пользователю доступ к папке внутри своего почтового ящика. Где и как использовать этот функционал, каждый может придумать сам, в зависимости от своих потребностей. Мне кажется это удобным в том случае, когда создан какой-то общий ящик, на который только поступает информация и нет необходимости писать ответ от его имени. То есть по сути работает как обычный почтовый алиас. Но в случае с алиасом и несколькими почтовыми ящиками, письмо падает в каждый ящик. Если таких писем и получателей много, то идет большое дублирование одного и того же письма в рамках почтового сервера. Если сделать ящик и расшарить на нем папку, подключить ее всем пользователям, то дублирования почты не будет. Каждый сможет прочитать письмо, без необходимости его доставки в каждый конкретный ящик.</p>



<p>Настроим общую папку imap. Хотя настраивать нам, по сути, нечего. Мы уже все настроили ранее. Добавили соответствующие настройки в dovecot и активировали плагин&nbsp;<strong>acl</strong>&nbsp;в roundcube. Теперь нужно просто сделать папку и открыть ее для другого пользователя. Для этого идем в раздел&nbsp;Настройки -&gt; Папки. Создаем там любую папку. В моем случае это папка с названием Общая.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-17.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-17.png" alt="Настройка общей папки imap" class="wp-image-5044"/></a></figure></div>



<p>Добавляем необходимый доступ либо всем ящикам в домене, либо какому-то конкретному. Так же можно указать, какого рода это будет доступ:</p>



<ul><li>чтение</li><li>запись</li><li>удаление</li></ul>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-18.png" alt="Права доступа на общую папку imap" class="wp-image-5045"/></figure></div>



<p>Заходим в ящик, которому добавили общий доступ и проверяем.</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-19.png" alt="Проверка общей папки" class="wp-image-5046"/></figure></div>



<p>Все в порядке, общая папка imap настроена и подключена. В папке&nbsp;<em>/mnt/mail/shared-folders</em>&nbsp;появился файл с настроенным выше правилом.</p>



<p>На этом настройка пользовательского функционала закончена. В принципе, почтовый сервер полностью готов к работе. Но мы сделаем еще несколько полезных настроек на стороне сервера.</p>



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



<p>Напишу своими словами как я понимаю работу&nbsp;<strong>dkim</strong>. С помощью dkim&nbsp;вся исходящая почта сервера подписывается электронной цифровой подписью, связанной с именем домена. Открытый ключ шифрования с помощью DNS публикуется в txt записи. Таким образом, удаленный сервер, при получении письма от вас, сравнивает цифровую подпись с опубликованным в dns открытым ключом вашего домена. Если все в порядке, то считает, что ваше письмо в самом деле пришло от вас, а не от мошенников. То есть с помощью этой технологии можно однозначно идентифицировать отправителя.</p>



<p>Некоторые считают, что эта технология помогает бороться со спамом. Не знаю, насколько это верно. Спамеру не составит большого труда настроить на своем сервере dkim и отправлять спам, но подписанный электронной цифровой подписью. Теоретически, dkim помогает защититься от подделки адреса отправителя, когда письмо якобы от вас шлет совсем другой сервер. Но с этим можно бороться и другими способами. В общем, я до конца не понимаю, зачем это надо. Прошу поделиться в комментариях тем, к кого есть бОльший опыт. Я только недавно стал шагать в ногу со временем и настраивать dkim. Раньше всегда без него обходился.Плюс настройки dkim я вижу только в том, что автоматические фильтры определения спама будут добавлять больше траста письмам с корректной dkim подписью. У вас будет больше шанса не попасть в спам при прочих равных условиях. В принципе, ради этого можно немного заморочиться.</p>



<p>Для настройки dkim устанавливаем соответствующий пакет:</p>



<pre class="wp-block-preformatted"># yum install opendkim</pre>



<p>Создаем директорию для хранения ключей:</p>



<pre class="wp-block-preformatted"># mkdir -p /etc/postfix/dkim &amp;&amp;&nbsp;cd /etc/postfix/dkim</pre>



<p>Генерируем ключи для домена:</p>



<pre class="wp-block-preformatted"># opendkim-genkey -D /etc/postfix/dkim/ -d zeroxzed.ru -s mail</pre>



<figure class="wp-block-table"><table><tbody><tr><td>zeroxzed.ru</td><td>имя почтового домена</td></tr><tr><td>mail</td><td>непосредственно имя сервера</td></tr></tbody></table></figure>



<p>На выходе получаете пару файлов — закрытый (приватный) и открытый ключ. Закрытый останется на сервере, открытый будет опубликован в dns. Переименуем их сразу, чтобы не путаться, если у вас будет несколько доменов. Ключи нужно будет делать для каждого домена.</p>



<pre class="wp-block-preformatted"># mv mail.private mail.zeroxzed.ru.private
# mv mail.txt mail.zeroxzed.ru.txt</pre>



<p>Создаем файл с таблицей ключей, в которой будут описаны все домены. В данном случае только один.</p>



<pre class="wp-block-preformatted"># mcedit&nbsp;keytable</pre>



<pre class="wp-block-preformatted">mail._domainkey.zeroxzed.ru zeroxzed.ru:mail:/etc/postfix/dkim/mail.zeroxzed.ru.private</pre>



<p>Тут же создаем еще один файл, в котором будет описано, каким ключом подписывать письма каждого домена. У нас один домен, поэтому только одна запись.</p>



<pre class="wp-block-preformatted"># mcedit&nbsp;signingtable</pre>



<pre class="wp-block-preformatted">*@zeroxzed.ru mail._domainkey.zeroxzed.ru</pre>



<p>Выставляем права доступа на все файлы:</p>



<pre class="wp-block-preformatted"># chown root:opendkim *
# chmod u=rw,g=r,o= *</pre>



<p>Рисуем конфиг службы.</p>



<pre class="wp-block-preformatted"># mcedit&nbsp;/etc/opendkim.conf</pre>



<pre class="wp-block-preformatted">AutoRestart Yes
AutoRestartRate 10/1h
PidFile /var/run/opendkim/opendkim.pid
Mode sv
Syslog yes
SyslogSuccess yes
LogWhy yes
UserID opendkim:opendkim
Socket inet:8891@localhost
Umask 022
Canonicalization relaxed/relaxed
Selector default
MinimumKeyBits 1024
KeyFile /etc/postfix/dkim/mail.zeroxzed.ru.private
KeyTable /etc/postfix/dkim/keytable
SigningTable refile:/etc/postfix/dkim/signingtable</pre>


</br>



<p>Добавляем в конфигурационный файл postfix в самый конец следующие параметры:</p>



<pre class="wp-block-preformatted"># mcedit /etc/postfix/main.cf</pre>



<pre class="wp-block-preformatted">smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
milter_protocol = 2</pre>



<p>Перезапускаем postfix и dkim, последний добавляем в автозагрузку.</p>



<pre class="wp-block-preformatted"># systemctl restart&nbsp;postfix
# systemctl restart opendkim.service
# systemctl enable opendkim.service</pre>



<p>Теперь нам надо добавить открытый ключ в dns. Идем в консоль управления dns и добавляем новую txt запись. Ее содержание берем из файла&nbsp;<em>/etc/postfix/dkim/mail.zeroxzed.ru.txt</em></p>



<pre class="wp-block-preformatted">cat /etc/postfix/dkim/mail.zeroxzed.ru.txt</pre>



<pre class="wp-block-preformatted">mail._domainkey IN TXT ( "v=DKIM1; k=rsa; "
 "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClZX2xWRDISlVLF4b4pUiinY5N9WN7VXEHeyPw8smHTamXh35wJoh+j0+MIQDWG/KtdCcETeawTuypXbvtbneXniYR0iiv6kt754T2WXBjz7O/uHL+vK58LhJsm4TGyhUN6ZBit+w22jG92zdeybSZeU/g7hQdkaAAi0I+0nIkUwIDAQAB" ) ; – - – DKIM key mail for zeroxzed.ru</pre>



<p>Убираем кавычки, лишние проблемы и вставляем. Должно получиться вот так:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-20.png" alt="Настройка dkim записи в dns" class="wp-image-5047"/></figure></div>



<p>Проверяю работу. Отправляю письмо на gmail и смотрю лог почтового сервера:</p>



<pre class="wp-block-preformatted"># cat&nbsp;/var/log/maillog</pre>



<pre class="wp-block-preformatted">Mar 17 17:40:26 mail postfix/smtpd[22352]: connect from localhost[127.0.0.1]
Mar 17 17:40:26 mail postfix/smtpd[22352]: BB1794195584: client=localhost[127.0.0.1]
Mar 17 17:40:26 mail postfix/cleanup[22364]: BB1794195584: message-id=&lt;baf63dcec016594d49f2d80f815e5d26@zeroxzed.ru&gt;
Mar 17 17:40:26 mail opendkim[21744]: BB1794195584: <strong>DKIM-Signature field added (s=mail, d=zeroxzed.ru)</strong>
Mar 17 17:40:26 mail postfix/qmgr[21990]: BB1794195584: from=&lt;root@zeroxzed.ru&gt;, size=593, nrcpt=2 (queue active)
Mar 17 17:40:26 mail postfix/pipe[22369]: BB1794195584: to=&lt;all_out@zeroxzed.ru&gt;, relay=dovecot, delay=0.14, delays=0.11/0.02/0/0.02, dsn=2.0.0, status=sent (delivered via dovecot service)
Mar 17 17:40:26 mail postfix/smtpd[22352]: disconnect from localhost[127.0.0.1]
Mar 17 17:40:27 mail postfix/smtp[22370]: BB1794195584: to=&lt;zeroxzed@gmail.com&gt;, relay=gmail-smtp-in.l.google.com[64.233.163.26]:25, delay=0.84, delays=0.11/0.02/0.31/0.4, dsn=2.0.0, status=sent (250 2.0.0 OK 1489761627 185si4568435lfa.398 - gsmtp)</pre>



<p>Все в порядке, электронная цифровая подпись установлена. Проверим, как гугл отреагировал на нашу подпись:</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-21.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-21.png" alt="Проверка dkim" class="wp-image-5048"/></a></figure></div>



<p>Тоже все в порядке. Подпись выполнена корректно, проверку прошла. Дополнительно, проверить корректность dkim записи в dns можно онлайн сервисом —&nbsp;<a href="http://dkimcore.org/c/keycheck" target="_blank" rel="noreferrer noopener">http://dkimcore.org/c/keycheck</a>.</p>



<p>Настроим еще одно средство для повышения доверия к нашей почте со стороны других серверов —&nbsp;<strong>spf</strong>. Расскажу опять своими словами для чего это нужно. Spf запись добавляется в виде txt записи в dns вашего домена. С помощью этой записи вы указываете, какие ip адреса имеют право отправлять почту от вашего имени. Если кто-то из спамеров будет использовать ваше имя домена при рассылке спама, он не пройдет проверку по spf и скорее всего будет идентифицирован как спам.</p>



<p>Можно указать конкретные ip адреса в записи, а можно сказать, чтобы ip адреса проверялись по спискам A и MX записей. У нас простой случай и только 1 сервер с одним ip, поэтому укажем конкретно этот ip адрес. Идем в панель управления dns и добавляем новую txt запись.</p>



<pre class="wp-block-preformatted">zeroxzed.ru. TXT v=spf1 ip4:188.35.19.125 ~all</pre>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-22.png" alt="Добавление spf записи в dns" class="wp-image-5049"/></figure></div>



<p>Больше ничего делать не надо. Снова отправляем письмо на gmail и смотрим логи.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-23.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2017/03/centos-postfix-mail-server-23.png" alt="Проверка spf записи" class="wp-image-5050"/></a></figure></div>



<p>Обращаю внимание на прошлый скрин, когда мы проверяли dkim и еще не настроили spf, и этот. Видно, что запись работает, гугл определил наш ip, как доверенный для отправки писем с этого домена.</p>


</br>



<h2 class="wp-block-heading">Дополнительный функционал почтового сервера postfix</h2>



<p>Я рассмотрел и настроил наиболее актуальный с моей точки зрения функционал почтового сервера. В статье я основывался исключительно на своем опыте работы с почтой в малых и средних организациях, поэтому не претендую на истину в последней инстанции. Рекомендую осмысленно подходить к настройке своего сервера и решать, что нужно именно вам.&nbsp;Будет хорошо, если кто-то укажет на мои ошибки или подскажет какие-то более удобные и эффективные приемы для решения затронутых задач.</p>



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



<ol><li>Защиту от подбора паролей с помощью fail2ban.</li><li>Мониторинг почтового сервера postfix с помощью zabbix.</li><li>Сбор статистики с помощью pflogsumm или чего-то подобного.</li><li>Просмотр и анализ логов с помощью&nbsp;webmin.</li><li>Использование бесплатных сертификатов let’s encrypt.</li><li>Регулярную очистку служебных почтовых ящиков.</li><li>Бэкап всей почтовой базы.</li></ol>



<p>Расскажу еще почему я не настраиваю некоторые популярные программы, которые использую на почтовых серверах:</p>



<ol><li>lamav — известный антивирус. Считаю, что сейчас он не актуален, так как вирусов, от которых он способен защитить, я уже давно не видел. Сейчас вирусная эпидемия шифровальщиков. От них он не защищает.</li><li>Spamassasin — популярный бесплатный антиспам фильтр. Скажу честно, работал с ним очень мало и могу быть не объективен. Насколько я видел его настройку и работу — он требует к себе некоторого внимания, калибровки, особенно на начальном этапе. Мне обычно не хочется этим заниматься.</li><li>Graylist — эффективное средство борьбы со спамом. Я уже подробно его рассматривал, когда писал про&nbsp;<a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%bf%d0%be%d1%87%d1%82%d0%be%d0%b2%d0%be%d0%b3%d0%be-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-iredmail-%d0%bd%d0%b0-centos-7/" target="_blank" aria-label="undefined (откроется в новой вкладке)" rel="noreferrer noopener">iredmail</a>, так что не буду повторяться. Скажу лишь, что режет спам очень эффективно и бесплатно, но есть существенные неудобства, которые по моему мнению не перекрывают плюсы. Поэтому я не использую.</li></ol>



<p>В качестве антиспама я предпочитаю коммерческое решение — Kaspersky Anti-Spam. Я знаю этот продукт уже лет 8. Он действительно отлично фильтрует спам. Ложных срабатываний вообще не припоминаю, 95% спама фильтрует, может больше. С ним вопрос спама отпадает вообще. Стоит он недорого, можно купить лицензию на меньшее количество ящиков, чем реально используется в системе. Этот вопрос никак не отслеживается и на качество работы не влияет. Но нужно понимать, что это уже нарушение лицензионного соглашения. Но можно всякие хитрости придумать, чтобы и фильтровать и не нарушать.</p>



<h2 class="wp-block-heading">Борьба со спамом средствами postfix</h2>



<p>Сначала хотел сразу все настройки postfix разместить в соответствующем разделе в едином конфиге, но потом передумал и решил все же вынести этот вопрос на отдельное рассмотрение. Возможно, не каждому захочется сразу в эту тему углубляться. Все, что рассказано выше, позволит настроить полноценный почтовый сервер, который будет успешно принимать почту и доставлять ее пользователям. Но в таком виде он будет принимать слишком много спама, но зато не будет проблем с тем, что от кого-то что-то не придет. Как ни крути, но все средства борьбы со спамом так или иначе несут накладные расходы в виде ложных срабатываний с той или иной вероятностью. Если вы решите не заморачиваться и купить&nbsp;Kaspersky Anti-Spam, можете этот раздел не читать. Он сам реализует все те проверки, что мы будем делать. Если же хотите своими силами бороться со спамом средствами postfix, то давайте дальше разбираться.</p>



<p>Я буду использовать штатные возможности postfix, позволяющие отсеять спам по тем или иным параметрам еще до получения письма. Это очень эффективный способ с точки зрения производительности. Благодаря этому, правильно настроенный на отсев спама postfix часто ставят перед exchange, чтобы снизить на него нагрузку. Сразу дам ссылки на официальную документацию с описанием параметров, которые я буду использовать:</p>



<ol><li><a href="http://www.postfix.org/postconf.5.html#smtpd_helo_restrictions" target="_blank" rel="noreferrer noopener">smtpd_helo_restrictions</a></li><li><a href="http://www.postfix.org/postconf.5.html#smtpd_sender_restrictions" target="_blank" rel="noreferrer noopener">smtpd_sender_restrictions</a></li><li><a href="http://www.postfix.org/postconf.5.html#smtpd_recipient_restrictions" target="_blank" rel="noreferrer noopener">smtpd_recipient_restrictions</a></li><li><a href="http://www.postfix.org/postconf.5.html#smtpd_data_restrictions" target="_blank" rel="noreferrer noopener">smtpd_data_restrictions</a></li><li><a href="http://www.postfix.org/postconf.5.html#smtpd_client_restrictions" target="_blank" rel="noreferrer noopener">smtpd_client_restrictions</a></li></ol>



<p>Есть еще парочка —&nbsp;smtpd_etrn_restrictions и smtpd_end_of_data_restrictions, но я ими не пользуюсь.Обращаю внимание на то, что нужно очень аккуратно работать с настройками, о которых пойдет речь. Нужно четко понимать как, зачем и что вы делаете. Неверные настройки могут нарушить нормальное хождение почты. Нужно уметь анализировать лог файл почтового сервера и понимать, что там происходит.</p>



<p>Долго думал, как лучше всего представить информацию по этому разделу. В итоге решил просто написать часть конфига, которая отвечает за&nbsp;restrictions с комментариями. Более подробную информацию по каждой настройке вы можете найти в официальной документации postfix, ссылки я привел выше, либо в гугле. Данные настройки это моя многолетняя калькуляция различных параметров, собранных из черновиков и рабочих серверов. Не везде все было настроено именно в таком виде, так как ситуации бывают разные. Сейчас я постарался все собрать в одном месте и аккуратно описать. Те проверки в борьбе со спамом, что вам не нужны, просто закомментируйте. В конце я еще пройдусь по некоторым из них и поделюсь своим опытом.</p>



<pre class="wp-block-preformatted">#Описание списков исключений
smtpd_restriction_classes = white_client_ip,
                            black_client_ip,
                            block_dsl,
                            white_client,
                            white_helo,
                            black_client,
                            mx_access

# IP адреса, которые нужно пропускать всегда
white_client_ip		= check_client_access hash:/etc/postfix/lists/white_client_ip

# IP адреса, которые нужно блокировать всегда
black_client_ip		= check_client_access hash:/etc/postfix/lists/black_client_ip

# E-mail, которые нужно пропускать всегда
white_client		= check_sender_access hash:/etc/postfix/lists/white_client

# E-mail, которые нужно блокировать всегда
black_client		= check_sender_access hash:/etc/postfix/lists/black_client

# Неправильные значения HELO, которые мы тем не менее принимаем
white_helo = check_sender_access hash:/etc/postfix/lists/white_helo
# Правила для блокировки различных динамических ip.
block_dsl 		= check_client_access regexp:/etc/postfix/lists/block_dsl

# Список приватных сетей, которые не могут быть использованы в качестве IP для MX записей
mx_access		= check_sender_mx_access cidr:/etc/postfix/lists/mx_access

# Проверки на основе данных, переданных в HELO/EHLO hostname
smtpd_helo_restrictions =	permit_mynetworks,
		permit_sasl_authenticated,
		white_client_ip,
                white_helo,
		black_client_ip,
		block_dsl,
		# Отказываем серверам, у которых в HELO несуществующий или не FQDN адрес 
		reject_invalid_helo_hostname,
		reject_non_fqdn_helo_hostname,
		# Запрещаем приём писем от серверов, представляющихся адресом, для которого не существует A или MX записи.
		reject_unknown_helo_hostname

# Проверки клиентского компьютера или другого почтового сервера, который соединяется с сервером postfix для отправки письма
smtpd_client_restrictions = 	permit_mynetworks,
		permit_sasl_authenticated,
		# Отвергает запрос, когда клиент отправляет команды SMTP раньше времени, еще не зная, поддерживает ли Postfix конвейерную обработку команд ESMTP
		reject_unauth_pipelining,
		# Блокируем клиентов с адресами from, домены которых не имеют A/MX записей
		reject_unknown_address,
		reject_unknown_client_hostname

# Проверки исходящей или пересылаемой через нас почты на основе данных MAIL FROM
smtpd_sender_restrictions =	permit_mynetworks,
		permit_sasl_authenticated,
		white_client,
		black_client,
		# Запрет отправки писем, когда адрес MAIL FROM не совпадает с логином пользователя
		reject_authenticated_sender_login_mismatch,
		# Отклоняем письма от несуществующих доменов
		reject_unknown_sender_domain,
		# Отклоняем письма от доменов в не FQDN формате
		reject_non_fqdn_sender,
		# Отклонение писем с несуществующим адресом отправителя
		reject_unlisted_sender,
		reject_unauth_destination,
		# Отклонять сообщения от отправителей, ящики которых не существуют, использовать аккуратно
		#reject_unverified_sender,
		mx_access

# Правила приема почты нашим сервером на основе данных RCPT TO
smtpd_recipient_restrictions =  permit_mynetworks,
		permit_sasl_authenticated,
		# Отклоняет всю почту, что адресована не для наших доменов
		reject_unauth_destination,
		# Отклонение писем с несуществующим адресом получателя
		reject_unlisted_recipient,
		# Отклоняет сообщения на несуществующие домены
		reject_unknown_recipient_domain,
		# Отклоняет сообщения если получатель не в формате FQDN
		reject_non_fqdn_recipient,
		# Отклоняем прием от отправителя с пустым адресом письма, предназначенным нескольким получателям.
		reject_multi_recipient_bounce
</pre>



<p>У меня во всех ограничениях первыми правилами стоят разрешения для mynetworks и авторизовавшихся пользователей. Важно понимать, что это значит и для чего сделано. Ограничения читаются последовательно в порядке их перечисления. Таким образом, мы своих пользователей пускаем мимо ограничений, а для всех остальных выполняются проверки.</p>



<p>Теперь важные комментарии по указанным параметрам. Если бы все почтовые сервера всех системных администраторов были настроены по правилам, то эти комментарии не были бы нужны. Пройдемся по некоторым ограничениям, которые нужно включать осторожно:</p>



<ul><li>reject_invalid_helo_hostname и&nbsp;reject_unknown_helo_hostname — под эти правила иногда попадают почтовые серверы клиентов, которые не очень хорошо настроены. У них бывают неправильные адреса, кривые записи dns, отсутствие обратных зон и т.д. Их не много, но попадаются. Это не страшно, если вы регулярно следите за сервером. Отправитель получит сразу сообщение о том, что его письмо не дошло до вас. Если он как-то сообщит вам о проблеме, вы легко добавите его в белый список и все будет нормально. Если вам не хочется следить за сервером, лучше не указывайте эти ограничения. Но спам они отсекают не плохо. Сюда попадают все завирусованные компьютеры и сервера без нормальных настроек dns (а их чаще всего и нет).</li><li>reject_unverified_sender — специально его закомментировал. Я тестировал этот параметр. В принципе, работает нормально, но есть, как обычно, нюансы. Поясню, что делает этот параметр. Когда вам кто-то шлет письмо, ваш сервер обращается к серверу отправителю и спрашивает его стандатрной командой, есть ли на сервере такой отправитель. Если удаленный сервер отвечает, что есть, то никаких проблем — письмо принимается. Если удаленный сервер не отвечает или говорит, что такого адресата нет — письмо отклоняем. Очевидно, что такие проверки создают дополнительную постоянную нагрузку. Это нужно учитывать. К тому же, у вас почтовый лог постоянно будет забит этими проверками, особенно, если вам приходит много спама. На каждое спамовое письмо будет идти проверка, а сервера отправителя скорее всего либо нет, либо он неправильный, либо не отвечает и т.д. Все это будет постоянно проверяться и фиксироваться. В общем, я не использую.</li></ul>


</br>



<p>На время отладки ограничений, рекомендую пользоваться параметром:</p>



<pre class="wp-block-preformatted">soft_bounce = yes</pre>



<p>Когда он включен, все ответы сервера с кодами ошибок 5XX, заменяются на 4ХХ. То есть постоянная ошибка, которая сразу отклоняет письмо, заменяется на временную, которая предлагает повторить отправку позже. Таким образом, вы увидите работу всех ограничений, но письма не будут отклонены навсегда. Сервер отправителя через некоторое время снова придет к вам с новой попыткой доставки почты. Письмо безвозвратно не отклоняется. Вы можете проанализировать работу фильтра и решить, ставить его на постоянную работу или с ним что-то не так.</p>



<p>Создадим теперь файлы с белыми и черными списками.</p>



<pre class="wp-block-preformatted">cd /etc/postfix/lists &amp;&amp; touch white_client_ip black_client_ip white_client black_client white_helo block_dsl mx_access</pre>



<p>Ниже пример содержания этих файлов. Вы можете менять по своему усмотрению.</p>



<pre class="wp-block-preformatted"># cat white_client_ip
195.28.34.162 OK
141.197.4.160 OK</pre>



<pre class="wp-block-preformatted"># cat&nbsp;black_client_ip
205.201.130.163 REJECT You IP are blacklisted!
198.2.129.162 REJECT&nbsp;You IP are blacklisted!</pre>



<pre class="wp-block-preformatted"># cat&nbsp;white_client
# Принимать всю почту с домена яндекс
yandex.ru OK
# Разрешить конкретный ящик
spammer@mail.ru OK</pre>



<pre class="wp-block-preformatted"># cat black_client
# Блокировать всю почту с домена mail.ru
mail.ru&nbsp;REJECT You domain&nbsp;are blacklisted!
# Блокировать конкретный ящик
spam@rambler.ru&nbsp;REJECT You e-mail&nbsp;are blacklisted!</pre>



<pre class="wp-block-preformatted"># cat white_helo
# Могут попадаться вот такие адреса, которые не пройдут наши проверки
ka-s-ex01.itk.local &nbsp; &nbsp; OK
exchange.elcom.local &nbsp; &nbsp;OK</pre>



<pre class="wp-block-preformatted"># cat&nbsp;block_dsl
/^dsl.*\..*\..*/i                               553 AUTO_DSL spam
/dsl.*\..*\..*/i                                553 AUTO_DSL1 spam
/[ax]dsl.*\..*\..*/i                            553 AUTO_XDSL spam
/client.*\..*\..*/i                             553 AUTO_CLIENT spam
/cable.*\..*\..*/i                              553 AUTO_CABLE spam
/pool.*\..*\..*/i                               553 AUTO_POOL spam
/dial.*\..*\..*/i                               553 AUTO_DIAL spam
/ppp.*\..*\..*/i                                553 AUTO_PPP spam
/dslam.*\..*\..*/i                              553 AUTO_DSLAM spam
/node.*\..*\..*/i                               553 AUTO_NODE spam
/([0-9]*-){3}[0-9]*(\..*){2,}/i                 553 SPAM_ip-add-rr-ess_networks
/([0-9]*\.){4}(.*\.){3,}.*/i                    553 SPAM_ip-add-rr-ess_networks
/.*\.pppool\..*/i                               553 SPAM_POOL
/[0-9]*-[0-9]*-[0-9]*-[0-9]*-tami\.tami\.pl/i   553 SPAM_POOL
/pool-[0-9]*-[0-9]*-[0-9]*-[0-9]*\..*/i         553 SPAM_POOL
/.*-[0-9]*-[0-9]*-[0-9]*-[0-9]*\.gtel.net.mx/i  553 SPAM_POOL
/dhcp.*\..*\..*/i                               553 SPAM_DHCP
</pre>



<pre class="wp-block-preformatted"># cat&nbsp;mx_access
127.0.0.1      DUNNO 
127.0.0.2      550 Domains not registered properly
0.0.0.0/8      REJECT Domain MX in broadcast network 
10.0.0.0/8     REJECT Domain MX in RFC 1918 private network 
127.0.0.0/8    REJECT Domain MX in loopback network 
169.254.0.0/16 REJECT Domain MX in link local network 
172.16.0.0/12  REJECT Domain MX in RFC 1918 private network 
192.0.2.0/24   REJECT Domain MX in TEST-NET network 
192.168.0.0/16 REJECT Domain MX in RFC 1918 private network 
224.0.0.0/4    REJECT Domain MX in class D multicast network 
240.0.0.0/5    REJECT Domain MX in class E reserved network 
248.0.0.0/5    REJECT Domain MX in reserved network</pre>



<p>По сути файлы белых и черных списков не отличаются друг от друга. Можно использовать только один файл и в нем в каждой отдельной строке указывать либо запрет, либо разрешение. Я разделил просто для удобства восприятия и редактирования. Возможно вам будет удобнее с одним файлом.</p>



<p>После редактирования файлов обязательно выполняем команду на перестроение базы данных. Я перестрою сразу все файлы:</p>



<pre class="wp-block-preformatted">cd /etc/postfix/lists &amp;&amp; postmap white_client_ip black_client_ip white_client black_client white_helo&nbsp;block_dsl mx_access</pre>



<p>Еще упомяну о таком популярном явлении в спамерских письмах, как подделка адреса отправителя. Причем не просто подделка на абы кого, а именно на ваше имя домена. Пользователь получает спам письмо и в почтовом клиенте видит, что оно отправлено с вашего домена. Только по заголовкам можно определить реального отправителя. Такой подход позволяет обходить некоторые антиспам системы, которые не фильтруют письма внутреннего домена. Бороться с подменой адреса отправителя в нашем случае очень просто. Для этого в black_client добавим следующую запись:</p>



<pre class="wp-block-preformatted">zeroxzed.ru 554 Stop spam from my name</pre>



<p>Отправка с нашего домена осуществляется только с SASL авторизацией, а она во всех ограничениях стоит первой, поэтому письма реальных пользователей без проблем будут уходить. А всех тех, кто только притворяется нашим доменом, мы будет отфильтровывать этим правилом.</p>



<p>Приведу в завершении описания методов борьбы со спамом простой пример. Добавим в black_client почтовый адрес и отправим с него письмо.</p>



<pre class="wp-block-preformatted"># cat black_client
zeroxzed@gmail.com REJECT Your e-mail was banned!</pre>



<pre class="wp-block-preformatted"># postmap black_client</pre>



<p>Отправляем сообщение и проверяем почтовый лог.</p>



<pre class="wp-block-preformatted"># cat /var/log/maillog</pre>



<pre class="wp-block-preformatted">Mar 20 02:21:34 mail postfix/smtpd[10816]: connect from mail-yw0-f177.google.com[209.85.161.177]
Mar 20 02:21:35 mail postfix/smtpd[10816]: Anonymous TLS connection established from mail-yw0-f177.google.com[209.85.161.177]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Mar 20 02:21:35 mail postfix/smtpd[10816]: NOQUEUE: reject: RCPT from mail-yw0-f177.google.com[209.85.161.177]: 554 5.7.1 &lt;zeroxzed@gmail.com&gt;: <strong>Sender address rejected: Your e-mail was banned!</strong>; from=&lt;zeroxzed@gmail.com&gt; to=&lt;root@zeroxzed.ru&gt; proto=ESMTP helo=
Mar 20 02:21:35 mail postfix/smtpd[10816]: disconnect from mail-yw0-f177.google.com[209.85.161.177]</pre>



<p>Вот и результат. На этом по борьбе со спамом все.</p>


</br>



<h2 class="wp-block-heading">Заключение</h2>



<p>Проверить настроенный почтовый сервер можно с помощью онлайн сервиса&nbsp;<a href="https://www.mail-tester.com/" target="_blank" rel="noreferrer noopener">https://www.mail-tester.com</a>. Не факт, что получите максимальный бал, но все недочеты будут указаны. Критичное нужно исправить (например, если обратная зона неправильная), некритичное можно пропустить (если dkim, к примеру, не настраивали).</p>



<p>Кажется все написал, что знал по поводу почтового сервера на linux в небольших и средних организациях. У некоторых может возникнуть вопрос, а зачем свой почтовый сервер? Почему бы не воспользоваться средствами корпоративной почты, которую представляют популярные почтовые сервисы бесплатно? Я планирую написать по этому поводу отдельную заметку. У меня тоже есть определенный опыт на этот счет. И если некоторое время назад я считал, что свои почтовые серверы в небольших организациях уже не актуальны, то сейчас я так не думаю, поэтому и появилась эта статья.</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-postfix-dovecot-mysql-%d0%b1%d0%b0%d0%b7%d0%b0-postfixadmin-roundcube-dkim-%d0%bd%d0%b0-centos-7/">Настройка postfix + dovecot + mysql база + postfixadmin + roundcube + dkim на CentOS 7</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-postfix-dovecot-mysql-%d0%b1%d0%b0%d0%b7%d0%b0-postfixadmin-roundcube-dkim-%d0%bd%d0%b0-centos-7/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>CentOS 7 и 8 настройка сервера после установки</title>
		<link>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/centos-7-%d0%b8-8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-%d0%bf%d0%be%d1%81%d0%bb%d0%b5-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba/</link>
					<comments>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/centos-7-%d0%b8-8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-%d0%bf%d0%be%d1%81%d0%bb%d0%b5-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sat, 18 Jul 2020 21:42:38 +0000</pubDate>
				<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1195</guid>

					<description><![CDATA[<p>Сегодня я познакомлю вас со своим видением начальной конфигурации универсального сервера на популярной ОС. Я расскажу о том, как сделать</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/centos-7-%d0%b8-8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-%d0%bf%d0%be%d1%81%d0%bb%d0%b5-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba/">CentOS 7 и 8 настройка сервера после установки</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Сегодня я познакомлю вас со своим видением начальной конфигурации универсального сервера на популярной ОС. Я расскажу о том, как сделать базовую настройку сервера centos сразу после установки для использования его в любом качестве на ваше усмотрение. Приведенные практические советы повышают безопасность и удобство работы с сервером. Статья будет актуальна для двух последних релизов Centos — 7 и 8.</p>


</br>



<h2 class="wp-block-heading">Введение</h2>



<p>Для настройки практически любого сервера требуется выполнить ряд стандартных шагов, которые мало чем отличаются в различных ситуациях. Какой бы функционал вы не готовили, вам придется настроить правильное время и включить его автообновление. Без установки сетевых настроек я вообще не представляю работу современного сервера. В голову не приходит ни один пример. Один и тот же набор настроек практически на автомате выполняется после установки. Своими наработками по этой теме я хочу поделиться с вами — то, что я в первую очередь настраиваю на новоиспеченном сервере centos после установки.</p>



<p>После выхода нового релиза Centos 8, стало тяжело в единой статье описывать начальную настройку обоих серверов, но мне не захотелось разделять статью, так как на нее идет много входящих ссылок из разных мест. Удобнее поддерживать общий материал по обоим релизам, чем я и займусь. Заодно наглядно будут видны отличия двух версий, которые пару лет после выхода centos 8 будут актуальны обе и использовать придется и ту, и другую версию, в зависимости от ситуации.</p>



<p>В Centos 7 используется пакетный менеджер&nbsp;<strong>yum</strong>, а в Centos 8 —&nbsp;<strong>dnf</strong>. При этом оставили символьную ссылку с yum на dnf, так что можно писать как первое название, так и второе. Для единообразия я везде буду использовать yum, а вас предупреждаю, просто чтобы вы понимали, почему я делаю именно так. Реально в CentOS 8 используется dnf, это другой, более современный пакетный менеджер, которые позволяет работать с разными версиями одного и того же софта. Для этого используются отдельные репозитории, которые появились для centos 8.</p>



<h2 class="wp-block-heading">Начальная настройка CentOS</h2>



<p>Лично я любую настройку системы, будь то centos или другая, после установки начинаю с того, что полностью обновляю систему. Если установочный образ был свежий, либо установка велась по сети, то скорее всего обновлений никаких не будет. Чаще всего они есть, так как установочные образы не всегда регулярно обновляются.</p>



<p>Обновляем систему</p>



<pre class="wp-block-preformatted"># yum update</pre>



<p>Для удобства администрирования, я всегда устанавливаю Midnight Commander, или просто mc:</p>



<pre class="wp-block-preformatted"># yum install mc</pre>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2019/10/centos-configure-02.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2019/10/centos-configure-02.png" alt="Начальная настройка Centos - установка MC" class="wp-image-9953"/></a></figure>



<p>И сразу же для него включаю подсветку синтаксиса всех файлов, которые не обозначены явно в файле&nbsp;<em>/usr/share/mc/syntax/Syntax</em>&nbsp;синтаксисом для sh и bash скриптов. Этот универсальный синтаксис нормально подходит для конфигурационных файлов, с которыми чаще всего приходится работать на сервере. Перезаписываем файл&nbsp;<em>unknown.syntax</em>. Именно этот шаблон будет применяться к .conf и .cf файлам, так как к ним явно не привязано никакого синтаксиса.</p>



<pre class="wp-block-preformatted"># cp /usr/share/mc/syntax/sh.syntax /usr/share/mc/syntax/unknown.syntax</pre>


</br>



<p>Дальше нам пригодятся сетевые утилиты. В зависимости от набора начальных пакетов, которые вы выбираете при установке системы, у вас будет тот или иной набор сетевых утилит. Вот список тех, к которым привык лично я —&nbsp;ifconfig, netstat, nslookup&nbsp;и некоторые другие. Если она вам нужны, так же как и мне, то предлагаю их установить отдельно, если они еще не стоят. Если вам они особо не нужны и вы ими не пользуетесь, то можете пропустить их установку. Проверим, что у нас имеется в системе на текущий момент</p>



<pre class="wp-block-preformatted"># ifconfig</pre>



<p>Если увидите ответ:</p>



<pre class="wp-block-preformatted">-bash: ifconfig: command not found</pre>



<p>Значит утилита не установлена. Вместо ifconfig в CentOS теперь утилита&nbsp;<strong>ip</strong>. Это относится не только к центос. Такая картина почти во всех популярных современных дистрибутивах Linux. Я с давних времен привык к ifconfig, хотя последнее время практически не пользуюсь. Мне всегда нравилось, что в различных дистрибутивах линукс все примерно одинаковое. С помощью ifconfig можно настроить сеть не только в linux, но и в freebsd. Это удобно. А когда в каждом дистрибутиве свой инструмент это не удобно. Хотя сейчас это уже не очень актуально, так как с Freebsd больше не работаю, а утилита ip есть во всех дистрибутивах linux. Тем не менее, если вам нужен ifconfig, то можете установить пакет&nbsp;<strong>net-tools</strong>, в который она входит:</p>



<pre class="wp-block-preformatted"># yum install net-tools</pre>



<p>Чтобы у нас работали команды nslookup или, к примеру, host необходимо установить пакет&nbsp;<strong>bind-utils</strong>. Если этого не сделать, то на команду:</p>



<pre class="wp-block-preformatted"># nslookup</pre>



<p>Будет вывод:</p>



<pre class="wp-block-preformatted">-bash: nslookup: command not found</pre>



<p>Так что&nbsp;устанавливаем&nbsp;bind-utils:</p>



<pre class="wp-block-preformatted">#&nbsp;yum install bind-utils</pre>



<h2 class="wp-block-heading">Отключить SELinux</h2>



<p>Отключаем SELinux. Его использование и настройка отдельный разговор. Сейчас я не буду этим заниматься. Так что отключаем:</p>



<pre class="wp-block-preformatted"># mcedit /etc/sysconfig/selinux</pre>



<p>меняем значение</p>



<pre class="wp-block-preformatted">SELINUX=disabled</pre>



<p>Чтобы изменения вступили в силу, можно перезагрузиться:</p>



<pre class="wp-block-preformatted"># reboot</pre>



<p>А если хотите без перезагрузки применить отключение SELinux, то выполните команду:</p>



<pre class="wp-block-preformatted"># setenforce 0</pre>



<p>Постоянно получаю очень много критики на тему отключения SELinux. Я знаю, как он работает, умею его настраивать. Это реально не очень сложно и освоить не трудно. Это мой осознанный выбор, хотя иногда я его настраиваю. Мой формат работы с системой таков, что SELinux мне чаще всего не нужен, поэтому я не трачу на него время и в базовой настройке centos отключаю. Безопасность системы — комплексная работа, особенно в современном мире web разработки, где правят бал микросервисы и контейнеры. SELinux нишевый инструмент, которые нужен не всегда и не везде. Поэтому в данном статье ему не место. Кому нужно, будет отдельно включать SELinux и настраивать.</p>


</br>



<h2 class="wp-block-heading">Указываем сетевые параметры</h2>



<p>Продолжаем базовую настройку centos после установки. Теперь произведем&nbsp;настройку сети, если по какой-то причине не сделали это во время установки, либо если вам надо их изменить. В общем случае, сеть в Centos настраивается с помощью&nbsp;<strong>NetworkManager</strong>&nbsp;и его консольной утилиты&nbsp;<strong>nmtui</strong>. Она идет в базовой устновке системы. Там простой и понятный графический интерфейс, так что рассказывать нечего. Я больше привык настраивать сеть через конфигурационные файлы network-scripts. В centos 7-й версии они есть из коробки, в 8-й версии их убрали. Чтобы воспользоваться ими для настройки сети, надо отдельно установить пакет&nbsp;<strong>network-scripts</strong>.</p>



<pre class="wp-block-preformatted"># yum install network-scripts</pre>



<p>Теперь можно выполнить настройку сети. Для этого открываем файл&nbsp;<em>/etc/sysconfig/network-scripts/ifcfg-eth0</em></p>



<pre class="wp-block-preformatted"># mcedit /etc/sysconfig/network-scripts/ifcfg-eth0</pre>



<p>Если вы получаете сетевые настройки по dhcp, то минимальный набор настроек в конфигурационном файле будет такой.</p>



<figure class="wp-block-image is-resized"><img loading="lazy" decoding="async" src="https://serveradmin.ru/wp-content/uploads/2019/10/centos-configure-03.png" alt="Настройка сети" class="wp-image-9954" width="502" height="260"/></figure>



<pre class="wp-block-preformatted">TYPE="Ethernet"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
</pre>



<p>Для настройки статического ip адреса настройки будут следующие.</p>



<pre class="wp-block-preformatted">TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR=192.168.167.117
DNS1=192.168.167.113
PREFIX=28
GATEWAY=192.168.167.113
</pre>



<p>В поле IPADDR вводим свой адрес, в PREFIX маску сети, в GATEWAY шлюз, DNS адрес днс сервера. Сохраняем файл и перезапускаем сеть для применения настроек:</p>



<pre class="wp-block-preformatted"># systemctl restart network</pre>


</br>



<h2 class="wp-block-heading">Настраиваем firewall</h2>



<p>Очень подробно вопрос&nbsp;<a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-iptables-%d0%b2-centos-7/" target="_blank" aria-label="undefined (откроется в новой вкладке)" rel="noreferrer noopener">настройки iptables в CentOS</a>&nbsp;я рассмотрел отдельно. Сейчас мы быстро и просто настроим firewall. В CentOS 7 в качестве базового фаервола выступает&nbsp;<strong>iptables</strong>. По-умолчанию он запущен. Чтобы посмотреть текущие правила, нужно ввести команду:</p>



<pre class="wp-block-preformatted"># iptables -L -v -n</pre>



<p>В Centos 8 вместо iptables используется&nbsp;<strong>nftables</strong>. Сразу скажу, что я с ним еще не разбирался и не знаю, буду ли. Реально, меня полностью устраивают iptables. Я ни разу не сталкивался с тем, что что-то не получалось или было невозможно настроить с их помощью. У меня написана куча конфигов к ним, настроены роли ansible с шаблонами правил. Я не понимаю, зачем мне все это переводить в nftables и какую выгоду я с этого получу. Поэтому пока я продолжаю использовать iptables.</p>



<p>Начиная с 7-й версии CentOS для настройки firewall разработан новый инструмент под названием firewalld и все управление производится через него. Он же используется и в Centos 8, только управляет при этом nftables, но сами правила для firewalld одинаковые в обоих версиях. Я не понял зачем в принципе придумали firewalld и не могу сказать, удобнее с ним стало или нет. По мне, так удобнее использовать одни и те же наработки по iptables. Мигрируя от сервера к серверу и от дистрибутива к дистрибутиву, я просто редактирую скрипт настроек фаервола либо шаблон ansible с правилами.</p>



<p>На тему отключения firewalld я тоже время от времени получаю критику, типа надо изучать новое и не цепляться за старое. Так вот, firewalld я изучил и пользуюсь относительно регулярно. Он долгое время использовался в Bitrixenv, с которым я работаю давно и плотно. Кстати, в последних версиях этого окружения bitrix отказался от firewalld. Удивился, когда это заметил. В связи с этим, firewalld мне приходится знать и использовать. И мне он нравится меньше, чем нативные правила в iptables и мои скрипты для управления ими.</p>



<p>Свое мнение не навязываю и убеждать никого не хочу. Делюсь в статье про настройку centos тем, что использую сам. А вы выбирайте тот инструмент, что вам больше подходит. Я привык управлять iptables через самописный скрипт, который переношу от сервера к серверу и редактирую под конкретные потребности. Этим скриптом я и поделюсь. Так что для начала остановим и отключим firewalld.Сразу хочу предупредить, что не имея доступа к консоли сервера, настраивать firewall плохая идея. Даже если вы очень хорошо понимаете что делаете и проделывали подобное много раз, все равно есть шанс остаться без доступа к серверу. Так что первым делом перед настройкой iptables проверяем доступ к консоли сервера.</p>



<pre class="wp-block-preformatted"># systemctl stop firewalld
# systemctl disable firewalld
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
rm '/etc/systemd/system/basic.target.wants/firewalld.service'</pre>



<p>Установим утилиты для iptables:</p>



<pre class="wp-block-preformatted"># yum install iptables-services</pre>



<p>Включим автозапуск iptables:</p>



<pre class="wp-block-preformatted"># systemctl enable iptables</pre>



<p>Теперь создадим файл /etc/iptables.sh следующего содержания:</p>



<pre class="wp-block-preformatted">#!/bin/bash
#
# Объявление переменных
export IPT="iptables"

# Интерфейс который смотрит в интернет
export WAN=eth0
export WAN_IP=147.15.218.72

# Очистка всех цепочек iptables
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

# Установим политики по умолчанию для трафика, не соответствующего ни одному из правил
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# разрешаем локальный траффик для loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# Разрешаем исходящие соединения самого сервера
$IPT -A OUTPUT -o $WAN -j ACCEPT

# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
# Пропускать все уже инициированные соединения, а также дочерние от них
$IPT -A INPUT -p all -m state – state ESTABLISHED,RELATED -j ACCEPT
# Пропускать новые, а так же уже инициированные и их дочерние соединения
$IPT -A OUTPUT -p all -m state – state ESTABLISHED,RELATED -j ACCEPT
# Разрешить форвардинг для уже инициированных и их дочерних соединений
$IPT -A FORWARD -p all -m state – state ESTABLISHED,RELATED -j ACCEPT

# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$IPT -I FORWARD -p tcp – tcp-flags SYN,RST SYN -j TCPMSS – clamp-mss-to-pmtu

# Отбрасывать все пакеты, которые не могут быть идентифицированы
# и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state – state INVALID -j DROP
$IPT -A FORWARD -m state – state INVALID -j DROP

# Приводит к связыванию системных ресурсов, так что реальный
# обмен данными становится не возможным, обрубаем
$IPT -A INPUT -p tcp ! – syn -m state – state NEW -j DROP
$IPT -A OUTPUT -p tcp ! – syn -m state – state NEW -j DROP

# Рзрешаем пинги
$IPT -A INPUT -p icmp – icmp-type echo-reply -j ACCEPT
$IPT -A INPUT -p icmp – icmp-type destination-unreachable -j ACCEPT
$IPT -A INPUT -p icmp – icmp-type time-exceeded -j ACCEPT
$IPT -A INPUT -p icmp – icmp-type echo-request -j ACCEPT

# Открываем порт для ssh
$IPT -A INPUT -i $WAN -p tcp – dport 22 -j ACCEPT
# Открываем порт для http
$IPT -A INPUT -i $WAN -p tcp – dport 80 -j ACCEPT
# Открываем порт для https
$IPT -A INPUT -i $WAN -p tcp – dport 443 -j ACCEPT

# Логирование
# Все что не разрешено, но ломится отправим в цепочку undef

$IPT -N undef_in
$IPT -N undef_out
$IPT -N undef_fw
$IPT -A INPUT -j undef_in
$IPT -A OUTPUT -j undef_out
$IPT -A FORWARD -j undef_fw

# Логируем все из undef

$IPT -A undef_in -j LOG – log-level info – log-prefix " – IN – DROP "
$IPT -A undef_in -j DROP
$IPT -A undef_out -j LOG – log-level info – log-prefix " – OUT – DROP "
$IPT -A undef_out -j DROP
$IPT -A undef_fw -j LOG – log-level info – log-prefix " – FW – DROP "
$IPT -A undef_fw -j DROP

# Записываем правила
/sbin/iptables-save  &gt; /etc/sysconfig/iptables</pre>



<p>В принципе, добавить нечего, в файле даны все комментарии. В таком виде, логи всего заблокированного будут писаться в файл&nbsp;<em>/var/log/messages</em>&nbsp;и записей там будет очень много. Так что в обычной работе эти строки нужно закомментировать, и использовать только во время отладки. Более подробное описание правил и примеры настроек firewall смотрите в отдельной статье, ссылку на которую я уже приводил в самом начале раздела.</p>



<p>Делаем файл c&nbsp;правилами исполняемым и запускаем:</p>



<pre class="wp-block-preformatted"># chmod 0740 /etc/iptables.sh
# /etc/iptables.sh</pre>



<p>Проверяем, применились ли правила:</p>



<pre class="wp-block-preformatted"># iptables -L -v -n</pre>



<p>При каждом запуске файла с правилами iptables, все изменения записываются в файл&nbsp;<em>/etc/sysconfig/iptables</em>&nbsp;и применяются при загрузке системы.</p>


</br>



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



<p>Продолжаем настраивать centos. Внесем некоторые изменения в работу ssh для небольшого увеличения безопасности. Хотя речь стоит вести больше не о безопасности, а об удобстве и эффективности. По-умолчанию, сервис ssh работает на 22 порту и если все оставить как есть, то мы получим огромное количество попыток авторизоваться. Боты сканят непрерывно интернет и подбирают пароли к ssh. Это не доставляет в реальности каких-то серьезных хлопот и тем не менее, подобные запросы забивают лог secure и трятят некоторые ресурсы сервера как миниум на установку соединения и рукопожатия (handshake).</p>



<p>Чтобы немного закрыть себя от сканов простых ботов, изменим порт, на котором работает ssh. Можно выбрать любой пятизначный номер, это не принципиально. От автоматического сканирования это защитит. Повесим демон ssh на 25333 порт. Для этого редактируем файл&nbsp;<em>/etc/ssh/sshd_config</em>.</p>



<pre class="wp-block-preformatted"># mcedit /etc/ssh/sshd_config</pre>



<p>Раскомментируем строку Port 22 и заменим значение 22 на 25333.</p>



<pre class="wp-block-preformatted">Port 25333</pre>



<p>Так же я обычно разрешаю подключаться по ssh пользователю root. Мне так удобнее. Проблем с этим у меня никогда не возникало. Если вы считаете, что это не безопасно, не трогайте эту настройку. Чтобы разрешить пользователю root подключаться по ssh, раскомментируйте строку</p>



<pre class="wp-block-preformatted">PermitRootLogin yes.</pre>



<p>Сохраняем файл. Теперь обязательно изменяем настройки iptables, добавляем в разрешенные подключения вместо 22 порта 25333. Если этого не сделать, то после перезапуска sshd мы потеряем удаленный доступ к серверу. Итак, открываем&nbsp;/etc/iptables.sh&nbsp;и меняем в строке</p>



<pre class="wp-block-preformatted">$IPT -A INPUT -i $WAN -p tcp – dport 22 -j ACCEPT</pre>



<p>22 на 25333 и исполняем файл. Наше текущее соединение не оборвется, так как оно уже установлено, но заново подключиться по ssh к 22 порту уже не получится.</p>



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



<pre class="wp-block-preformatted"># systemctl restart sshd</pre>



<p>Кстати, если вы не отключили SELinux, то просто так не сможете сменить порт ssh. Получите ошибку при перезапуске.</p>



<pre class="wp-block-preformatted">SELinux is preventing /usr/sbin/sshd from name_bind access on the tcp_socket port 25333.</pre>



<p>Наглядный пример того, как работает защита SELinux. Если у вас кто-то заберется на сервер через какую-то уязвимость и захочет открыть отдельный ssh серввер на каком-то нестандартном порту, у него ничего не получится.</p>



<p>Проверяем какой порт слушает sshd:</p>



<pre class="wp-block-preformatted"># netstat -tulpn | grep sshd
tcp        0      0 0.0.0.0:25333           0.0.0.0:*               LISTEN      1799/sshd
tcp6       0      0 :::25333                :::*                    LISTEN      1799/sshd</pre>



<p>Если вывод такой же как у меня, то все в порядке, теперь к ssh можно подключаться по 25333 порту.</p>



<p>Добавим еще одну небольшую настройку. Иногда, когда возникают проблемы с dns сервером, логин по ssh подвисает на 30-60 секунд. Вы просто ждете после ввода логина, когда появится возможность ввести пароль. Чтобы избежать этого замедления, укажем ssh не использовать dns в своей работе. Для этого в конфиге раскомментируем строку с параметром UseDNS и отключим его. По-умолчанию он включен.</p>



<pre class="wp-block-preformatted">UseDNS no</pre>



<p>Для применения изменений нужно перезапустить ssh службу, как мы уже делали ранее. Настройку службы sshd в centos закончили, двигаемся дальше.</p>


</br>



<h2 class="wp-block-heading">Настраиваем время</h2>



<p>Узнать, какое время настроено на сервере centos можно с помощью команды date:</p>



<pre class="wp-block-preformatted"># date</pre>



<p>Чтобы сменить часовой пояс, можете воспользоваться специальной утилитой, которая входит в состав systemd.</p>



<pre class="wp-block-preformatted"># timedatectl set-timezone Europe/Moscow</pre>



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



<pre class="wp-block-preformatted"># ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime</pre>



<p>Если вы вручную замените символьную ссылку на другую, точно так же поменяете часовой пояс системы.</p>



<p>Теперь проверим статус службы по обновлению времени через интернет. Для этого можно использовать указанную выше команду&nbsp;<strong>timedatectl</strong>&nbsp;без параметров.</p>



<figure class="wp-block-image is-resized"><img loading="lazy" decoding="async" src="https://serveradmin.ru/wp-content/uploads/2019/10/centos-configure-04.png" alt="Настройка времени" class="wp-image-9955" width="803" height="265"/></figure>



<p>В CentOS есть утилита для синхронизации времени&nbsp;<strong>chrony</strong>. В стандартной установке она должна быть установлена в системе, в минимальной ее нет. Если у вас она не стоит, как и у меня, что видно по скриншоту, то устанровим и настроим вручную:</p>



<pre class="wp-block-preformatted"># yum install chrony</pre>



<p>Запускаем chrony и добавляем в автозагрузку:</p>



<pre class="wp-block-preformatted"># systemctl start chronyd
# systemctl enable chronyd</pre>



<p>Проверяем, нормально ли запустился:</p>



<pre class="wp-block-preformatted"># systemctl status chronyd
</pre>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2019/10/centos-configure-05.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2019/10/centos-configure-05.png" alt="Синхронизация времени в Centos" class="wp-image-9956"/></a></figure>



<p>Все в порядке, сервис настроен и работает. После запуска он автоматически синхронизирует время. Теперь наши часы будут автоматически синхронизироваться с сервером времени в интернете.</p>



<h2 class="wp-block-heading">Добавление репозиториев</h2>



<p>При настройке centos частенько нужен софт, которого нет в стандартной репе. Для инсталляции дополнительных пакетов необходимо&nbsp;подключить репозитории в CentOS. Наиболее популярный это EPEL. Раньше был rpmforge, но уже как несколько лет закрыт. Про него все позабыли. Подключаем репозиторий EPEL. С ним все просто, он добавляется из стандартной репы:</p>



<pre class="wp-block-preformatted"># yum install epel-release
</pre>



<p>Так же для CentOS 7 крайне полезен репозиторий REMI, который позволяет установить больее свежие версии php, в отличие от тех, что есть в стандартном репозитории. Напомню, что это версия php 5.4, которая уже никуда не годится и снята с поддержки.</p>



<pre class="wp-block-preformatted"># rpm -Uhv http://rpms.remirepo.net/enterprise/remi-release-7.rpm</pre>



<p>Для Centos 8 remi пока не актуален, но думаю, что это временно. В принципе, мне этих двух репозиториев в centos обычно хватает в общем случае. Другие подключаются уже под конкретные нужды для установки различного софта.</p>



<h2 class="wp-block-heading">Настройка хранения истории в&nbsp;bash_history</h2>



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



<ol><li>По-умолчанию, сохраняются только последние 1000 команд. Если их будет больше, то более старые будут удаляться и заменяться новыми.</li><li>Не указаны даты выполнения команд, только их список в порядке выполнения.</li><li>Файл со списком команд обновляется после завершения сессии. При параллельных сессиях часть команд может быть утеряна.</li><li>Сохраняются абсолютно все команды, хотя в хранении некоторых нет никакого смысла.</li></ol>



<p>Список последних выполненных команд хранится в домашней директории пользователя в файле&nbsp;<em>.bash_history</em>&nbsp;(в начале точка). Его можно открыть любым редактором и посмотреть. Для более удобного вывода списка, можно в консоли ввести команду:</p>



<pre class="wp-block-preformatted"># history</pre>



<p>и увидеть пронумерованный список. Быстро найти конкретную команду, можно с помощью фильтрации только нужных строк, например вот так:</p>



<pre class="wp-block-preformatted">#&nbsp;history | grep yum</pre>



<p>Так мы увидим все варианты запуска команды yum, которые хранятся в истории. Исправим перечисленные недостатки стандартных настроек хранения истории команд в CentOS. Для этого нужно отредактировать файл&nbsp;<em>.bashrc</em>, который находится в том же каталоге, что и файл с историей. Добавляем в него следующие строки:</p>



<pre class="wp-block-preformatted">export HISTSIZE=10000
export HISTTIMEFORMAT="%h %d %H:%M:%S "
PROMPT_COMMAND='history -a'
export HISTIGNORE="ls:ll:history:w:htop"</pre>



<p>Первый параметр увеличивает размер файла до 10000 строк. Можно сделать и больше, хотя обычно хватает такого размера. Второй параметр указывает, что необходимо сохранять дату и время выполнения команды. Третья строка вынуждает сразу же после выполнения команды сохранять ее в историю. В последней строке мы создаем список исключений для тех команд, запись которых в историю не требуется. Я привел пример самого простого списка. Можете дополнить его на свое усмотрение.</p>



<p>Для применения изменений необходимо разлогиниться и подключиться заново или выполнить команду:</p>



<pre class="wp-block-preformatted"># source ~/.bashrc</pre>



<p>По настройке хранения истории команд все. В файле&nbsp;.bashrc&nbsp;можно много чего настроить интересного. Я одно время увлекался и экспериментировал, но потом все забросил, так как не имеет смысла. Работая с серверами заказчиков я чаще всего вижу дефолтный bash, поэтому лучше привыкать и работать именно в нем. А отдельные настройки и украшательства это удел личных компьютеров и серверов. Не рабочих. Так что больше я ничего не настраивать по стандарту в centos сервере в этом плане.</p>


</br>



<h2 class="wp-block-heading">Автоматическое обновление системы</h2>



<p>Для поддержания безопасности сервера на должном уровне необходимо как минимум своевременно его обновлять — как само ядро с системными утилитами, так и остальные пакеты. Можно делать это вручную, но для более эффективной работы лучше настроить автоматическое выполнение. Не обязательно именно устанавливать обновления автоматически, но как минимум проверять их появление. Я обычно придерживаюсь такой стратегии.</p>



<h3 class="wp-block-heading">Yum-cron</h3>



<p>Для автоматической проверки обновлений в Centos 7 нам поможет утилита&nbsp;<strong>yum-cron</strong>. Ставится она традиционно через yum из стандартного репозитория.</p>



<pre class="wp-block-preformatted"># yum install yum-cron</pre>



<p>После установки yum-cron создается автоматическое задание на выполнение утилиты в&nbsp;<em>/etc/cron.daily</em>&nbsp;и&nbsp;<em>/etc/cron.hourly</em>. По-умолчанию, утилита скачивает найденные обновления, но не применяет их. Вместо этого, администратору на локальный почтовый ящик root отправляется уведомление об обновлениях. Дальше вы уже в ручном режиме заходите и решаете, устанавливать обновления или нет в удобное для вас время. Мне такой режим работы видится наиболее удобным, поэтому я не меняю эти настройки.</p>



<p>Настраивать yum-cron можно через, конфигурационные файлы, которые находятся по адресу&nbsp;<em>/etc/yum/yum-cron.conf</em>&nbsp;и&nbsp;<em>yum-cron-hourly.conf</em>. Они неплохо прокомментированы, так что в подробных разъяснениях не нуждаются. Обращаю внимание на раздел&nbsp;<strong>[email]</strong>, где можно указать параметры отправки сообщений. По-умолчанию стоит отправка почты через локальный хост. Можно тут изменить параметры и отправлять сообщения через сторонний почтовый сервер. Но вместо этого лично я предпочитаю глобально для всего сервера настроить пересылку локальной почты root на внешний почтовый ящик через авторизацию на другом smtp сервере.</p>



<h3 class="wp-block-heading">Dnf-automatic</h3>



<p>Как я уже говорил ранее, в Centos 8 используется другой пакетный менеджер — dnf. Настройка обновления пакетов там выполняется через утилиту&nbsp;<strong>dnf-automatic</strong>. Поставим ее и настроим.</p>



<pre class="wp-block-preformatted"># yum install dnf-automatic</pre>



<p>Управлением запуском по расписанию занимается уже не cron, а systemd своим встроенным планировщиком. Посмотреть таймеры автоматического запуска можно командой:</p>



<pre class="wp-block-preformatted"># systemctl list-timers *dnf-*</pre>



<p>Если там нет ни одного задания, то добавить таймер можно вручную:</p>



<pre class="wp-block-preformatted"># systemctl enable – now dnf-automatic.timer</pre>



<p>Дефолтный таймер настроен на запуск dnf-automatic через час после загрузки сервера и ежедневное повторение. Конфиг таймера живет тут —&nbsp;<em>/etc/systemd/system/multi-user.target.wants/dnf-automatic.timer</em>.</p>



<figure class="wp-block-image is-resized"><img loading="lazy" decoding="async" src="https://serveradmin.ru/wp-content/uploads/2019/10/centos-configure-06.png" alt="Таймер автоматического обновления centos" class="wp-image-9957" width="950" height="412"/></figure>



<p>Конфиг для dnf-automatic живет в&nbsp;<em>/etc/dnf/automatic.conf</em>. По-умолчанию он только скачивает обновления, но не применят их. Конфиг хорошо прокомментирован, так что можете его настроить так, как пожелаете. Отдельных пояснений не требуется. Настраивайте обновление пакетов системы на свое усмотрение. Как я уже сказал, автоматически только качаю их. Установку всегда держу под контролем с ручным управлением.</p>


</br>



<h2 class="wp-block-heading">Отключаем флуд сообщений в /var/log/messages</h2>



<p>Продолжая настройку centos, исправим одно небольшое неудобство. В дефолтной установке системы 7-й версии, весь ваш системный лог&nbsp;<em>/var/log/messages</em>&nbsp;через некоторое время работы сервера будет забит следующими записями.</p>



<pre class="wp-block-preformatted">Oct 16 14:01:01 xs-files systemd: Created slice user-0.slice.
Oct 16 14:01:01 xs-files systemd: Starting user-0.slice.
Oct 16 14:01:01 xs-files systemd: Started Session 14440 of user root.
Oct 16 14:01:01 xs-files systemd: Starting Session 14440 of user root.
Oct 16 14:01:01 xs-files systemd: Removed slice user-0.slice.
Oct 16 14:01:01 xs-files systemd: Stopping user-0.slice.
Oct 16 15:01:01 xs-files systemd: Created slice user-0.slice.
Oct 16 15:01:01 xs-files systemd: Starting user-0.slice.
Oct 16 15:01:01 xs-files systemd: Started Session 14441 of user root.
Oct 16 15:01:01 xs-files systemd: Starting Session 14441 of user root.
Oct 16 15:01:01 xs-files systemd: Started Session 14442 of user root.
Oct 16 15:01:01 xs-files systemd: Starting Session 14442 of user root.
Oct 16 15:01:01 xs-files systemd: Removed slice user-0.slice.
Oct 16 15:01:01 xs-files systemd: Stopping user-0.slice.
Oct 16 16:01:01 xs-files systemd: Created slice user-0.slice.
Oct 16 16:01:01 xs-files systemd: Starting user-0.slice.
Oct 16 16:01:01 xs-files systemd: Started Session 14443 of user root.
Oct 16 16:01:01 xs-files systemd: Starting Session 14443 of user root.
Oct 16 16:01:01 xs-files systemd: Removed slice user-0.slice.</pre>



<p>В Centos 8 я их не заметил, поэтому там ничего делать не надо. Никакой практической пользы сообщения не несут, поэтому отключим их. Для этого создадим отдельное правило для rsyslog, где перечислим все шаблоны сообщений, которые будем вырезать. Разместим это правило в отдельном файле&nbsp;<em>/etc/rsyslog.d/ignore-systemd-session-slice.conf</em>.</p>



<pre class="wp-block-preformatted"># cd /etc/rsyslog.d &amp;&amp; mcedit ignore-systemd-session-slice.conf</pre>



<pre class="wp-block-preformatted">if $programname == "systemd" and ($msg contains "Starting Session" or $msg contains "Started Session" or $msg contains "Created slice" or $msg contains "Starting user-" or $msg contains "Starting User Slice of" or $msg contains "Removed session" or $msg contains "Removed slice User Slice of" or $msg contains "Stopping User Slice of") then stop</pre>



<p>Сохраняем файл и перезапускаем rsyslog для применения настроек.</p>



<pre class="wp-block-preformatted">#&nbsp;systemctl restart rsyslog</pre>



<p>Необходимо понимать, что в данном случае мы отключаем флуд в лог файл только на локальном сервере. Если вы храните логи на&nbsp;удаленном syslog сервере, то данное правило нужно будет настраивать именно на нем.</p>



<h2 class="wp-block-heading">Установка iftop, atop, htop, lsof на CentOS</h2>



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



<p>iftop показывает в режиме реального времени загрузку сетевого интерфейса, может запускаться с различными ключами, не буду останавливаться на этом подробно, в интернете есть информация на эту тему. Ставим:</p>



<pre class="wp-block-preformatted"># yum install iftop</pre>



<p>И два интересных диспетчера задач, я чаще всего пользуюсь htop, но иногда пригодится и atop. Ставим оба, сами посмотрите, разберетесь, что вам больше нравится, подходит:</p>



<pre class="wp-block-preformatted"># yum install htop
# yum install atop</pre>



<p>Вот как выглядит htop:</p>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2015/03/htop.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2015/03/htop-1024x564.png" alt="CentOS установка htop" class="wp-image-815" title="Установка диспетчера задач htop на сервер CentOS 7"/></a></figure>



<p>Для&nbsp;вывода информации о том, какие файлы используются теми или иными процессами, советую поставить утилиту&nbsp;<strong>lsof</strong>. Она скорее всего рано или поздно пригодится, когда будете диагностировать работу сервера.</p>



<pre class="wp-block-preformatted"># yum install lsof</pre>



<p>Рекомендую еще установить несколько нужных и полезных программ, которые часто необходимы, но отсутствуют в минимальной установке —&nbsp;<strong>wget</strong>,&nbsp;<strong>bzip2</strong>,<strong>&nbsp;traceroute</strong>,<strong>&nbsp;gdisk</strong>.</p>



<pre class="wp-block-preformatted"># yum install wget bzip2 traceroute gdisk</pre>



<p>На этом у меня все. Базовая настройка CentOS закончена, можно приступать к установке и настройке основного функционала.</p>


</br>



<h2 class="wp-block-heading">Настройка системной почты</h2>



<p>В завершение настройки сервера CentOS сделаем так, что бы почта, адресованная локальному root, отправлялась через внешний почтовый сервер на выбранный почтовый ящик. Если этого не сделать, то она будет локально складываться в файл&nbsp;<em>/var/spool/mail/root</em>. А там может быть важная и полезная информация. Настроим ее отправку в ящик системного администратора.</p>



<p>Здесь кратко только команды и быстрая настройка. Ставим необходимые пакеты:</p>



<pre class="wp-block-preformatted"># yum install mailx cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain postfix</pre>



<p>Рисуем примерно такой конфиг для postfix.</p>



<pre class="wp-block-preformatted">cat /etc/postfix/main.cf</pre>



<pre class="wp-block-preformatted">## DEFAULT CONFIG BEGIN ######################
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
inet_interfaces = localhost
inet_protocols = all
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id &amp; sleep 5

sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.10.1/samples
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
## DEFAULT CONFIG END ######################

# Имя сервера, которое выводит команда hostname
myhostname = centos-test.xs.local
# Здесь по логике нужно оставлять только домен, но в данном случае лучше оставить полное имя сервера, чтобы в поле отправитель 
# фигурировало полное имя сервера, так удобнее разбирать служебные сообщения
mydomain = centos-test.xs.local
mydestination = $myhostname
myorigin = $mydomain
# Адрес сервера, через который будем отправлять почту
relayhost = mailsrv.mymail.ru:25
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = may
</pre>



<p>Создаем файл с информацией об имени пользователя и пароле для авторизации.</p>



<pre class="wp-block-preformatted"># mcedit&nbsp;/etc/postfix/sasl_passwd</pre>



<pre class="wp-block-preformatted">mailsrv.mymail.ru:25 admin@mymail.ru:password</pre>



<p>Создаем db файл.</p>



<pre class="wp-block-preformatted"># postmap&nbsp;/etc/postfix/sasl_passwd</pre>



<p>Теперь можно перезапустить postfix и проверить работу.</p>



<pre class="wp-block-preformatted"># systemctl restart postfix</pre>



<p>К стандартному алиасу для root в&nbsp;<em>/etc/aliases</em>, добавьте внешний адрес, куда будет дублироваться почта, адресованная root. Для этого редактируем указанный файл, изменяя последнюю строку.</p>



<p>Было:</p>



<pre class="wp-block-preformatted">#root: marc</pre>



<p>Стало</p>



<pre class="wp-block-preformatted">root: root,admin@mymail.ru</pre>



<p>Обновляем базу сертификатов:</p>



<pre class="wp-block-preformatted"># newaliases</pre>



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



<pre class="wp-block-preformatted"># df -h | mail -s "Disk usage" root</pre>



<p>Письмо должно уйти на внешний ящик. Если вы будете использовать ящик от Яндекса, то скорее всего получите ошибку в логе почтового сервера и письмо не будет отправлено.</p>



<pre class="wp-block-preformatted">relay=smtp.yandex.ru[77.88.21.158]:25, delay=0.25, delays=0/0/0.24/0.01, dsn=5.7.1, status=bounced (host smtp.yandex.ru[77.88.21.158] said: 553 5.7.1 Sender address rejected: not owned by auth user. (in reply to MAIL FROM command))</pre>



<p>Ошибка эта означает то, что у вас в качестве отправителя почты указан не тот же ящик, что вы используете для авторизации.  С другими почтовыми системами, где нет подобной проверки, все должно быть нормально и так.</p>



<p>На этом настройка локальной почты закончена. Теперь все письма, адресованные локальному root, например, отчеты от cron, будут дублироваться на внешний почтовый ящик, причем с отправкой через полноценный почтовый сервер. Так что письма будут нормально доставляться, не попадая в спам (хотя не обязательно, есть еще эвристические фильтры).</p>


</br>



<h2 class="wp-block-heading">Часто задаваемые вопросы по теме статьи (FAQ)</h2>



<p><strong>Почему вы используете скрипт для настройки iptables, вместо стандартного FirewallD?</strong></p>



<p>Я работаю не только с серверами, где установлен firewalld. Правила для iptables более универсальные и применимы в любом linux дистрибутиве. Мне так просто удобно. Если вам удобнее работать с firewalld, то используйте его.<strong>Используете ли вы GIU в настройке и эксплуатации серверов?</strong></p>



<p>Чаще всего нет. У меня давно налажен процесс настройки практически любого сервера. Я быстрее все делаю через консоль. Иногда использую Webmin из-за удобного просмотра логов сервисов, если они хранятся только на сервере. Если вам нужна консоль управления сервером, то я рекомендую попробовать Cockpit.<strong>Зачем вы отключаете SELinux? Неужели так трудно его настроить?</strong></p>



<p>Я умею настраивать selinux и в некоторых статьях это показываю. Данный материал по общей, базовой настройке centos. В основном это для новичков, которых если сразу нагрузить еще и selinux, то будет тяжело. Если есть желание использовать selinux, его можно будет включить и настроить вместе с сервисом, который будет работать на сервере после предварительной настройки.<strong>Почему вы не используете sudo, а работаете в консоли под root?</strong></p>



<p>Подробно этот вопрос я разбирал в отдельной статье про&nbsp;sudo. Если объяснить кратко, то смысл в том, что я подключаюсь к консоли сервера для административных дейсвий. Мне всегда нужен sudo, поэтому не вижу смысла его каждый раз набирать. Проще сразу зайти под root.</p>


</br>



<h2 class="wp-block-heading">Заключение</h2>



<p>Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!</p>



<p>Мы выполнили некоторые начальные шаги по настройке сервера CentOS, которые я обычно делаю при подготовке сервера сразу после установки. Я не претендую на абсолютную истину, возможно что-то упускаю или делаю не совсем верно. Буду рад разумным и осмысленным комментариям и замечаниям с предложениями.</p>



<p>Полезно после базовой настройки сразу же подключить сервер к системе мониторинга. Либо настроить ее, если у вас еще нет. У меня есть подробный цикл статей по настройке мониторинга:</p>



<ol><li>Пример настройки сервера мониторинга zabbix,&nbsp;либо только подключение centos&nbsp;к мониторингу путем установки на него агента.</li><li>В отдельной рубрике&nbsp;zabbix&nbsp;есть много примеров для мониторинга различных полезных метрик.</li></ol>


</br>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/centos-7-%d0%b8-8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-%d0%bf%d0%be%d1%81%d0%bb%d0%b5-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba/">CentOS 7 и 8 настройка сервера после установки</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/centos-7-%d0%b8-8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-%d0%bf%d0%be%d1%81%d0%bb%d0%b5-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Кэширование страницы с использованием Disk: Enhanced 
Минифицировано с помощью Disk
Кэширование БД с использованием Disk (Request-wide (широкий запрос) modification query)

Served from: clip-clap.ru @ 2026-05-22 01:58:50 by W3 Total Cache
-->