Как ограничить использование ЦП (% ЦП)?

Нет -джейлу не нужен доступ к шлейфу или общедоступному интерфейсу. И вы можете обойтись без виртуального сетевого интерфейса (VNET/VIMAGE ), если вы не хотите использовать теги VLAN или более сложные вещи.

Обычно я клонирую петлевой интерфейс. Тогда у меня есть внутренний интерфейс, используемый только для джейлов и джейл-трафика. И тогда я управляю доступом с помощью брандмауэра pf. Вы не указываете конкретно -, но похоже, что вы используете скрипт ezjail. Я просто использую то, что поставляется с базовой системой -, но принципы те же. Многие службы, которые вы настраиваете в джейлах, будут ссылаться на *:portили 0.0.0.0:port. Это будет привязано к любому доступному IP-адресу, и вы можете увидеть эти ошибки. Если вы явно привяжете эти службы к адресу, доступному в джейле, вы не увидите этих ошибок.

Мой /etc/jail.confвыглядит так:

# Global settings applied to all jails.
host.hostname = "${name}.jail";
interface = "lo1";
path = "/usr/local/jails/${name}";
mount.fstab = "/usr/local/jails/${name}.fstab";
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.clean;
mount.devfs;

# Only needed for PostgreSQL:
# allow.sysvipc;

myjail1 { ip4.addr = 172.17.2.1; }
myjail2 { ip4.addr = 172.17.2.2; }
myjail3 { ip4.addr = 172.17.2.3; }

Параметр lo1настраивается в /etc/rc.conf

.
cloned_interfaces="lo1"
ifconfig_lo1="inet 172.17.2.0 netmask 255.255.255.0"

Раньше я устанавливал каждый IP отдельно в /etc/rc.conf, но на самом деле это не нужно. Приведенных выше двух строк в /etc/rc.confи ссылки на lo1в /etc/jail.confдостаточно. Но если вы хотите, вы можете использовать псевдонимы адресов впереди:

ifconfig_lo1_alias0="inet 172.17.2.1 netmask 255.255.255.255"
ifconfig_lo1_alias1="inet 172.17.2.2 netmask 255.255.255.255"
ifconfig_lo1_alias2="inet 172.17.2.3 netmask 255.255.255.255"

После этого в /etc/pf.confпоступает оставшийся материал. Вы можете использовать любые имена, которые хотите -, но я по умолчанию использую эти макросы в верхней части:

##########
# Macros #
##########
if=             "em0"          # Realtek = "re0", Intel = "igb0" or "em0" - Whatever your interface is named.
jif=            "lo1"          # We use the clone of lo0 for jail traffic        
loopback=       "lo0"
jnet=           $jif:network

jailhost=       "1.1.1.1"      # I put my public IP here.

#jails
jail1=          "172.17.2.1"       # Describe my jail
jail2=          "172.17.2.2"       # do.
jail3=          "172.17.2.3"       # do.

#aliases for services
tornode=       $jail1
web=           $jail2
mail=          $jail3

Остальное — типичная настройка брандмауэра.

Если я хочу получить доступ по SSH (через порт 1234 )извне к определенной тюрьме, у меня будет правило NAT. Это будет сопоставлено с jail1 на порту 22.

rdr pass log inet proto tcp from any to ($if) port 1234 -> $jail1 port ssh

Таким образом, если у вас есть несколько тюрьм, работающих с SSH на порту 22, вы получите ошибки, которые вы видите, поскольку конфигурация SSH по умолчанию привязана к 0.0.0.0. Если вы привязываетесь к определенному IP-адресу, вы не увидите ошибку.

Если вы посмотрите в /etc/ssh/sshd_configв jail1, вы по умолчанию получите:

#ListenAddress 0.0.0.0

Затем вы просто привязываете его к конкретному IP-адресу тюрьмы:

ListenAddress 172.17.2.1

Вернуться к /etc/pf.conf. Если я хочу, чтобы tornodeмог получить доступ к моей тюрьме web, я явно разрешаю доступ к портам 80 и 443.

pass on $jif proto tcp from $tornode to $web port http
pass on $jif proto tcp from $tornode to $web port https

И если вы хотите протестировать http в самой тюрьме web, то я должен указать и это:

pass on $jif proto tcp from $web to $web port http

Много дорог ведут в Рим, но описанная выше простая схема мне очень подходит.

1
26.05.2020, 20:14
1 ответ

Вы не можете сделать с ulimit, есть инструмент, который может это сделать, путем приостановки и отмены -приостановки процесса(cpulimit). Он может быть частью вашей ОС, он является частью Debian, но не установлен по умолчанию. Также есть пространства имен ядра. Однако вам не нужно этого делать. Unix неплохо себя ведет в этой ситуации. Вы также можете использовать nice, но я редко видел ситуацию, когда это было необходимо. У вашей проблемы может быть другая причина, например подкачка.

1
18.03.2021, 23:32

Теги

Похожие вопросы