История Linux
GNU без Linux
К 1990 году в рамках проекта GNU, основанного Ричардом Столлманом, были разработаны и постоянно развивались свободные программы, составляющие основной инструментарий для разработки программ на языке Си: текстовый редактор Emacs, компилятор языка Си gcc, отладчик программ gdb, командная оболочка bash, библиотека важнейших функций для программ на Си libc. Все эти программы были написаны для операционных систем, похожих на UNIX. Поэтому в них использовались стандартные для UNIX системные вызовы — POSIX. При помощи системных вызовов программы получают доступ к оперативной памяти, файловой системе, устройствам ввода и вывода. Благодаря тому, что системные вызовы выглядели более-менее стандартно во всех реализациях UNIX, программы GNU могли работать (с минимальными изменениями или вообще без изменений) в любой UNIX-подобной операционной системе. С помощью имевшихся инструментов GNU можно было бы писать программы на Си, пользуясь только свободными программными продуктами, однако свободного UNIX-совместимого ядра, на основе которого могли бы работать все эти инструменты, не существовало. В такой ситуации разработчики GNU вынуждены были использовать одну из патентованных реализаций UNIX, то есть вынуждены были следовать принятым в этих операционных системах архитектурным решениям и технологиям и основывать на них свои собственные разработки. Мечта Столлмана о научной разработке ПО, свободной от решений, движимых коммерческими целями, была неосуществима, пока в основе свободной разработки лежало патентованное UNIX-совместимое ядро, исходные тексты которого оставались тайной для разработчиков.
Linux — ядро
В 1991 году Линус Торвальдс, финский студент, чрезвычайно увлёкся идеей написать совместимое с UNIX ядро операционной системы для своего персонального компьютера с процессором ставшей очень широко распространённой архитектуры Intel 80386.
Прототипом для будущего ядра стала операционная система MINIX: совместимая с UNIX операционная система для персональных компьютеров, которая загружалась с дискет и умещалась в очень ограниченной в те времена памяти персонального компьютера.
MINIX был создан Эндрю Таненбаумом в качестве учебной операционной системы, демонстрирующей архитектуру и возможности UNIX, но непригодной для полноценной работы с точки зрения программиста. Именно полноценное ядро для своего ПК и хотел сделать Линус Торвальдс.
Название своему ядру он дал freax, но позже оно было изменено хозяином ftp сервера на Linux — гибрид имени создателя и слова UNIX.
Совместимость с UNIX в этот момент означала, что операционная система должна поддерживать стандарт POSIX.
POSIX — это функциональная модель совместимой с UNIX операционной системы, в которой описано, как должна вести себя система в той или иной ситуации, но не приводится никаких указаний, как это следует реализовать программными средствами.
POSIX описывал те свойства UNIX-совместимых систем, которые были общими для разных реализаций UNIX на момент создания этого стандарта. В частности, в POSIX описаны системные вызовы, которые должна обрабатывать операционная система, совместимая с этим стандартом.
Важнейшую роль в развитии Linux сыграли глобальные компьютерные сети Usenet и Internet. На самых ранних стадиях Линус Торвальдс обсуждал свою работу и возникающие трудности с другими разработчиками в телеконференции comp.os.minix в сети Usenet, посвящённой операционной системе MINIX.
Ключевым решением Линуса стала публикация исходных текстов ещё малоработоспособной первой версии ядра под свободной лицензией GNU GPL.
Благодаря этому и получавшей всё большее распространение сети Internet очень многие получили возможность самостоятельно компилировать и тестировать это ядро, участвовать в обсуждении и исправлении ошибок, а также присылать исправления и дополнения к исходным текстам Линуса.
Теперь над ядром работал уже не один человек, разработка пошла быстрее и эффективнее. В 1992 году версия ядра Linux достигла 0.95, а в 1994 году вышла версия 1.0, что свидетельствовало о том, что разработчики наконец сочли, что ядро в целом закончено и все ошибки (теоретически) исправлены. В настоящее время разработка ядра Linux — дело уже гораздо большего сообщества, чем во времена до версии 1.0. Изменилась и роль самого Линуса Торвальдса: теперь он не главный разработчик, а наиболее авторитетный член сообщества, по традиции оценивающий качество исходных текстов, которые должны быть включены в ядро, и дающий своё добро на их включение. Тем не менее, общая модель свободной разработки сообществом сохраняется.
GNU и Linux Однако как нельзя сделать операционную систему без ядра, так и ядро будет бесполезно без утилит, которые использовали бы его возможности.
Благодаря проекту GNU Линус Торвальдс сразу получил возможность использовать с Linux свободные утилиты: bash, компилятор gcc, tar, gzip и многие другие уже известные и широко используемые приложения, которые могли работать с его UNIX-совместимым ядром.
Так Linux сразу попал в хорошее окружение и в сочетании с утилитами GNU представлял собой очень интересную среду для разработчиков программного обеспечения даже на самой ранней стадии своего развития.
Принципиальным шагом вперёд было именно то, что из ядра Linux и утилит и приложений GNU впервые стало возможно сделать полностью свободную операционную систему, то есть работать с компьютером и, более того, разрабатывать новое программное обеспечение, пользуясь только свободным программным обеспечением.
Идеал полностью некоммерческой разработки, сформулированный Столлманом, теперь мог быть воплощён в жизнь. Вскоре появлялись теоретические возможности воплощения идеала, но это не означало его немедленной практической реализации. Совместимость Linux и утилит GNU была обусловлена тем, что и то, и другое писалось с ориентацией на одни и те же стандарты и практику.
Однако в рамках этой практики (то есть при наличии множества различных UNIX-систем) оставался большой простор для несовместимости и различных решений. Поэтому на начальном этапе разработки ядра каждое заработавшее на Linux приложение GNU было для Линуса очередным достижением. Первыми стали bash и gcc. Таким образом, сочетание GNU и Linux давало возможность создать свободную операционную систему, но само по себе ещё не составляло такой системы, потому что Linux и различные утилиты GNU оставались разрозненными программными продуктами, написанными разными людьми, не всегда принимавшими в расчёт то, что делали другие. Основным же свойством любой системы является согласованность её компонентов.
Возникновение дистрибутивов После определённого периода разработки на Linux уже стабильно работал ряд важнейших утилит GNU. Скомпилированное ядро Linux с небольшим комплектом скомпилированных уже на Linux утилит GNU составляло набор инструментов для разработчика программного обеспечения, желающего использовать свободную операционную систему на своём персональном компьютере.
В таком виде Linux уже не только годился для разработки Linux, но и представлял собой операционную систему, в которой можно было уже выполнять какие-то прикладные задачи. Конечно, первое, чем можно было заниматься в Linux — писать программы на Си.
Когда задача получить компьютер с постоянно работающей на нём системой Linux стала востребованной и довольно распространённой, разработчики в хельсинкском и техасском университетах создают собственные наборы дискет, с которых скомпилированное ядро и основные утилиты можно записать на жёсткий диск, после чего загружать операционную систему прямо с него.
Эти наборы дискет стали первыми прототипами современных дистрибутивов Linux — комплектов программного обеспечения, на основе которых можно получить работающую операционную систему на своём компьютере. Нужно отметить, что в дистрибутив Linux с самого начала входили программные продукты GNU.
На самом деле, всякий раз, когда говорится «операционная система Linux», подразумевается «ядро Linux и утилиты GNU». Фонд свободного ПО рекомендует называть это операционной системой Linux. Однако скопировать все нужные программы на жёсткий диск ещё недостаточно, чтобы получить подходящую для нужд пользователя операционную среду (пусть даже это очень профессиональный пользователь).
Поэтому первые наборы дискет можно только условно назвать дистрибутивами. Чтобы получить работающую операционную систему, требуются какие-то специальные средства установки и настройки программного обеспечения. Именно наличие таких средств и отличает современные дистрибутивы Linux. Другая важнейшая задача дистрибутива — регулярное обновление.
Программное обеспечение, особенно свободное, — одна из самых быстро развивающихся областей, поэтому мало один раз установить Linux, нужно ещё регулярно его обновлять. Первым дистрибутивом в современном понимании, получившим широкое распространение, стал Slackware, созданный Патриком Фолькердингом. Он был широко известен пользователям Linux уже к 1994 году.
Несмотря на то, что с появлением первых дистрибутивов установка Linux уже не требует самостоятельной компиляции всех программ из исходных текстов, использование Linux оставалось уделом разработчиков: пользователь операционной системы с ним в тот период её развития мог заниматься почти исключительно программированием.
По крайней мере, чтобы решать в ней другие повседневные прикладные задачи (например, чтение электронной почты, написание статей и т. п.), он должен был сначала некоторое время позаниматься программированием и даже разработкой самой системы Linux, чтобы создать для себя соответствующие прикладные программы или заставить их работать в Linux.
Всё программное обеспечение для Linux было открытым, поэтому вскоре стало появляться всё больше прикладных программ для Linux, которые использовались всё большим сообществом, отчего становились надёжнее и получали всё новую функциональность.
В конце концов возникает идея, что из Linux и GNU-приложений для Linux целенаправленными усилиями небольшой группы разработчиков можно делать целостные операционные системы, подходящие для очень широкого круга пользователей и продавать эти системы пользователям за деньги как аналог и альтернативу существующим патентованным операционным системам.
Выгода операционной системы, целиком состоящей из свободного программного обеспечения, очевидна — собирающие эту систему не должны никому платить за входящие в неё программы. Более того, дальнейшая разработка и обновление имеющихся программ ведётся сообществом разработчиков также совершенно бесплатно, не нужно платить сотрудникам, которые занимались бы этим.
В итоге затраты фирмы, собирающей дистрибутив Linux для пользователя, ограничиваются оплатой программистов, интегрирующих разрозненные приложения в систему и пишущих программы для стандартизации процедур установки и настройки системы, чтобы облегчить эти задачи неподготовленному пользователю, а также затратами на самоиздание получившегося дистрибутива.
Для конечного покупателя это означает принципиальное снижение цены на операционную систему. Первой успешной компанией, работающей по такой схеме, стала Red Hat, появившаяся в 1995 году.
Red Hat адресовала свои разработки не только программистам профессионалам, но и обыкновенным пользователям и системным администраторам, для которых компьютер — в первую очередь офисное рабочее место или рабочий сервер.
Ориентируясь на уже существующие на рынке предложения для такого класса пользователей, Red Hat всегда уделял большое внимание разработке приложений с графическим интерфейсом для выполнения типичных задач по настройке и администрированию системы.
Бизнес Red Hat развивался довольно успешно, в 1999 году эта компания акционировалась — сразу после выпуска акции росли в цене очень энергично, однако потом ажиотаж утих. В настоящее время доля Red Hat на рынке серверов и рабочих станций Linux очень велика. Благодаря Red Hat в сообществе пользователей Linux очень широкое распространение получил формат пакетов RPM.
Практически одновременно с Red Hat появился проект Debian. Его задача была примерно той же — сделать целостный дистрибутив Linux и свободного программного обеспечения GNU, однако этот проект был задуман как принципиально некоммерческий, проводимый в жизнь сообществом разработчиков, нормы взаимодействия в котором полностью соответствовали бы идеалам свободного ПО.
Сообщество разработчиков Debian — международное, участники которого взаимодействуют через Internet, а нормы взаимодействия между ними определяются специальными документами — полиси (англ. policy).
Сообщество разработчиков не извлекает никакой прибыли от продажи Debian, его версии распространяются свободно, доступны в Интернет, могут распространяться и на твёрдых носителях (CD, DVD), но и в этом случае их цена редко сильно превышает стоимость носителя и наценку, окупающую затраты на издание. Первоначально разработка Debian спонсировалась Фондом свободного программного обеспечения.
Адресатами дистрибутивов Debian всегда в первую очередь были профессиональные пользователи, так или иначе связанные с академической разработкой программного обеспечения, которые готовы читать документацию и собственными руками организовать нужный профиль системы, соответствующий именно их задачам.
Ориентация на такую аудиторию предопределила некоторые тенденции развития Debian: в нём никогда не было обилия «простых» графических средств настройки среды, всевозможных «мастеров», однако всегда уделялось много внимания средствам последовательной и единообразной интеграции программного обеспечения в единую систему. Именно в Debian появился менеджер пакетов (APT). В настоящее время Debian — самый популярный дистрибутив Linux среди пользователей, являющихся профессионалами в области информационных технологий. Всякий раз, когда свободное программное обеспечение оказывается востребованным, немедленно возникает множество альтернативных решений — так произошло и с дистрибутивами Linux. После 1995 года возникло (и продолжает возникать) огромное количество коммерческих компаний и свободных сообществ, которые ставят своей задачей подготовку и выпуск дистрибутивов Linux. У каждого из них — свои особенности, своя целевая аудитория, свои приоритеты. К настоящему времени на рынке дистрибутивов выделилось несколько лидеров, которые предлагают более или менее универсальные решения и наиболее широко известны и используются. Помимо уже названных Red Hat и Debian следует назвать в ряду дистрибутивов, ориентированных на рядового пользователя, немецкий SuSE и французский Mandriva (до 2005 года — Mandrake), среди адресованных специалистам — Gentoo. Но помимо «крупных» игроков на рынке дистрибутивов есть гораздо большее количество менее распространённых дистрибутивов. Теперь перед пользователем, желающим установить Linux, встаёт вопрос выбора дистрибутива. Критерии выбора — и задачи, которые предполагается решать с помощью Linux, и уровень подготовки пользователя, и технологии, и предстоящие контакты с тем сообществом, которое занимается разработкой дистрибутива.
История Linux в России Получилось так, что в международном сообществе разработчиков, начинавших и продолжавших развивать Linux, все в той или иной степени могли объясняться по-английски. Это и неудивительно, поскольку исторически английский оказался языком компьютерной науки и операционной системы UNIX, глобальной сети Internet, программирования.
В международном сообществе разработчиков программного обеспечения английский выполнял и выполняет роль, сравнимую с ролью латыни в научном сообществе средневековой Европы.
Но если Linux предполагается использовать не только для программирования и общения с программистами, но и для решения повседневных задач, то необходима локализация, то есть возможность общаться с компьютером и при помощи компьютера на языках, отличных от английского. Локализация — комплексный процесс, затрагивающий самые разные стороны системы.
Для полноценной поддержки того или иного языка в системе необходимо сначала обеспечить возможность ввода на этом языке (поддержка раскладок клавиатуры и кодировок), вывода (поддержка экранных шрифтов), печати, а затем уже необходимо переводить интерфейс различных приложений на данный язык, разрабатывать средства подготовки электронных и бумажных публикаций на этом языке и т. д.
Первой компанией, поставившей своей целью выпуск дистрибутивов Linux для русскоговорящих пользователей, стала УрбанСофт, открытая в Петербурге в 1992 году. Весь её бизнес состоял в выпуске и продаже CD-дисков с дистрибутивами свободного программного обеспечения.
В первую очередь это были дистрибутивы Red Hat, а также Debian, в которые включались разработанные силами УрбанСофт пакеты для русификации. Несколько позже в Москве IPLabs Linux Team выпускает Linux Mandrake Russian Edition — модифицированный (чтобы соответствовать нуждам русского пользователя) вариант дистрибутива Mandrake Linux.
Впоследствии эта команда начинает выпускать дистрибутивы, которые отличаются от Mandrake уже не только наличием пакетов для русификации, но и другими принципиальными возможностями. В конце концов команда разработчиков создаёт фирму ALT Linux и начинает выпускать дистрибутивы под маркой ALT Linux. Целью компании ASPLinux стал выпуск Red Hat с модификациями для поддержки русского языка. Название их продукта совпадает с названием компании.
Все перечисленные российские производители дистрибутивов Linux существуют и по сей день, продолжая более или менее активно выпускать дистрибутивы. Однако, они теряют популярность, поскольку сейчас популярные во всём мире дистрибутивы, например Ubuntu или Fedora достаточно хорошо переведены на большинство языков мира.
Источник: https://ru.wikipedia.org
Источник: https://volamar.ru/subject/02pingvin/view_post.php?cat=4&id=24&page=1
Настройка iptables в CentOS 7
# systemctl stop firewalld
Теперь удалим его из автозагрузки, чтобы он не включился снова после рестарта:
# systemctl disable firewalld
После этого на сервере настройки сетевого экрана становятся полностью открытыми. Посмотреть правила iptables можно командой:
# iptables -L -v -n
На самом деле фаервол у нас на сервере уже стоит и работает, просто нет никаких правил, все открыто. Установить нам нужно будет дополнительные утилиты управления, без которых конфигурировать iptables невозможно. Например, нельзя будет перезапустить фаервол:
# systemctl restart iptables.service
Failed to issue method call: Unit iptables.service failed to load: No such file or directory.
Или добавить в автозапуск не получится:
# systemctl enable iptables.service
Failed to issue method call: No such file or directory
Чтобы подобных ошибок не было, установим необходимый пакет с утилитами:
# yum -y install iptables-services
Теперь можно добавить iptables в автозагрузку и запустить:
# systemctl enable iptables.service
# systemctl start iptables.service
Настройка фаервола
Для управления правилами фаервола я использую скрипт. Создадим его:
# mcedit /etc/iptables.sh
Далее будем наполнять его необходимыми правилами. Я буду разбирать все значимые части скрипта, а полностью его приведу в виде текстового файла в конце статьи. Правила сделаны в виде картинок, чтобы запретить копирование и вставку. Это может привести к ошибкам в работе правил, с чем я сам столкнулся во время подготовки статьи.
Мы рассмотрим ситуацию, когда сервер является шлюзом в интернет для локальной сети.
Первым делом зададим все переменные, которые будем использовать в скрипте. Это не обязательно делать, но рекомендуется, потому что удобно переносить настройки с сервера на сервер. Достаточно будет просто переназначить переменные.
Перед применением новых правил, очищаем все цепочки:
Блокируем весь трафик, который не соответствует ни одному из правил:
Разрешаем весь трафик локалхоста и локалки:
Разрешаем делать ping:
Если вам это не нужно, то не добавляйте разрешающие правила для icmp.
Открываем доступ в инет самому серверу:
Если вы хотите открыть все входящие соединения сервера, то добавляйте дальше правило:
Делать это не рекомендуется, привожу просто для примера, если у вас появится такая необходимость.
Дальше разрешим все установленные соединения и дочерние от них. Так как они уже установлены, значит прошли через цепочки правил, фильтровать их еще раз нет смысла:
Теперь добавим защиту от наиболее распространенных сетевых атак. Сначала отбросим все пакеты, которые не имеют никакого статуса:
Блокируем нулевые пакеты:
Закрываемся от syn-flood атак:
Следом за этими правилами рекомендуется поставить правила на запрет доступа с определенных IP, если у вас имеется такая необходимость. Например, вас задолбал адрес 84.122.21.197 брутом ssh. Блокируем его:
Если вы не ставите ограничений на доступ из локальной сети, то разрешаем всем выход в интернет:
Следом запрещаем доступ из инета в локальную сеть:
Чтобы наша локальная сеть пользовалась интернетом, включаем nat:
Чтобы не потерять доступ к серверу, после применения правил, разрешаем подключения по ssh:
И в конце записываем правила, чтобы они применились после перезагрузки:
Мы составили простейший конфиг, который блокирует все входящие соединения, кроме ssh и разрешает доступ из локальной сети в интернет. Попутно защитились от некоторых сетевых атак.
Сохраняем скрипт, делаем исполняемым и запускаем:
# chmod 0740 /etc/iptables.sh
# /etc/iptables.sh
Выполним просмотр правил и проверим, все ли правила на месте:
# iptables -L -v -n
Открытие портов
Теперь немного расширим нашу конфигурацию и откроем в iptables порты для некоторых сервисов. Допустим, у нас работает веб-сервер и необходимо открыть к нему доступ из интернета. Добавляем правила для веб-трафика:
Было добавлено разрешение на входящие соединения по 80-му и 443-му портам, которые использует web сервер в своей работе.
Если у вас установлен почтовый сервер, то нужно разрешить на него входящие соединения по всем используемым портам:
Для корректной работы DNS сервера, нужно открыть UDP порт 53
И так далее. По аналогии можете открыть доступ для всех необходимых сервисов.
Проброс (forward) порта
Рассмотрим ситуацию, когда необходимо выполнить проброс портов с внешнего интерфейса на какой-то компьютер в локальной сети. Допустим, вам необходимо получить rdp доступ к компьютеру 10.1.3.50 из интернета. Делаем проброс TCP порта 3389:
Если вы не хотите светить снаружи известным портом, то можно сделать перенаправление с нестандартного порта на порт rdp конечного компьютера:
Если вы пробрасываете порт снаружи внутрь локальной сети, то обязательно закомментируйте правило, которое блокирует доступ из внешней сети во внутреннюю. В моем примере это правило:
$IPT -A FORWARD -i $WAN -o $LAN1 -j REJECT
Либо перед этим правилом создайте разрешающее правило для доступа снаружи к внутреннему сервису, например вот так:
$IPT -A FORWARD -i $WAN -d 10.1.3.50 -p tcp -m tcp –dport 3389 -j ACCEPT
Включение логов
Во время настройки полезно включить логи, чтобы мониторить заблокированные пакеты и выяснять, почему отсутствует доступ к необходимым сервисам, которые мы вроде бы уже открыли.
Я отправляю все заблокированные пакеты в отдельные цепочки (block_in, block_out, block_fw), соответствующие направлению трафика и маркирую в логах каждое направление. Так удобнее делать разбор полетов.
Добавляем следующие правила в самый конец скрипта, перед сохранением настроек:
Все заблокированные пакеты вы сможете отследить в файле /var/log/messages.
После того, как закончите настройку, закомментируйте эти строки, отключив логирование. Обязательно стоит это сделать, так как логи очень быстро разрастаются. Практического смысла в хранении подобной информации лично я не вижу.
Как отключить iptables
Если вы вдруг решите, что firewall вам больше не нужен, то отключить его можно следующим образом:
# systemctl stop iptables.service
Эта команда останавливает фаервол. А следующая удаляет из автозагрузки:
# systemctl disable iptables.service
Отключив сетевой экран, мы разрешили все соединения
Взято отсюда https://serveradmin.ru/nastroyka-iptables-v-centos-7/
Источник: https://syrog.ru/?p=769
Rancher на Centos 7.4 + iptables: установка и настройка
Если вы уже переросли docker-compose, но ещё не доросли до Kubernetes, то Rancher станет хорошим выбором в качестве системы оркестрации контейнеров.
Rancher поставляется в комплекте с функциональным web-ui и подойдёт в качестве оркестратора контейнеров для новичков.
В его основе лежит собственный движок Cattle, который поддерживает с некоторыми ограничениями работу поверх Swarm, Kubernetes, Mesos.
В основе Rancher лежат стэки, которые содержат внутри себя сервисы. Очень похоже на Swarm и docker-compose. Если вам нужно быстро запустить и посмотреть на оркестрацию в работе, то смело используйте Rancher. Но главное преимущество этого оркестратора в том, что его можно развернуть на одном сервере без танцев с бубнами.
Например, для установки Kubernetes на одном сервере потребовалось бы устанавливать VirtualBox, создавать несколько виртуальных машин и уже внутри них устанавливать docker и Кубернетис. Для продакшена такой вариант абсолютно не годится! Разве что для тестовых и девелоперских стендов. Если вам нужен самый простой веб-интерфейс для docker, обратите внимание на Portainer.
Отличия Rancher от Docker Swarm, Kubernetes и Mesos
Наиболее простой вариант для тех, кто уже знаком с docker-контейнерами это запустить Swarm и создавать сервисы из docker-compose файла. Зато в Rancher можно через веб-интерфейс сконфигурировать работу кластера серверов, что понравится тем, кто с докером ещё не знаком.
По-умолчанию Rancher использует Convoy для работы с дисками, который имеет поддержку Device Mapper, VFSNFS и Amazon EBS, а также интеграцию с flocker. Ещё одно достоинством данной системы оркестрации — наличие предустановленных шаблонов приложений.
С помощью Rancher можно установить одним кликом мышки Redmine, Gitlab, Jenkins CI server, TeamCity, Zookeeper и Kafka от Apache, Confluence и Bitbucker от Atlassian, Datadog, Elasticsearch + Logstash + Kibana, Etcd, RethinkDB, Selenium и многое другое в готовых и настроенных докер-контейнерах!
Какой оркестратор выбрать для docker-контейнеров?
Если термин stateless про ваши приложения, то лучше смотреть в сторону Docker Swarm или Nomad. В Nomad хорошая и понятная документация, а также продуманный механизм для работы с гео-распределёнными серверами. Из плюсов Swarm — встроенные оверлейные сети и простое создание сервисов.
Kubernetes подойдёт как для stateless, так и statefull сервисов. А так же позволяет выполнять лямбды на мощностях вашего кластера. Высокий порог входа и запутанная документация — потребуют достаточно большого количества времени для начал использования кубера.
Если ваши приложения активно используют сеть, то сразу смотрите на Nomad или Apache Mesos. А если вы работаете с BigData, то скорее всего вы уже используете Mesos. Если в ваших сервисах много legacy и enterprise, которые требуют множества специфических окружений, то Mesos с его кастомизируемыми плагинами подойдёт лучше всего.
Подготовка к установке Rancher
Для начала нужно ознакомиться со списком поддерживаемых версий докера, и выбрать наиболее подходящую. Если docker уже установлен на ваше сервере, проверьте его версию с помощью команды:
docker -v
Если ваша версия не входит в список поддерживаемых, то придётся делать даунгрейд, например, на версию 17.12.0
yum downgrade docker-ce-17.12.0.ce
Если же docker ещё не установлен, то выполните команду:
yum install docker-ce-17.12.0.ce
Если вы используете container-selinux ниже версии 2.14
Действия из этого параграфа выполнять не обязательно, однако, если что-то не заработало, то стоит обратить на него внимание.
Проверить установленную версию можно с помощью команды:
rpm -q container-selinux
Если версия оказалась недостаточно свежей, то нужно выполнить ещё некоторые действия из этого руководства:
yum install selinux-policy-devel
Затем создайте файл с именем virtpatch.te и содержимым:
policy_module(virtpatch, 1.0) gen_require(` type svirt_lxc_net_t; ') allow svirt_lxc_net_t self:netlink_xfrm_socket create_netlink_socket_perms;
Затем выполните:
make -f /usr/share/selinux/devel/Makefile
Затем загрузите модуль:
semodule -i virtpatch.pp
И убедитесь что он присутствует в списке активных модулей:
semodule -l
Установка и настройка Rancher
Для начала нужно установить сервер Rancher, который поставляется в виде docker-контейнера. В него входит веб-интерфейс и движок Cattle.
docker run -d –restart=unless-stopped –name=rancher-server -p 8080:8080 rancher/server:stable
Процесс установки и запуска этого контейнера достаточно долгий и может занимать до 5 минут. За ходом установки можно следить с помощью команды:
docker logs –tail=20 -f rancher-server
Как только откроется веб-интерфейс, можно приступать к установке агента Rancher. Подробную инструкцию по работе с Rancher web-ui можно найти в этой статье. Осторожно, много букв и картинок! Если вкратце, то перейдите в меню Infrastrucnure 〉 Hosts, затем жмите кнопку Add Host. Выбираете тип Custom. Обратите внимание на пункт #2:
Make sure any security groups or firewalls allow traffic: From and To all other hosts on UDP ports 500 and 4500 (for IPsec networking)
Если вы устанавливаете rancher-agent на том же сервере, что и rancher-server, то в пункте #4 нужно указать IP адрес вашего сервера.
Затем копируете и исполняете в консоли команду из пункта #5, например:
docker run -e CATTLE_AGENT_IP=”1.2.3.4″ –rm –privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.9 https://1.2.3.4:8080/v1/scripts/C21EC123D3479B2419F:1546718400000:V7ikAXHL0PvnanKYtIl3XwOh1Wg
Вы увидите похожее сообщение:
INFO: Running Agent Registration Process, CATTLE_URL=https://1.2.3.4:8080/v1 INFO: Attempting to connect to: https://1.2.3.4:8080/v1 INFO: https://1.2.3.4:8080/v1 is accessible INFO: Inspecting host capabilities INFO: Boot2Docker: false INFO: Host writable: true INFO: Token: xxxxxxxx INFO: Running registration INFO: Printing Environment INFO: ENV: CATTLE_ACCESS_KEY=BBDC1943DC174062CBAE INFO: ENV: CATTLE_AGENT_IP=1.2.3.4 INFO: ENV: CATTLE_HOME=/var/lib/cattle INFO: ENV: CATTLE_REGISTRATION_ACCESS_KEY=registrationToken INFO: ENV: CATTLE_REGISTRATION_SECRET_KEY=xxxxxxx INFO: ENV: CATTLE_SECRET_KEY=xxxxxxx INFO: ENV: CATTLE_URL=https://1.2.3.4:8080/v1 INFO: ENV: DETECTED_CATTLE_AGENT_IP=172.17.0.1 INFO: ENV: RANCHER_AGENT_IMAGE=rancher/agent:v1.2.9 INFO: Deleting container rancher-agent INFO: Launched Rancher Agent: 853bf010f823913387b6428caca265c99eb5ed439d5d1efe53f7b4837ec9f11c
После чего в веб-интерфейсе Rancher должен появиться Сервер. Если же этого не произошло в течении минуты, вероятно вы используете container-selinux ниже версии 2.14, смотрите один из предыдущих параграфов. Либо не сделали указание из пункта #4 при добавлении сервера.
Посмотрите логи rancher агента и сервера с помощью команд:
docker logs –tail=200 -f rancher-agent docker logs –tail=200 -f rancher-server
Например, могут быть такие ошибки:
2018-03-05 17:28:46,890 ERROR [62db6f98-ca40-4745-9b54-9c0423819de1:210] [agent:1] [agent.activate->(MetadataProcessHandler)] [] [ecutorService-1] [i.c.p.p.m.MetadataProcessHandler ] Failed to find account id for registeredAgent:12018-03-05 17:29:12,296 ERROR [:] [] [] [] [TaskScheduler-1] [i.c.p.a.s.ping.impl.PingMonitorImpl ] Failed to get ping from agent [1] count [3]2018-03-05 17:29:27,302 ERROR [:] [] [] [] [TaskScheduler-1] [i.c.p.a.s.ping.impl.PingMonitorImpl ] Scheduling reconnect for [1]
Настройка iptables на CentOs для работы Rancher и Docker
Вероятной проблемой может быть блокировка соединений в фаерволле или в iptables. Если есть возможность, попробуйте их отключить. Если же такой возможности нет, то посмотрите лог фаервола какие именно соединения были заблокированы и добавьте исключения для Rancher.
Для iptables логгирование reject соединений можно настроить так:
iptables -A INPUT -j LOG –log-prefix “iptables blocked input: ” iptables -A OUTPUT -j LOG –log-prefix “iptables blocked output : “
А затем посмотреть сообщения из журнала:
tail -F /var/log/messages | grep 'iptables blocked'
Проанализировав лог, нужно сформировать и добавить правила. При необходимости повторить. Если же вашей квалификации для этого не достаточно, попробуйте примерно такие правила:
iptables -A OUTPUT -p tcp -j ACCEPT iptables -A INPUT -p tcp -j ACCEPT
Не забудьте затем удалить логгирование. Для начала нужно получить список всех текущих правил и их порядковых номеров:
iptables -L –line-numbersChain INPUT (policy DROP) num target prot opt source destination 1 ACCEPT all — anywhere anywhere 2 ACCEPT udp — anywhere anywhere udp dpt:isakmp 3 ACCEPT udp — anywhere anywhere udp dpt:ipsec-nat-t 4 ACCEPT tcp — anywhere anywhere tcp dpt:ipsec-nat-t 5 ACCEPT all — anywhere anywhere 6 ACCEPT tcp — anywhere anywhere tcp dpt:ssh 7 ACCEPT all — anywhere anywhere state RELATED,ESTABLISHED 8 ACCEPT icmp — anywhere anywhere 9 ACCEPT tcp — anywhere anywhere tcp dpt:intermapper 10 ACCEPT all — 172.17.0.0/16 anywhere 11 ACCEPT all — 10.0.0.0/8 anywhere 12 LOG all — anywhere anywhere LOG level warning prefix “iptables blocked input: ” Chain OUTPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all — anywhere anywhere state NEW,RELATED,ESTABLISHED 2 LOG all — anywhere anywhere LOG level warning prefix “iptables blocked output: ” 3 ACCEPT tcp — anywhere anywhere tcp dpt:webcache 4 ACCEPT tcp — anywhere anywhere
И удалить правила со значением LOG в колонке target, в моём случае это:
iptables -D OUTPUT 2 iptables -D INPUT 12
Читайте также
Источник: https://evilinside.ru/rancher-na-centos-7-4-iptables/
Как я могу использовать iptables для centos 7?
С RHEL 7/CentOS 7, firewalld был введен для управления iptables. IMHO, firewalld больше подходит для рабочих станций, чем для серверных сред.
Можно вернуться к более классической настройке iptables. Во-первых, остановите и замаскируйте firewalld-сервис:
systemctl stop firewalld
systemctl mask firewalld
Затем установите пакет iptables-services:
yum install iptables-services
Включить службу во время загрузки:
systemctl enable iptables
Управление услугой
systemctl [stop|start|restart] iptables
Сохранение правил брандмауэра может быть выполнено следующим образом:
service iptables save
или
/usr/libexec/iptables/iptables.init save
ответ дан Sgaduuw 18 июля '14 в 17:29источник поделиться
RHEL и CentOS 7 используют firewall-cmd вместо iptables. Вы должны использовать такую команду:
# add ssh port as permanent opened port
firewall-cmd –zone=public –add-port=22/tcp –permanent
Затем вы можете перезагрузить правила, чтобы убедиться, что все в порядке
firewall-cmd –reload
Это лучше, чем использование iptable-save, espacially, если вы планируете использовать контейнеры lxc или docker. Запуск сервисов докеров приведет к появлению некоторых правил, которые подскажут команда iptable-save. Если вы сохраните результат, у вас будет много правил, которые НЕ должны быть сохранены. Поскольку контейнеры докеров могут изменить их ip-адреса при следующей перезагрузке.
Брандмауэр-cmd с постоянной опцией лучше для этого.
Отметьте “man firewall-cmd” или проверить официальные firewalld docs, чтобы просмотреть параметры. Существует множество опций для проверки зон, конфигурации, того, как это работает… справочная страница действительно завершена.
Я настоятельно рекомендую не использовать iptables-service, поскольку Centos 7
ответ дан Metal3d 10 авг. '14 в 18:12источник поделиться
У меня возникла проблема, что перезагрузка не запускает iptables.
Это зафиксировало это:
yum install iptables-services
systemctl mask firewalld
systemctl enable iptables
systemctl enable ip6tables
systemctl stop firewalld
systemctl start iptables
systemctl start ip6tables
ответ дан par 04 авг. '14 в 6:23источник поделиться
Я изменил изменение файла /etc/sysconfig/ip6tables-config:
IP6TABLES_SAVE_ON_STOP=”no”
To:
IP6TABLES_SAVE_ON_STOP=”yes”
И это:
IP6TABLES_SAVE_ON_RESTART=”no”
To:
IP6TABLES_SAVE_ON_RESTART=”yes”
Казалось, что сохранить изменения, которые я сделал с помощью команд iptables, перезагрузившись.
ответ дан Dug 08 окт. '14 в 1:24источник поделиться
Поместите конфигурацию IPtables в традиционный файл, и она будет загружена после загрузки:
/и т.д./sysconfig/Iptables
ответ дан BVB Media 22 нояб. '14 в 11:40источник поделиться
В прошлом месяце я попытался настроить iptables на контейнере VM LXC, но каждый раз после перезагрузки конфигурация iptables не была автоматически загружена.
Единственный способ заставить меня работать, выполнив следующую команду:
ответ дан BVB Media 05 апр. '17 в 9:53источник поделиться
И чтобы добавить, вы также сможете сделать то же самое для ip6tables после запуска команды systemctl mask firewalld:
systemctl start ip6tables.service systemctl enable ip6tables.service
ответ дан jman594 06 апр. '15 в 7:33источник поделиться
Если вы это сделаете, и вы используете fail2ban, вам необходимо включить соответствующие фильтры/действия:
Поместите следующие строки в /etc/fail2ban/jail.d/sshd.local
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
logpath = /var/log/secure
maxretry = 5
bantime = 86400
Включить и запустить fail2ban:
systemctl enable fail2ban
systemctl start fail2ban
Ссылка: https://blog.iopsl.com/fail2ban-on-centos-7-to-protect-ssh-part-ii/
ответ дан Sebas 13 нояб. '15 в 19:54источник поделиться
Источник: https://qaru.site/questions/50228/how-can-i-use-iptables-on-centos-7
Настройка Iptables в Unix/Linux
У меня есть установленный веб-сервер Apache на CentOS. Как настроить брандмауэр, используя IPTables, разрешить или запретить доступ к веб-серверу под CentOS? В уроке я покажу вам, как я это делаю.
Что такое Iptables?
Iptables является приложением, что позволяет системному администратору настраивать таблицы в
брандмауэре ядра Linux (реализовано в виде различных Netfilter модулей) и цепей и правил. Различные модули и программы ядра в настоящее время используются для различных протоколов; Iptables относится к IPv4, ip6tables на IPv6, arptables к ARP и Ebtables для Ethernet.
Настройка IPTables
В большинстве дистрибутивов Linux, включая RedHat / CentOS Linux уже сразу с IPTables по умолчанию. Вы можете использовать следующую процедуру для проверки того, что Iptables был уже установлен. Откройте терминал и введите следующую команду:
# iptables -V
Пример вывода:
Iptables v1.3.5
Вы можете использовать следующую команду, чтобы просмотреть состояние команды Iptables, для этого выполните:
# yum info iptables
Если команда что выше не появляется, то введите следующую команду, чтобы установить ИПтейблес
# yum install iptables -y
Конфигурация Iptables для веб-сервера
Конфигурация Iptables по умолчанию на CentOS не разрешает доступ к HTTP (TCP порт 80) и HTTPS (TCP ПОРТ 443 )которые использует веб-сервер (например Apache).
Шаг 1: Flush или удалите все IPTABLES правила
# iptables -F # iptables -X # iptables -t nat -F # iptables -t nat -X # iptables -t mangle -F # iptables -t mangle -X
Шаг 2: Установите правила по дефолту
# iptables -P INPUT DROP # iptables -P FORWARD ACCEPT # iptables -P OUTPUT ACCEPT
Шаг 3: Разрешить доступ к HTTP для 80 порта и HTTPS для 443 порта
# iptables -A INPUT -i lo -j ACCEPT # iptables -A INPUT -m state –state ESTABLISHED -j ACCEPT # iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT # iptables -A INPUT -p icmp -j ACCEPT # iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT # iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 443 -j ACCEPT
Добавить iptables в автозагурзку ОС
Введите следующие две команды, чтобы включить брандмауэр:
# chkconfig iptables on
Сохранить правила
# service iptables save
СтартСпотРестарт службы
# service iptables start # service iptables stop # service iptables restart
Анти synflood с Iptables
Нужно отредактировать /etc/sysctl.conf, чтобы защититься от некоторых видов атак и добавить или обновить можно добавив эти строки в файл:
net.ipv4.tcp_syncookies = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.netfilter.ip_conntrack_max = 1048576
И введите следующие команды
# iptables -A PREROUTING -i eth0 -p tcp -m tcp –dport 80 –syn -m recent –set –name CHECK –rsource # iptables -A PREROUTING -i eth0 -p tcp -m tcp –dport 80 –syn -m recent –update –seconds 5 –hitcount 15 –rttl –name CHECK –rsource -j DROP
21 пример использования iptables для администраторов
Защита от DDoS с iptables, готовый скрипт
Как заблокировать IP адрес с помощью iptables на Linux
Настройка IPtables для web сервера на RedHat/CentOS/Fedora
ВСЕ! Тема «Как настроить Iptables в CentOS» завершена, надеюсь что все понятно изложено.
Источник: https://linux-notes.org/kak-nastroit-iptables-v-centos/
Первичная настройка IPTables для веб-сервера — на примере CentOS / Заметки Сис.Админа
Всем доброго времени суток и прочих разностей.
Продолжу, пожалуй, тему серверов, авось кому-то пригодится зачем-то куда-то где-то. Сегодня кратенько хочется поговорить про IPTables, чтобы создать буквально самую простейшую базовую фильтрацию от различного типа атак, да и просто прикрыть порты, чтобы не брутфорсили и всё такое.
Кому-то сие может пригодится для небольшой настройки своего, допустим, VPS'а (если он у Вас есть), а кому-то просто поможет обезопасить систему от лишней ереси.. И хотя конечно мануал будет краткий и не охватит все аспекты, но в качестве базы подойдет вполне.
Рассказывать буду на примере CentOS, но, в общем-то, оно применимо и для других систем.
Приступим.
IPTables — простой фаервол, установленный на большинстве дистрибутивов Linux. Мануалы Linux'ов гласят, что IPT — это инструмент управления пакетными фильтрами IPv4 и NAT, то есть, это инструмент фильтрации и блокировки интернет-трафика. Короче есть почти везде и используется частенько.
Давайте приступим. Все команды указаны для SSH, но их результирующую можно в общем-то добавлять ручками в сам список iptables непосредственно через редактор. Смотрите как Вам удобнее, по мне проще SSH'шем.
Для начала порой есть смысл выполнить:
iptables -F
Сие сбрасывает правила фаерволла как таковые.
Можно не выполнять, если IPTables уже был кем-то настроен и Вы боитесь потерять сделанные настройки. К слову, при определенных правилах маршрутов может сделать сервер недоступным и придется обращаться к хостеру для отключения IPTables. В общем можно, но с осторожностью.
Базовые правила фильтрации ереси (сначала идет команда, потом мой комментарий, комментарий забивать в консоль не надо):
iptables -A INPUT -p tcp –tcp-flags ALL NONE -j DROP #блокирует нулевые пакеты
iptables -A INPUT -p tcp –tcp-flags ALL ALL -j DROP #сброс пакетов XMAS
iptables -A INPUT -p tcp ! –syn -m state –state NEW -j DROP #защита от syn-flood
Базовая защита SSH (на этом примере можно защищать FTP и другие порты):
-A INPUT -s ВАШ_IP -p tcp -m tcp –dport 22 -j ACCEPT #разрешает доступ по SSH (при условии, что порт 22-ой) с ВАШ_IP, где ВАШ_IP – это IP-адрес с которого нужен доступ (строку можно повторять нужное число раз, перечисляя разные IP-шники)
-A INPUT -p tcp –dport 22 -j DROP #запрещает доступ по SSH со всех IP, кроме указанных в строке выше
Разрешаем порты для нужных сервисов (на примере нескольких базовых):
iptables -A INPUT -i lo -j ACCEPT #разрешает трафик на локальный интерфейс. localhost часто используется для размещения, например, базы данных, к которой подключаются веб-сайт и почтовый сервер, т.е таким образом, сервер имеет доступ к базе данных, но взломать её через интернет сложно.
iptables -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT iptables -A INPUT -p tcp -m tcp –dport 443 -j ACCEPT #разрешает трафик на 80-ый и 443-ий порты, т.е веб-сервер, т.е http и https
Почта (если сервер не выступает как почтовый, то можно не разрешать):
iptables -A INPUT -p tcp -m tcp –dport 25 -j ACCEPT iptables -A INPUT -p tcp -m tcp –dport 465 -j ACCEPT #разрешает smtp-трафик
iptables -A INPUT -p tcp -m tcp –dport 110 -j ACCEPT iptables -A INPUT -p tcp -m tcp –dport 995 -j ACCEPT #разрешает pop-трафик
iptables -A INPUT -p tcp -m tcp –dport 143 -j ACCEPT iptables -A INPUT -p tcp -m tcp –dport 993 -j ACCEPT #разрешает imap-трафик
Разрешаем исходящие соединения, в целях, например, использования ping и других внутренних приложений:
iptables -I INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT #если не собираетесь использовать, то можно не указывать, но тогда есть вероятность того, что не будут работать, скажем, обновления из интернета
По аналогии разрешите доступ ко всем нужным портам, в частности, со своего IP-адреса. Порты могут быть любыми, в частности, если на сервере есть панель, то не забудьте разрешить доступ к её порту, а то не попадете туда через веб-морду.
Проделав всё необходимое, собственно, остается лишь:
iptables -P OUTPUT ACCEPT iptables -P INPUT DROP #закрываем остальные порты наглухо и разрешаем исходящие соединения c сервера
iptables -L -n #проверяем заданные правила, мало ли что-то забыли
iptables-save | sudo tee /etc/sysconfig/iptables #сохраняем изменения
service iptables restart #перезагружаем iptables для принятия изменений
Совсем базово как-то так. Думаю, что при включении банальной логики, у Вас получится настроить необходимый минимум
к содержанию ↑
Послесловие
Такие дела. Пользуйтесь на здоровье.
Если есть вопросы, дополнения и всё такое прочее, то то велком в комментарии.
Источник: https://sonikelf.ru/pervichnaya-nastrojka-iptables-dlya-veb-servera-na-primere-centos/
How To Install Iptables Firewall In CentOS 7 Linux
Are you used to the classic iptables firewall and want to kill firewalld? Well there’s still hope for you yet! Here we will show you how to stop and disable the default firewalld firewall and instead install and configure iptables in CentOS 7 Linux.
It’s worth noting that iptables and firewalld are mutually exclusive, only one should be running at any one time. Therefore, if we wish to use either firewalld or iptables we should ensure that the opposite service is completely stopped, disabled, and masked so that it will not interfere.
Disable Firewalld
By default in CentOS 7 Linux, the firewalld firewall will be configured to start up automatically during boot. As we can only run either firewalld or iptables at any one time, we will first disable firewalld.
[[email protected] ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
This disables firewalld from starting automatically on system boot, however it does not stop the current running instance of firewalld from running, so we do that next.
[[email protected] ~]# systemctl stop firewalld
While firewalld will no longer start automatically at boot and is not currently running, it can still be started manually by command line. To prevent this, we mask the service as shown below.
[[email protected] ~]# systemctl mask firewalld
Created symlink from /etc/systemd/system/firewalld.service to /dev/null.
We are now ready to install and configure iptables.
Enable Iptables
In my default installation of CentOS 7 I already have the iptables package installed which can be used to run the iptables command, however we also need to install iptables-services in order to have iptables start automatically on system boot.
[[email protected] ~]# yum install iptables-services -y
We will now check the status of iptables, as shown below after a clean install it will not be currently running and will be set to disabled, that is it will not start automatically on system boot.
[[email protected] ~]# systemctl status iptables
iptables.service – IPv4 firewall with iptables Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled) Active: inactive (dead)
After the installation is complete, we will configure iptables to start automatically on system boot.
[[email protected] ~]# systemctl enable iptables
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
Next we will start iptables, activating the firewall.
[[email protected] ~]# systemctl start iptables
Now if we check the status of iptables, we should see that it is both actively running, and enabled to start on system boot.
[[email protected] ~]# systemctl status iptables
iptables.service – IPv4 firewall with iptables Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled) Active: active (exited) since Tue 2016-12-27 02:54:27 PST; 1min 52s ago Process: 44351 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS) Main PID: 44351 (code=exited, status=0/SUCCESS) Dec 27 02:54:27 localhost.localdomain systemd[1]: Starting IPv4 firewall with iptables…
Dec 27 02:54:27 localhost.localdomain iptables.init[44351]: iptables: Applying firewall rules: [ OK ]
Dec 27 02:54:27 localhost.localdomain systemd[1]: Started IPv4 firewall with iptables.
You can now configure the iptables firewall as usual by modifying the /etc/sysconfig/iptables file. We can confirm this is the correct file to use by using the rpm -qc command against the iptables-services package that we installed earlier, as this will list all default configuration files associated with the package.
[[email protected] ~]# rpm -qc iptables-services
Источник: https://rootusers.com/how-to-install-iptables-firewall-in-centos-7-linux/