Ответы пользователя по тегу Linux
  • Как перенести АТС на базе Asterisk в виртуальную среду?

    @hx510b
    "Я знаю, что ничего не знаю"
    В линуксе qemu|kvm делаем что-то типа:
    1. копируем физический винт в образ:
    dd if=/dev/sdb bs=1M of=/path/to/asterisk.img
    (потом желательно все это конвертнуть в qcow2), но начать можно с raw образа

    2. создаем конфиг для libvirt:
    vim /path/to/asterisk.xml
    <domain type='kvm'>
    <os><type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
    <boot dev='hd'/><boot dev='cdrom'/><boot dev='network'/><bootmenu enable='yes' timeout='10000'/>
    </os>
    <features><acpi/><apic/></features>
    <clock offset='utc'><timer name='rtc' tickpolicy='catchup'/><timer name='pit' tickpolicy='delay'/><timer name='hpet' present='no'/></clock>
    <on_poweroff>destroy</on_poweroff><on_reboot>restart</on_reboot><on_crash>destroy</on_crash>
    <pm><suspend-to-mem enabled='no'/><suspend-to-disk enabled='no'/></pm>
    <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <memballoon model='virtio'></memballoon>
    <video><model type='cirrus' vram='16384' heads='1' primary='yes'/></video>
    
    <!-- ДИСКИ -->
    <disk type='file' device='disk'><driver name='qemu' type='raw'/><source file='/path/to/asterisk.img'/><target dev='vda' bus='sata'/></disk>
    <!--<disk type='file' device='cdrom'><driver name='qemu' type='raw'/><source file='/srv/kvm/iso/srcd.iso'/><target dev='hdd' bus='ide'/><readonly/></disk>-->
    
    <!-- СЕТЬ -->
    <interface type='bridge'><mac address='00:00:11:22:33:44'/><source bridge='br0'/><target dev='vnet0'/><model type='virtio'/></interface>
    
    <!-- VNC -->
    <graphics type='vnc' port='5901' autoport='no' listen='0.0.0.0'><listen type='address' address='0.0.0.0'/></graphics>
    </devices>
    <!-- -->
    
    <!-- НАЗВАНИЕ -->
    <name>asterisk</name>
    <uuid>12345678-cccc-bbbb-aaaa-651921689250</uuid> <!-- уникальный GUID -->
    
    <!-- ОЗУ В ГИГАБАЙТАХ -->
    <memory unit='GiB'>8</memory>
    
    <!-- КОЛИЧЕСТВО ЯДЕР -->
    <vcpu placement='static'>2</vcpu>
    </domain>

    3. подкидываем конфиг в libvirt:
    virsh define /path/to/asterisk.xml

    4. запускаем машину в libvirt
    virsh start asterisk

    5. сеть скорее всего придется заново настроить, поэтому соединяемcя по vnc по адресу ноды, порт 5901 в данном примере.

    На тему свободного места. Сейчас широко представлены различные накопители и внешние USB/SATA адаптеры, т.к. что скопировать можно локально.

    Еще вариант:
    1. Загрузиться с флешки sysrescuecd

    2. Смонтировать с помощью sshfs сторадж по сети:
    sshfs 123.123.123.123:/path/to/remote /mnt

    3. Скопировать туда образ жесткого диска:
    dd bs=1M conv=sparse if=/dev/sda | pigz -c --fast >/mnt/sda.raw.gz


    4. Там локально использовать, распаковав:
    cat /path/to/remote/asterisk.img.gz | pigz -dc|dd bs=1M conv=sparse of=/path/to/remote/asterisk.img


    5. Либо распаковать локально:
    sshfs 123.123.123.123:/path/to/remote  /mnt
    cat /mnt/asterisk.img.gz | pigz -dc|dd bs=1M conv=sparse of=/local/path/to/asterisk.img
    Ответ написан
    Комментировать
  • Не работает bin/bash в крон. Как решить?

    @hx510b
    "Я знаю, что ничего не знаю"
    пропишите при каждом вызове скрипта bash с полным путем, тогда будет работать надежно.
    cron как правил запускает задачи без переменных окружения, а значит переменная PATH пустая.
    если это cron пользователя, то указывать пользователя не надо:
    @reboot /usr/bin/bash /var/www/user_site/data/www/nodejs/zapusk-nodejs.sh

    если cron системный, то надо прописать пользователя:
    @reboot root /usr/bin/bash /var/www/user_site/data/www/nodejs/zapusk-nodejs.sh

    в этом варианте я бы создал файл задания в каталоге /etc/cron.d/zapusk-nodejs, а не мучал бы crontab
    Ответ написан
    Комментировать
  • Проброс принтера с Ubuntu на Windows server 2008 R2, можно ли?

    @hx510b
    "Я знаю, что ничего не знаю"
    используйте IPP в CUPS или LPD сервис, винда нормально работает с ними, если принтер не GDI, а PCL/Postscript
    - т.е. расшарьте принтер по сети и пусть клиент печатает на него независимо от состояния RDP / SMB.
    Ответ написан
    Комментировать
  • Как в ubuntu с двумя ip, указать для приложения ip с которым оно должно выходит в сеть?

    @hx510b
    "Я знаю, что ничего не знаю"
    1. Можно по process id приложения средствами iptables создавать правило, чтобы подменять исходящий адрес.
    2. Если приложение ваше самописное, можно при создании сокета указать к какому интерфейсу биндиться.
    3. Можно использовать возможности iproute2. Пример тут https://habr.com/ru/articles/100919/
    4. Если целевой адрес какой-то особенный, можно прописать маршрут ip route, чтобы шел через второй интерфейс со вторым IP. Но тут надо осторожно. В некоторых системах возникают спецэффекты. Такое видел в Ubuntu.
    Ответ написан
    Комментировать
  • Как с вм2 подключиться по ssh ключу к вм3, если закрытый ключ храниться на 1 вм?

    @hx510b
    "Я знаю, что ничего не знаю"
    Такой функционал есть и называется Forward Agent
    Можно использовать ключ A:
    ssh -A vm2
    либо
    В свой конфиг ssh клиента
    vim ~/.ssh/config
    прописываем
    Host vm2
      ForwardAgent yes

    или, для всех хостов, но тогда возможен перехват сессий, если промежуточный хост сомнителен.
    Host *
      ForwardAgent yes
    Ответ написан
    1 комментарий
  • Как сделать чтобы команда выполнялась при запуске?

    @hx510b
    "Я знаю, что ничего не знаю"
    Можно прописать в cron / crontab задачу, которая будет запусаться при загрузке системы:
    @reboot root   iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE

    - такой простой вариант на все случаи и дистрибутивы (если используется iptables).

    в RHEL/CentOS можно исправить файл руками, при запуске iptables конфигурация подгружается их этого файла:
    /etc/sysconfig/iptables

    Можно сохранить текующую конфигурацию в этот файл:
    iptables-save >/etc/sysconfig/iptables
    Ответ написан
    Комментировать
  • Как найти причину падения сервера?

    @hx510b
    "Я знаю, что ничего не знаю"
    можно ограничить количество соединений к MySQL, если дело в памяти при нагрузке.
    а так надо смотреть и логи, и параметры и т.д. непонятно, что происходит.
    Ответ написан
    Комментировать
  • BASH: как удалить огромное количество директорий, содержащих директории и файлы?

    @hx510b
    "Я знаю, что ничего не знаю"
    find /pathto [ options ] -delete
    удаляет то, что задано и быстрее всех
    причем без ключа -delete можно проверить, что список тот который хотелось.
    Ответ написан
    1 комментарий
  • Почему CLOSE_WAIT зависают и вешают веб-сервер?

    @hx510b
    "Я знаю, что ничего не знаю"
    Можно донастроить TCP стек, чтобы уменьшить время удержания открытых сокетов:
    echo 5 > /proc/sys/net/ipv4/tcp_fin_timeout  # освобождать через 5 секунд
    echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle  # включить утилизацию

    Изменить параметрые nginx:
    worker_processes auto;
    - количество процессов по количеству ядер CPU или auto
    events {
           worker_connections 10000;
           multi_accept on;
    }

    - worker_connections сколько надо держать соединений на один процесс, т.е.
    worker_processes * worker_connections = сколько всего соединений надо обрабатывать.
    multi_accept on - процесс будет пытаться сразу брать все новые соединения, а не по одному.
    worker_rlimit_nofile 200000;
    - т.е. если хотим 100000 соединений, то пишем 200000

    надо изменить в системе лимит на количество открытых файлов:
    ulimit -n 1031089
    считается, что для гигабитного канала больше 50 тысяч соединений не получить.

    Еще по теме:
    https://habr.com/post/198982/ - Ускоряем Nginx за 5 минут
    https://romantelychko.com/blog/1300/ - Настройка Linux для высоконагруженных проектов и защиты от DDoS
    Ответ написан
    1 комментарий
  • Как эффективно защитится от брут-форса на VPS сервере?

    @hx510b
    "Я знаю, что ничего не знаю"
    На мой взгляд надо заставить веб-клиента делать какую-то работу, например, ставить куку и смотреть, что он ее предъявил, с помощью javascript на стороне клиента проводить простые вычисления, но не предсказуемые вычисления, которые он должен предъявить.
    Брутфорс наверняка идет в отношении конкретного аккаунта, можно на каждую неудачную попытку увеличивать время ответа, чтобы разительно снижать темп перебора.
    Можно начать показывать CAPTCHA в случае детектирования таких проблем.
    Можно сделать блокировку учетной записи в случае N неудачных попыток за период времени.
    Возьмите за образец логику PIN кодов банковский карт - 3 неудачных попытки - блокировка карты. Поэтому даже весьма простой 4-х численный PIN код становится не подбираемым брутфорсом.
    Существуют различные практики приблизительной деанонимизации веб-клиента, которые позволят установить, что с разных адресов идет один и тот же веб-клиент.
    Ответ написан
  • Настройка сети ipv6 debian, как автоматически видеть всю /64 посеть?

    @hx510b
    "Я знаю, что ничего не знаю"
    В Вашем вопросе очень много неизвестных, чтобы дать правильный ответ. Предположим, в этой сети IPv6 работает с помощью RA.

    Обычно, IPv6 адрес устройства формируется на основе MAC адреса устройство путем несложных преобразований, такой подход позволяет присваивать адреса устройства без конфликтов. Подробно это описано тут https://habr.com/post/245323/
    Этот принцип применяется в большинстве сетей IPv6. Т.е. устройство назначает уникальный IPv6 адрес себе самостоятельно.
    Это значит, если хочется повесить на 1 хост, на 1 сетевой адаптер несколько IPv6 адресов, то надо иметь несколько MAC адресов на хосте, это можно сделать с помощью bridge и созданием виртуальных сетевых адаптеров (речь про Linux). (Возможно существует какой-то другой рецепт, но я о нем не слышал).

    Второй вариант - это DHCPv6, которые позволяет назначать произвольные комбинации адресов вместо адресов на основе MAC, но этот вариант должен поддерживаться самой сетью и клиентом, при этом некоторые ОС плохо поддерживают или совсем не поддерживают DHCPv6. Подробнее смотреть тут: https://en.wikipedia.org/wiki/Comparison_of_IPv6_s...
    Для Вашей задачи, все равно придется идти на ухищрения на клиенте, чтобы он повесил больше одного адреса на один интерфейс и подсеть. Я считаю это вариант не пригодным для внедрения.

    Третий вариант, если в сегменте ЛВС присутствуют несколько IPv6 подсетей (об этом клиентам сообщает дежурный RA сервис по протоколу ICMP), в этом случае клиент, увидев несколько IPv6 сетей, назначит себе адреса для каждой подсети - это поведение стандартное.

    Итого.
    Либо надо городить несколько виртуальных интерфейсов с разными MAC на хосте, чтобы получить больше IPv6 адресов.
    Либо надо притащить в сегмент больше IPv6 сетей, тогда на хостах множество адресов появится "само".
    Ответ написан
    Комментировать
  • Почему не работает cerbot?

    @hx510b
    "Я знаю, что ничего не знаю"
    Проверить конфиги и убрать комментарии на русском (utf-8). У меня так решилось. Что-то с парсером у certbot не так.
    Ответ написан
    Комментировать
  • Как организовать видеонаблюдение с записью на удалёный сервер?

    @hx510b
    "Я знаю, что ничего не знаю"
    Как написали ранее - решение в лоб - это сливать поток с камер по внешнему каналу куда-то далеко.
    Есть вариант другой, пишу по своему опыту:
    1. ставим любой программный видеорегистратор, умеющий писать видео только по движению в кадре. тем самым мы значительно уменьшаем объем генерируемого видеоархива.
    2. этот видеорегистратор пишет в локальный видеоархив.
    3. настраиваем перенос новых файлов архива на отдаленный сервер, например rsync по cron или другим аналогичным примитивным способом.
    что мы получаем:
    1. уменьшение объема передаваемых данных за счет записи только по датчику движения.
    2. хранение архива где-то далеко, локально файлы формируются и хранятся временно - т.е. это фактически буфер.
    3. такая схема может спокойно переживать временную потерю связности и временную просадку пропускной способности канала.
    я так делал с motion и аналоговыми камерами, когда каналы были cdma450/3g/wimax, при нынешних скоростях можно вполне и HD видео сливать.
    Ответ написан
    Комментировать
  • С чего начать изучение для Настройки VPN сервера?

    @hx510b
    "Я знаю, что ничего не знаю"
    Рекомендую настраивать OpenVPN, это стандарт де-факто в индустрии, поддерживается практически всеми операционными системами.
    Надо найти любую инструкцию как настроить VPN на основе OpenVPN и выполнить ее и получить работоспособную систему, затем менять ее под свои потребности.
    Ссылки: https://habr.com/post/233971/ или https://habr.com/post/188474/
    Ответ написан
    1 комментарий
  • Как исправить ошибку: Lost connection to MySQL server during query?

    @hx510b
    "Я знаю, что ничего не знаю"
    Судя по:
    Error in `/usr/sbin/mysqld': malloc(): memory corruption: 0x00007fcbfc124080

    1. сделать копию /var/lib/mysql на другой накопитель

    2. Исследуем и решаем:
    2.1. вариант1 - битая память - прогнать memtest, может перегрев системы? устраняем или, если обе проблемы не подтверждаются, то идем дальше. Хотя тут похоже сторонний виртуальный сервер. Но проблема может быть.
    Если проблема с ОЗУ, то протестировать внутри ОС можно созданием сжатых архивов и проверкой их целостности, в случае проблем с ОЗУ рано или поздно появятся ошибки контрольных сумм.

    2.2. вариант2 - либо испорчены файлы данных, и mysql становится плохо из-за кривого кода. файлы могут быть испорчены некорректным завершением работы сервера либо проблемами с блочным устройством:

    2018-08-20T05:10:47.359613Z 0 [ERROR] InnoDB: Could not find a valid tablespace file for `kubium/game`. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.html for how to resolve the issue.
    2018-08-20T05:10:47.359626Z 0 [Warning] InnoDB: Ignoring tablespace `kubium/game` because it could not be opened.

    - это может быть косвенным признаком проблем с файлами.
    2.2.1. проверяем состояние блочных устройств smartctl - наличие offline uncorrectable или relocated sectos - могут быть причиной порчи данных - замена накопителя. Для чужого хостинга это недоступно. Можно косвенно проверить чтением блочного устройства /dev/vda
    2.2.2. проверяем fsck файловую систему, наличие ошибок в файловой системы может указывать на повреждение содержания файлов БД. чиним и молимся, что важнейшие файлы не были задеты.
    2.2.3. проверяем структуру innodb/myisam файлов, для этого используем штатные средства диагностики или вспомогательные утилиты, например "Percona Data Recovery Tool for InnoDB can help recover corrupted or deleted InnoDB tables. https://launchpad.net/percona-data-recovery-tool-f..." если проблемы - пытаемся чинить.
    Простой старый способ решения некоторых проблем - это dump базы в sql файл , и импорт заново в базу. старую можно переименовать.
    2.2.4. проблема может быть вызвана повреждением файлов индексов, в этом случае пересоздание индексов может все решить.

    2.3. вариант3 - похожие проблемы могут наблюдаться при подсовывании двоичных файлов баз от более свежей версии mysql - проверяем эту версию.
    Можно попробовать обновить версию mysql или сменить ее на mariadb, возможно некоторые проблемы уже решены.

    На машине немного памяти - 1Гб, при исчерпании свободного ОЗУ в системе запускается OOM Killer, который убивает процессы в системе, вполне мог убить процесс mysql прямо посередине критичного изменения файлов БД. Это можно найти в логах.
    Ответ написан
    1 комментарий
  • Как мониторить логи и уведомлять о критических событиях в linux?

    @hx510b
    "Я знаю, что ничего не знаю"
    1. Для контроля неудачных попыток войти есть fail2ban, который банит IP адреса настырных не прошенных гостей и умеет слать об этом письма при необходимости.
    2. Для анализа логов и рассылки отчетов есть logwatch, по умолчанию раз в сутки смотрит логи и шлет письмо-отчет местному root, можно перенаправить куда хочется.
    3. Для контроля работоспособности сервисов, состояния системы, контроля произвольных точек отказа придуман zabbix, но для одного хоста это будет тяжелым решением.
    Возможно, первых двух пунктов для начала хватит.
    Ответ написан
    Комментировать
  • Как заблокировать пользователя через Ansible?

    @hx510b
    "Я знаю, что ничего не знаю"
    в ansible есть модуль user, который решает эту задачу.
    Почему он не подошел?
    https://docs.ansible.com/ansible/2.6/modules/user_...
    Ответ написан
    Комментировать
  • Как всё таки получить сертификат без 80 и 443 портов?

    @hx510b
    "Я знаю, что ничего не знаю"
    Можно получить сертификат на другом сервере, хоть на самом дешевом VPS, а потом перенести сертификат на нужную машину внутри сети.
    Сертификат никак не привязан к IP адресам, а привязан только в DNS имени.
    Ответ написан
    Комментировать
  • Какую ФС выбрать для бэкапов?

    @hx510b
    "Я знаю, что ничего не знаю"
    Под такие задачи вполне хватит EXT4
    Не надо хранить на одном большом томе миллионы файлов - этим потом управлять сложно - долго копировать и даже долго удалять.
    Храните в файлах архивов или образах дисков виртуальных (loop devices) за счет sparse можно получить такую же плотность размещения.
    Ответ написан
    Комментировать
  • Openvpn. Как пробросить локальную сеть клиента и дать компьютеру в сети статический ip?

    @hx510b
    "Я знаю, что ничего не знаю"
    можно сделать по-другому:

    Вариант 1: прописать маршрут к этой сети на сервере, чтобы пакеты туда убегали.
    я сделал так:
    в файл /etc/openvpn/ccd/username добавил команду:
    iroute 192.168.102.0 255.255.255.0
    при соединении клиента username с openvpn сервером, на сервере поднимается маршрут к этой сети.
    Но придется использовать уже две сети - одна для VPN, другая уже для сети за VPN клиентом.

    Вариант 2: Прописать на первом компьютере еще один адрес в VPN сети, и прокинуть весь входящий трафик на этот адрес на второй комп с помощью трансляции адресов iptables. А если это касается конкретных сервисов, то сделать TCP-proxy помощью xinetd.
    Ответ написан
    Комментировать