Что делать если интерфейс сети docker конфликтует с вашей корпоративной сетью

Допустим у нас есть впн в корпоративную сеть и нужен доступ к рабочему компу с ип 192.168.1.123.

VPN настроили. VPN работает. Но ип хоста 192.168.1.123 не пингуется.
Делаем трассировку:
mtr 192.168.1.123

Смотрим через какой интерфейс прокинут туннель на 192.168.1.123
ifconfig – какие интрфейсы есть на хосте
ip ro – маршруты на хосте
ifconfig eth0 up – включить интерфейс
ifconfig eth0 down – выключить интерфейс

По умолчанию докер занимает подсети 172.17.х.х, 172.18.х.х, 172.19.х.х и т.д.
Если к примеру у вас туннель впн в корпоративную сеть проложен через 172.17.х.х. Подсеть будет конфликтовать и как результат 192.168.1.123 пинга нет.
Выясняем какие сети использует докер:
docker network ls – список сетей
docker network inspect bridge – подробная информация о сети
Проверяем гипотезу отключением интерфейса ifconfig docker0 down.
Если всё хорошо и пинг есть, следующим этапом нужно выделить для докера другой диапазон сетей.
Как сделать написано тут:
https://struchkov.dev/blog/docker-change-default-subnet-ip-address/

Откройте файл настроек /etc/docker/daemon.json и введите IP-адрес сетевой маски:

{
    ...
    "default-address-pools":[
        {"base":"10.66.0.0/16","size":24},
        {"base":"10.77.0.0/16","size":24}
    ]
}

Как сформулировать запрос на разработку сайта?

Этот вопрос содержит в себе несколько вопросов, на которые должен ответить заказчик прежде всего самому себе:
Для чего нужен сайт? Целевая аудитория? Будет сайт продавать или нет?

Раньше заказчик очень часто, формулируя запрос “хочу сайт”, сам не понимал для чего он ему нужен, кто им будет пользоваться. У всех есть и мне надо.
Конечно, основная цель сайта: привлечение новых клиентов и продажи. Этот пример и будем рассматривать далее.
Но не забывайте сейчас назначения сайтов могут быть абсолютно различны: от инфо-сайта до онлайн площадки для обучения, биржи труда, аукциона… и т.д.
У каждого разное назначение и разная целевая аудитория. Тут нельзя дать конкретных советов, но можно обратиться к нам, подскажем. Или даже составим ТЗ.

Итак, ответив на эти вопросы, двигаемся дальше…

Что касается пользовательского интерфейса:
Обычно при формулировании запроса на разработку онлайн-магазина ориентируются на крупных конкурентов. Так делает большинство клиентов, и в этом есть смысл. Наверняка у большого конкурента есть инструменты для исследования рынка, его анализа, для того что бы предложить пользователю лучший пользовательский интерфейс и опыт (UX/UI). Ведь не зря пользователь проголосовал за него рублём. И это наверно главный лайфхак.

Как только Ваша компания вырастет до собственных аналитиков, научится эффективно применять различные инструменты анализа (например AB-тестирование), то вы уже как заказчик сами будете формулировать запрос на разработку на основе исследовательских данных.

Что касается технической части и интеграций:
Тут всё индивидуально и можно дать лишь общие советы. Нужно описывать малейшие подробности.
Сейчас каждый уважающий себя интернет-магазин интегрирован с 1С (для выгрузки товара и остатков) и CRM-системой (воронкой продаж).
Если подобные системы у вас в предприятии уже внедрены, и планируется использовать совместно с интернет-магазином – это нужно обязательно указывать.
Если речь идёт о планируемых интеграциях и внедрениях, о них тоже нужно рассказать. Это поможет разработчикам возможно заложиться при программировании, что в итоге положительно скажется на работе всей системы.

Чем джун отличается от сеньора?

Если в общем, то чем джун отличается от сеньора? Джуну нужно сказать что делать, как делать и проверить что он сделал. Мидлу — что делать и посмотреть что он сделал. Сеньору — просто сказать что сделать.

Скрам-митинг телеграм-бот

Наверно многие у себя в команде практикуют каждодневные митинг-планёрки, на которой каждый участник команды коротко рассказывает, как прошёл его рабочий день. Какие успехи? Сталкивался ли с какими то проблемами?

Для чего это обычно делается?
Для того что бы:

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

Пандемия дала новый взгляд на работу на удалёнке, и даже после неё значительная часть сотрудников осталась работать не в офисе.
Обычный рабочий день тимлида/скрам-мастера начинался с опроса команды о проделанной работе за прошлый день.
Хорошо если в команде 4-5 человек. А если 10?
Данный процесс становится каждодневной рутиной.

