<?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>RTFM! &#8212; IT блог</title>
	<atom:link href="https://blog.babara.ru/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.babara.ru</link>
	<description>Типо IT блог</description>
	<lastBuildDate>Fri, 11 Nov 2022 06:42:04 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.3.2</generator>
	<item>
		<title>iptables: Oграничиваем доступ к портам VPN-ом на этом же сервере.</title>
		<link>https://blog.babara.ru/iptables-ogranichivaem-dostup-k-portam-vpn-om-na-ehtom-zhe-servere.html</link>
					<comments>https://blog.babara.ru/iptables-ogranichivaem-dostup-k-portam-vpn-om-na-ehtom-zhe-servere.html#respond</comments>
		
		<dc:creator><![CDATA[Человек_Разумный]]></dc:creator>
		<pubDate>Fri, 11 Nov 2022 06:39:34 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[vpn]]></category>
		<category><![CDATA[Настройка]]></category>
		<guid isPermaLink="false">https://blog.babara.ru/?p=5290</guid>

					<description><![CDATA[Дали задачи закрывать VPN-ом сервер, чтобы без VPN нельзя было открывать сайты на нем и подключаться к портам.Стандартный кейс выглядит так: у нас есть сервер с VPN-сервисом и есть сервер, который надо закрыть. Тут все просто, открываем доступ к портам только серверу, где есть VPN. Т.е. VPN-сервер является шлюзом к закрытому серверу. Мой же случай [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Дали задачи закрывать VPN-ом сервер, чтобы без VPN нельзя было открывать сайты на нем и подключаться к портам.<br>Стандартный кейс выглядит так: у нас есть сервер с VPN-сервисом и есть сервер, который надо закрыть. Тут все просто, открываем доступ к портам только серверу, где есть VPN. Т.е. VPN-сервер является шлюзом к закрытому серверу.</p>



<p>Мой же случай отличался тем, что надо  разместить VPN на этом же сервер, который мы хотим закрывать от внешнего мира. Ну в общем тоже не сказать чтобы сложно. Но у меня был нюанс с тем, что на сервере крутится куча docker-compose стэков, которые случают внешние порты, а эти порты невозможно закрыть через INPUT-цепочку iptables. Пришлось много подебажить, чтобы заставить все работать как надо. Были затронуты только 2 цепочки &#8212; INPUT, DOCKER-USER. Итоговые настройки iptables у меня получились такие:</p>



<p><code>-A INPUT -i lo -j ACCEPT<br>-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT<br>-A INPUT -p tcp -m tcp --dport 21821 -j ACCEPT<br>-A INPUT -p udp -m udp --dport 21820 -j ACCEPT<br>-A INPUT -p icmp -j ACCEPT<br>-A INPUT -p udp -m udp --sport 123 -j ACCEPT<br>-A INPUT ! -i eth0 -j ACCEPT<br>-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT<br>-A INPUT -j DROP</code></p>



<p>Цепочка DOCKER-USER:</p>



<p><code>-A DOCKER-USER -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT<br>-A DOCKER-USER -i eth0 -p udp -m udp --dport 21820 -j ACCEPT<br>-A DOCKER-USER -i eth0 -p tcp -m tcp --dport 21821 -j ACCEPT<br>-A DOCKER-USER -i eth0 -p tcp -j DROP<br>-A DOCKER-USER -i eth0 -p udp -j DROP</code></p>



<p>eth0 &#8212; это внешний интерфейс, торчащий в интернет. Порты 21820, 21821 взяты из настроек подключения к wireguard.</p>



<p>В качестве VPN-сервиса я выбрал wireguard с простой настройкой через web: <a rel="noreferrer noopener" href="https://github.com/WeeJeWel/wg-easy" target="_blank">https://github.com/WeeJeWel/wg-easy</a></p>



<p>После всех манипуляций, во внешку торчат только 22 и 21820/udp 21821/tcp. Остальные порты, включая веб, доступны только после того как подключишься по VPN.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.babara.ru/iptables-ogranichivaem-dostup-k-portam-vpn-om-na-ehtom-zhe-servere.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pyenv: The Python ssl extension was not compiled. Missing the OpenSSL lib? &#8212; решение</title>
		<link>https://blog.babara.ru/pyenv-the-python-ssl-extension-was-not-compiled-missing-the-openssl-lib-reshenie.html</link>
					<comments>https://blog.babara.ru/pyenv-the-python-ssl-extension-was-not-compiled-missing-the-openssl-lib-reshenie.html#comments</comments>
		
		<dc:creator><![CDATA[Человек_Разумный]]></dc:creator>
		<pubDate>Tue, 29 Dec 2020 06:41:19 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ошибки]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[pyenv]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://blog.babara.ru/?p=5286</guid>

					<description><![CDATA[При сборке старых версий питона в pyenv возникает ошибка сборки ssl модуля. Есть две возможные причины возникновения это ошибки. У вас не стоят хидеры для openssl. Решается это просто &#8212; поставить пакет openssl-devel для CentOS/RH или libssl-dev для Ubuntu/Debian. Версия вашего системного openssl слишком новая для питона. Тут все немного сложнее. Характеризуется наличием DEPRICATED ошибок [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>При сборке старых версий питона в pyenv возникает ошибка сборки ssl модуля. Есть две возможные причины возникновения это ошибки.</p>



<ol><li>У вас не стоят хидеры для openssl. Решается это просто &#8212; поставить пакет openssl-devel для CentOS/RH или libssl-dev для Ubuntu/Debian.</li><li>Версия вашего системного openssl слишком новая для питона. Тут все немного сложнее. Характеризуется наличием DEPRICATED ошибок в логе python-build. Про решение этой проблемы пойдет речь ниже.</li></ol>



<p><strong>Важное замечание!</strong> Перед тем как приступать, удалите пакет с хидерами от вашего openssl (openssl-devel, libssl-dev и т.д.).</p>



<p>Первое что надо сделать, это понять какую версию openssl нужно собрать для компиляции нужного вам питона. Для старых версий питона чаще всего это будет openssl-1.0.1, при условии то в системе у вас стоит минимум openssl-1.1.0. Если вы хотите собрать новую версию питона на старом линуксе, то все будет наоборот.</p>



<p>Итак, мы определились. В моем случае мне нужен openssl-1.0.1. Качаем исходники c https://ftp.openssl.org/source/old/1.0.1/ . Я взял последнюю версию openssl-1.0.1u.tar.gz. Распаковываем исходники и заходим в директорию. Прежде чем компилить, ставим компилятор и сопутствующие библиотеки. Для CentOS 8 это:</p>



<pre class="wp-block-code"><code># dnf install make gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel tk-devel libffi-devel tar patch</code></pre>



<p>Конфигурируем сборку:</p>



<pre class="wp-block-code"><code># ./config --prefix=/opt/openssl-1.0.1 shared</code></pre>



<p>Я буду ставить сборку в /opt/openssl-1.0.1, просто потому что мне так удобнее. Ключ shared явно указывает создавать shared libraries, которые нужны питону.</p>



<p>Собираем и устанавливаем:</p>



<pre class="wp-block-code"><code># make
.......
# make install</code></pre>



<p>Openssl-1.0.1 собран и установлен. Теперь надо заставить pyenv видеть его. И вот тут я потратил не мало времени, чтобы понять почему не подхватывается новый openssl. А ларчик открывается просто.</p>



<p>При компиляции питона, в скрипте setup.py указаны пути, по которым ищутся заголовочные файлы openssl. Это директории /usr/include, /usr/local/ssl, /usr/contrib/ssl/include/. Дак вот, чтобы pyenv подхватил наш openssl надо создать симлинк от нашего openssl до одной из эти директорий.</p>



<pre class="wp-block-code"><code># ln -s /opt/openssl-1.0.1/ /usr/local/ssl</code></pre>



<p>Для себя я решил, что это будет путь /usr/local/ssl, т.к. создавать симлинки вручную в /usr/include это костыль.</p>



<p>Но это еще не все. Для того, чтобы при компиляции подхватились нужные нам shared libraries, нужно указать переменную окружения <strong>LD_LIBRARY_PATH=/opt/openssl-1.0.1/lib/</strong></p>



<p>Либо добавить эту переменную окружения пользователю в .bash_profile:</p>



<pre class="wp-block-code"><code># echo 'export LD_LIBRARY_PATH="/opt/openssl-1.0.1/lib/"' &gt;&gt; ~/.bash_profile
# bash</code></pre>



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



<pre class="wp-block-code"><code># LD_LIBRARY_PATH="/opt/openssl-1.0.1/lib/" pyenv  install 3.5.2</code></pre>



<p>Готово, Питон собирается и использует нужный нам openssl.</p>



<p>Один маленький нюанс. Пользователь от которого будет работать ваше приложение с этой версией питона должен так же иметь переменную окружения <strong>LD_LIBRARY_PATH=/opt/openssl-1.0.1/lib/</strong></p>



<p>Как уже было указано выше, можно добавть в .bash_profile, можно добавить в systemd service файл вашего демона Environment=&#8217;LD_LIBRARY_PATH=/opt/openssl-1.0.1/lib/&#8217;, есть и другие варианты. Это уже надо смотреть исходя из того как вы собрались запускать приложение на питоне.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.babara.ru/pyenv-the-python-ssl-extension-was-not-compiled-missing-the-openssl-lib-reshenie.html/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Dell Inspiron не все динамики работают</title>
		<link>https://blog.babara.ru/dell-inspiron-ne-vse-dinamiki-rabotayut.html</link>
					<comments>https://blog.babara.ru/dell-inspiron-ne-vse-dinamiki-rabotayut.html#respond</comments>
		
		<dc:creator><![CDATA[Человек_Разумный]]></dc:creator>
		<pubDate>Tue, 07 Jul 2020 17:00:04 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Софт]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[звук]]></category>
		<category><![CDATA[Настройка]]></category>
		<guid isPermaLink="false">https://blog.babara.ru/?p=5283</guid>

					<description><![CDATA[Заметка для себя, чтобы в будущем если столкнусь с такой проблемой на моем ноуте, быстро найти решение. На Fedora\CentOS ставим пакет alsa-tools Запускаем hdajackretask. Выбираем IDT 92HD91BXX Нажимаем “Show unconnected pins” и выбираем Выставляем 0x0d (Internal Speaker, фронтальные динамики) в &#171;Internal speaker&#187;. Выставляем 0x10 (“Not connected”, сабвуфер) в &#171;Internal speaker (LFE)&#187; Нажимаем &#171;Install boot override&#187; [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Заметка для себя, чтобы в будущем если столкнусь с такой проблемой на моем ноуте, быстро найти решение.</p>



<p>На Fedora\CentOS ставим пакет alsa-tools</p>



<pre class="wp-block-code"><code># dnf install alsa-tools</code></pre>



<p>Запускаем hdajackretask. Выбираем <strong>IDT 92HD91BXX</strong></p>



<p>Нажимаем “Show unconnected pins” и выбираем</p>



<ul><li>Выставляем 0x0d (Internal Speaker, фронтальные динамики) в &#171;Internal speaker&#187;.</li><li>Выставляем 0x10 (“Not connected”, сабвуфер) в &#171;Internal speaker (LFE)&#187;</li></ul>



<p>Нажимаем <strong>&#171;Install boot override</strong>&#187; и перезагружаемся. </p>



<figure class="wp-block-image size-large"><img decoding="async" fetchpriority="high" width="604" height="1024" src="https://blog.babara.ru/wp-content/uploads/2020/07/Снимок-экрана-от-2020-07-07-21-56-32-604x1024.png" alt="" class="wp-image-5284" srcset="https://blog.babara.ru/wp-content/uploads/2020/07/Снимок-экрана-от-2020-07-07-21-56-32-604x1024.png 604w, https://blog.babara.ru/wp-content/uploads/2020/07/Снимок-экрана-от-2020-07-07-21-56-32-177x300.png 177w, https://blog.babara.ru/wp-content/uploads/2020/07/Снимок-экрана-от-2020-07-07-21-56-32.png 625w" sizes="(max-width: 604px) 100vw, 604px" /></figure>



<p>Оригинал <a href="https://askubuntu.com/a/1018740" target="_blank" rel="noreferrer noopener">тут</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.babara.ru/dell-inspiron-ne-vse-dinamiki-rabotayut.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>org.dbmaintain.util.DbMaintainException: Following irregular script updates were detected &#8212; решение проблемы</title>
		<link>https://blog.babara.ru/org-dbmaintain-util-dbmaintainexception-following-irregular-script-updates-were-detected-reshenie-problemy.html</link>
					<comments>https://blog.babara.ru/org-dbmaintain-util-dbmaintainexception-following-irregular-script-updates-were-detected-reshenie-problemy.html#respond</comments>
		
		<dc:creator><![CDATA[Человек_Разумный]]></dc:creator>
		<pubDate>Wed, 03 Jun 2020 16:49:13 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Настройка]]></category>
		<category><![CDATA[Ошибки]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[postgres]]></category>
		<category><![CDATA[Админу]]></category>
		<category><![CDATA[Миграции]]></category>
		<guid isPermaLink="false">https://blog.babara.ru/?p=5281</guid>

					<description><![CDATA[При накатывании миграции через dbmaintain может возникнуть ошибка: Причина в том, что скрипт миграции уже содержится в таблице проведенных миграций и его контрольная сумма не совпадает с тем, что лежит на диске. Т.е. файл был изменен. Решение. Смотрим в конфиге dbmaintain название таблицы куда пишутся все проведенные миграции в параметре dbMaintainer.executedScriptsTableName. Допустим это таблица migrations. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>При накатывании миграции через dbmaintain может возникнуть ошибка:</p>



<pre class="wp-block-code"><code>Exception in thread "main" org.dbmaintain.util.DbMaintainException: Following irregular script updates were detected:
.... Тут перечислены скрипт(ы) .....
Because of this, dbmaintain can't perform the update. To solve this problem, you can do one of the following:
  1: Revert the irregular updates and use regular script updates instead
  2: Enable the fromScratch option so that the database is recreated from scratch (all data will be lost)
  3: Perform the updates manually on the database and invoke the markDatabaseAsUpToDate operation (error prone)</code></pre>



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



<p><strong>Решение.</strong> Смотрим в конфиге dbmaintain название таблицы куда пишутся все проведенные миграции в параметре <em>dbMaintainer.executedScriptsTableName</em>. Допустим это таблица migrations. Заходим в базу приложения, находим эту таблицу и ищем нужную нам запись </p>



<pre class="wp-block-code"><code>db=# select * from migrations where file_name like '%название_файла_из_ошибки%';</code></pre>



<p>Видим запись, берем поле checksum и удаляем эту запись.</p>



<pre class="wp-block-code"><code>db=# delete from migrations where checksum='794fe145f2ad4f254e8ae187fd0ef1d5';</code></pre>



<p>Далее как обычно проводим миграции</p>



<pre class="wp-block-code"><code>$ ./dbmaintain.sh updateDatabase -config MyConfig.properties</code></pre>



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



<pre class="wp-block-code"><code>./dbmaintain.sh markErrorScriptPerformed scripts/incremental/4/002_@some_script.sql -config MyConfig.properties</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.babara.ru/org-dbmaintain-util-dbmaintainexception-following-irregular-script-updates-were-detected-reshenie-problemy.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AddTrust CA: проблема с сертфикатами</title>
		<link>https://blog.babara.ru/addtrust-ca-problema-s-sertfikatami.html</link>
					<comments>https://blog.babara.ru/addtrust-ca-problema-s-sertfikatami.html#respond</comments>
		
		<dc:creator><![CDATA[Человек_Разумный]]></dc:creator>
		<pubDate>Mon, 01 Jun 2020 18:38:49 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[Админу]]></category>
		<guid isPermaLink="false">https://blog.babara.ru/?p=5271</guid>

					<description><![CDATA[В связи с тем, что AddTrust External CA Root сертификат истек 30.05.2020, часть сертификатов, в цепочку которых входил этот корневой сертификат стали работать не совсем корректно. Современные браузеры особо этого не заметили, а вот некоторый, преимущественно устаревший софт может ругаться на валидность, сигнализируя об истекшем сроке. Это и случилось с одним из наших сервисов на [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>В связи с тем, что AddTrust External CA Root сертификат истек 30.05.2020, часть сертификатов, в цепочку которых входил этот корневой сертификат стали работать не совсем корректно. Современные браузеры особо этого не заметили, а вот некоторый, преимущественно устаревший софт может ругаться на валидность, сигнализируя об истекшем сроке. Это и случилось с одним из наших сервисов на работе, который проверяет доступность файлов. Сделан он на Java и должен чекать файлы по https. Но внезапно отвалился. Посыпались заявки на эту проблему.  Ошибки в логе вида:</p>



<pre class="wp-block-code"><code>PKIX path validation failed: java.security.cert.CertPathValidatorException: timestamp check failed
java.security.cert.CertificateExpiredException: NotAfter: Sat May 30 16:48:38 2020</code></pre>



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



<p>Дак вот. Проблема решилась следующими шагами:</p>



<p>1. На сайте <a href="https://whatsmychaincert.com">https://whatsmychaincert.com</a>/ была сгенерирована другая цепочка сертификатов. На выходе мы получили  сертификат своего сайта + корневой сертификат COMODO CA RSA.</p>



<p>2. Полученную цепочку (файл сертификата) подсовываем вместо нашей старой цепочки (файла сертификата), где был злополучный AddTrust CA. В nginx это директива <strong>ssl_certificate</strong>.</p>



<p>3. Далее, т.к. у нас Java-прога старая, написана на седьмой версии, нам нужно вручную добавить COMODO CA RSA в хранилище доверенных сертификатов. Для этого конвертируем pem сертфикат COMODO CA RSA в der формат, что его мог понять keytool:  </p>



<pre class="wp-block-code"><code># openssl x509 -in ./comodoca.pem -inform pem -out comodoca.der -outform der
# cat ./comodoca.pem #Дам содержимое сертификата, на всякий случай
-----BEGIN CERTIFICATE-----
MIIGDjCCA/agAwIBAgIQNoJef7WkgZN+9tFza7k8pjANBgkqhkiG9w0BAQwFADCB
hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV
BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwMjEy
MDAwMDAwWhcNMjkwMjExMjM1OTU5WjCBljELMAkGA1UEBhMCR0IxGzAZBgNVBAgT
EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
Q09NT0RPIENBIExpbWl0ZWQxPDA6BgNVBAMTM0NPTU9ETyBSU0EgT3JnYW5pemF0
aW9uIFZhbGlkYXRpb24gU2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEB
BQADggEPADCCAQoCggEBALkU2YXyQURX/zBEHtw8RKMXuG4B+KNfwqkhHc5Z9Ozz
iKkJMjyxi2OkPic284/5OGYuB5dBj0um3cNfnnM858ogDU98MgXPwS5IZUqF0B9W
MW2O5cYy1Bu8n32W/JjXT/j0WFb440W+kRiC5Iq+r81SN1GHTx6Xweg6rvn/RuRl
Pz/DR4MvzLhCXi1+91porl1LwKY1IfWGo8hJi5hjYA3JIUjCkjBlRrKGNQRCJX6t
p05LEkAAeohoXG+fo6R4ESGuPQsOvkUUI8/rddf2oPG8RWxevKEy7PNYeEIoCzoB
dvDFoJ7BaXDej0umed/ydrbjDxN8GDuxUWxqIDnOnmkCAwEAAaOCAWUwggFhMB8G
A1UdIwQYMBaAFLuvfgI9+qbxPISOre44mOzZMjLUMB0GA1UdDgQWBBSa8yvaz61P
ti+7KkhIKhK3G0LBJDAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIB
ADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGwYDVR0gBBQwEjAGBgRV
HSAAMAgGBmeBDAECAjBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8vY3JsLmNvbW9k
b2NhLmNvbS9DT01PRE9SU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDBxBggr
BgEFBQcBAQRlMGMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9jcnQuY29tb2RvY2EuY29t
L0NPTU9ET1JTQUFkZFRydXN0Q0EuY3J0MCQGCCsGAQUFBzABhhhodHRwOi8vb2Nz
cC5jb21vZG9jYS5jb20wDQYJKoZIhvcNAQEMBQADggIBAGmKNmiaHjtlC+B8z6ar
cTuvYaQ/5GQBSRDTHY/i1e1n055bl71CHgf50Ltt9zKVWiIpYvgMnFlWJzagIhIR
+kf0UclZeylKpUg1fMWXZuAnJTsVejJ1SpH7pmue4lP6DYwT+yO4CxIsru3bHUeQ
1dCTaXaROBU01xjqfrxrWN4qOZADRARKVtho5fV8aX6efVRL0NiGq2dmE1deiSoX
rS2uvUAOZu2K/1S0wQHLqeBHuhFhj62uI0gqxiV5iRxBBJXAEepXK9a0l/qx6RVi
7Epxd/3zoZza9msAKcUy5/pO6rMqpxiXHFinQjZf7BTP+HsO993MiBWamlzI8SDH
0YZyoRebrrr+bKgy0QB2SXP3PyeHPLbJLfqqkJDJCgmfyWkfBxmpv966+AuIgkQW
EH8HwIAiX3+8MN66zQd5ZFbY//NPnDC7bh5RS+bNvRfExb/IP46xH4pGtwZDb2It
z1GdRcqK6ROLwMeRvlu2+jdKif7wndoTJiIsBpA+ixOYoBnW3dpKSH89D4mdJHJL
DntE/9Q2toN2I1iLFGy4XfdhbTl27d0SPWuHiJeRvsBGAh52HN22r1xP9QDWnE2p
4J6ijvyxFnlcIdNFgZoMOWxtKNcl0rcRkND23m9e9Pqki2Z3ci+bkEAsUhJg+f+1
cC6JmnkJiYEt7Fx4b4GH8fxV
-----END CERTIFICATE-----</code></pre>



<p>4.  Добавляем DER-сертификат  в Java keystore</p>



<pre class="wp-block-code"><code># keytool -importcert -alias comodocarsa -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass пароль -file comodoca.der</code></pre>



<p>По дефолту пароль <strong>changeit</strong></p>



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



<p>На всякий случай уточню, что содержимое ./comodoca.pem я взял из файла, который мне выдал сайт <a href="https://whatsmychaincert.com">https://whatsmychaincert.com</a>/. В файле 2 сертификата в PEM формате. Первый &#8212; это сертификат нашего сайта, а второй это COMODO CA RSA. Я просто взял второй и скопировал его в отдельный файл.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.babara.ru/addtrust-ca-problema-s-sertfikatami.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Парсинг интервала времени из лога</title>
		<link>https://blog.babara.ru/parsing-intervala-vremeni-iz-loga.html</link>
					<comments>https://blog.babara.ru/parsing-intervala-vremeni-iz-loga.html#respond</comments>
		
		<dc:creator><![CDATA[Человек_Разумный]]></dc:creator>
		<pubDate>Mon, 18 May 2020 10:02:50 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[Админу]]></category>
		<category><![CDATA[логи]]></category>
		<guid isPermaLink="false">http://blog.babara.ru/?p=5268</guid>

					<description><![CDATA[В unix-like системах есть десятки, как не сотни способов парсить логи, есть куча разных утилит для этого. В данном случае покажу как просто с помощью sed выбрать из лога временной интервал. В итоге мы получим файл ~/access_ssl_from_10_to_15.log с логами nginx c 10:00 утра до 15:00 дня. Возможно в дальнейшем будут дополнять эту страничку]]></description>
										<content:encoded><![CDATA[
<p>В unix-like системах есть десятки, как не сотни способов парсить логи, есть куча разных утилит для этого. В данном случае покажу как просто с помощью sed выбрать из лога временной интервал. </p>



<pre class="wp-block-code"><code>sed -n '/14\/May\/2020:10:00/,/14\/May\/2020:15:00/p' /var/log/nginx/access_ssl.log > ~/access_ssl_from_10_to_15.log</code></pre>



<p>В итоге мы получим файл ~/access_ssl_from_10_to_15.log с логами nginx c 10:00 утра до 15:00 дня.</p>



<p>Возможно в дальнейшем будут дополнять эту страничку</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.babara.ru/parsing-intervala-vremeni-iz-loga.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Nginx: изменение upstream для выбранных ip адресов</title>
		<link>https://blog.babara.ru/nginx-izmenenie-upstream-dlya-vybrannykh-ip-adresov.html</link>
					<comments>https://blog.babara.ru/nginx-izmenenie-upstream-dlya-vybrannykh-ip-adresov.html#respond</comments>
		
		<dc:creator><![CDATA[Человек_Разумный]]></dc:creator>
		<pubDate>Thu, 07 May 2020 06:33:30 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Настройка]]></category>
		<category><![CDATA[Софт]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[upstream]]></category>
		<category><![CDATA[Админу]]></category>
		<category><![CDATA[На заметку]]></category>
		<guid isPermaLink="false">http://blog.babara.ru/?p=5262</guid>

					<description><![CDATA[Обожаю nginx. Быстрый и лаконичный способ отдавать различные бэкэнды для выбранных ip адресов. Может быть полезно, например для тестирования, пуская выбранные ip адреса на новую версию сайта (с другой версией php). Или для выделения &#171;привилегированным&#187; пользователям отдельного бэкэнда для более быстрой работы. В общем применений может быть множество. Далее в нужном location направляем пользовователей к [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Обожаю nginx. Быстрый и лаконичный способ отдавать различные бэкэнды для выбранных ip адресов. Может быть полезно, например для тестирования, пуская выбранные ip адреса на новую версию сайта (с другой версией php). Или для выделения &#171;привилегированным&#187; пользователям отдельного бэкэнда для более быстрой работы. В общем применений может быть множество. </p>



<pre class="wp-block-code"><code># Список особых адресов
geo $managed_ips {
    default 0;
    10.0.1.5/32 1;
    10.0.2.3/32 1;
    10.0.3.0/24 2;
} 

# Определяем куда пойдут особые адреса 
map $managed_ips $fcgi_to {
    default    "unix:/var/run/php5-fpm.sock"; # php 5
    1          "127.0.0.1:9000"; # php 7.1
    2          "10.5.5.10:9000"; # php 7.4 
}</code></pre>



<p>Далее в нужном location направляем пользовователей к соответствующему бэкэнду.</p>



<pre class="wp-block-code"><code>location / {
    ...
    fastcgi_pass $fcgi_to; 
    ...
}</code></pre>



<p>Вместо fastcgi_pass может быть proxy_pass, в зависимости от того что нам нужно сделать.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.babara.ru/nginx-izmenenie-upstream-dlya-vybrannykh-ip-adresov.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Балансировка на php-fpm без промежуточных веб-серверов.</title>
		<link>https://blog.babara.ru/balansirovka-na-php-fpm-bez-promezhutochnykh-veb-serverov.html</link>
					<comments>https://blog.babara.ru/balansirovka-na-php-fpm-bez-promezhutochnykh-veb-serverov.html#comments</comments>
		
		<dc:creator><![CDATA[Человек_Разумный]]></dc:creator>
		<pubDate>Wed, 28 Aug 2019 09:16:34 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Настройка]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Админу]]></category>
		<guid isPermaLink="false">http://blog.babara.ru/?p=5253</guid>

					<description><![CDATA[Часто при балансироваке сайтов на php используют связку: прокся-балансировщик на nginx и (nginx + php-fpm либо apache + mod_php) на нодах. По работе попробовали настроить эту связку без использования nginx на нодах, т.е. запросы с балансировщика идут напрямую в php-fpm, тем самым сэкономив чуточку ресурсов. В моем случае производится балансировка сайта на moodle и конфиг [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Часто при балансироваке сайтов на php используют связку: прокся-балансировщик на nginx и (nginx + php-fpm либо apache + mod_php) на нодах.</p>
<p>По работе попробовали настроить эту связку без использования nginx на нодах, т.е. запросы с балансировщика идут напрямую в php-fpm, тем самым сэкономив чуточку ресурсов.<br />
В моем случае производится балансировка сайта на moodle и конфиг представленный ниже будет для его работы.</p>
<p>nginx на балансировщике:</p>
<pre>upstream backend {
    server  10.1.2.3:9000;
    server  10.1.2.4:9000;
}


server {
    access_log /var/log/nginx/access_log;
    error_log /var/log/nginx/error_log;

    listen 443 ssl;
    server_name test-site.ru;
    
    ssl_certificate     /etc/nginx/ssl/test-site.ru.crt;
    ssl_certificate_key /etc/nginx/ssl/test-site.ru.key;

    location ~ /\. {
        deny all;
    }

    location / {
        if (-f /etc/nginx/tmp/maintenance.flag) {
            return 503;
        }

        index index.php;
        try_files $uri @moodle;
    }

    location @moodle {
        root /var/www/moodle/;
        fastcgi_split_path_info  ^(.+\.php)(.*)$;
        fastcgi_index            index.php;
        fastcgi_pass             backend;
        include         /etc/nginx/mime.types;
        include         fastcgi_params;
        fastcgi_param   PATH_INFO       $fastcgi_path_info;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 256 4k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }
}</pre>
<p>Из конфига убрал какие-то специфические вещи. Просто общий вид. Сократить его можно засунув содержимое @moodle в location /. Но я решил оставить в таком виде.</p>
<p>php-fpm при этом настраивается почти стандартно, меняются только несколько опций в пуле:</p>
<pre>listen = 10.1.2.3:9000 ; случаем на интерфейсе, доступном для балансировщика
listen.allowed_clients = 10.1.2.1 ; разрешаем коннектиться только балансеру
php_value[session.save_path] = "tcp://10.1.2.2:6379" ; храним php сессии в redis (нужно для корректной работы балансировки round robin + в настройках moodle надо внести изменения)</pre>
<p>Остальные опции по вкусу.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.babara.ru/balansirovka-na-php-fpm-bez-promezhutochnykh-veb-serverov.html/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>File name too long в Linux</title>
		<link>https://blog.babara.ru/file-name-too-long-v-linux.html</link>
					<comments>https://blog.babara.ru/file-name-too-long-v-linux.html#respond</comments>
		
		<dc:creator><![CDATA[Человек_Разумный]]></dc:creator>
		<pubDate>Tue, 16 Apr 2019 09:47:37 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Настройка]]></category>
		<category><![CDATA[Ошибки]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[Админу]]></category>
		<category><![CDATA[На заметку]]></category>
		<guid isPermaLink="false">http://blog.babara.ru/?p=5245</guid>

					<description><![CDATA[Ситуация такая: Есть виндовый файловый сервер, на котором хранятся файлы с очень длинными имена. При монтировании этой шары на балансировщик, для раздачи статики, периодически сыпались ошибки File name too long. Проблема вроде ясная и очевидным решением было бы переименовать файлы с длинными именами. Но файлов этих сотни, возможно тысячи. Есть множество мест на сайте, которые [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Ситуация такая: Есть виндовый файловый сервер, на котором хранятся файлы с очень длинными имена. При монтировании этой шары на балансировщик, для раздачи статики, периодически сыпались ошибки <strong>File name too long</strong>.</p>
<p>Проблема вроде ясная и очевидным решением было бы переименовать файлы с длинными именами. Но файлов этих сотни, возможно тысячи. Есть множество мест на сайте, которые ссылаются на эти файлы. Править ссылки вообще не вариант, как и сделать редиректы для файлов. Как уже сказал, таких файлов сотни и возможно тысячи.</p>
<p>Поэтому пришлось придумывать как это победить.<br />
Проблема заключается в кодировке. При монтировании виндовой шары, где файлы названы на русском языке &#8212; дефолтная кодировка это utf-8, каждый русский символ которой занимает 2 байта. Ограничение наложенное на длинну имени файла в linux &#8212; 256 байт. При этом это завязанно не столько на ФС, сколько на уровне абстракции VFS. Именно в нем этот лимит закреплен жестко. Исходя из того, что кирилистический символ занимает 2 байта в utf-8, максимальная длинна имени файла ограничена 128 символами.</p>
<p><strong>Решение:</strong></p>
<p>1) Монтируем виндовую шару с указанием однобайтовой кирилистической кодировки cp1251 (она же виндовая windows-1251, стандартная виндовая кодировка):<br />
<code>//win-server/files     /mnt/files    cifs    user,ro,credentials=/root/.smbcredentials,vers=2.1,echo_interval=10,iocharset=cp1251    0       0</code></p>
<p>2) Заставляем nginx (именно он у нас используется) обращаться к файлам на cp1251 кодировке, а не на стандартном utf-8:<br />
Для это используем замечательный модуль от наших азиатских друзей: <a href="https://github.com/vozlt/nginx-module-url">nginx-module-url</a>.<br />
Пересобираем и устанавливаем nginx c опцией &#8212;add-module=/path/to/nginx-module-url, как указана на сайте.</p>
<p>3) Добавляем в нужный нам location перекодировку utf-8 запросов в cp1251:</p>
<pre>location /files {
    url_encoding_convert               on;
    url_encoding_convert_from          utf-8;
    url_encoding_convert_to            windows-1251;

    expires max;
    root /mnt/;
....
}</pre>
<p>Всё! Проблема с длинными виндовыми именами в файлах решена! nginx прекрасно читает и передает на скачивание такие файлы.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.babara.ru/file-name-too-long-v-linux.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>#9 &#8212; Самоподписный сертификат одной командой</title>
		<link>https://blog.babara.ru/9-samopodpisnyjj-sertifikat-odnojj-komandojj.html</link>
					<comments>https://blog.babara.ru/9-samopodpisnyjj-sertifikat-odnojj-komandojj.html#respond</comments>
		
		<dc:creator><![CDATA[Человек_Разумный]]></dc:creator>
		<pubDate>Mon, 04 Mar 2019 05:25:01 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[Админу]]></category>
		<category><![CDATA[На заметку]]></category>
		<guid isPermaLink="false">http://blog.babara.ru/?p=5242</guid>

					<description><![CDATA[На 10 лет. openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/selfsigned.key -out /etc/ssl/certs/selfsigned.crt]]></description>
										<content:encoded><![CDATA[<p>На 10 лет.</p>
<p><code>openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/selfsigned.key -out /etc/ssl/certs/selfsigned.crt</code></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.babara.ru/9-samopodpisnyjj-sertifikat-odnojj-komandojj.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
