суббота, 22 июля 2017 г.

Solaris 11: Настройка DNS вручную

Я уже говорил, что Солярис 11 - это ад и Пакистан? Изначально отличная система общего назначения (имею в виду Солярис 10, разумеется) попала в шелудивые ручонки пидораиндусов-линукоидов и превратилась - та-дааааааааа! - в долбаный Линукс! Во всяком случае, на уровне юзерлэнда (убунтовская бета libtool в production(!) Solaris 11.3 - желающие могут убедиться самостоятельно) и некоторых ключевых аспектов администрирования.

Да, я считаю, что пидороразработчиков 11 надо линчевать. В балахонах, с факелами и вилами.

Нарушены как минимум два важнейших принципа - "Совместимость важнее производительности" и "Keep It Simple, Stupid".

Рассмотрим такую простую вещь, как настройка DNS-резолва после установки системы. Ну или вам его надо изменить. Быстро.

Как мы это делали в десятке? Всегда правой:
 # cp /etc/nsswitch.dns /etc/nsswitch.conf  
 # vi /etc/resolv.conf  
 # svcadm restart dns/client  

Не просто - а очень просто, руки до сих пор помнят. Делается на полном автомате, без единой заминки.

Оба-на, в Солярис 11 это не канает! Вы больше не можете редактировать настройки resolver ручками, так как они - сюрприз, мать вашу! - задаются при старте сервисами SMF (точнее, свойствами ДВУХ сервисов) и редактировать текстовые конфиги без толку - они будут возвращены в исходное состояние при рестарте оных сервисов/системы!

Индусы, чтоб вы сдохли, суки! Это до какой степени можно было обдолбаться и насрать на UNIX-way и два основополагающих принципа!

Смотрим, как это делается ТЕПЕРЬ:

 svccfg -s dns/client  
 svc:/network/dns/client> listprop config  
 ...  
 svc:/network/dns/client> setprop config/nameserver = (127.0.0.1)  
 svc:/network/dns/client> setprop config/domain = localdomain  
 svc:/network/dns/client> listprop config  
 config application  
 config/value_authorization astring solaris.smf.value.name-service.dns.client  
 config/nameserver net_address 127.0.0.1  
 config/domain astring localdomain  
 svc:/network/dns/client> exit  
 # svcadm refresh dns/client;svcadm restart dns/client  
   
 svccfg -s name-service/switch  
 svc:/system/name-service/switch> setprop config/host = “files dns”  
 svc:/system/name-service/switch> setprop config/ipnode = astring: “files dns”  
 svc:/system/name-service/switch> exit  
 # svcadm refresh name-service/switch;svcadm restart name-service/switch  
   

ПидораДолбодятлы, вы совсем охуеохренели? Вместо трех простых команд последовательность действий, которую без стакана и не вспомнишь!

Я хочу сказать, что качество системы провалилось в немытую индусскую задницу. Такое, с позволения сказать, администрирование ни в какие ворота не лезет.

Я понимаю, что для этого были какие-то мудацкие соображения. Но все на свете администраторы Солярис прокляли пидороразработчиков Индии до 149 колена. Шлю персонально лучи поноса.

суббота, 1 июля 2017 г.

Telegram: обход блокировок в один клик?

Посмотрел я решение для мобильного Telegram, предложенное командой Telegram "для обхода блокировок в один клик", как было анонсировано Павлом.

Я понимаю, что времени было ровно настолько, чтобы сделать "на отъебись" просто приблуду с соксификацией, как в десктопной версии. Однако, Павел, это, пардон муа, несерьезно.

Первое. Заблокировать Телеграм не просто, а очень просто. Я вот здесь уже писал год назад, насколько это легко. Это не просто - это тривиально. 

Процедура бутстрап у Телеграма элементарная и выбивается на раз. Две сети в блок-лист + блокирование всего, лишь отдаленно напоминающего SOCKS. По NBAR или просто блокированием портов. Вуаля - большинство пользователей никогда не войдут.