Возникла идея написать бота, который бы самостоятельно, в назначенное время опрашивал бы каждого члена команды и агрегировал данные в виде отчёта в общий канал связи (например чат разработки).

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

Что сейчас умеет бот?

  1. бот пока знает 2 команды /help и /report <краткий отчёт о проделанной работе>.
  2. рассылать уведомление-напоминалку команде о необходимости предоставить отчёт, например:
    “Доброе утро!
    Пришло время провести митинг.
    Пожалуйста, заполни отчёт о проделанной работе. 😜”
  3. отчёты агрегируются в личные сообщения скрам-марстеру, гугл-документ(опционально).
  4. бот понимает рабочий или нерабочий день, на основе производственного календаря текущего года.

Адрес бота: @ScrumMeetingBot

УСТАНОВКА И НАСТРОЙКА PURE-FTPD ПОД UBUNTU

УСТАНОВКА PURE-FTPD

Сначала, используя apt устанавливаем pure-ftpd пакет – он доступен в репозиториях по умолчанию:

sudo apt-get update
sudo apt-get install pure-ftpd

По завершении установки демон  будет запущен и слушать на 21 порту:

Подход к конфигурации демона pure-ftpd отличается от других программ тем, что параметры демона задаются полностью параметрами командной строки, а для формирования этих параметров, написана программа-обертка. Сама конфигурация pure-ftpd представляет из себя набор однострочных конфигурационных файлов – отдельный файл для каждого параметра.

Вот как выглядит конфигурация pure-ftpd:

cd /etc/pure-ftpd/conf/
ls -al
Результат выполнения команды будет следующего вида:

Каждый конфигурационный  файл описывает отдельный параметр командной строки демона pure-ftpd. Например, файл AltLog содержит формат и путь к журналу передачи (tranfer log file):

cat AltLog

Содержимое выглядит приблизительно так:

НАСТРОЙКА PURE-FTPD

Настройка основных параметров сервера (сервер слушает на порту 21 на всех доступных интерфейсах и будет использвать IP 12.34.56.78 и порты 4500-4600 для пассивного режима – следует настроить перенаправление на NAT маршрутизаторе, если сервер находится за ним):

sudo -i
echo ,21 > Bind
echo 12.34.56.78 > ForcePassiveIP
echo 4500 4600 > PassivePortRange

Настройка параметров безопасности:

echo yes > ChrootEveryone
echo yes > ProhibitDotFilesRead
echo yes > ProhibitDotFilesWrite
echo yes > NoChmod
echo yes > BrokenClientsCompatibility

Настройка ограничений:

echo 4 > MaxClientsPerIP
echo 20 > MaxClientsNumber

Теперь нужно решить какие будут использоваться методы авторизации. Имеются следующие варианты:

  • Unix Authentication (любой пользователь, имеющий системную учетную запись сможет зайти на FTP сервер)
  • PureDB авторизация использует отдельную базу виртуальных пользователей pure-ftpd.

Предпочтительнй использовать второй вариант, который мы и настроим. Итак, отключим Unix и PAM вторизацию, установим путь к PureDB базе пользователей и добавим PureDB как метод вторизации путем создаия символической ссылки в директории /etc/pure-ftpd/auth:

echo no > PAMAuthentication
echo no > UnixAuthentication
echo /etc/pure-ftpd/pureftpd.pdb > PureDB
ln -s /etc/pure-ftpd/conf/PureDB ../auth/50pure

Добавим системную группу и пользователя, с правами которых будут храниться файлы, выгружаемые на сервер виртуальными пользователями. Из соображений безопасности, этот пользователь не должен иметь домашнней директории  (-d /bin/null) и не иметь доступа к командной оболочке (-s /bin/false) :

groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser

ДОБАВЛЕНИЕ ПОДДЕРЖКИ TLS/SSL

Сгенерируем сертификат безопасности:

sudo apt-get install openssl
echo 1 > TLS
sudo openssl req -x509 -nodes -newkey rsa:1024 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

Изменяем права доступа на сертификат, чтоб он не был доступен никому, кроме рутового пользователя:

sudo chmod 600 /etc/ssl/private/pure-ftpd.pem

В последний раз перезапускаем сервер для применения нашей свежей конфигурации:

sudo service pure-ftpd restart

Вот и все. Наш сервер настроен, осталось только добавить пользователей.

ДОБАВЛЕНИЕ ПОЛЬЗОВАТЕЛЕЙ В БАЗУ PUREFTPD.

Создадим нового пользователя, назовем его “pureusertest”:

sudo pure-pw useradd pureusertest -u ftpuser -g ftpgroup -d /home/pureftp/pureusertest -N 10

