Existe uma maneira de configurar o Libreswan para oportunisticamente criar um SA IPSec com um host remoto, fazendo o pré-carregamento de certificados ou chaves de hosts em que confiamos?
Estou procurando a configuração do Libreswan que permitiria que um grupo de hosts do RHEL, CentOS ou Fedora estabelecesse SAs de IPSec entre si sem precisar especificar uma seção "conn" para cada host para hospedar a conexão. Para explicar o que quero dizer, vou dar um exemplo. Eu tenho hosts alpha, bravo, charlie e delta. Atualmente eu tenho uma seção de configuração semelhante à seguinte para cada uma das seis conexões (Alpha < - > Bravo, Alpha < - > Charlie, Alpha < - > Delta, Bravo < - > ; Charlie, Bravo < - > Delta, Charlie < - > Delta):
conn alpha+bravo
[email protected]
left=10.1.2.3
leftrsasigkey=
[email protected]
right=10.1.2.4
rightrsasigkey=
authby=rsasig
auto=start
Enquanto minha configuração atual permite que seis hosts se comuniquem via IPSec, estou preocupado com sua capacidade de escalar, já que o número de seções de configuração é igual a (n * (n-1)) / 2. Para apenas 20 hosts, precisaria de 190 seções de configuração! Escrevi o seguinte programa perl para facilitar a geração da configuração a partir de um arquivo CSV com apelido, endereço IP e chave.
#!/usr/bin/perl
#use strict;
use warnings;
sub usage {
$0 =~ /([^\/]+)$/;
my $name = $&;
print "$name [host+keyfile]
each line of host+keyfile should contain the short hostname,
IP address,
and the key returned from 'ipsec showhostkey --left'\n
This program then outputs ipsec.conf content to support
all of the connections.
\n";
exit 1;
}
if ( !defined $ARGV[0] ) {
usage;
}
open (STDI, "$ARGV[0]") or die "Can't open input file: $!";
my $section=0;
my @hosts = <STDI> ;
my (@a, @b) ;
#foreach $i (@hosts) {
for ($i = 0; $i < $#hosts ; $i++) {
for ($j = $i+1 ; $j <= $#hosts ; $j++) {
@a = split(/,/,$hosts[$i]);
@b = split(/,/,$hosts[$j]);
print "conn $a[0]+$b[0]\n";
print "\tleftid=\@$a[0]\n";
print "\tleft=$a[1]\n";
print "\tleftrsasigkey=$a[2]";
print "\trightid=\@$b[0]\n";
print "\tright=$b[1]\n";
print "\trightrsasigkey=$b[2]";
print "\tauthby=rsasig\n";
print "\tauto=start\n\n";
}
}
close STDI;
Então, novamente, isso funcionou para mim, mas para 100 hosts, meu arquivo de configuração será de 19 MB! O que eu realmente quero saber é qual é a maneira correta de usar o libreswan para configurar host para hospedar IPSec SAs / VPNs entre um grande número de hosts?