• Nginx и https - переезд на новый сервер?

    castomi
    @castomi
    Серверный администратор - tickets.settin.ru
    Можно использовать сертификаты сгенерированные на старом сервере.
    Ну и чтобы переход оказался мгновенным, заранее в днс записях типа А пропишите самый минимальный TTL который позволяет прописать Ваш DNS хостер. Дождитесь то время которое было прописано в TTL ранее, ну и меняйте. У меня удавалось перевести сервер всего за 2 минуты с такими манипуляциями) Ну, а как переведёте TTL можно опять увеличить.
    Ну и если совсем перестраховаться можно настроить прокси со старого сервера на новый и тогда даже те кто попал на старый сервер всё равно будут открывать проксируемый новый сайт.
    Ответ написан
    7 комментариев
  • ДДос атака на nginx пакетами 1 байт?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    500 строк в секунду - это не мощно и, вероятно, даже не DDoS. Если адрес один, то просто закройте ему доступ брандмауэром, а если адреса разные, то настройте лимит запросов в Nginx.

    nginx.conf
    http {
        ...
        limit_req_zone $binary_remote_addr zone=reqlimit:10m rate=30r/s;
        ...
    }

    some_site.conf
    server {
        ...
        location / {
            ...
            limit_req zone=reqlimit burst=10 nodelay;
        }
    }

    После этого запросы с одного ip-адреса начиная с 31-го в секунду будут отбрасываться.

    Как вишенку на торт, можно добавить ещё фильтр для fail2ban:

    nginx-req-limit.conf
    [Definition]
    
    failregex = limiting requests, excess: .* by zone .*, client: <HOST>
    ignoreregex =

    и правило в jail.local
    [nginx-req-limit]
    enabled = true
    port = http,https
    filter = nginx-req-limit
    logpath = /var/www/*/*/logs/error.log # Здесь укажите свой путь к логам виртуального хоста
    findtime = 600
    maxretry = 10
    bantime = 7200

    После этого адреса DoS'еров будут автоматически блокироваться брандмауэром на два часа. Что разгрузит Nginx от обработки паразитного трафика.
    Ответ написан
    11 комментариев
  • Инет на винде есть - на линухе нет... Магия?

    @liks
    Похоже на высокий MTU
    Подберите правильный MTU такой командой:
    ping -c 4 -M do -s 1500 ya.ru
    Вам нужно будет менять цифру "1500" на более низкие значения, пока не перестанет отображаться что-то вроде
    Frag needed and DF set
    или
    ping: local error: Message too long, mtu=1500

    и станут идти нормальные пинги, после чего зайдите в Ваш network-manager и впишите туда значение которое Вы подобрали

    вот значения, которые Вы должны перебирать по очереди, сверху вниз:
    Значения
    1500 The biggest-sized IP packet that can normally traverse the Internet without getting fragmented. Typical MTU for non-PPPoE, non-VPN connections.

    1492 The maximum MTU recommended for Internet PPPoE implementations.

    1472 The maximum ping data payload before fragmentation errors are received on non-PPPoE, non-VPN connections.

    1460 TCP Data size (MSS) when MTU is 1500 and not using PPPoE.

    1464 The maximum ping data payload before fragmentation errors are received when using a PPPoE-connected machine.

    1452 TCP Data size (MSS) when MTU is 1492 and using PPPoE.

    576 Typically recommended as the MTU for dial-up type applications, leaving 536 bytes of TCP data.

    48 The sum of IP, TCP and PPPoE headers.
    40 The sum of IP and TCP headers.
    28 The sum of IP and ICMP headers.
    Ответ написан
    3 комментария
  • Для чего читать Таненбаума?

    Jump
    @Jump
    Системный администратор со стажем.
    Для чего читать Таненбаума?
    Для того, чтобы разобраться как работает сеть.

    Для этого я открыл Таненбаума, но даже идеи как его слова перевести в код - нет.
    Разумеется, так и должно быть. Книга не имеет отношения к программированию, она просто объясняет работу сети.

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

    По поводу того, нужна ли она для сетевого программирования - решать вам.
    Чтобы стать строителем не обязательно учиться в университете по специальности, можно сразу идти и месить раствор и класть кирпичи, не вникая во всякую далекую от практики муть вроде сопромата, и расчетов прочности конструкций.
    Ответ написан
    15 комментариев
  • Как правильно задавать вопросы в переписке?

    @vanillathunder
    Если человек может быстро нагуглить вопрос, значит он уже не плохой специалист.
    Ответ написан
    Комментировать
  • Настройка сервера. Сервисы нативно или в контейнерах/виртуалках?

    @rouslanzs
    Присмотритесь к Proxmox.
    Очень удобное администрирование через веб-морду.
    Отдельные виртуалки под каждый сервис.
    Ответ написан
    Комментировать
  • Какие есть книги или статьи для развития критического мышления?

    atomheart
    @atomheart
    Пишу на Python за карму и за деньги
    Гарри Поттер и методы рационального мышления
    hpmor.ru

    У этого же автора есть статьи отдельно по методам рационального мышления.

    UPD by Владимир Олохтонов:

    Дополню ответ, статьи автора лежат по адресу: lesswrong.ru
    Ответ написан
    2 комментария
  • Как предоставить ноутбук и защитить информацию от копирования?

    @antonsr98
    Системный Администратор
    Подпишите с сотрудником NDA или как так называется документик, по сути о не разглашении. и будет вам счастье, а заподозрите в утечке в суд да и дело с концом
    Ответ написан
    5 комментариев
  • Кому посчастливилось найти poe-дверной глазок?

    @TNAT
    век живи, век учись
    Ответ написан
    Комментировать
  • Кому посчастливилось найти poe-дверной глазок?

    @scriptkiddie
    Спасибо автору, теперь у меня на одну проблему больше.
    Ответ написан
    Комментировать
  • Как отделить сеть IP-видеонаблюдения от сети компьютеров?

    @andreyNN
    vlan видимо вам нужен.
    Ответ написан
    Комментировать
  • Лучший способ обучения?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Лучший способ обучения, прочитать вот эту книгу: Структура и интерпритация компьютерных программ. И все что не понятно - гуглить и читать на википедии. И далее и далее. И задавать вопросы.

    более легкий и эффективный способ обучения

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

    У большинства разработчиков, с которыми мне доводилось общаться, проблема именно с фундаментальными знаниями и понятиями. Самоучки, что с них взять. Я как бы и сам самоучка, но как-то меня никогда не устраивали непонятные штуки или расплывчатая терминология которую можно трактовать двояко.

    Например я сильно желею что нет предметов в университетах типа "история программирования" и т.д. где рассматривают основные идеи и предпосылки к возникновению тех или иных подходов. Вроде "зачем людям понадобилось ООП, если уже тогда было функциональное программирование".
    Ответ написан
    22 комментария
  • Бесплатная сертификация linux администратора?

    edinorog
    @edinorog
    Троллей не кормить!
    Red Hat и SuSE имеют четкую структуру сертификации. остальное увы ... самодеятельность. к вашему сожалению, данные дистрибутивы четко заточены на крупный бизнес. и курсы с сертификациями под них платные.
    Ответ написан
    Комментировать
  • SP_Flash_Tool под Linux и Mtk Droid, замена под линукс?

    ckaMM
    @ckaMM
    если я правильно понял, вам надо получить доступ к /dev/XXX под обычным юзверем (не под рутом)? если так, то смотрите в сторону udev. напишите правило, запхайте его в /etc/udev/rules.d/
    например (мои правила под телефон/планшет):
    # Motorola Defy+
    SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", MODE="0666", OWNER="home"
    # Google Nexus 7
    SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", OWNER="home"
    Ответ написан
    Комментировать
  • Что рассказать от GNU/Linux довольно опытным пользователям PC за 20 минут?

    vvpoloskin
    @vvpoloskin
    Инженер связи
    я думаю, начать нужно с того, что выписать список типовых проблемных случаев с Linux машинами, встречающимися в практике, сгруппировать их по темам - сетевые, отсутствие софта, просмотр загрузки...

    После этого показать/продемонстрировать способы их решения, предварительно рассказав, как запустить консоль (различные виды терминалов, в том числе виртуальные). Например, проблемы с сетью можно решить так: посмотреть ifconfig, ip addr|link|route, route, dig, pppoe. Проверить запущен софт или нет: ps, netstat, top.

    Затем можно показать отличия обычных знакомых сетевикам утилит (traceroute, ping) от win-систем. Рассказать о том, что все конфиги здесь в разных файлах.

    Ну и под финиш показать, как получать помощь по системе: manы, логи.

    Технической поддержке не надо знать, что существуют пользователи, файлы и папки. В целом это же похоже на win-системы.

    UPD: я учил сетевиков уже линухам, только не ТП, а эксплуатационные подразделения
    Ответ написан
    Комментировать
  • Что нужно знать чтобы стать начинающим системным инженером (devops)?

    Singaporian
    @Singaporian
    Статья, которую должен прочитать каждый.

    DevOps - не профессия. Это название культуры доставки кода от разработчика (dev) через тестировщиков и до сисадмина(ops) и обратная связь по этой цепочке.

    Человека, который внедряет DevOps, обычно называют... как хотят. Чаще всего этим занимается какой-нибудь нон-конформист в команде.

    Профессии, которые отрисуются в процессе построения этой методологии следующие:
    • Build Engineer - инженер, который управляет зависимостями, сборками, конфликтами кода.
    • Release Engineer - инженер, который управляет репозиторием кода (кто куда и по каким правилам мерджится и откуда бренчуется). Пожалуй, это самая сложная задача в больших проектах. Особенно с нестрогим Agile или в Waterfall.
    • Automation Engineer - инженер, который занимается автоматизацией рутинных задач. Обычно деплоймент, автотесты, etc. Все эти buzz-слова типа Docker - его инструментарий.
    • Site Reliability Engineer - инженер, который поддерживает ops (апгрейды, расширение железа)
    • Configuration Manager - непонятная мне специальность. Жуткое порождение HR-специалистов, давящих на громкое название позиции. Можно было бы пойти дальше и назвать специальность ZooKeeper Vice President

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

    Почти всегда все эти роли совмещают один-два человека. Ну это зависит от качества кода.
    Назовем эту компанию BRAE/CM для краткости.
    Задача BRAE/CM состоит в том, чтобы программный код, который выходит из под пера программистов, оставался на контроле программистов и сисадминов одновременно. Программисты, равно как и сисадмины, благодаря DevOps-подходу, имеют возможность и даже обязаны обслуживать код на протяжении всего жизненного цикла от планирования архитектуры до мусорки.
    То есть сисадмины начинают рулить еще до того, как код попадет к ним - на ранних стадиях, а программисты продолжают рулить своими задачами уже после того, как код от них ушел к сисадминам - на поздних стадиях. И все это прозрачно друг для друга и все проблемы и решения ходят туда сюда и не спотыкаются о бюрократия в стиле "ничего не знаю, мы код уже закоммитили, у меня тут свои проблемы, у них сломалось - пусть сами и чинят".

    Так вот эта работа - завершающая стадия системного администратора и начинающая стадия разработчика. Поэтому не бывает Junior BRAE/CM.
    BRAE/CM бывает всегда только Senior в системном администрировании и всегда Junior в программировании.

    Еще один момент. В домашних условиях можно выучить инструменты на базовом уровне. Но не поварившись в одной кастрюле с реальными разработчиками, смысл всей этой кухни не понять. Так что сразу забейте. Но если хотите, могу описать пошаговый длинный путь как стать RE/CM:

    Сразу оговорюсь по языкам.
    У каждого языка свое предназначение. Java чаще используется в корпоративном секторе. Там много серверов и сложные бизнес-приложения. Поэтому Java-мир очень чувствителен к таким понятиям, как "технинческий долг" и "управление процессом разработки". И именно поэтому именно там все основные вакансии DevOps и именно там будет самый интересный опыт.
    Кроме Java, традиционно сильная DevOps-культура у Ruby. Практически все остальные языки не имеют столь развитой и популярной инфраструктуры в в данном контексте и потому вам скорее всего будут неинтересны.
    Другими словами, если в среде разработчиков выбор языка - тема для холивара и эмоций с миллионами сравнительных анализов с противоположными результатами, то для специалистов по DevOps выбор очевиден и прозрачен. Java - это одновременно самые интересные задачи, самый богатый toolset, самый большой выбор вакансий и самые высокие зарплаты.

    Каждый последующий пункт, кроме особо длинного первого, будет выливаться в неделю-две достаточно плотного труда. Если не прокрастенировать и уделять этому по несколько часов вечером.

    Итак, что делать:
    1) Почитать книги Head First по Java. Пройти курсы Java на EDX.
    2) Освоить SVN. Есть прекрасные тьюториалы. (GIT освоим позже)
    3) Поставить VirtualBox (не VMWare!!!)
    4) Написать простенькое приложение. Код коммитить в SVN. Собирать его при помощи maven.
    5) Поднять на отдельной виртуалке Jenkins. Он должен брать код приложения на SVN и запускать свой локальный maven для сборки.
    6) Написать модульные тесты (unit tests) своего кода. Пусть maven и их прогоняет.
    7) Поднять где-нибудь Nexus. Усложнить задачу maven, чтобы он теперь складывал все в Nexus. Если maven'у потребуются внешние библиотеки, он тоже не сам должен ходить в интернет, а через Nexus (Central repo).
    8) Настроить на своем десктопе vagrant так, чтобы он с нуля создавал виртуалки VirtualBox.
    9) Создать виртуалку DEV через vagrant. При этом ansible должен на ней что-нибудь настроить (например установить JDK)
    10) Научиться деплоить jar/war из Nexus на виртуалку DEV чем-нибудь. Чем - не посоветую, так как сам работаю с очень сложным IBM uDeploy, а это точно не для новичка. Посмотрите в сторону Rundeck или чего-то такого. Может самим Jenkins'ом задеплойте.
    11) Напишите интеграционные АВТОтесты. На чем хотите (как вариант: Selenium).

    Усложняем систему.
    12) Донастраиваем Jenkins: собирает maven-проект; выкладывает на Nexus; дергает vagrant/ansible для создания виртуалки SIT (system integration test); деплоит приложение на SIT; прогоняет автотесты на SIT; удаляет виртуалку после успешного завершения автотестов.
    13) Прикручиваем SonarQube в Jenkins для статического анализа кода. Исправляем косяки своего кода, согласно полученным от SQ рекомендациям.
    14) Прикручиваем мониторинг Sensu.
    15) Пишем нагрузочные тесты на чем-нибудь. В идеале потрогать два инструмента: jMeter и Gatling.
    16) Как и в 12-м шаге прикручиваем в Jenkins автоматизацию создания виртуалки SLT (Stress/Load test) и прогона на ней тестов. Только уже лоад-тестов(обязательно) и стресс-тестов(опционально) соответственно.
    17) Дописываем в свое приложение какой-нибудь функционал, чтобы использовалась база.
    18) Придется познакомиться с LiquiBase. Деплой SQL руками делать запрещено.
    19) Перейти на Docker (то есть теперь приложение выкладывать не напрямую в ОС, а внутрь докера)

    20) Денек на то, чтобы почитать про Agile, Scrum, Waterfall и прочие организационные порядки.

    А теперь немного уходим в управление проектом:
    21) Поставить Atlassian Jira. Разобраться, чем отличаются Epic, Story, Task, Sub-Task. Создать себе подобной этой структуре фронт работ (делать его не придется, просто нафантазируйте).
    22) Поставить Atlassian Stash и связать его с Jira.
    23) Переехать со своего SVN на GIT, предоставленный Stash'ем.
    24) Пройти Git-тьюториал какой-нибудь. Инструмент очень нетривиальный.
    25) Взять любую таску в работу. При этом в начале работы сделать новый Git branch из тикета Jira.
    26) По завершению работы запустить всю построенную ранее цепочку, но уже для своего брэнча.
    Дайте попробую угадать: вам пришлось скопировать все джобы и переписывать в них ветки?
    27) Сделать джобы нормально. Чтобы одни и те же можно было использовать для любых веток - по аналогии с принципом программирования "reuse code". У Вас будет reuse job :)
    28) Сделать pull request, самому сделать code review и самому себя же за-approve'ить. После этого сделать merge своей ветки в master.
    29) Сделать сборку брэнча автоматической по git-hook (или SCM pool)

    30) А теперь высший пилотаж: к чертям Docker, Copistrano и прочую buzz-word-hipsters-галиматью. Теперь вы с этим знакомы и сможете применить, но пришло время выгрызать этот детский сад калёным железом. Теперь вы доставляете код только как .deb-пакеты. Это значит, что вы:
    a) разбиваете control-файл на несколько пакетов, возможно с lib*,
    b) оверрайдите все ~20 dh_ в файле rules так, чтобы все это соответствовало вашим наработкам в предыдущих пунктах.
    c) раскидываете файлы по .install
    d) самое тяжелое: готовите .preinst, .postinst, .prerm, .postrm файлы СОГЛАСНО ИХ ПРИМЕРАМ .ex, сгенерированным dh_make - то есть с разбиемнием на update/configure/broken-install и что там еще есть. Это означает, что при переустановке, при апгрейде, при даунгрейде, при удалении и при пурдже, у вас будут разные сценарии, каждый из которых должен быть проработан досканально. На этом этапе вы также познакомитесь с понятием "регрессионные тесты".

    Ну как бы базовый вариант вот. Но это далеко не весь инструментарий и путь. Это так, для начала.
    Кроме этого неплохо бы познакомиться с Puppet (это не очень подходит для DevOps, скорее для рядовых админов с кучей серверов, но это очень популярный инструмент ввиду того, что никто не понимает, что такое DevOps и вас скорее всего заставят управлять сотней серверов, вместо релиз инжиниринга). А так же нужно познакомиться с операционными системами NixOS (обязательно) и CentOS/Debian (опционально, но я бы палкой бил тех, кто не знает эти OS). Кроме того, надо базово ориентирваться в PostgreSQL.

    Внимание, важный момент, который должен быть вшит на уровень подсознания у DevOps-ориентированного инженера: вы все время пробуете новые инструменты. Вы всегда будете находить что-то очень отличное. Знаете Nexus как свои пять пальцев и он решает почти все проблемы? Отлично! Теперь выкидываете Nexus и ставите Artifactory. Знаете хорошо CentOS? Круто! Теперь пробуете все это проделать на Windows или Debian. Потому что только когда вы сможете сравнивать инструменты, ваша работа будет ювелирной. А DevOps бывает либо ювелирным, либо он не DevOps. Вы должны быть языко-независимым, платформо-независимым и инструменто-независимым.

    Что будет дальше? Дальше вы начнете работать с микросервисами (сотни одинаковых контейнеров в облаке, которые должны как-то работать друг с другом без ручной конфигурации). Тогда познакомитесь со всякими Consul, ZooKepper и кучей инструментов AWS/OpenStack.
    Ответ написан
    13 комментариев