<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Копытов Иван: заметки с тегом внешний</title>
<link>https://kini24.ru/tags/vneshniy/</link>
<description>Блог ленивого сисадмина</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.3 (v4134)</generator>

<itunes:subtitle>Блог ленивого сисадмина</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Проброс портов в OpenWrt</title>
<guid isPermaLink="false">259</guid>
<link>https://kini24.ru/all/probros-portov-v-openwrt/</link>
<pubDate>Sun, 25 Dec 2022 12:48:29 +0700</pubDate>
<author></author>
<comments>https://kini24.ru/all/probros-portov-v-openwrt/</comments>
<description>
&lt;p&gt;Мне никогда не нравилось, что в интерфейсе OpenWrt нельзя указать несколько портов при пробросе, можно указать только диапазон. А если мне нужно несколько, объединенных одним сервисом? Например, почта. Если указывать все порты, то получается, что на каждый из них нужно создавать свое правило. В итоге получается такая простыня правил, что ориентироваться в ней становится затруднительно.&lt;br /&gt;
По сути, эта заметка — напоминание себе как нужно правильно прокинуть порты во внутреннюю сеть, используя iptables. И, заодно, там же сделаем так, чтобы из локальной сети можно было обращаться к своим серверам по доменному имени.&lt;br /&gt;
Идем  в раздел &lt;i&gt;Network&lt;/i&gt; — &lt;i&gt;Firewall&lt;/i&gt; и открываем вкладку &lt;i&gt;Custom rules&lt;/i&gt;. Добавляем туда строку такого вида:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;iptables -t nat -A zone_wan_prerouting -p tcp -m multiport --dports 25,110,143,465,587,993,995,4190 -j DNAT --to-destination 192.168.1.100&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Здесь мы помещает в цепочку &lt;i&gt;zone_wan_prerouting&lt;/i&gt; таблицы &lt;i&gt;nat&lt;/i&gt; правило, указывающее, что сервисы, обращающиеся из внешней сети на перечисленные порты, должны перенаправляться на сервер с адресом 192.168.1.100. Параметр -р указывает протокол tcp, а параметр -m multiports позволяет указать не один порт, а несколько. Это правило позволит открыть порты для доступна извне, но при обращении к ним из локальной сети придется указывать «прямой» адрес 192.168.1.100. Если вписать свой внешний адрес (IP или DNS), то ничего не выйдет. Чтобы это стало возможным, нужно дописать еще две строки:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;iptables -t nat -A zone_lan_prerouting -d 95.170.188.45 -p tcp -m multiport --dports 25,110,143,465,587,993,995,4190 -j DNAT --to-destination 192.168.1.100
iptables -t nat -A zone_lan_postrouting -d 192.168.1.100 -p tcp -m multiport --dports 25,110,143,465,587,993,995,4190 -j MASQUERADE&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;В первой строке мы говорим, что все обращения к внешнему адресу на указанные порты должны перенаправляться на локальный адрес 192.168.1.100. Во второй строке мы, если так можно выразиться, прячем, что обращаемся из локальной сети.&lt;br /&gt;
После нажатия кнопки &lt;i&gt;Save&lt;/i&gt; содержимое поля &lt;i&gt;Custom Rules&lt;/i&gt; будет сохранено на роутере в файле /etc/firewall.user. Для применения эти необходимо перезапустить файрволл:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;/etc/init.d/firewall restart&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;После этого почта станет доступной из внешней сети и из локальной, причем по доменному имени или внешнему IP-адресу.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Обновление&lt;/b&gt; Если оставить последнее правило в таком виде, то исходящий IP-адрес (адрес клиента) будет отображаться как адрес самого роутера в локальной сети: 192.168.1.1. Поэтому следует немного изменить правило, чтобы оно выглядело следующим образом:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;iptables -t nat -A zone_lan_postrouting -s 192.168.1.0/24 -d 192.168.1.100 -p tcp -m multiport --dports 25,110,143,465,587,993,995,4190 -j MASQUERADE&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;В этом случае внешние адреса останутся «настоящими», а все запросы из локальной сети будут отображаться как 192.168.1.1. На мой взгляд, это приемлемо.&lt;/p&gt;
</description>
</item>

