- Некоторые аспекты управления VDS-сервером под Linux
- Содержание
- Базовые команды по управлению Nginx
- Управление сервером
- Установка супервизора
- Анализ свободного места на диске
- Поиск файлов командой find
- Тестирование TCP и UDP-соединений
- Сканирование портов
- Пересылка сообщений и файлов
- Добавление и удаление пользователей
- mtds / lvn.md
Некоторые аспекты управления VDS-сервером под Linux
VDS (Virtual Dedicated Server) — услуга, в рамках которой пользователь получает виртуальный выделенный сервер с максимальными привилегиями. Это эмуляция реального физического сервера, у него есть рутовый доступ, возможность установки произвольных операционных систем и любого софта. При этом он обходится значительно дешевле аренды сопоставимого по мощности физического сервера.
На сервер можно поставить ОС со своего образа или воспользоваться готовым образом в панели управления.
Предположим, мы поставили Debian 10 и веб-сервер Nginx, который идёт в стандартном репозитории ( apt install nginx ). Давайте посмотрим, какие полезные утилиты и команды помогут в управлении сервером под Linux. Рассмотрим и отдельно Nginx, и сам VDS-сервер в целом.
Содержание
Или просто вводим IP-адрес сервера в браузере:
Если мы ещё не скопировали на сервер файлы своего сайта, то будет показана стандартная заглавная страница Nginx.
Базовые команды по управлению Nginx
Примечание. Если пользователь не имеет рутовых прав, то для выполнения каждой команды он должен получить рутовые привилегии с помощью команды sudo .
В случае запуска от имени root, команда такая:
Запуск после остановки:
Остановка и повторный запуск (перезапуск):
Если вы просто внесли некие изменения в конфигурацию, Nginx может перегрузиться без потери текущих соединений. Это делается следующей командой:
По умолчанию, Nginx сконфигурирован на автоматический запуск при загрузке сервера. Такое поведение можно изменить следующей командой:
Снова включить автозапуск Nginx при загрузке сервера:
По умолчанию в Nginx сконфигурирован один набор правил server blocks для одного домена. Предполагается, что на вашем сервере размещается только один сайт. По умолчанию он должен располагаться в директории /var/www/html .
Предположим, что вы хотите создать в Nginx несколько наборов правил server blocks для нескольких сайтов или переместить файлы текущего сайта в другую директорию /var/www/your_domain .
Это делается следующими командами.
Сначала создаём нужную директорию на сервере.
Затем назначаем владельца этой директории с помощью переменной $USER , которая должна соответствовать текущему пользователю:
Размещаем в указанной директории главную страничку index.html .
Потом нужно создать соответствующий набор правил для Nginx. В любом текстовом редакторе создаём файл /etc/nginx/sites-available/your_domain и копируем туда конфигурацию из файла по умолчанию, только с изменённым адресом и доменом:
В конце концов, активируем эту конфигурацию, прописав симлинк к новому конфигурационному файлу в директории sites-enabled , которую Nginx считывает при загрузке:
После перезагрузки Nginx будет выдавать соответствующую страницу на запросы your_domain и www.your_domain .
Управление сервером
Какие вопросы чаще всего возникают у пользователей при управлении Linux-сервером? Какие инструменты можно порекомендовать даже не очень опытным администраторам?
Установка супервизора
Supervisor — это система клиент/сервер, при помощи которой администратор контролирует процессы на сервере. Инструмент создает процессы в виде подпроцессов от своего имени.
Установка supervisord в Debian или Ubuntu предельно простая:
После этого демон супервизора уже запущен и будет запускаться при каждой загрузке системы.
Новые программы передаются в супервизор через конфигурационные файлы в директории /etc/supervisor/conf.d . Например, для скрипта long.sh конфигурационный файл может выглядеть следующим образом:
Соответственно, скрипт будет автоматически запускаться при каждой загрузке системы и автоматически перезапускаться в случае выхода. Это значение может быть ‘false’ (не перезапускаться) или ‘unexpected’ (перезапускаться только в случае выхода с неожиданным кодом ошибки, по умолчанию, с любым кодом, кроме 0 или 2).
Две последние строчки — адреса журналов. Это минимальный шаблон конфигурации для программы в супервизоре.
После создания файла конфигурации для конкретной программы запускаем две команды, чтобы супервизор перечитал и применил новые конфигурации:
На этом этапе наша программа или скрипт уже должны запуститься, что можно проверить по логам.
В утилите supervisorctl есть интерактивный режим, в котором она запускается без аргументов:
В этом режиме supervisorctl изначально выводит статус и время работы всех программ под управлением супервизора, а потом свю командную строку. Там можно ввести help — и увидеть список доступных команд:
Как видим, можно запускать, останавливать и перезапускать программы из командной строки с помощью команд start, stop и restart.
Выход из супервизорпа осуществляется по Ctrl-C или командой quit:
Анализ свободного места на диске
Стандартная утилита для просмотра информации о смонтированных разделах — это df . Она выводит список подключенных устройств и информацию о занятом месте.
Параметр -h активирует режим читаемого человеком вывода (то есть в мегабайтах или гигабайтах):
Информация о конкретной директории (например, /home):
Информация о разделах с заданной файловой системой:
Поиск файлов командой find
Поиск по названию файла:
Поиск по названию без учёта регистра:
«Обратный» поиск файлов, которые не соответствуют указанному шаблону:
Поиск по типу файла
Некоторые из распространённых дескрипторов::
- f — обычный файл
- d — директория
- l — символическая ссылка
- c — файлы устройств посимвольного ввода-вывода
- b — файлы устройств блочного ввода-вывода
Например, следующая команда выведет все устройства посимвольного ввода-вывода, установленные в системе:
Есть фильтр по размеру и времени доступа/изменения. Например, вот команда для поиска всех файлов менее 50 байт:
Поиск всех файлов более 700 мегабайт:
Для поиска по времени доступа, модификации или изменения метаинформации файла используются параметры ‘-atime’, ‘-mtime’ и ‘-ctime’ с символами плюса и минуса для указания диапазона больше и меньше указанного, соответственно.
Поиск файлов, которые были модифицированы менее суток назад:
Файлы с временем доступа более трёх суток назад:
Файлы, которые изменялись за последнюю минуту:
Файлы, которые новее указанного файла:
Доступен поиск по владельцу (‘-user’, ‘-group’) и по файлам с конкретными разрешениями (‘-perm’). На всех найденных файлах можно сразу провести какое-нибудь действие (‘-exec’).
Тестирование TCP и UDP-соединений
В комплекте Linux идёт большое количество полезных утилит. Некоторые системные администраторы способны выполнять большинство задач, пользуясь только встроенным инструментарием, без установки дополнительных программ. Настоящий швейцарский нож среди встроенных инструментов Linux — сетевая утилита netcat . Общий синтаксис:
Эта команда инициирует TCP-соединение на заданный хост по указанному порту. Если вместо TCP нужно протестировать UDP-соединение, то указываем опцию -u :
В большинстве систем можно писать как netcat , так и nc .
Сканирование портов
Одно из типичных применений netcat — сканирование портов, опция -z означает сканирование вместо установления соединения. Используем её вместе с опцией -v для выдачи более детальной информации при сканировании портов с 1 до 1000:
Выдача будет выглядеть примерно так:
Впрочем, для этой задачи имеется более продвинутая, специализированная программа nmap . Устанавливаем её:
Эта утилита выдаёт более подробную информацию о портах. Реестр известных портов /usr/share/nmap/nmap-services содержит более 20 тысяч строк, в том числе дополнительные поля, такие как средняя частота открытия конкретного порта на серверах в интернете (третья колонка):
Не рекомендуется запускать сканирование портов чужого сервера, поскольку администратор системы может принять такие действия за враждебные. Nmap предназначен для исследования своего собственного сервера, а поэкспериментировать можно на специально предназначенном для тестовых целей сервере scanme.nmap.org .
Некоторые команды требует длительного времени для выполнения.
Сканирование операционной системы на хосте:
Сканирование диапазона хостов от xxx.xxx.xxx.xxx до yyy.yyy.yyy.yyy:
Сканирование сетевого диапазона с поиском доступных сервисов:
Сканирование конкретного порта:
Сканирование всех открытых портов TCP и UDP:
Изучение версий ПО, работающего на хосте:
Есть много других команд, параметров и вариантов использования nmap. Сканирование портов своего VDS-сервера позволяет определить потенциальные векторы атак и уязвимости, поскольку злоумышленник начнёт свои действия именно со сканирования.
Пересылка сообщений и файлов
С помощью ключа -l можно поставить на прослушивание конкретный порт на сервере:
На другой машине мы указываем подключиться к машине по данному порту:
Теперь между двумя системами установлен канал связи. По нему можно передавать текстовые сообщения.
Таким способом можно даже передать файл. Для этого команду прослушивания направляем сразу в файл:
На другом компьютере вместо текстового сообщения подаём на вход оригинальный файл:
Аналогично можно передавать самые разные вещи, например, содержимое директорий, заархивированное на лету в tarball :
Таким же способом можно на одной стороне создать образ диска ( dd ), отправить его в указанный порт по созданному TCP-соединению — и принять на другой системе.
Добавление и удаление пользователей
Для добавления, удаления пользователей и выдачи им привилегий sudo нужно для начала подключиться к серверу как root:
После этого добавляем пользователя:
Изначально у него нет никаких привилегий. Но если это основной пользователь системы, то мы можем назначить ему административные привилегии, чтобы он мог выполнять рутинные задачи по обслуживанию и поддержке сервера.
Для назначения административных привилегий нужно добавить пользователя в группу sudo. Пользователям из этой группы разрешено запускать команду sudo с повышением своих привилегий до административных.
Вместо user1 указываем имя пользователя, которого добавили ранее. Теперь он сможет запускать любые команды через sudo :
Имея такие права, этот пользователь может удалять других пользователей:
Опция —remove-home удаляет также и домашнюю директорию пользователя.
Сам root имеет право выполнить команду deluser без sudo .
Конечно, здесь далеко не полный список полезных инструментов для управления VDS-сервером. Но эти вопросы часто возникают у начинающих системных администраторов, которые подняли свой первый сервер, поставили ОС и начинают разбираться в мире Linux-администрирования.
Источник
mtds / lvn.md
Virtual Networking on Linux
In the Linux Kernel, support for networking hardware and the methods to interact with these devices is standardized by the socket API:
In order to support new kind of computational workloads, different deployment scenarios and a better use of HW resources the Linux OS supports virtualization of different computing resources: CPU, memory, storage and networking. Virtual networking capabilities are indeed used as a basis for hosting VMs and containers.
A general overview of virtual networking components available in Linux is described in this article from the IBM developerworks web site.
Types of virtual Network Interfaces
- Bridge: A Linux bridge behaves like a network switch. It forwards packets between interfaces that are connected to it. It’s usually used for forwarding packets on routers, on gateways, or between VMs and network namespaces on a host. It also supports STP, VLAN filter, and multicast snooping.
- TUN: TUN (network Tunnel) devices work at the IP level or layer three level of the network stack and are usually point-to-point connections. A typical use for a TUN device is establishing VPN connections since it gives the VPN software a chance to encrypt the data before it gets put on the wire. Since a TUN device works at layer three it can only accept IP packets and in some cases only IPv4. If you need to run any other protocol over a TUN device you’re out of luck. Additionally because TUN devices work at layer three they can’t be used in bridges and don’t typically support broadcasting.
- TAP: TAP (terminal access point) devices, in contrast, work at the Ethernet level or layer two and therefore behave very much like a real network adaptor. Since they are running at layer two they can transport any layer three protocol and aren’t limited to point-to-point connections. TAP devices can be part of a bridge and are commonly used in virtualization systems to provide virtual network adaptors to multiple guest machines. Since TAP devices work at layer two they will forward broadcast traffic which normally makes them a poor choice for VPN connections as the VPN link is typically much narrower than a LAN network (and usually more expensive).
- VETH: Virtual Ethernet interfaces are essentially a virtual equivalent of a patch cable, what goes in one end comes out the other. When either device is down, the link state of the pair is down.
An example of creating a bridge:
Enslaving a network interface to a bridge:
An example of creating two virtual ethernet interfaces (ep1,ep2) and linking them together:
veth interfaces can also be linked to a bridge:
It is also possible to add IP addresses to the interfaces, for example:
All the network interfaces available will be shown with: ip address show
Many other types of virtual network interfaces are available, as described in this post from the RedHat developers blog.
Namespaces are a feature available on the Linux kernel which is used as a basis for many software technology like Linux Containers (LXC), Docker and software-defined network (SDN) solutions. It basically allows to define and use multiple virtual instances of the resources available on a host.
Linux namespaces include (additional references are available in the man page):
In particular, network namespaces allow individual containers to have exclusive access to virtual network resources, while each container can be assigned a separate network stack.
Network namespaces allows different processes to have different views of the network and different aspects of networking can be isolated between processes:
- Interfaces: different processes can connect to addresses on different interfaces.
- Routes: since processes can see different addresses from different namespaces, they also need different routes to connect to networks on those interfaces.
- Firewall rules: since these are dependant on the source or target interfaces, you may need different firewall rules in different network namespaces.
Handling of network namespaces are done with the ip command, which is part of the iproute2 package.
NOTE: all the commands in the following examples have to be executed directly by root or with root privileges (e.g. with sudo ).
Create, list and delete a network namespace:
ns1 is a network NS which is completely separated from the default one (which is always available after every Linux boot).
Distinct network namespaces can be connected together using veth interfaces:
Virtual ethernet interfaces can be assigned an IP address, inside a network class
Once the IPs are assigned, the veth interfaces have to be brought in UP state:
An example of running a ping command between the two different namespaces through the veth interfaces:
A network namespace can have its own network interface assigned to it, for example the loopback interface (which is by default always present on new network NS but in DOWN state):
It can also have a separated routing table (note that when the network namespace is initially set, the routing table is empty):
Once a network NS is created, it will shows up in multiple places:
A virtual network with network namespaces and a bridge
Considering the following properties:
- network NS can have their own network routes;
- virtual ethernet interfaces comes in pairs;
- it’s possible to assign a network interface to a different network NS;
it is then possible to build an example of multiple network NSs connected together through a Linux bridge and routing rules inside the same physical host. A bridge device give us the virtual equivalent of a network switch, allowing us to connect multiple interfaces (virtual or not), and have them communicate with each other.
The following is a conceptual schema:
- br-veth<1,2>: veth attached to the bridge
- veth<1,2>: veth part of their respective network NS
First, two network NS will be created:
Then two pairs of veth will be created:
Now two of the new veths will be attached to the network NS ( br-veth is just a convenient naming convention but it does not identify a veth connected to a bridge).
The two veth <1,2>will be shown only in their respective networks NS:
Note: the veth1 is marked as DOWN . The same goes for veth2 .
Assign the IP address 192.168.1.11 with netmask 255.255.255.0 to veth1:
An IP address (of the same network class) will be assigned also to veth2 :
Even when the two veth have assigned IP address they cannot communicate between each other: the reason is that there’s no configured interface on the default network namespace which can send the traffic to and from the two veth interfaces.
Adding a bridge it’s the only way to go further:
It can be verified that the bridge is available:
It’s now the time to connect the other two veth interfaces ( br-veth <1,2>) and attach them to the bridge:
In order to reach the veth interfaces through the routing table of the host itself, the bridge needs an IP address:
The brd string force to set the broadcast address (192.168.1.255), specifying the + symbol (255).
The routing table can be checked in this way:
From the global network NS it’s possible to reach both IP addresses (192.168.1.<11,12>) through a simple ping .
It’s also possible to reach ns2 from ns1, once the proper routing is defined:
And reaching ns2 can be tested in the following way:
If the setup will stop at this point, both the network NS will be basically isolated from the outside world: they can only ping each other (providing the internal route is configured) but cannot reach any other IP outside the 192.168.1.0/24 space.
In order to achieve this result we can use NAT (Network Address Translation) through iptables :
The previous command will specify that on the nat table we are appending ( -A ) a rule to the POSTROUTING chain for the source address specified ( -s ) and the action will be MASQUERADE .
Last but not least, the IP forwarding has to be enabled on the networking stack of the host:
A small test: send some packets to 8.8.8.8:
Источник