6.6. 인증서 기반 인증을 사용하여 IPsec 메시 VPN을 수동으로 구성
IPsec 메시는 모든 서버가 다른 모든 서버와 안전하고 직접 통신할 수 있는 완전히 상호 연결된 네트워크를 생성합니다. 이는 여러 데이터 센터 또는 클라우드 공급자에 걸쳐 있는 분산 데이터베이스 클러스터 또는 고가용성 환경에 이상적입니다. 각 서버 쌍 간에 직접 암호화된 터널을 설정하면 중앙 병목 현상 없이 보안 통신을 수행할 수 있습니다.
인증의 경우 CA(인증 기관)에서 관리하는 디지털 인증서를 사용하면 안전하고 확장 가능한 솔루션이 제공됩니다. 메시의 각 호스트는 신뢰할 수 있는 CA에서 서명한 인증서를 제공합니다. 이 방법은 강력하고 검증 가능한 인증을 제공하고 사용자 관리를 단순화합니다. CA에서 액세스를 중앙에서 부여하거나 취소할 수 있으며 Libreswan은 인증서 해지 목록(CRL)에 대해 각 인증서를 확인하여 인증서가 목록에 표시되면 액세스를 거부하여 이를 시행합니다.
사전 요구 사항
공개 키 암호화 표준 #12 (PKCS #12) 파일은 다음 내용과 함께 메시의 각 피어에 있습니다.
- 서버의 개인 키
- 서버 인증서
- CA 인증서
- 필요한 경우 중간 인증서
개인 키 및 CSR(인증서 서명 요청) 생성 및 CA에서 인증서를 요청하는 방법에 대한 자세한 내용은 CA 설명서를 참조하십시오.
서버 인증서에는 다음 필드가 포함되어 있습니다.
-
EKU(Extended Key Usage)는
TLS 웹 서버 인증으로 설정됩니다
. - CN(일반 이름) 또는 SAN(주체 대체 이름)은 호스트의 FQDN(정규화된 도메인 이름)으로 설정됩니다.
- X509v3 CRL 배포 지점에는 CRL(Certificate Revocation Lists)에 대한 URL이 포함되어 있습니다.
-
EKU(Extended Key Usage)는
프로세스
Libreswan이 아직 설치되지 않은 경우 다음 단계를 수행합니다.
libreswan
패키지를 설치합니다.dnf install libreswan
# dnf install libreswan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NSS(Network Security Services) 데이터베이스를 초기화합니다.
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은
/var/lib/ipsec/nss/
디렉터리에 데이터베이스를 생성합니다.ipsec
서비스를 활성화하고 시작합니다.systemctl enable --now ipsec
# systemctl enable --now ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 방화벽에서 IPsec 포트 및 프로토콜을 엽니다.
firewall-cmd --permanent --add-service="ipsec" firewall-cmd --reload
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
PKCS #12 파일을 NSS 데이터베이스로 가져옵니다.
ipsec import <file>.p12
# ipsec import <file>.p12 Enter password for PKCS12 file: <password> pk12util: PKCS12 IMPORT SUCCESSFUL correcting trust bits for Example-CA
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서버 및 CA 인증서의 닉네임을 표시합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 구성 파일에 이 정보가 필요합니다.
/etc/ipsec.d/
디렉터리에 연결에 대한.conf
파일을 만듭니다. 예를 들어 다음 설정을 사용하여/etc/ipsec.d/mesh.conf
파일을 만듭니다.CRL 검사를 활성화하려면
config setup
섹션을 추가합니다.config setup crl-strict=yes crlcheckinterval=1h
config setup crl-strict=yes crlcheckinterval=1h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제에 지정된 설정은 다음과 같습니다.
crl-strict=yes
- CRL 검사를 활성화합니다. NSS 데이터베이스에서 CRL을 사용할 수 없는 경우 피어 인증이 거부됩니다.
crlcheckinterval=1h
- 지정된 기간 후에 서버의 인증서에 지정된 URL에서 CRL을 다시 가져옵니다.
메시의 멤버 간에 트래픽을 적용하는 섹션을 추가합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제에 지정된 설정은 다음과 같습니다.
left=%defaultroute
-
ipsec
서비스가 시작될 때 기본 경로 인터페이스의 IP 주소를 동적으로 설정합니다. 또는왼쪽
매개 변수를 호스트의 IP 주소 또는 FQDN으로 설정할 수 있습니다. leftid=%fromcert
및rightid=%fromcert
- 인증서의 고유 이름(DN) 필드에서 ID를 검색하도록 Libreswan을 구성합니다.
leftcert="<server_certificate_nickname>"
- NSS 데이터베이스에 사용된 서버 인증서의 닉네임을 설정합니다.
leftrsasigkey=%cert
- 인증서에 포함된 RSA 공개 키를 사용하도록 Libreswan을 구성합니다.
leftsendcert=always
- 피어가 CA 인증서에 대해 유효성을 검사할 수 있도록 항상 인증서를 전송하도록 지시합니다.
failureshunt=drop
- IPsec 협상이 실패하면 암호화를 적용하고 트래픽을 삭제합니다. 이는 보안 메시에 중요합니다.
right=%opportunisticgroup
- 정책 파일에 정의된 동적 원격 피어 그룹에 연결을 적용하도록 지정합니다. 이를 통해 Libreswan은 해당 그룹에 나열된 각 IP 또는 서브넷에 대해 운영적으로 IPsec 터널을 인스턴스화할 수 있습니다.
예제에 사용된 모든 매개변수에 대한 자세한 내용은 시스템의
ipsec.conf(5)
도움말 페이지를 참조하십시오.CIDR(Classless inter-domain routing) 형식으로 피어 또는 서브넷을 지정하는
/etc/ipsec.d/policies/server-mesh
정책 파일을 만듭니다.192.0.2.0/24 198.51.100.0/24
192.0.2.0/24 198.51.100.0/24
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이러한 설정을 사용하면
ipsec
서비스가 이러한 서브넷의 호스트 간 트래픽을 암호화합니다. 호스트가 IPsec 메시의 멤버로 구성되지 않으면 이 호스트와 메시 멤버 간의 통신이 실패합니다.ipsec
서비스를 다시 시작하십시오.systemctl restart ipsec
# systemctl restart ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 정책 파일에 지정한 서브넷의 모든 호스트에서 절차를 반복합니다.
검증
메시의 호스트로 트래픽을 전송하여 터널을 설정합니다. 예를 들어 호스트를 ping합니다.
ping -c3 <peer_in_mesh>
# ping -c3 <peer_in_mesh>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPsec 상태를 표시합니다.
ipsec status
# ipsec status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 연결이 성공적으로 설정된 경우 출력에는 피어에 대한 다음과 같은 행이 포함됩니다.
인터넷 키 교환 버전 2(IKEv2) 협상의 1단계가 성공적으로 완료되었습니다.
#1: "<connection_name>#192.0.2.0/24"[1] ...192.0.2.2:500 ESTABLISHED_IKE_SA (established IKE SA); REKEY in 12822s; REPLACE in 13875s; newest; idle;
#1: "<connection_name>#192.0.2.0/24"[1] ...192.0.2.2:500 ESTABLISHED_IKE_SA (established IKE SA); REKEY in 12822s; REPLACE in 13875s; newest; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 보안 연계(SA)는 이제 자식 SA 또는 2단계 SA로 알려진 실제 데이터 암호화 터널을 협상할 준비가 되었습니다.
하위 SA가 설정되었습니다.
#2: "<connection_name>#192.0.2.0/24"[1] ...192.0.2.2:500 ESTABLISHED_CHILD_SA (established Child SA); REKEY in 13071s; REPLACE in 13875s; newest; eroute owner; IKE SA #1; idle;
#2: "<connection_name>#192.0.2.0/24"[1] ...192.0.2.2:500 ESTABLISHED_CHILD_SA (established Child SA); REKEY in 13071s; REPLACE in 13875s; newest; eroute owner; IKE SA #1; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 데이터 트래픽이 통과하는 실제 터널입니다.
서비스가 CRL을 로드했는지 확인하고 해당 항목을 NSS 데이터베이스에 추가했는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
다음 단계
- DHCP 또는 SLAAC(상태 비저장 주소 자동 구성)가 있는 네트워크에서 이 호스트를 사용하는 경우 연결이 리디렉션될 수 있습니다. 자세한 내용 및 완화 단계는 연결이 터널을 우회하지 못하도록 전용 라우팅 테이블에 VPN 연결 할당을 참조하십시오.