Method 2: Managing services in Linux with init
The commands in init are also as simple as system.
To list all the Linux services, use
The services preceded by are disabled and those with are enabled.
5. Check the status of a service
Furthermore, to check if your intended result was achieved, you can output the service status
This will output information in the following manner:
This will, most importantly, tell you if a certain service is active (running) or not.
Wrapping Up
Today I detailed two very simple methods of managing services on Ubuntu or any other Linux system. I hope this article was helpful to you.
Which method do you prefer? Let us know in the comment section below!
Introducing the Upstart Daemon
As the serialized way of loading jobs and services became more time consuming and complex with System V , the Upstart daemon was introduced for faster loading of the OS, graceful clean-up of crashed services, and predictable dependency between system services.
Upstart was better than System V in a few ways:
- It didn’t deal with arcane shell scripts to load and manage services. Instead, it uses simple configuration files that are easy to understand and modify
- Services were not loaded serially like System V, which cuts down on system boot time
- It used a flexible event system to customize how services are handled in various states
- Upstart had better ways of handling how a crashed service should respawn.
- There was no need to keep a number of redundant symbolic links, all pointing to the same script
To keep things simple, Upstart is backward-compatible with System V. The script still runs to manage native System V services. Its main difference is the way it allows multiple events to be associated with a service. This event-based architecture allowed Upstart to be a flexible service manager. With Upstart, each event can fire off a shell script that takes care of that event. These events included:
- Starting
- Started
- Stopping
- Stopped
In between these events, a service can be in a number of states, like waiting, pre-start, starting, running, pre-stop, stopping, etc. Upstart could take action for each of these states as well, creating a very flexible architecture.
At startup, Upstart will run any System V scripts normally. It will then look under the directory and execute the shell commands in each service configuration file. Among other things, these files controlled the service’s startup behavior.
The files have a naming style of , and they have plain text content with different sections, called stanzas. Each stanza describes a different aspect of the service and how it should behave. To make a service start automatically after a crash or reboot, you can add the command in its service configuration files, as shown below for the cron service.
/etc/init/cron.conf
DHCP Client Configuration
Setting additional DNS Servers
Example: dhclient3 uses /etc/dhcp/dhclient.conf. The setting you want is:
supersede domain-name-servers 12.34.56.78, 12.34.56.79;
or perhaps
prepend domain-name-servers 12.34.56.78, 12.34.56.79;
Setting additional search domains
Adding search domains for VPNs or local virtual networks:
append domain-name " virt vpn";
Note the leading space since the string is literally appended to the search domain provided by other configurations.
See the dhclient.conf(5) manual page for details.
Bridging
Bridging puts multiple interfaces into the same network segment. This is very popular when connecting a server to multiple switches for high availability or with virtualization. In the latter case it is usually used to create a bridge in the host (eg. dom0) and put the virtual interfaces of the guests (domU) into the bridge.
The bridge-utils package is required to create bridged interfaces.
Example: Connect a server to 2 switches (via eth0 and eth1) by defining bridge 0 and give the server an IP address in this subnet:
auto br0 iface br0 inet static address 10.10.0.15/24 gateway 10.10.0.1 bridge_ports eth0 eth1 up /usr/sbin/brctl stp br0 on
If a server is connected to multiple switches then you usually need to run the spanning tree protocol to avoid loops. Therefore STP must be turned on via an «up» command as shown above.
Example: Bridge setup without IP address configuration (use «manual» instead of «static») to «forward» an interface to a guest VM. (The static bridge config contains only 1 physical interface. The virtual interface will be added to the bridge when the VM is started.)
auto br1 iface br1 inet manual bridge_ports eth4 up /usr/sbin/brctl setageing br1 0 up /usr/sbin/brctl stp br1 off
Note: The Linux bridge supports only STP, no RSTP (Rapid Spanning Tree). Therefore it supports only the old STP Costs, not the new RSTP Costs (see ). This is usually fine with Cisco Switches, but eg. Juniper switches use the RSTP costs and therefore this may lead to different spanning tree calculations and loop problems. This can be fixed by settings the costs manually, either on the switch or on the server. Setting the cost on the switch is preferred as Linux switches back to the default costs whenever an interface does down/up.
В RHEL/CentOS/Fedora/Scientific Linux
В Fedora, RHEL и его клонах, таких как CentOS, Scientific Linux, конфигурация сетевой карты (кратко NIC) хранится в каталоге /etc/sysconfig/network-scripts/. Для выполнения следующих команд используйте пользователя root. Если же вы вошли в систему как обычный пользователь, просто используйте sudo перед каждой командой.
Сначала необходимо узнать имя сетевой карты. Для этого запустите:
# ip addr
Пример вывода
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:80:63:19 brd ff:ff:ff:ff:ff:ff inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe80:6319/64 scope link valid_lft forever preferred_lft forever
Обычно имя проводной сетевой карты начинается с буквы «е», а имя беспроводной карты начинается с буквы «w».
Как видно из вышеприведенного вывода, имя моей проводной сетевой карты enp0s3. Он может отличаться в вашем дистрибутиве, но обычно начинается с буквы «е».
Давайте настроим статический IP-адрес для этого сетевого адаптера.
Откройте файл конфигурации сетевой карты в любом редакторе:
# nano /etc/sysconfig/network-scripts/ifcfg-enp0s3
nano — текстовый редактор. Вы можете использовать любой текстовый редактор на ваш выбор, например, vi или gedit.
Добавьте IP-адрес, маску подсети, шлюз и DNS-сервер, как показано ниже.
TYPE="Ethernet" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" NAME="enp0s3" UUID="e9f9caef-cb9e-4a19-aace-767c6ee6f849" ONBOOT="yes" HWADDR="08:00:27:80:63:19" IPADDR0="192.168.1.150" PREFIX0="24" GATEWAY0="192.168.1.1" DNS1="192.168.1.1" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes"
- BOOTPROTO = ”none” — эта строка показывает, что IP-адрес сетевой карты должен быть настроен вручную. Если вы установите значение «dhcp», то сетевая карта будет принимать IP-адрес от любого DHCP-сервера в сети;
- IPADDR0 = ”192.168.1.150″ — в этой строке указывается IP-адрес сетевой карты. Здесь вы можете заметить число 0 (ноль) после IPADDR. Это означает, что эта карта имеет только один IP-адрес. Если вы хотите установить более одного IP-адреса (то есть виртуального IP-адреса, то вам нужно добавить строки обозначенные как IPADDR1, IPADDR2 и т.д.;
- PREFIX0 = ”24″ — эта строка указывает маску подсети, т.е. 25.255.255.0. Здесь вы можете указать более одного PREFIX со строками PREFIX1, PREFIX2 и т.д., в соответствии с числом виртуальных IP-адресов;
- GATEWAY0 = ”192.168.1.1″ — это адрес шлюза NIC;
- DNS1 = ”192.168.1.1″ — адрес сервера имен.
После того, как вы настройки, сохраняем и закрываем файл. Перезапускаем сетевой сервис, чтобы изменения вступили в силу.
# systemctl restart network
Или перезагружаем систему.
Проверим правильность настройки сетевых интерфейсов:
# ip addr
Или можно проверить адрес конкретной сетевой карты, как показано ниже.
# ip a s enp0s3
Пример вывода последней команды
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:80:63:19 brd ff:ff:ff:ff:ff:ff inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe80:6319/64 scope link valid_lft forever preferred_lft forever
Кроме того, вы можете использовать команду nmtui для настройки IP-адреса.
Введите IP-адрес, маску сети, шлюз, DNS и т.д.
Нажмите OK, чтобы сохранить изменения, и перезапустите сетевую службу или перезагрузите систему, чтобы изменения вступили в силу.
22.9. Дополнительная информация: утилита ethtool
Для вывода и изменения значений рабочих параметров сетевой карты следует использовать утилиту . Результаты работы утилиты зависят от возможностей вашей сетевой карты. При рассмотрении представленного в примере вывода можно сделать вывод, что сетевая карта осуществляет автоматическое согласование пропускной способности.
root@laika:~# ethtool eth0 Settings for eth0: Supported ports: Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised auto-negotiation: Yes Speed: 1000Mb/s Duplex: Full Port: Twisted Pair PHYAD: 0 Transceiver: internal Auto-negotiation: on Supports Wake-on: pumbg Wake-on: g Current message level: 0x00000033 (51) Link detected: yes
А в данном примере показана методика использования утилиты ethtool с целью перевода сетевой карты с режима работы с пропускной способностью в 1000МБит к режиму работы с пропускной способностью в 100МБит и назад. Учтите, что для возврата сетевой карты в режим работы с пропускной способностью в 1000Мбит потребуется некоторое время.
root@laika:~# ethtool eth0 | grep Speed Speed: 1000Mb/s root@laika:~# ethtool -s eth0 speed 100 root@laika:~# ethtool eth0 | grep Speed Speed: 100Mb/s root@laika:~# ethtool -s eth0 speed 1000 root@laika:~# ethtool eth0 | grep Speed Speed: 1000Mb/s
Как запустить, остановить и перезапустить сервисы в Linux
Linux обеспечивает детальный контроль над системными службами через systemd с помощью команды systemctl. Службы могут быть включены, выключены, перезапущены, перезагружены или даже включены или отключены при загрузке. Если вы используете Debian, CentOSили Ubuntu, ваша система, вероятно, использует systemd.
Это руководство покажет вам, как использовать основные команды для запуска, остановки и перезапуска служб в Linux.
Базовый синтаксис команды systemctl
Основной синтаксис для использования команды systemctl:
systemctl
Как правило, вам нужно запускать это как суперпользователь поэтому команды будут начинаться с sudo.
Как проверить, работает ли служба в Linux
Чтобы проверить, активна ли служба или нет, выполните следующую команду:
sudo systemctl status SERVICE_NAME
Замените SERVICE_NAME на нужный сервис.
В нашем случае мы будем брать за пример веб-сервер Apache.
sudo systemctl status apache2
Так мы проверили состояние Apache. Выходные данные показывают, что служба активна (работает), как на рисунке ниже:
Как перезапустить сервис
Чтобы остановить и перезапустить службу в Linux, используйте команду:
sudo systemctl restart SERVICE_NAME
Где SERVICE_NAME — имя вашего сервиса.
После выполнения команды ваш сервис должен снова заработать. Вы можете проверить состояние с помощью команды status
Для перезапуска нашего сервера Apache используем:
sudo systemctl restart apache2
Как перезагрузить конфигурационные файлы сервиса
Чтобы служба перезагрузила свои файлы конфигурации, введите в терминале следующую команду:
sudo systemctl reload SERVICE_NAME
После перезагрузки проверьте ее состояние командой status для подтверждения.
В нашем примере мы перезагрузили Apache, используя:
sudo systemctl reload apache2
Как запустить сервис
Чтобы запустить службу в Linux вручную, введите в терминале следующее:
sudo systemctl start SERVICE_NAME
Например, команда для запуска службы Apache:
sudo systemctl start apache2
Как остановить сервис
Чтобы остановить активную службу в Linux, используйте следующую команду:
sudo systemctl stop SERVICE_NAME
Для нашего апача используем команду
sudo systemctl stop apache2
Проверьте, остановился ли сервис с помощью команды status . Вывод должен показать, что сервис неактивен — inactive (dead)
Как включить сервис при загрузке
Чтобы настроить службу для запуска при загрузке системы, используйте команду:
sudo systemctl enable SERVICE_NAME
Чтобы включить Apache при загрузке системы, выполните команду:
sudo systemctl enable apache2
Как отключить сервис при загрузке
Вы можете запретить запуск службы при загрузке с помощью команды:
sudo systemctl disable SERVICE_NAME
sudo systemctl disable apache2
Introducing the System V init Daemon
System V uses an file, which later methods have kept for backward compatibility. Let’s run through System V’s startup sequence:
- The daemon is created from the binary file /sbin/init
- The first file the daemon reads is /etc/inittab
- One of the entries in this file decides the runlevel the machine should boot into. For example, if the value for the runlevel is specified as 3, Linux will boot in multi-user, text mode with networking enabled. (This runlevel is known as the default runlevel)
- Next, the daemon looks further into the /etc/inittab file and reads what scripts it needs to run for that runlevel
So, when the daemon finds what scripts its needs to run for the given runlevel, it’s actually finding out what services it needs to start up. These scripts are where you can configure startup behavior for individual services.
An script is what controls a specific service in System V. scripts for services were either provided by the application’s vendor or came with the Linux distribution (for native services). You can also create your own script for a custom created service.
When a process or service such as MySQL Server starts under System V, its binary program file has to load into memory. Depending on how the service is configured, this program may continuously execute the background (and accept client connections). The job of starting, stopping, or reloading this binary application is handled by the service’s script. It’s called the script because it initializes the service.
In System V, an script is a shell script. They are also called (run command) scripts. The scripts are located under the directory. These scripts are symlinked to the directories. Within the directory, there are a number of directories, each with a number in its name. The numbers represent different runlevels. So we have , , and so on.
To make a service restart after a crash or reboot, you can usually add a line like this to the script:
To enable a System V service to start at system boot time, run this command:
To disable it, run this command:
To check the status (running or stopped), run this command
Перезагрузка файла конфигурации Tmux
Когда мы модифицируем Tmux в соответствии с нашими требованиями, мы должны перезагрузить файл конфигурации. В этом сегменте мы рассмотрим три возможных метода перезагрузки файла конфигурации Tmux:
1. С помощью команды «tmux source-file» перезагрузите файл конфигурации Tmux.
Чтобы перезагрузить tmux.conf из командной строки, используйте следующую команду:
исходный файл tmux
Если файл находится в домашнем каталоге пользователя (что обычно и бывает), команда будет такой:
исходный файл tmux ~/.tmux.conf
2. С помощью командной строки Tmux перезагрузите файл конфигурации Tmux.
В качестве альтернативы мы можем использовать командную строку Tmux, чтобы начать процесс перезагрузки. Для этого нажмите «Префикс +:», а затем введите следующую команду в командную строку:
исходный файл ~/.tmux.conf
Примечание: префикс «Ctrl+b»
Это загружает файл конфигурации из текущего сеанса Tmux.
Перезагрузить файл конфигурации
3. Перезагрузка файла конфигурации Tmux с префиксом и комбинацией клавиш
Нам нужно регулярно менять файл конфигурации Tmux, и многие люди находят утомительным многократный ввод команды «исходный файл». Давайте сделаем быстрый ярлык для этого. Откройте файл tmux.conf в вашем любимом текстовом редакторе. В этом примере мы будем использовать nano:
нано ~/.tmux.conf
Затем добавьте в него следующую строку, затем перезагрузите файл конфигурации Tmux:
привязать исходный файл r ~/.tmux.conf
Перезагрузите файл конфигурации с помощью текстового редактора.
Вам нужно ввести префикс, за которым следует «r», в следующий раз, когда вы должны перезагрузить файл конфигурации.
Это все. Вы успешно научились перезагружать файл конфигурации Tmux.
Если вам интересно, как использовать это приложение Tmux, не волнуйтесь, так как ниже приведен краткий способ его использования:
Как использовать Тмукс
Для передачи команд на терминал Tmux у нас есть три варианта:
- Использование префиксных ключей: Tmux использует комбинацию клавиш, известную как префиксные ключи, которые по умолчанию «CTRL+б». Этот префикс сопровождается еще одним или двумя ключами, которые Tmux будет интерпретировать для определенного операция. Мы можем перечислить активные сеансы, например, набрав .
- Чтобы передать инструкции прямо на терминал Tmux, мы должны сначала войти в командный режим, нажав префиксные клавиши, за которыми следует двоеточие (:). Чтобы ввести инструкции Tmux, в нижней части терминала появится командная строка.
- Команды Tmux также можно выполнять из терминала, отличного от Tmux, или из командной строки. Эти инструкции имеют префикс «tmux».
Настройка DNS в Debian
Сперва мы ознакомимся с файлом /etc/resolv.conf. Это — это основной файл настройки библиотеки распознавателя имен DNS. Распознаватель — это библиотека на языке Cи, именно она обеспечивает доступ к DNS для программ в системе.
Его функции настроены на следующее:
- На проверку записей в файле /etc/hosts или на нескольких серверах DNS;
- На использование базы данных хостов NIS (Информационная служба сети);
В современных Linux-системах, которые используют systemd, локальные приложения получают доступ к DNS через демон system-resolved. По умолчанию эта служба имеет четыре различных режима и использует по умолчанию файл-заглушку. Его путь: /run/systemd/resolve/stub-resolv.conf.
В данном файле используется в качестве единственного DNS-сервера заглушка — 127.0.0.53, которая перенаправляет обращения к локальному DNS серверу, а он, в свою очередь уже получает информацию от других серверов в интернете. Надеюсь, вы поняли суть.
К сожалению, из-за того, что /etc/resolv.conf не прямо управляется службой systemd-resolved, а иногда с помощью использования initscripts или NetworkManager, любые пользовательские изменения НЕ будут сохранены. С учетом всех сложностей, описанных выше, я хочу поделиться с вами информацией о том, как настроить DNS на Debian в этом злополучном файле /etc/resolv.conf.
Шаг 1. Содержимое /etc/resolv.conf
Чтобы это сделать мы откроем терминал и напишем команду:
В нем мы видим имя сервера nameserver 192.168.1.1 и больше ничего. Это пока что, но мы к нему вернемся.
Шаг 2. Установка resolvconf
Обязательно обновим систему с помощью команды:
После обновления устанавливаем resolvconf. Для этого пишем команду:
После установки система должна автоматически запустить службу resolvconf.service. Чтобы проверить так ли это вам надо будет использовать команду:
Здесь мы видим, что служба не запущена, но бывает, что триггер срабатывает автоматически. Так или иначе, нам надо запустить эту службу. Используем следующие команды:
Как вы поняли, с помощью sudo systemctl start resolvconf.service и sudo systemctl enable resolvconf.service мы запускаем службу, а sudo systemctl status resolvconf.service отобразит состояние активности этой службы.
Шаг 3. Настройка DNS
Теперь откройте файл /etc/resolvconf/resolv.conf.d/head. Делается это с помощью команды:
Прекрасно, следующим шагом будет внесение данных в этот файл. Вписываем в него следующие строки так, как это показано на скриншоте:
Сохраняем изменения с помощью ctrl+o -> Enter -> ctrl+x. Теперь надо перезагрузить систему, чтобы изменения пришли в действие.
Шаг 4. Проверяем файл /etc/resolv.conf
После перезагрузки снова открываем терминал и пишем команду для запуска службы (это вторичная мера, у меня, например, триггер сработал автоматически):
Видим, что служба запущена. Переходим в наш конфигурационный файл, который был описан в самом начале статьи. Используем команду:
На скриншоте отображены те самые данные, которые мы внесли в файл — nameserver 8.8.8.8 и nameserver 8.8.4.4 На этом все! Настройка DNS Debian завершена. Достаточно легко и просто, а главное, что все работает.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
iproute2 method
Also, ifupdown supports specifying multiple interfaces by repeating iface sections with the same interface name. The key difference from the method described above is that all such sections are treated by ifupdown as just one interface, so user can’t add or remove them individually. However, up/down commands, as well as scripts, are called for every section as it used to be.
Note however that this method is dangerous! Certain driver/hardware combinations may sometimes fail to bring the link up if no labels are assigned to the alias interfaces. (Seen this on Debian Wheezy and Jessie with RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 01) auto-negotiating to 10/full. A similar warning from another person exists in the history of this page.)
This /etc/network/interfaces text assigns three IP addresses to eth0.
auto eth0 allow-hotplug eth0 iface eth0 inet static address 192.168.1.42/24 gateway 192.168.1.1 iface eth0 inet static address 192.168.1.43/24 iface eth0 inet static address 192.168.1.44/24 # adding IP addresses from different subnets is also possible iface eth0 inet static address 10.10.10.14/24
Manual approach:
auto eth0 allow-hotplug eth0 iface eth0 inet static address 192.168.1.42/24 gateway 192.168.1.1 up ip addr add 192.168.1.43/24 dev $IFACE label $IFACE:0 down ip addr del 192.168.1.43/24 dev $IFACE label $IFACE:0 up ip addr add 192.168.1.44/24 dev $IFACE label $IFACE:1 down ip addr del 192.168.1.44/24 dev $IFACE label $IFACE:1 up ip addr add 10.10.10.14/24 dev $IFACE label $IFACE:2 down ip addr del 10.10.10.14/24 dev $IFACE label $IFACE:2
CategoryNetwork CategorySystemAdministration CategoryNetwork
Примеры правил
В данных примерах блокировка IP-адреса будет происходить на 12 минут после 4-х попыток ввода пароля в течение 8 минут. Эти параметры берутся из настроек . Если их нужно переопределить, просто добавляем их при описании правила.
Обратите внимание, что данные правила подразумавают типичное использование итилит для работы с брандмауэром, а именно, для CentOS это firewalld, для Ubuntu — iptables. Однако, в вашей системе могут использоваться другие инструменты
Тогда необходимо это учитывать и правильно указывать значение для опции action.
SSH
CentOS (firewalld)
vi /etc/fail2ban/jail.d/ssh.conf
enabled = true
port = ssh
filter = sshd
action = firewallcmd-new
logpath = /var/log/secure
Ubuntu (iptables)
vi /etc/fail2ban/jail.d/ssh.conf
enabled = true
port = ssh
filter = sshd
action = iptables
logpath = /var/log/auth.log
Asterisk
а) для iptables:
vi /etc/fail2ban/jail.d/asterisk.conf
enabled = true
filter = asterisk
action = iptables-allports
logpath = /var/log/asterisk/messages
б) для firewalld:
vi /etc/fail2ban/jail.d/asterisk.conf
enabled = true
filter = asterisk
action = firewallcmd-new
logpath = /var/log/asterisk/messages
* обратите внимание, что меняется только значение для action
NGINX
vi /etc/fail2ban/jail.d/nginx.conf
enabled = true
port = http,https
filter = nginx-http-auth
action = iptables-multiport
logpath = /var/log/nginx/error.log
NGINX DDoS (req limit)
Данное правило поможет защитить веб-сервер nginx от DDoS-атак. В некоторых сборках, для данного правило может не оказаться готового фильтра, поэтому в данном примере, мы его создадим вручную.
Для начала, необходимо настроить NGINX:
vi /etc/nginx/nginx.conf
В раздел http добавим:
http {
…
limit_req_zone $binary_remote_addr zone=one:10m rate=25r/s;
…
* данная настройка создает зону с интенсивностью 25 запросов в секунду.
После настраиваем лимит для конкретного виртуального домена в разделе server — location:
server {
…
location / {
…
limit_req zone=one burst=50 nodelay;
…
* данная настройка вместе с предыдущей зоной, созданной в секции http, позволит задать лимит — 25 запросов в секунду при всплеске 50 запросов.
Проверяем конфигурационный файл nginx и перезапускаем сервис:
nginx -t
systemctl reload nginx
В лог-файле (по умолчанию /var/log/nginx/error.log) при превышении лимита подключения мы должны увидеть запись на подобие:
2020/11/16 19:11:08 1330844#1330844: *16640836 limiting requests, excess: 10.520 by zone «one», client: xxx.xxx.xxx.xxx, server: dmosk.ru, request: «GET / HTTP/1.1», host: «dmosk.ru», referrer: «https://dmosk.ru/page1»
* обратите внимание, что в вашем случае путь до лога может быть другой. Он определяется в конфигурационном файле NGINX
Теперь можно приступать к настройке fail2ban. Создаем фильтр:
vi /etc/fail2ban/filter.d/nginx-limit-req.conf
ngx_limit_req_zones = +
failregex = ^\s*\ \d+#\d+: \*\d+ limiting requests, excess: + by zone «(?:%(ngx_limit_req_zones)s)», client: <HOST>
ignoreregex =
* данный файл может быть уже создан и настроен при установке fail2ban. Если это так, то ничего не меняем и идем дальше.
Создаем правило в fail2ban:
vi /etc/fail2ban/jail.d/nginx-ddos.conf
enabled = true
port = http,https
filter = nginx-limit-req
action = iptables-multiport
logpath = /var/log/nginx/error.log
* еще раз обращаю внимание на путь logpath — в вашем случае он может быть другим. После настройки не забываем перезапустить fail2ban:
После настройки не забываем перезапустить fail2ban:
systemctl restart fail2ban
Шаг 4 — Настройка виртуальных хостов (рекомендуется)
При использовании веб-сервера Apache вы можете использовать виртуальные хосты (аналогичные серверным блокам в Nginx) для инкапсуляции данных конфигурации и размещения на одном сервере нескольких доменов. На этом шаге мы будем настраивать домен с именем , но вы должны будете заменить его собственным доменным именем. Чтобы узнать больше о настройке доменного имени с помощью DigitalOcean, пройдите наше обучающее руководство Введение в DigitalOcean DNS.
В Apache в CentOS 7 по умолчанию включен один серверный блок, настроенный на обслуживание документов из директории . Хотя это хорошо работает для отдельного сайта, при хостинге нескольких сайтов это неудобно. Вместо изменения вы создадите структуру директорий внутри для сайта , оставив на месте в качестве директории по умолчанию, которая будет обслуживаться, если запрос клиента не будет соответствовать каким-либо другим сайтам.
Создайте директорию для , используя флаг для создания необходимых родительских директорий:
Создайте дополнительную директорию для хранения файлов журнала для сайта:
Затем назначьте права владения для директории с помощью переменной среды :
Убедитесь, что ваша корневая директория имеет набор разрешений по умолчанию:
Затем создайте в качестве примера страницу , используя или свой любимый редактор:
Нажмите для переключения в режим (ВСТАВКА) и добавьте в файл следующий пример HTML-контента:
/var/www/example.com/html/index.html
Сохраните и закройте файл, нажмите , введите и нажмите .
Создав директорию сайта и пример файла index, вы уже почти готовы к созданию файлов виртуального хоста. Файлы виртуального хоста определяют конфигурацию отдельных сайтов и указывают веб-серверу Apache, как отвечать на различные запросы доменов.
Перед созданием ваших виртуальных хостов вам нужно будет создать директорию , чтобы хранить их в этой директории. Также вы должны будете создать директорию , которая указывает Apache, что виртуальный хост готов к обслуживанию посетителей. Директория будет хранить символьные ссылки на виртуальные хосты, которые мы хотим опубликовать. Создайте обе директории с помощью следующей команды:
Затем вы должны попросить Apache выполнить поиск виртуальных хостов в директории . Для этого необходимо изменить главный файл конфигурации Apache и добавить строку, объявляющую опциональную директорию для дополнительных файлов конфигурации:
Добавьте эту строку в конец файла:
Сохраните и закройте файл после добавления этого кода. Теперь, когда у вас есть директории виртуального хоста, вы можете создать ваш файл виртуального хоста.
Начните с создания нового файла в директории :
Добавьте следующий блок конфигурации и измените домен на собственный:
/etc/httpd/sites-available/example.com.conf
Так вы сможете показать, где Apache нужно искать корневую директорию, которая хранит общедоступные веб-документы. Также это указывает, где Apache будет хранить ошибки и журналы запросов для этого сайта.
Сохраните файл и закройте его после завершения.
Теперь, когда вы создали файлы виртуального хоста, вы должны будете активировать их, чтобы Apache смог предоставлять их посетителям. Для этого нужно создать символьную ссылку для каждого виртуального хоста в директории :
Теперь ваш виртуальный хост настроен и готов к предоставлению контента. Прежде чем перезапускать службу Apache, давайте убедимся, что SELinux располагает правильными политиками для ваших виртуальных хостов.