Соксификация? Ха! Я просто зарублю порт 1080 на Микротике/DLink или любом другом барахле! Большинство обычных людей в жизни не догадается, что соксы бывают на другом порту, а если и услышат от знакомого сисадмина - палец о палец не ударят чтобы их найти.

Второе. Люди, обитающие в башнях из слоновой кости, как-то забывают, что с публичными SOCKS-прокси свыше 10 лет ведется масштабная непримиримая война всеми на свете. Списки автоматически мониторятся и сервера попадают в бан максимум через 15 минут после своего появления на свет. Всеми. Начиная с провайдеров - большинство это делает - и заканчивая любым мало-мальски опытным сисадмином. По очевидной причине. Это - рассадник.

Обычный смертный же, получив обновление 1.1.9, должен сперва ручками найти IP-адрес незаблокированного SOCKS-прокси, ручками его вставить в настройки Телеграма. И, скрестив пальцы, надеяться на лучшее. Желательно при этом понимать, что в топе гугла работающих SOCKS-прокси найти так же реально, как обнаружить алмаз "Шах" на Красной Площади в разгар народных гуляний. А также то, что пользователю неслабо бы иметь определенную экспертизу - от повышенной до очень повышенной - в IT.

Вы когда-нибудь пробовали (на смарте) найти незаблокированный SOCKS-прокси? Рекомендую. Да хотя бы на десктопе.

Я искренне удивлен тем, что человек из IT мог предложить такое в качестве решения для всех.

Из моего личного опыта. Крайне трудно заблокировать лишь Телеграм, оборудованный бриджированным (и обфусцированным!) Тором. Во всяком случае мне неизвестны DPI, способные за разумные средства побанить бриджированный (и обфусцированный!) Тор. Исключая, может быть, Golden Shit - и то я в этом сомневаюсь.

Однако.

Вы никогда не пробовали, даже не будучи хомячком, развернуть бриджированный Тор на смарте, который не рутован? Рекомендую. Великолепный квест.

На десктопе? Да, можно. Имея экспертизу. И ценой определенных, довольно приличных, телодвижений. Я описал в предыдущей статье. Но это никак не один, не два, и даже не двадцать кликов.

Павел, ты точно уверен, что обычный человек способен это проделать? И захочет это проделывать? Не имея экспертизы и не настолько любя котиков?

Я ожидал, что в новой версии будет как минимум встроен Тор - с блэкджеком бриджами и шлюхами обфускацией. И одной-единственной кнопочкой - "Послать цензора на.....".

Однако - не увидел. Все понимаю, Павел. Однако - я разочарован.

Начинайте писать новый мессенджер с нормальной процедурой бутстрапа и встроенной антицензурой. Старому уже никакой SOCKS не поможет. Джузеппе Гарибальди покажет "Окей" из могилы. Если удастся это провернуть.

суббота, 24 июня 2017 г.

Использование Tor Expert Bundle на localhost

Использование Tor Expert Bundle не совсем тривиально, ввиду отсутствия внятной документации а также отсутствия в составе пакета некоторых необходимых компонентов.

Я хочу сразу оговориться, что речь идет о применении Tor не в оппозиционных и иных целях. Мне приходилось сталкиваться с ситуацией, когда в провайдерских сетях отсутствует внутрисетевой роутинг (по различным причинам), и в принципе необходимо попасть в соседнюю сеть (например, с целью администрирования собственных серверов), однако, ввиду повсеместного (и, зачастую, оправданного) резко отрицательного отношения к открытым прокси, это крайне затруднительно.

Дисклеймер. Да, данный инструмент может использоваться в различных целях, как и кухонный нож. Вы принимаете решение о его применении на свой страх и риск и на собственную ответственность.

Итак, исходные данные. 

У нас имеется станция под управлением Windows и нам нужен сервис Tor, с точкой входа в виде SOCKS proxy на локальной машине для торификации некоторых программ с доступом в Интернет. Причем, по-возможности, не зависящий от произвола провайдеров и государственных служб (я предупреждал, господа).

Для решения данной задачи нам понадобится Tor Expert Bundle, а также Pluggable Transports, не входящие в состав пакета.