Программа попросит ввести пароль и его подтверждение.

Не забудьте выполнить команду pure-pw mkdb: она нужна для того, чтоб применить изменения, сделанные в базе виртуальных пользователей, по умолчанию находящуюся по пути /etc/pure-ftpd/pureftpd.passwd:

sudo pure-pw mkdb

Формат базы пользователей –  двоичный, для ускорения поиска в базе имеется индекс.

ПОЛУЧЕНИЕ ИНФОРМАЦИИ О ПОЛЬЗОВАТЕЛЯХ PURE-FTPD

Просмотр списка пользователей:

pure-pw list

Получение информации, касающейся определенного пользователя:

pure-pw show pureusertest

Если вы обратили внимание, что строка “Directory: /home/pubftp/pureusertest/./” заканчивается на ./ – не стоит переживать по этому поводу. Это всего-лишь chroot инструкция для данного пользователя, что обозначает, что он не может попасть в директории, находящиеся “выше”.

Изменение пароля пользователя:

sudo pure-pw passwd pureusertest

После изменения пароля, не забудьте выполнить команду pure-pw mkdb:

sudo pure-pw mkdb

Вот и все. Pure-FTPd настроен. Если есть вопросы, замечания – пишите в комментах.

Источник: http://profhelp.com.ua

Multiple php 7.0 + 5.6 + ubuntu + nginx

документация по установке тут :
https://pehapkari.cz/blog/2017/03/27/multiple-php-versions-the-easy-way/

пхп 5.6 просто так на убунте 16.04 не ставит, а просит библиотеку libssl1.1
Берём отсюда:
https://debian.pkgs.org/sid/debian-main-amd64/libssl1.1_1.1.0e-1_amd64.deb.html

Прокси чекер

Общая логика такова:
1. В админке задаём урл ресурса с проксями, xpath-выражения для ip, port, type. По крону обходим все ресурсы, собираем адреса и кладем в базу.
2. Другой скрипт их постепенно чекает на анонимность, локацию и скорость. Полученный ответ записываем, в виде статуса: OK, TIMEOUT, DELETE. Со статусом DELETE удаляем через 1 день. Со статусом TIMEOUT проходим еще раз (в настройках ограничиваем количество таких обращений, и если прокси не ожил, ставим ему статус DELETE).
4. Выборку проксей с минимальным ответом и используем по назначению.

Для работы с xpath использовал плагин FF FirePath. После установки FirePath в FireBug появляется дополнительная вкладка.
Для проверки анонимности на сервер положим простой скрипт ip.php:

$ip = getenv(REMOTE_ADDR);
echo $ip;

Читать далее Прокси чекер

Cервер проверки подписи OpenSSL+ GOST

Мануал по настройке:

OpenSSL и ГОСТ. Настройка

OpenSSL и ГОСТ. Генерация ключей

Команды OpenSSL:
http://firstwiki.ru/index.php/%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_OpenSSL

Получилось настроить OpenSSL с поддержкой алгоритмов gost.
В фуникции openssl_verify в качестве обязательного параметра нужно указывать публичный ключ.
Достать его из подписанного сообщения не получилось, посылать отдельно тоже.
Проприетарный криптопровайдер (КриптоПро) генерирует сертификат и ключи к нему в виде (header.key, masks.key, masks2.key, name.key, primary.key, primary2.key) криптоконтейнера, что не подходит для работы с OpenSSL. (вариант конвертации ключей, понимаемых в OpenSSL: https://habrahabr.ru/post/275039/ )
Capicom-master.tar

Поиск ближайших точек по координатам

http://zcentric.com/2010/03/11/calculate-distance-in-mysql-with-latitude-and-longitude/

SELECT office_address, office_coordinates, ((ACOS(SIN($lat * PI() / 180) * SIN(lat * PI() / 180) + COS($lat * PI() / 180) * COS(lat * PI() / 180) * COS(($lon - lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distance` FROM `members` HAVING `distance`<=100 ORDER BY `distance` ASC

в yii2:

$query->select("*, ((ACOS(SIN({$params['lat']} * PI() / 180) * SIN(lat * PI() / 180) + COS({$params['lat']} * PI() / 180) * COS(lat * PI() / 180) * COS(({$params['lon']} - lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance")
->having("distance <= {$params['radius']}") ->orderBy("distance ASC");

Использование ЭЦП на сайте при помощи capicom

Для аутентификации будем использовать старую добрую майкрософтовскую библиотеку capicom.

Описание:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa376489(v=vs.85).aspx
https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa376542(v=vs.85).aspx
https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa376525(v=vs.85).aspx

Читать далее Использование ЭЦП на сайте при помощи capicom