<item>
<title>Выполнение внешних скриптов в Sieve</title>
<guid isPermaLink="false">197</guid>
<link>https://kini24.ru/all/vypolnenie-vneshnih-skriptov-v-sieve/</link>
<pubDate>Tue, 05 Jun 2018 14:59:52 +0700</pubDate>
<author></author>
<comments>https://kini24.ru/all/vypolnenie-vneshnih-skriptov-v-sieve/</comments>
<description>
&lt;p&gt;Понадобилось недавно каким-то образом запускать внешний скрипт по приходу определенного письма. Начал поиски как это сделать. В Postfix это можно сделать, используя файл aliases, но мне этот способ не подходил, потому что он подразумевает приход письма на определенный почтовый адрес. С Dovecot сильно не разбирался, но вот информацию по Sieve нашел. Немного времени спустя у меня был наполовину рабочий вариант. Наполовину потому, что выполняемая во внешнем скрипте команда напрочь отказалась принимать отправляемые ей данные. Пришлось немного подправить скрипт в самом Sieve, чтобы получить желаемый результат.&lt;br /&gt;
Все оказалось очень просто. Для начала нужно включить доступ к плагину &lt;i&gt;vnd.dovecot.execute&lt;/i&gt;. Для этого открываем файл с настройками Sieve /&lt;i&gt;etc/dovecot/conf.d/90-sieve.conf&lt;/i&gt; и вносим следующие изменения:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;plugin {
  sieve_extensions = +vnd.dovecot.execute
  sieve_plugins = sieve_extprograms
  sieve_execute_bin_dir = /etc/dovecot/sieve/execute
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Все остальные параметры нам не нужны.&lt;br /&gt;
В первой строчке включаем доступ к плагину для пользователей. Можно использовать параметр &lt;i&gt;sieve_global_extensions&lt;/i&gt;, в таком случае плагин будет работать глобально. Но глобальный скрипт работает ТОЛЬКО если у пользователя нет своего файла скрипта Sieve. Пользователей на моем сервере очень мало, поэтому такой вариант мне не подходит.&lt;br /&gt;
Во второй строке мы разрешаем использование плагинов как таковых.&lt;br /&gt;
И, наконец, в третьей строке указывает папку, в которой будут находиться эти самые внешние скрипты. Доступ к этой папке для Dovecot, конечно, нужно обеспечить. Подозреваю, что папку можно и не указывать, а в скрипте Sieve просто указать полный путь к запускаемой программе, но проверять лень.&lt;br /&gt;
Теперь остается только написать правило обработки входящих писем. Что-то вроде такого:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;# rule:[Test rule]
if allof (header :contains &amp;quot;from&amp;quot; &amp;quot;test@example.com&amp;quot;, header :contains &amp;quot;subject&amp;quot; &amp;quot;Prikaz 66&amp;quot;)
{
        execute &amp;quot;test.sh&amp;quot;;
fileinto &amp;quot;Trash&amp;quot;;
stop;
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Получив письмо от отправителя &lt;i&gt;test@example.com&lt;/i&gt; с темой &lt;i&gt;«Prikaz 66»&lt;/i&gt; Sieve запустит на выполнение скрипт /&lt;i&gt;etc/dovecot/sieve/execute/test.sh&lt;/i&gt;, затем удалит письмо в корзину и завершит обработку писем.&lt;br /&gt;
Знаю, что информации по этой теме в интернете достаточно. Но б&lt;b&gt;о&lt;/b&gt;льшая часть из нее, как водится, на английском и содержит много воды. Хотелось сделать небольшую выдержку на более привычном русском языке.&lt;/p&gt;
</description>
</item>


</channel>
</rss>