Вам, в ряде случаев, придется озаботиться тем, как попасть на https://torproject.org и получить оттуда два важных компонента: собственно Tor Expert Bundle и Tor Browser (он нужен, поскольку в его состав входят Pluggable Transports).

Сперва необходимо установить Тор браузер. По умолчанию он ставится в Desktop:


Обычно я просто собираю эту директорию в архив и сохраняю вместе с Tor Expert Bundle.

Здесь обычно задают вопрос - "А на кой мне возиться с Expert Bundle, если у меня уже есть работащий торифицированны браузер?" На той, что не только браузер может нуждаться в торифицированном соединении. А, например, SSH-клиент. Мессенджеры. И так далее. Да и, зачастую, удобнее иметь постоянно работающий сервис, нежели зависеть от браузера, который надо держать запущенным.

Сам Tor Expert Bundle нужно распаковать в Program Files, например в "C:\Program Files (x86)\tor" и туда же распаковать Pluggable Transports:



Самое сложное в использовании Expert Bundle - это конфигурирование. Сначала нужно создать сервис, это просто:


Обратите внимание на замечание. Сервис выполняется из-под локального системного аккаунта. Что означает, что конфигурационные файлы и данные находятся здесь (обратите внимание, torrc отсутствует и сервис запущен с умолчаниями):

Это не то, что нам нужно, к тому же, нас не удовлетворяет запуск сервиса от системного аккаунта (это достаточно небезопасно, к тому же, значительно сложнее сделать правильную конфигурацию). Поэтому запустим управление компьютером и поменяем аккаунт сервиса на пользовательский:

Окей, теперь у нас рабочая директория находится у пользователя. Если по указанному пути ее нет, создадим ее:

Теперь в нее можно положить torrc, который надо написать. Взяв за основу torrc браузера, напишем свой конфигурационный файл:

 ####  
 # cd C:\Users\Yuri\AppData\Roaming  
 # mkdir tor  
 SocksPort 9050 IPv6Traffic PreferIPv6 KeepAliveIsolateSOCKSAuth  
   
 Bridge 198.147.22.36:443 58DB653508197599B8CB7EE95772F3EF2255939D  
 Bridge 194.132.209.138:22670 582E2CD0132AE1FD89426EC624B76B36690A622F  
 Bridge 194.132.209.116:20650 0D113A4B44E9B79C604DFC8DAE35C3C74CF60FF9  
   
 Bridge obfs4 194.132.209.138:48574 582E2CD0132AE1FD89426EC624B76B36690A622F cert=G1jt3rntMnoWTy8uEeQu9VPhnmPn7BH5cHwXbSkQDNlyrFD6BL7D8PMiPwPooKGudt1iYw iat-mode=0  
 Bridge obfs4 194.132.209.116:34596 0D113A4B44E9B79C604DFC8DAE35C3C74CF60FF9 cert=QfRegE3lzpqsnWUAQTulUPje7KgdcL2c+qOUtoU0Jw/ln8KpPZbh43XdfKr1kXYYLLcYQg iat-mode=0  
 Bridge obfs4 68.45.52.117:40365 3C89FB56CDEE23F0F16FDF86086866E33EAB24D8 cert=s0SmVQop+pZPZxlHunrXQL6MW4uVOZS55XjDVaBYkaSSoN9FEZOif/dxxrufg6ZnskRkSw iat-mode=0  
   
 Bridge obfs3 194.132.209.138:54673 582E2CD0132AE1FD89426EC624B76B36690A622F  
 Bridge obfs3 194.132.209.116:44364 0D113A4B44E9B79C604DFC8DAE35C3C74CF60FF9  
 Bridge obfs3 68.45.52.117:36125 3C89FB56CDEE23F0F16FDF86086866E33EAB24D8  
   
 GeoIPFile C:\Program Files (x86)\Tor\Data\Tor\geoip  
 GeoIPv6File C:\Program Files (x86)\Tor\Data\Tor\geoip6  
 HiddenServiceStatistics 0  
 UseBridges 1  
   
 ClientTransportPlugin obfs2,obfs3,obfs4,scramblesuit exec C:\Program Files (x86)\Tor\PluggableTransports\obfs4proxy  
   

