join file1 file2
по умолчанию он будет использовать столбец 1 для каждого файла и пропускать строки, отсутствующие в любом из них, что вы и хотите. Также файлы нужно отсортировать, что уже и так.
Нет -джейлу не нужен доступ к шлейфу или общедоступному интерфейсу. И вы можете обойтись без виртуального сетевого интерфейса (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
Много дорог ведут в Рим, но описанная выше простая схема мне очень подходит.