Бриджи предварительно получим на https://bridges.torproject.org. Я обычно добавляю обычные бриджи для облегчения бутстрапа, но это может вызвать некоторые проблемы - обычные бриджи иногда банятся. Поэтому стоит добавить обфусцированные, запустив соответствующий транспортный плагин (внизу в конфигурации). Обратите внимание на полные пути (в кавычки не берем!). Чтобы не терять соединения в случае активного бана бриджей (а также ввиду того, что иногда они меняются или перестают работать) советую за несколько последующих дней собрать десяток-два бриджей в каждой группе. Обязательно укажите SOCKS-порт, как показано - он будет точкой входа, и, кстати, IPv6 будет полезен даже если в вашей стране IPv6 не применяется - изредка это облегчает бутстраппинг и последующую работу Тор. 

Если применению Тор активно противодействуют, откажитесь от использования необфусцированных бриджей.

Я не использую FTE, так как плагин достаточно капризный и в последней версии Tor Bundle не работает из-за ошибки (исправят - начну использовать снова). В принципе, OBFS3/4 вполне достаточно.

Убедитесь, что конфигурация работает, запустив Тор интерактивно (предварительно остановив сервис, разумеется) - что бутстраппинг проходит до конца и клиентское соединение устанавливается.

Убедившись, что все в порядке и Тор в состоянии соединиться с сетью, запустите сервис.

Обратите внимание вот на что. В Тор есть небольшой баг, касающийся остановки Pluggble Transport при остановке его самого. Ввиду этого может понадобиться руками убить выполнение obfs4proxy в диспетчере задач (и, в общем, это может понадобиться делать не раз при перезапусках):

Теперь, когда сервис работает, можно настроить, например, Телеграм на его использование:


Аналогично можно настроить, например, Mail.ru Agent (хотя я считаю глупостью небезопасный по определению мессенджер прятать в туннель), или SSH client:


Проверяем:

Порядок, соединяемся через Tor. Консоль даже не слишком тормозит.

Резюмируем. Вы имеете туннельный сервис с SOCKS5 на входе. Любой браузер, большинство мессенджеров - словом, все программы, могущие использовать SOCKS в соединениях - могут быть выпущены через туннель.

Пользуйтесь на здоровье. И не забывайте время от времени обновлять/пополнять бриджи в конфигурации, убирая умершие и накапливая рабочие. Опыт показывает, что, чем больше вы имеете бриджей в конфигурации - тем более бесперебойно работает сервис.

воскресенье, 30 апреля 2017 г.

С++: Fastest check all digits in std::string

По мотивам вот этой переписки самое быстрое из известных решение (С++11, никаких итераторов и других извращений):

 /* Fast check if string contains only digits */  
 static bool DigitsOnly(const std::string &p_str) {  
      for (size_t i = 0, v_len = p_str.length(); i < v_len; ++i) {  
            if ((p_str[i] ^ '0') > 9)  
                return false;  
      }  
      return true;  
 }  
   

Можете проделать бенчмарк, если есть сомнения.

суббота, 15 апреля 2017 г.

C++: Использование std::vector как dynamic array

Я вот здесь уже писал, как лучше организовывать пулы тредов переменной величины.

Так вот. Найдено наилучшее и наиболее элегантное решение. :)

      v_threads.resize(v_max_threads);  
      /*-------------Main Loop----------------*/  
      while (!std::cin.eof()) {  
           /* Start processing threads */  
           for (auto &t : v_threads) {  
                t = std::thread([]() { processdata(); });  
           }  
           /* Finish all threads */  
           for (auto &t : v_threads) {  
                t.join();  
           }  
      }  
      /*-------------Main Loop----------------*/  
   

Никаких push/emplace_back, никаких clear(). Вектор используется как array, причем с лучшими чертами динамических массивов и std::array.

Адресация элементов уже инициализированного вектора (resize вместо reserve) работает быстрее, чем push_back (примерно в четыре раза), и, хотя resize() и медленнее, чем reserve(), но она находится вне цикла и выполняется только один раз.