23.3. IPsec VPN 설정
VPN(가상 사설 네트워크)은 인터넷을 통해 로컬 네트워크에 연결하는 방법입니다. Libreswan
에서 제공하는 IPsec
은 VPN을 생성하는 기본 방법입니다. Libreswan
은 VPN을 위한 사용자 공간 IPsec
구현입니다. VPN은 인터넷과 같은 중간 네트워크에서 터널을 설정하여 LAN과 다른 LAN 간의 통신을 활성화합니다. 보안상의 이유로 VPN 터널은 항상 인증 및 암호화를 사용합니다. 암호화 작업의 경우 Libreswan
은 NSS
라이브러리를 사용합니다.
23.3.1. IPsec VPN 구현으로 Libreswan 링크 복사링크가 클립보드에 복사되었습니다!
RHEL에서는 Libreswan 애플리케이션에서 지원하는 IPsec 프로토콜을 사용하여 VPN(Virtual Private Network)을 구성할 수 있습니다. Libreswan은 Openswan 애플리케이션이 계속되고 있으며 Openswan 설명서의 많은 예제는 Libreswan과 상호 교환 할 수 있습니다.
VPN의 IPsec 프로토콜은IKE(Internet Key Exchange) 프로토콜을 사용하여 구성됩니다. IPsec과 IKE라는 용어는 서로 바꿔 사용할 수 있습니다. IPsec VPN은 IKE VPN, IKEv2 VPN, XAUTH VPN, Cisco VPN 또는 IKE/IPsec VPN이라고도 합니다. Layer 2 tunneling Protocol(L2TP)을 사용하는 IPsec VPN의 변형은 일반적으로 선택적
리포지토리에서 제공하는 xl2tpd
패키지가 필요한 L2TP/IPsec VPN이라고 합니다.
Libreswan은 오픈 소스 사용자 공간 IKE 구현입니다. IKE v1 및 v2는 사용자 수준 데몬으로 구현됩니다. IKE 프로토콜도 암호화됩니다. IPsec 프로토콜은 Linux 커널에 의해 구현되며 Libreswan은 VPN 터널 구성을 추가하고 제거하도록 커널을 구성합니다.
IKE 프로토콜은 UDP 포트 500 및 4500을 사용합니다. IPsec 프로토콜은 다음 두 프로토콜로 구성됩니다.
- 프로토콜 번호가 50인 캡슐화된 ESP(Security Payload)입니다.
- 프로토콜 번호 51이 있는 AH(인증된 헤더)입니다.
AH 프로토콜은 사용하지 않는 것이 좋습니다. AH 사용자는 null 암호화로 ESP로 마이그레이션하는 것이 좋습니다.
IPsec 프로토콜은 두 가지 작동 모드를 제공합니다.
- 터널 모드(기본값)
- 전송 모드
IKE 없이 IPsec을 사용하여 커널을 구성할 수 있습니다. 이를 수동 키링 이라고 합니다. ip xfrm
명령을 사용하여 수동 인증도 구성할 수 있지만 보안상의 이유로 이 방법은 권장되지 않습니다. Libreswan은 Netlink 인터페이스를 사용하여 Linux 커널과 통신합니다. 커널은 패킷 암호화 및 암호 해독을 수행합니다.
Libreswan은 NSS(Network Security Services) 암호화 라이브러리를 사용합니다. NSS는FIPS( Federal Information Processing Standard ) 발행 140-2와 함께 사용하도록 인증되었습니다.
Libreswan 및 Linux 커널에서 구현하는 IKE/IPsec VPN은 RHEL에서 사용하는 데 권장되는 유일한 VPN 기술입니다. 이렇게하는 위험을 이해하지 않고 다른 VPN 기술을 사용하지 마십시오.
RHEL에서 Libreswan은 기본적으로 시스템 전체 암호화 정책을 따릅니다. 이렇게 하면 Libreswan이 IKEv2를 기본 프로토콜로 포함한 현재 위협 모델에 대한 보안 설정을 사용할 수 있습니다. 자세한 내용은 시스템 전체 암호화 정책 사용을 참조하십시오.
Libreswan은 IKE/IPsec이 피어 간 프로토콜이므로 "소스" 및 "대상" 또는 "서버" 및 "클라이언트"라는 용어를 사용하지 않습니다. 대신 "left" 및 "right"라는 용어를 사용하여 엔드 포인트(호스트)를 나타냅니다. 또한 대부분의 경우 두 끝점 모두에서 동일한 구성을 사용할 수 있습니다. 그러나 관리자는 일반적으로 로컬 호스트에 대해 항상 "left"를 사용하고 원격 호스트에 대해 "오른쪽"을 사용하도록 선택합니다.
leftid
및 rightid
옵션은 인증 프로세스에서 해당 호스트를 식별하는 역할을 합니다. 자세한 내용은 ipsec.conf(5)
도움말 페이지를 참조하십시오.
23.3.2. Libreswan의 인증 방법 링크 복사링크가 클립보드에 복사되었습니다!
Libreswan은 각각 다른 시나리오에 맞는 여러 인증 방법을 지원합니다.
Pre-Shared 키(PSK)
PSK( Pre-Shared Key )는 가장 간단한 인증 방법입니다. 보안상의 이유로, 64개의 임의 문자보다 짧은 PSK를 사용하지 마십시오. FIPS 모드에서 PSK는 사용된 무결성 알고리즘에 따라 최소 요구 사항을 준수해야 합니다. authby=secret
연결을 사용하여 PSK를 설정할 수 있습니다.
원시 RSA 키
원시 RSA 키는 일반적으로 정적 host-host 또는 subnet-to-subnet IPsec 구성에 사용됩니다. 각 호스트는 다른 모든 호스트의 공개 RSA 키를 사용하여 수동으로 구성하고 Libreswan은 각 호스트 쌍 간에 IPsec 터널을 설정합니다. 이 방법은 많은 호스트에 대해 잘 확장되지 않습니다.
ipsec newhostkey
명령을 사용하여 호스트에서 원시 RSA 키를 생성할 수 있습니다. ipsec showhostkey
명령을 사용하여 생성된 키를 나열할 수 있습니다. CKA ID 키를 사용하는 연결 구성에는 leftrsasigkey=
행이 필요합니다. 원시 RSA 키에 authby=rsasig
연결 옵션을 사용합니다.
X.509 인증서
X.509 인증서 는 일반적으로 공통 IPsec 게이트웨이에 연결된 호스트로 대규모 배포에 사용됩니다. 중앙 인증 기관 (CA)은 호스트 또는 사용자의 RSA 인증서에 서명합니다. 이 중앙 CA는 개별 호스트 또는 사용자의 취소를 포함하여 신뢰 중계를 담당합니다.
예를 들어 openssl
명령 및 NSS certutil
명령을 사용하여 X.509 인증서를 생성할 수 있습니다. Libreswan은 왼쪽cert=
구성 옵션의 인증서의 닉네임을 사용하여 NSS 데이터베이스에서 사용자 인증서를 읽기 때문에 인증서를 만들 때 닉네임을 제공합니다.
사용자 정의 CA 인증서를 사용하는 경우 NSS(Network Security Services) 데이터베이스로 가져와야 합니다. ipsec import
명령을 사용하여 PKCS #12 형식의 인증서를 Libreswan NSS 데이터베이스로 가져올 수 있습니다.
Libreswan은 RFC 4945의 섹션 3.1 에 설명 된 모든 피어 인증서에 대한 주제 대체 이름 (SAN)으로 인터넷 키 교환 (IKE) 피어 ID가 필요합니다. require-id-on-certificate=no
연결 옵션을 설정하여 이 검사를 비활성화하면 시스템이 중간자 공격에 취약해질 수 있습니다.
RSA with SHA-1 및 SHA-2를 사용하는 X.509 인증서를 기반으로 하는 인증에 authby=rsasig
연결 옵션을 사용합니다. authby=을 ecdsa
및 RSA Probabilistic Signature scheme (RSASSA-PSS) 디지털 서명과
를 통해 SHA-2로 설정하여 SHA-2를 사용하여 ECDSA 디지털 서명에 대한 제한을 추가로 제한할 수 있습니다. 기본값은 authby=
rsa-sha2authby=rsasig,ecdsa
입니다.
인증서 및 authby=
서명 방법과 일치해야 합니다. 이로 인해 상호 운용성이 증가하고 하나의 디지털 서명 시스템에서 인증을 유지합니다.
NULL 인증
NULL 인증은 인증 없이 메시 암호화를 얻는 데 사용됩니다. 수동적인 공격을 방지하지만 적극적인 공격으로 인한 것은 아닙니다. 그러나 IKEv2에서는 symmetric 인증 방법을 허용하므로 인터넷 규모의 opportunistic IPsec에도 NULL 인증을 사용할 수 있습니다. 이 모델에서 클라이언트는 서버를 인증하지만 서버는 클라이언트를 인증하지 않습니다. 이 모델은 TLS를 사용하는 보안 웹 사이트와 유사합니다. NULL 인증을 위해 authby=null
을 사용합니다.
섀도우 컴퓨터 보호
앞서 언급한 인증 방법 외에도 Post-quantum Pre-shared Key (PPK) 방법을 사용하여 computer의 가능한 공격으로부터 보호할 수 있습니다. 개별 클라이언트 또는 클라이언트 그룹이 구성된 사전 공유 키에 해당하는 PPK ID를 지정하여 자체 PPK를 사용할 수 있습니다.
IKEv1을 사전 공유 키와 함께 사용하면 정크 공격자로부터 보호됩니다. IKEv2의 재 설계는 이러한 보호 기능을 기본적으로 제공하지 않습니다. Libreswan은 압 공격으로부터 IKEv2 연결을 보호하기 위해 Post-quantum Pre-shared Key (PPK)를 사용하여 IKEv2 연결을 보호합니다.
선택적 PPK 지원을 활성화하려면 연결 정의에 ppk=yes
를 추가합니다. PPK를 요구하려면 ppk=insist
를 추가합니다. 그런 다음, 각 클라이언트에 범위를 벗어난 비밀 값이 있는 PPK ID를 제공할 수 있습니다(및 더 바람직하게 압축하는 경우). PPK는 사전 단어를 기반으로 하지 않고 무작위로 매우 강력해야 합니다. PPK ID 및 PPK 데이터는 ipsec.secrets
파일에 저장됩니다. 예를 들면 다음과 같습니다.
@west @east : PPKS "user1" "thestringismeanttobearandomstr"
@west @east : PPKS "user1" "thestringismeanttobearandomstr"
PPKS
옵션은 정적 PPK를 나타냅니다. 이 실험적 기능은 일회성 기반 동적 PPK를 사용합니다. 각 연결시 한 번 패드의 새로운 부분이 PPK로 사용됩니다. 사용할 때 파일 내부의 동적 PPK의 해당 부분은 다시 사용하지 않도록 0으로 덮어씁니다. 더 이상 일회성-패드 자료가 남아 있지 않으면 연결이 실패합니다. 자세한 내용은 ipsec.secrets(5)
도움말 페이지를 참조하십시오.
동적 PPK의 구현은 지원되지 않는 기술 프리뷰로 제공됩니다. 주의해서 사용하십시오.
23.3.3. Libreswan 설치 링크 복사링크가 클립보드에 복사되었습니다!
Libreswan IPsec/IKE 구현을 통해 VPN을 설정하려면 해당 패키지를 설치하고 ipsec
서비스를 시작하고 방화벽에서 서비스를 허용해야 합니다.
사전 요구 사항
-
AppStream
리포지토리가 활성화되어 있습니다.
절차
libreswan
패키지를 설치합니다.yum install libreswan
# yum install libreswan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Libreswan을 다시 설치하는 경우 이전 데이터베이스 파일을 제거하고 새 데이터베이스를 만듭니다.
systemctl stop ipsec rm /etc/ipsec.d/*db ipsec initnss
# systemctl stop ipsec # rm /etc/ipsec.d/*db # ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec
서비스를 시작하고 부팅 시 서비스를 자동으로 시작합니다.systemctl enable ipsec --now
# systemctl enable ipsec --now
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec
서비스를 추가하여 IKE, ESP 및 AH 프로토콜에 500 및 4500/UDP 포트를 허용하도록 방화벽을 구성합니다.firewall-cmd --add-service="ipsec" firewall-cmd --runtime-to-permanent
# firewall-cmd --add-service="ipsec" # firewall-cmd --runtime-to-permanent
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.3.4. 호스트 대 호스트 VPN 생성 링크 복사링크가 클립보드에 복사되었습니다!
원시 RSA 키의 인증을 사용하여 왼쪽 및 오른쪽 이라는 두 호스트 간에 host-to-host IPsec VPN을 생성하도록 Libreswan을 구성할 수 있습니다.
사전 요구 사항
-
Libreswan이 설치되고 각 노드에서
ipsec
서비스가 시작됩니다.
절차
각 호스트에 원시 RSA 키 쌍을 생성합니다.
ipsec newhostkey
# ipsec newhostkey
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이전 단계에서 생성된 키의
c¢d
가 반환되었습니다. 예를 들면 왼쪽에서 다음 명령과함께
cutord 를 사용합니다.ipsec showhostkey --left --ckaid 2d3ea57b61c9419dfd6cf43a1eb6cb306c0e857d
# ipsec showhostkey --left --ckaid 2d3ea57b61c9419dfd6cf43a1eb6cb306c0e857d
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이전 명령의 출력에서 구성에 필요한
leftrsasigkey=
행을 생성했습니다. 두 번째 호스트에서 동일한 작업을 수행합니다(오른쪽):ipsec showhostkey --right --ckaid a9e1f6ce9ecd3608c24e8f701318383f41798f03
# ipsec showhostkey --right --ckaid a9e1f6ce9ecd3608c24e8f701318383f41798f03
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/ipsec.d/
디렉터리에 새my_host-to-host.conf
파일을 만듭니다. 이전 단계에서ipsec showhostkey
명령의 출력에서 RSA 호스트 키를 새 파일로 작성합니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 키를 가져온 후
ipsec
서비스를 다시 시작하십시오.systemctl restart ipsec
# systemctl restart ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 연결을 로드합니다.
ipsec auto --add mytunnel
# ipsec auto --add mytunnel
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 터널을 설정합니다.
ipsec auto --up mytunnel
# ipsec auto --up mytunnel
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec
서비스가 시작될 때 터널을 자동으로 시작하려면 연결 정의에 다음 행을 추가합니다.auto=start
auto=start
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - DHCP 또는 SLAAC(상태 비저장 주소 자동 구성)가 있는 네트워크에서 이 호스트를 사용하는 경우 연결이 리디렉션될 수 있습니다. 자세한 내용 및 완화 단계는 연결이 터널을 우회하지 못하도록 전용 라우팅 테이블에 VPN 연결 할당을 참조하십시오.
23.3.5. 사이트 간 VPN 구성 링크 복사링크가 클립보드에 복사되었습니다!
두 개의 네트워크에 가입하여 사이트 간 IPsec VPN을 생성하려면 두 호스트 간의 IPsec 터널이 생성됩니다. 따라서 호스트는 하나 이상의 서브넷의 트래픽이 통과할 수 있도록 구성된 엔드포인트 역할을 합니다. 따라서 호스트를 네트워크의 원격 부분에 대한 게이트웨이로 간주할 수 있습니다.
사이트-사이트 VPN의 구성은 하나 이상의 네트워크 또는 서브넷이 구성 파일에 지정해야 한다는 점에서 호스트 대 호스트 VPN과만 다릅니다.
사전 요구 사항
- 호스트 대 호스트 VPN이 이미 구성되어 있습니다.
절차
host-to-host VPN의 구성으로 파일을 새 파일로 복사합니다. 예를 들면 다음과 같습니다.
cp /etc/ipsec.d/my_host-to-host.conf /etc/ipsec.d/my_site-to-site.conf
# cp /etc/ipsec.d/my_host-to-host.conf /etc/ipsec.d/my_site-to-site.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이전 단계에서 만든 파일에 서브넷 구성을 추가합니다. 예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - DHCP 또는 SLAAC(상태 비저장 주소 자동 구성)가 있는 네트워크에서 이 호스트를 사용하는 경우 연결이 리디렉션될 수 있습니다. 자세한 내용 및 완화 단계는 연결이 터널을 우회하지 못하도록 전용 라우팅 테이블에 VPN 연결 할당을 참조하십시오.
23.3.6. 원격 액세스 VPN 구성 링크 복사링크가 클립보드에 복사되었습니다!
오로지 전사들은 모바일 클라이언트와 동적으로 할당된 IP 주소를 가진 사용자를 이동시키고 있습니다. 모바일 클라이언트는 X.509 인증서를 사용하여 인증합니다.
다음 예제에서는 IKEv2
에 대한 구성을 보여주며 IKEv1
XAUTH 프로토콜 사용을 방지합니다.
서버에서 다음을 수행합니다.
모바일 클라이언트에서 로드 해커의 장치는 이전 구성의 약간의 변형을 사용합니다.
DHCP 또는 SLAAC(상태 비저장 주소 자동 구성)가 있는 네트워크에서 이 호스트를 사용하는 경우 연결이 리디렉션될 수 있습니다. 자세한 내용 및 완화 단계는 연결이 터널을 우회하지 못하도록 전용 라우팅 테이블에 VPN 연결 할당을 참조하십시오.
23.3.7. 메시 VPN 구성 링크 복사링크가 클립보드에 복사되었습니다!
임의 의 VPN이라고도 하는 메시 VPN 네트워크는 모든 노드가 IPsec을 사용하여 통신하는 네트워크입니다. 구성을 사용하면 IPsec을 사용할 수 없는 노드에 예외가 발생할 수 있습니다. 메시 VPN 네트워크는 두 가지 방법으로 구성할 수 있습니다.
- IPsec이 필요합니다.
- IPsec을 선호하지만 대체 텍스트를 사용하여 일반 텍스트 통신을 허용합니다.
노드 간 인증은 X.509 인증서 또는 DNSSEC(DNS Security Extensions)를 기반으로 할 수 있습니다.
이러한 연결은 right=%opportunisticgroup
항목에 정의된 opportunistic IPsec 을 제외하고 일반 Libreswan 구성이므로 opportunistic IPsec에 일반 IKEv2 인증 방법을 사용할 수 있습니다. 일반적인 인증 방법은 일반적으로 공유 CA(인증 기관)를 사용하여 X.509 인증서를 기반으로 호스트가 서로 인증하는 것입니다. 클라우드 배포에서는 일반적으로 표준 절차의 일부로 클라우드에 있는 각 노드의 인증서를 발급합니다.
손상된 호스트 하나로 인해 그룹 PSK도 손상될 수 있으므로 PreSharedKey(PSK) 인증을 사용하지 마십시오.
NULL 인증을 사용하여 수동 공격자로부터만 보호하는 인증 없이 노드 간에 암호화를 배포할 수 있습니다.
다음 절차에서는 X.509 인증서를 사용합니다. Dogtag Certificate System과 같은 모든 종류의 CA 관리 시스템을 사용하여 이러한 인증서를 생성할 수 있습니다. Dogtag는 각 노드의 인증서를 개인 키, 노드 인증서 및 다른 노드의 X.509 인증서의 유효성을 검사하는 데 사용되는 루트 CA 인증서가 포함된 PKCS #12 형식(.p12
파일)에서 사용할 수 있다고 가정합니다.
각 노드에는 X.509 인증서를 제외하고 동일한 구성이 있습니다. 이를 통해 네트워크의 기존 노드를 재구성하지 않고 새 노드를 추가할 수 있습니다. PKCS #12 파일에는 "간단한 이름"이 필요합니다. 이 경우 친숙한 이름을 참조하는 구성 파일이 모든 노드에서 동일하게 유지되도록 이름 "노드"를 사용합니다.
사전 요구 사항
-
Libreswan이 설치되어 각 노드에서
ipsec
서비스가 시작됩니다. 새 NSS 데이터베이스가 초기화됩니다.
이전 NSS 데이터베이스가 이미 있는 경우 이전 데이터베이스 파일을 제거하십시오.
systemctl stop ipsec rm /etc/ipsec.d/*db
# systemctl stop ipsec # rm /etc/ipsec.d/*db
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 사용하여 새 데이터베이스를 초기화할 수 있습니다.
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
절차
각 노드에서 PKCS #12 파일을 가져옵니다. 이 단계에서는 PKCS #12 파일을 생성하는 데 사용되는 암호가 필요합니다.
ipsec import nodeXXX.p12
# ipsec import nodeXXX.p12
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPsec 필수(사설), IPsec(공유
옵션) 및
(공유) 프로필에 대해 다음 세 가지 연결 정의를 만듭니다.No IPsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
auto
변수에는 몇 가지 옵션이 있습니다.opportunistic IPsec과 함께
온 디맨드
연결 옵션을 사용하여 IPsec 연결을 시작하거나 항상 활성화할 필요가 없는 명시적으로 구성된 연결에 사용할 수 있습니다. 이 옵션은 커널에 트랩 XFRM 정책을 설정하여 해당 정책과 일치하는 첫 번째 패킷을 수신할 때 IPsec 연결을 시작할 수 있습니다.다음 옵션을 사용하여 Opportunistic IPsec 또는 명시적으로 구성된 연결을 사용하는지 여부에 관계없이 IPsec 연결을 효과적으로 구성하고 관리할 수 있습니다.
추가
옵션-
연결 구성을 로드하고 원격 시작에 응답하기 위해 준비합니다. 그러나 연결은 로컬 측에서 자동으로 시작되지 않습니다.
ipsec auto --up
명령을 사용하여 IPsec 연결을 수동으로 시작할 수 있습니다. 시작
옵션- 연결 구성을 로드하고 원격 시작에 응답하기 위해 준비합니다. 또한 원격 피어에 대한 연결을 즉시 시작합니다. 영구 및 항상 활성 연결에 이 옵션을 사용할 수 있습니다.
- 2
leftid
및rightid
변수는 IPsec 터널 연결의 오른쪽과 왼쪽 채널을 식별합니다. 이러한 변수를 사용하여 구성된 경우 로컬 IP 주소의 값 또는 로컬 인증서의 제목 DN을 가져올 수 있습니다.- 3
leftcert
변수는 사용하려는 NSS 데이터베이스의 닉네임을 정의합니다.
네트워크의 IP 주소를 해당 카테고리에 추가합니다. 예를 들어 모든 노드가
10.15.0.0/16
네트워크에 있고 모든 노드가 IPsec 암호화를 사용해야 하는 경우 다음을 수행합니다.echo "10.15.0.0/16" >> /etc/ipsec.d/policies/private
# echo "10.15.0.0/16" >> /etc/ipsec.d/policies/private
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 특정 노드(예:
10.15.34.0/24
)가 IPsec과 함께 작동하도록 허용하려면 해당 노드를 private-or-clear 그룹에 추가합니다.echo "10.15.34.0/24" >> /etc/ipsec.d/policies/private-or-clear
# echo "10.15.34.0/24" >> /etc/ipsec.d/policies/private-or-clear
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPsec을 clear 그룹으로 할 수 없는 호스트(예:
10.15.1.2
)를 정의하려면 다음을 사용합니다.echo "10.15.1.2/32" >> /etc/ipsec.d/policies/clear
# echo "10.15.1.2/32" >> /etc/ipsec.d/policies/clear
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 각 새 노드의 템플릿에서
/etc/ipsec.d/policies
디렉터리에 파일을 생성하거나 Puppet 또는 Ansible을 사용하여 파일을 프로비저닝할 수 있습니다.모든 노드에는 예외 또는 트래픽 흐름 예상과 동일한 목록이 있습니다. 따라서 두 노드는 IPsec이 필요하며 다른 노드는 IPsec을 사용할 수 없기 때문에 통신할 수 없습니다.
노드를 재시작하여 구성된 메시에 추가합니다.
systemctl restart ipsec
# systemctl restart ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - DHCP 또는 SLAAC(상태 비저장 주소 자동 구성)가 있는 네트워크에서 이 호스트를 사용하는 경우 연결이 리디렉션될 수 있습니다. 자세한 내용 및 완화 단계는 연결이 터널을 우회하지 못하도록 전용 라우팅 테이블에 VPN 연결 할당을 참조하십시오.
검증
ping
명령을 사용하여 IPsec 터널을 엽니다.ping <nodeYYY>
# ping <nodeYYY>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 가져온 인증서를 사용하여 NSS 데이터베이스를 표시합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 노드에서 열려 있는 터널을 확인합니다.
ipsec trafficstatus
# ipsec trafficstatus 006 #2: "private#10.15.0.0/16"[1] ...<nodeYYY>, type=ESP, add_time=1691399301, inBytes=512, outBytes=512, maxBytes=2^63B, id='C=US, ST=NC, O=Example Organization, CN=east'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.3.8. FIPS 호환 IPsec VPN 배포 링크 복사링크가 클립보드에 복사되었습니다!
Libreswan을 사용하여 FIPS 호환 IPsec VPN 솔루션을 배포할 수 있습니다. 이를 위해 사용 가능한 암호화 알고리즘과 FIPS 모드에서 Libreswan에 대해 비활성화된 암호화 알고리즘을 식별할 수 있습니다.
사전 요구 사항
-
AppStream
리포지토리가 활성화되어 있습니다.
절차
libreswan
패키지를 설치합니다.yum install libreswan
# yum install libreswan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Libreswan을 다시 설치하는 경우 이전 NSS 데이터베이스를 제거하십시오.
systemctl stop ipsec rm /etc/ipsec.d/*db
# systemctl stop ipsec # rm /etc/ipsec.d/*db
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec
서비스를 시작하고 부팅 시 서비스를 자동으로 시작합니다.systemctl enable ipsec --now
# systemctl enable ipsec --now
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec
서비스를 추가하여 IKE, ESP 및 AH 프로토콜에500
및4500
UDP 포트를 허용하도록 방화벽을 구성합니다.firewall-cmd --add-service="ipsec" firewall-cmd --runtime-to-permanent
# firewall-cmd --add-service="ipsec" # firewall-cmd --runtime-to-permanent
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 시스템을 FIPS 모드로 전환합니다.
fips-mode-setup --enable
# fips-mode-setup --enable
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 커널이 FIPS 모드로 전환되도록 시스템을 다시 시작하십시오.
reboot
# reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
Libreswan이 FIPS 모드에서 실행 중인지 확인합니다.
ipsec whack --fipsstatus
# ipsec whack --fipsstatus 000 FIPS mode enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 또는
systemd
저널의ipsec
유닛 항목을 확인합니다.journalctl -u ipsec
$ journalctl -u ipsec ... Jan 22 11:26:50 localhost.localdomain pluto[3076]: FIPS Product: YES Jan 22 11:26:50 localhost.localdomain pluto[3076]: FIPS Kernel: YES Jan 22 11:26:50 localhost.localdomain pluto[3076]: FIPS Mode: YES
Copy to Clipboard Copied! Toggle word wrap Toggle overflow FIPS 모드에서 사용 가능한 알고리즘을 보려면 다음을 수행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow FIPS 모드에서 비활성화된 알고리즘을 쿼리하려면 다음을 수행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow FIPS 모드에서 허용되는 모든 알고리즘 및 암호를 나열하려면 다음을 수행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.3.9. 암호로 IPsec NSS 데이터베이스 보호 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 IPsec 서비스는 처음 시작하는 동안 비어 있는 암호를 사용하여 NSS(Network Security Services) 데이터베이스를 생성합니다. 보안을 강화하기 위해 암호 보호를 추가할 수 있습니다.
이전 버전의 RHEL 6.6 버전에서는 NSS 암호화 라이브러리가 FIPS야 수준 2 표준에 대해 인증되었기 때문에 FIPSRuntimeConfig 요구 사항을 충족하기 위해 IPsec NSS 데이터베이스를 보호해야 했습니다. RHEL 8에서 NIST는 이 표준의 레벨 1로 NSS를 인증했으며, 이 상태에는 데이터베이스에 대한 암호 보호가 필요하지 않습니다.
사전 요구 사항
-
/etc/ipsec.d/
디렉터리에는 NSS 데이터베이스 파일이 포함되어 있습니다.
절차
Libreswan의
NSS
데이터베이스에 대한 암호 보호를 활성화합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이전 단계에서 설정한 암호가 포함된
/etc/ipsec.d/nsspassword
파일을 만듭니다. 예를 들면 다음과 같습니다.cat /etc/ipsec.d/nsspassword NSS Certificate DB:_<password>_
# cat /etc/ipsec.d/nsspassword NSS Certificate DB:_<password>_
Copy to Clipboard Copied! Toggle word wrap Toggle overflow nsspassword
파일은 다음 구문을 사용합니다.<token_1>:<password1> <token_2>:<password2>
<token_1>:<password1> <token_2>:<password2>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 기본 NSS 소프트웨어 토큰은
NSS 인증서 DB
입니다. 시스템이 FIPS 모드에서 실행 중인 경우 토큰 이름은NSS FIPS 140-2 인증서 DB
입니다.시나리오에 따라
nsspassword
파일을 완료한 후ipsec
서비스를 시작하거나 다시 시작합니다.systemctl restart ipsec
# systemctl restart ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
NSS 데이터베이스에 비어 있지 않은 암호를 추가한 후
ipsec
서비스가 실행 중인지 확인합니다.systemctl status ipsec
# systemctl status ipsec ● ipsec.service - Internet Key Exchange (IKE) Protocol Daemon for IPsec Loaded: loaded (/usr/lib/systemd/system/ipsec.service; enabled; vendor preset: disable> Active: active (running)...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 저널
로그에 초기화에 성공했는지 확인하는 항목이 포함되어 있는지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.3.10. TCP를 사용하도록 IPsec VPN 구성 링크 복사링크가 클립보드에 복사되었습니다!
Libreswan은 RFC 8229에 설명된 대로 IKE 및 IPsec 패킷을 TCP 캡슐화를 지원합니다. 이 기능을 사용하면 UDP를 통해 전송되는 트래픽을 방지하고 ESB(Security Payload)를 캡슐화하는 네트워크에서 IPsec VPN을 설정할 수 있습니다. TCP를 대체 또는 기본 VPN 전송 프로토콜로 사용하도록 VPN 서버와 클라이언트를 구성할 수 있습니다. TCP 캡슐화는 성능 비용이 늘어날 수 있으므로 시나리오에서 UDP가 영구적으로 차단된 경우에만 TCP를 기본 VPN 프로토콜로 사용하십시오.
사전 요구 사항
- 원격 액세스 VPN 이 이미 구성되어 있습니다.
절차
config setup
섹션의/etc/ipsec.conf
파일에 다음 옵션을 추가합니다.listen-tcp=yes
listen-tcp=yes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow UDP를 처음 시도하지 못하면 TCP 캡슐화를 대체 옵션으로 사용하려면 클라이언트의 연결 정의에 다음 두 옵션을 추가합니다.
enable-tcp=fallback tcp-remoteport=4500
enable-tcp=fallback tcp-remoteport=4500
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 또는 UDP가 영구적으로 차단되었음을 알고 있는 경우 클라이언트 연결 구성에서 다음 옵션을 사용합니다.
enable-tcp=yes tcp-remoteport=4500
enable-tcp=yes tcp-remoteport=4500
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.3.11. IPsec 연결 속도를 높이기 위해 ESP 하드웨어 오프로드 자동 감지 및 사용 구성 링크 복사링크가 클립보드에 복사되었습니다!
ESP(Security Payload)를 하드웨어로 오프로드하면 이더넷을 통해 IPsec 연결이 가속화됩니다. 기본적으로 Libreswan은 하드웨어가 이 기능을 지원하는지 감지하여 ESP 하드웨어 오프로드를 활성화합니다. 기능을 비활성화하거나 명시적으로 활성화한 경우 자동 탐지로 다시 전환할 수 있습니다.
사전 요구 사항
- 네트워크 카드는 ESP 하드웨어 오프로드를 지원합니다.
- 네트워크 드라이버는 ESP 하드웨어 오프로드를 지원합니다.
- IPsec 연결이 구성되고 작동합니다.
절차
-
ESP 하드웨어 오프로드 지원의 자동 검색을 사용해야 하는 연결의
/etc/ipsec.d/
디렉터리에서 Libreswan 구성 파일을 편집합니다. -
nic-offload
매개변수가 연결 설정에 설정되지 않았는지 확인합니다. nic-offload
를 제거한 경우ipsec
서비스를 다시 시작합니다.systemctl restart ipsec
# systemctl restart ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
IPsec 연결에 사용하는 이더넷 장치의
tx_ipsec
및rx_ipsec
카운터를 표시합니다.ethtool -S enp1s0 | grep -E "_ipsec"
# ethtool -S enp1s0 | grep -E "_ipsec" tx_ipsec: 10 rx_ipsec: 10
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPsec 터널을 통해 트래픽을 전송합니다. 예를 들어 원격 IP 주소를 ping합니다.
ping -c 5 remote_ip_address
# ping -c 5 remote_ip_address
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이더넷 장치의
tx_ipsec
및rx_ipsec
카운터를 다시 표시합니다.ethtool -S enp1s0 | grep -E "_ipsec"
# ethtool -S enp1s0 | grep -E "_ipsec" tx_ipsec: 15 rx_ipsec: 15
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 카운터 값이 증가하면 ESP 하드웨어 오프로드가 작동합니다.
23.3.12. IPsec 연결을 가속화하도록 본딩에 ESP 하드웨어 오프로드 구성 링크 복사링크가 클립보드에 복사되었습니다!
하드웨어로 ESB(Security Payload)를 오프로드하면 IPsec 연결 속도가 빨라집니다. 네트워크 본딩을 장애 조치의 이유로 사용하는 경우 ESP 하드웨어 오프로드를 구성하는 절차와 일반 이더넷 장치를 사용하는 절차가 다릅니다. 예를 들어 이 시나리오에서는 본딩에 대한 오프로드 지원을 활성화하고 커널은 설정을 본딩 포트에 적용합니다.
사전 요구 사항
-
본딩의 모든 네트워크 카드는 ESP 하드웨어 오프로드를 지원합니다.
ethtool -k < interface_name > | grep "esp-hw-offload"
명령을 사용하여 각 본딩 포트가 이 기능을 지원하는지 확인합니다. - 본딩이 구성되고 작동합니다.
-
본딩에서는
active-backup
모드를 사용합니다. 본딩 드라이버는 이 기능에 대해 다른 모드를 지원하지 않습니다. - IPsec 연결이 구성되고 작동합니다.
절차
네트워크 본딩에서 ESP 하드웨어 오프로드 지원을 활성화합니다.
nmcli connection modify bond0 ethtool.feature-esp-hw-offload on
# nmcli connection modify bond0 ethtool.feature-esp-hw-offload on
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령을 사용하면
bond0
연결에서 ESP 하드웨어 오프로드를 지원할 수 있습니다.bond0
연결을 다시 활성화합니다.nmcli connection up bond0
# nmcli connection up bond0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ESP 하드웨어 오프로드를 사용해야 하는 연결의
/etc/ipsec.d/
디렉터리에서 Libreswan 구성 파일을 편집하고nic-offload=yes
문을 연결 항목에 추가합니다.conn example ... nic-offload=yes
conn example ... nic-offload=yes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec
서비스를 다시 시작하십시오.systemctl restart ipsec
# systemctl restart ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
확인 방법은 커널 버전 및 드라이버와 같은 다양한 측면에 따라 다릅니다. 예를 들어 특정 드라이버는 카운터를 제공하지만 이름은 다를 수 있습니다. 자세한 내용은 네트워크 드라이버 설명서를 참조하십시오.
다음 확인 단계는 Red Hat Enterprise Linux 8의 ixgbe
드라이버에서 작동합니다.
본딩의 활성 포트를 표시합니다.
grep "Currently Active Slave" /proc/net/bonding/bond0
# grep "Currently Active Slave" /proc/net/bonding/bond0 Currently Active Slave: enp1s0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 활성 포트의
tx_ipsec
및rx_ipsec
카운터를 표시합니다.ethtool -S enp1s0 | grep -E "_ipsec"
# ethtool -S enp1s0 | grep -E "_ipsec" tx_ipsec: 10 rx_ipsec: 10
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPsec 터널을 통해 트래픽을 전송합니다. 예를 들어 원격 IP 주소를 ping합니다.
ping -c 5 remote_ip_address
# ping -c 5 remote_ip_address
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 활성 포트의
tx_ipsec
및rx_ipsec
카운터를 다시 표시합니다.ethtool -S enp1s0 | grep -E "_ipsec"
# ethtool -S enp1s0 | grep -E "_ipsec" tx_ipsec: 15 rx_ipsec: 15
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 카운터 값이 증가하면 ESP 하드웨어 오프로드가 작동합니다.
23.3.13. RHEL 시스템 역할을 사용하여 VPN 연결 구성 링크 복사링크가 클립보드에 복사되었습니다!
VPN은 신뢰할 수 없는 네트워크를 통해 트래픽을 안전하게 전송하기 위한 암호화된 연결입니다. vpn
RHEL 시스템 역할을 사용하면 VPN 구성 생성 프로세스를 자동화할 수 있습니다.
vpn
RHEL 시스템 역할은 IPsec 구현인 Libreswan만 VPN 공급자로 지원합니다.
23.3.13.1. vpn RHEL 시스템 역할을 사용하여 PSK 인증을 사용하여 호스트 간 IPsec VPN 생성 링크 복사링크가 클립보드에 복사되었습니다!
IPsec을 사용하여 VPN을 통해 서로 직접 호스트를 연결할 수 있습니다. 호스트는 PSK(사전 공유 키)를 사용하여 서로 인증할 수 있습니다. vpn
RHEL 시스템 역할을 사용하면 PSK 인증을 사용하여 IPsec 호스트 간 연결 생성 프로세스를 자동화할 수 있습니다.
기본적으로 이 역할은 터널 기반 VPN을 생성합니다.
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo
권한이 있습니다.
절차
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml
)을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 플레이북에 지정된 설정은 다음과 같습니다.
호스트: < ;list>
VPN을 구성하려는 호스트를 사용하여 YAML 사전을 정의합니다. 항목이 Ansible 관리형 노드가 아닌 경우
hostname
매개변수에서 FQDN(정규화된 도메인 이름) 또는 IP 주소를 지정해야 합니다. 예를 들면 다음과 같습니다.... - hosts: ... external-host.example.com: hostname: 192.0.2.1
... - hosts: ... external-host.example.com: hostname: 192.0.2.1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 역할은 각 관리 노드에서 VPN 연결을 구성합니다. 연결 이름은 <
host_A> -to- <host_B
>입니다(예:managed-node-01.example.com-to-managed-node-02.example.com
). 역할은 외부(관리되지 않음) 노드에 Libreswan을 구성할 수 없습니다. 이러한 호스트에 구성을 수동으로 생성해야 합니다.auth_method: psk
-
호스트 간 PSK 인증을 활성화합니다. 역할은 제어 노드에서
openssl
을 사용하여 PSK를 생성합니다. auto: <start-up_method>
-
연결의 시작 메서드를 지정합니다. 유효한 값은
add
,ondemand
,start
및ignore
입니다. 자세한 내용은 Libreswan이 설치된 시스템의ipsec.conf(5)
도움말 페이지를 참조하십시오. 이 변수의 기본값은 null이며 자동 시작 작업이 없음을 의미합니다. vpn_manage_firewall: true
-
역할이 관리 노드의
firewalld
서비스에서 필요한 포트를 열도록 정의합니다. vpn_manage_selinux: true
- 역할이 IPsec 포트에 필요한 SELinux 포트 유형을 설정하도록 정의합니다.
플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.vpn/README.md
파일을 참조하십시오.플레이북 구문을 확인합니다.
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
플레이북을 실행합니다.
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
연결이 성공적으로 시작되었는지 확인합니다. 예를 들면 다음과 같습니다.
ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "managed-node-01.example.com-to-managed-node-02.example.com"'
# ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "managed-node-01.example.com-to-managed-node-02.example.com"' ... 006 #3: "managed-node-01.example.com-to-managed-node-02.example.com", type=ESP, add_time=1741857153, inBytes=38622, outBytes=324626, maxBytes=2^63B, id='@managed-node-02.example.com'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 VPN 연결이 활성화된 경우에만 성공합니다. 플레이북의
auto
변수를start
이외의 값으로 설정하는 경우 먼저 관리 노드에서 연결을 수동으로 활성화해야 할 수 있습니다.
23.3.13.2. vpn RHEL 시스템 역할을 사용하여 PSK 인증을 사용하여 호스트 간 IPsec VPN 생성 및 데이터 및 컨트롤 플레인 분리 링크 복사링크가 클립보드에 복사되었습니다!
IPsec을 사용하여 VPN을 통해 서로 직접 호스트를 연결할 수 있습니다. 예를 들어, 인터셉트 또는 중단되는 제어 메시지의 위험을 최소화하여 보안을 강화하기 위해 데이터 트래픽과 제어 트래픽에 대해 별도의 연결을 구성할 수 있습니다. vpn
RHEL 시스템 역할을 사용하면 별도의 데이터 및 컨트롤 플레인 및 PSK 인증을 사용하여 IPsec 호스트 간 연결 생성 프로세스를 자동화할 수 있습니다.
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo
권한이 있습니다.
절차
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml
)을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 플레이북에 지정된 설정은 다음과 같습니다.
호스트: < ;list>
VPN을 구성하려는 호스트를 사용하여 YAML 사전을 정의합니다. 연결 이름은 <
name> - <IP_address_A> -to- <IP_address_B
>입니다(예:control_plane_vpn-203.0.113.1-to-198.51.100.2
).역할은 각 관리 노드에서 VPN 연결을 구성합니다. 역할은 외부(관리되지 않음) 노드에 Libreswan을 구성할 수 없습니다. 이러한 호스트에 구성을 수동으로 생성해야 합니다.
auth_method: psk
-
호스트 간 PSK 인증을 활성화합니다. 역할은 제어 노드에서
openssl
을 사용하여 사전 공유 키를 생성합니다. auto: <start-up_method>
-
연결의 시작 메서드를 지정합니다. 유효한 값은
add
,ondemand
,start
및ignore
입니다. 자세한 내용은 Libreswan이 설치된 시스템의ipsec.conf(5)
도움말 페이지를 참조하십시오. 이 변수의 기본값은 null이며 자동 시작 작업이 없음을 의미합니다. vpn_manage_firewall: true
-
역할이 관리 노드의
firewalld
서비스에서 필요한 포트를 열도록 정의합니다. vpn_manage_selinux: true
- 역할이 IPsec 포트에 필요한 SELinux 포트 유형을 설정하도록 정의합니다.
플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.vpn/README.md
파일을 참조하십시오.플레이북 구문을 확인합니다.
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
플레이북을 실행합니다.
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
연결이 성공적으로 시작되었는지 확인합니다. 예를 들면 다음과 같습니다.
ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "control_plane_vpn-203.0.113.1-to-198.51.100.2"'
# ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "control_plane_vpn-203.0.113.1-to-198.51.100.2"' ... 006 #3: "control_plane_vpn-203.0.113.1-to-198.51.100.2", type=ESP, add_time=1741860073, inBytes=0, outBytes=0, maxBytes=2^63B, id='198.51.100.2'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 VPN 연결이 활성화된 경우에만 성공합니다. 플레이북의
auto
변수를start
이외의 값으로 설정하는 경우 먼저 관리 노드에서 연결을 수동으로 활성화해야 할 수 있습니다.
23.3.13.3. vpn RHEL 시스템 역할을 사용하여 인증서 기반 인증을 사용하여 여러 호스트에서 IPsec 메시 VPN 생성 링크 복사링크가 클립보드에 복사되었습니다!
Libreswan은 opportunistic 메시를 생성하여 각 호스트에서 단일 구성으로 많은 호스트 간에 IPsec 연결을 설정할 수 있도록 지원합니다. 메시에 호스트를 추가하는 경우 기존 호스트의 구성을 업데이트할 필요가 없습니다. 보안을 강화하려면 Libreswan에서 인증서 기반 인증을 사용하십시오.
vpn
RHEL 시스템 역할을 사용하면 관리형 노드 간의 인증서 기반 인증을 사용하여 VPN 메시 구성을 자동화할 수 있습니다.
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo
권한이 있습니다. 각 관리 노드에 대해 PKCS #12 파일을 준비합니다.
각 파일에는 다음이 포함됩니다.
- CA(인증 기관) 인증서
- 노드의 개인 키
- 노드의 클라이언트 인증서
-
파일의 이름은 <
managed_node_name_as_in_the_inventory > .p12
입니다. - 파일은 플레이북과 동일한 디렉터리에 저장됩니다.
절차
~/inventory
파일을 편집하고cert_name
변수를 추가합니다.managed-node-01.example.com cert_name=managed-node-01.example.com managed-node-02.example.com cert_name=managed-node-02.example.com managed-node-03.example.com cert_name=managed-node-03.example.com
managed-node-01.example.com cert_name=managed-node-01.example.com managed-node-02.example.com cert_name=managed-node-02.example.com managed-node-03.example.com cert_name=managed-node-03.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cert_name
변수를 각 호스트의 인증서에 사용된 CN(일반 이름) 필드 값으로 설정합니다. 일반적으로 CN 필드는 FQDN(정규화된 도메인 이름)으로 설정됩니다.중요한 변수를 암호화된 파일에 저장합니다.
자격 증명 모음을 생성합니다.
ansible-vault create ~/vault.yml
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ansible-vault create
명령이 편집기를 열고 <key > : < value
> 형식으로 중요한 데이터를 입력합니다.pkcs12_pwd: <password>
pkcs12_pwd: <password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 변경 사항을 저장하고 편집기를 종료합니다. Ansible은 자격 증명 모음의 데이터를 암호화합니다.
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml
)을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 플레이북에 지정된 설정은 다음과 같습니다.
opportunistic: true
-
여러 호스트 간에 opportunistic 메시를 활성화합니다.
policies
변수는 암호화해야 하거나 암호화할 수 있는 서브넷 및 호스트 트래픽에 대해 정의하며, 이 중 어느 서브넷이 일반 텍스트 연결을 계속 사용해야 하는지 정의합니다. auth_method: cert
- 인증서 기반 인증을 활성화합니다. 이를 위해서는 인벤토리에서 각 관리 노드 인증서의 닉네임을 지정해야 합니다.
policies: <list_of_policies>
YAML 목록 형식으로 Libreswan 정책을 정의합니다.
기본 정책은
private-or-clear
입니다.개인
으로 변경하기 위해 위의 플레이북에는 기본cidr
항목에 대한 따라 정책이 포함되어 있습니다.Ansible 제어 노드가 관리형 노드와 동일한 IP 서브넷에 있는 경우 플레이북 실행 중에 SSH 연결이 손실되는 것을 방지하려면 제어 노드의 IP 주소에 대한
명확한
정책을 추가합니다. 예를 들어, Mesh를192.0.2.0/24
서브넷에 대해 구성하고 제어 노드에서 IP 주소192.0.2.1
을 사용하는 경우 플레이북에 표시된 대로192.0.2.1/32
에 대한명확한
정책이 필요합니다.정책에 대한 자세한 내용은 Libreswan이 설치된 시스템의
ipsec.conf(5)
도움말 페이지를 참조하십시오.vpn_manage_firewall: true
-
역할이 관리 노드의
firewalld
서비스에서 필요한 포트를 열도록 정의합니다. vpn_manage_selinux: true
- 역할이 IPsec 포트에 필요한 SELinux 포트 유형을 설정하도록 정의합니다.
플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.vpn/README.md
파일을 참조하십시오.플레이북 구문을 확인합니다.
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
플레이북을 실행합니다.
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
메시의 노드에서 다른 노드를 ping하여 연결을 활성화합니다.
ping managed-node-02.example.com
[root@managed-node-01]# ping managed-node-02.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 연결이 활성 상태인지 확인합니다.
ipsec trafficstatus
[root@managed-node-01]# ipsec trafficstatus 006 #2: "private#192.0.2.0/24"[1] ...192.0.2.2, type=ESP, add_time=1741938929, inBytes=372408, outBytes=545728, maxBytes=2^63B, id='CN=managed-node-02.example.com'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.3.14. 시스템 전체 암호화 정책에서 비활성화된 IPsec 연결 구성 링크 복사링크가 클립보드에 복사되었습니다!
연결에 대한 시스템 전체 암호화 정책 덮어쓰기
RHEL 시스템 전체 암호화 정책은 %default
라는 특수 연결을 생성합니다. 이 연결에는 the ikev2
,esp
및 ike
옵션의 기본값이 포함되어 있습니다. 그러나 연결 구성 파일에 언급된 옵션을 지정하여 기본값을 재정의할 수 있습니다.
예를 들어 다음 구성에서는 AES 및 SHA-1 또는 SHA-2와 함께 IKEv1을 사용하고 IPsec(ESP)을 AES-GCM 또는 AES-CBC와 함께 사용하는 연결을 허용합니다.
AES-GCM은 IPsec (ESP) 및 IKEv2에서는 사용할 수 있지만 IKEv1에는 사용할 수 없습니다.
모든 연결에 대한 시스템 전체 암호화 정책 비활성화
모든 IPsec 연결에 대한 시스템 전체 암호화 정책을 비활성화하려면 /etc/ipsec.conf 파일에서 다음 행을 주석 처리하십시오.
include /etc/crypto-policies/back-ends/libreswan.config
include /etc/crypto-policies/back-ends/libreswan.config
그런 다음 연결 구성 파일에 the ikev2=never
옵션을 추가합니다.
23.3.15. IPsec VPN 구성 문제 해결 링크 복사링크가 클립보드에 복사되었습니다!
IPsec VPN 구성과 관련된 문제는 여러 가지 주요 이유로 발생합니다. 이러한 문제가 발생하면 문제의 원인이 다음 시나리오에 해당하는지 확인하고 해당 솔루션을 적용할 수 있습니다.
기본 연결 문제 해결
VPN 연결에 대한 대부분의 문제는 관리자가 구성 옵션과 일치하지 않는 엔드포인트를 구성한 새로운 배포에서 발생합니다. 또한 작동 중인 구성은 새로 호환되지 않는 값 때문에 갑자기 작동을 중지할 수 있습니다. 이는 관리자가 구성을 변경한 결과일 수 있습니다. 또는 관리자가 암호화 알고리즘과 같은 특정 옵션에 대해 다양한 기본값을 사용하여 펌웨어 업데이트 또는 패키지 업데이트를 설치할 수 있습니다.
IPsec VPN 연결이 설정되었는지 확인하려면 다음을 수행하십시오.
ipsec trafficstatus
# ipsec trafficstatus
006 #8: "vpn.example.com"[1] 192.0.2.1, type=ESP, add_time=1595296930, inBytes=5999, outBytes=3231, id='@vpn.example.com', lease=100.64.13.5/32
출력이 비어 있거나 연결 이름이 인 항목이 표시되지 않으면 터널이 손상됩니다.
문제가 연결에 있는지 확인하려면 다음을 수행하십시오.
vpn.example.com 연결을 다시 로드합니다.
ipsec auto --add vpn.example.com
# ipsec auto --add vpn.example.com 002 added connection description "vpn.example.com"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음으로 VPN 연결을 시작합니다.
ipsec auto --up vpn.example.com
# ipsec auto --up vpn.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
방화벽 관련 문제
가장 일반적인 문제는 IPsec 엔드포인트 중 하나 또는 엔드포인트 사이의 라우터에 있는 방화벽이 모든 IKE(Internet Key Exchange) 패킷을 삭제하는 것입니다.
IKEv2의 경우 다음 예제와 유사한 출력은 방화벽에 문제가 있음을 나타냅니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IKEv1의 경우 시작 명령의 출력은 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
IPsec을 설정하는 데 사용되는 IKE 프로토콜은 암호화되므로 tcpdump
도구를 사용하여 제한된 문제 하위 집합만 해결할 수 있습니다. 방화벽이 IKE 또는 IPsec 패킷을 삭제하는 경우 tcpdump
유틸리티를 사용하여 원인을 찾을 수 있습니다. 그러나 tcpdump
는 IPsec VPN 연결의 다른 문제를 진단할 수 없습니다.
eth0
인터페이스에서 VPN과 암호화된 모든 데이터의 협상을 캡처하려면 다음을 수행합니다.tcpdump -i eth0 -n -n esp or udp port 500 or udp port 4500 or tcp port 4500
# tcpdump -i eth0 -n -n esp or udp port 500 or udp port 4500 or tcp port 4500
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
일치하지 않는 알고리즘, 프로토콜 및 정책
VPN 연결에서는 엔드포인트에 IKE 알고리즘, IPsec 알고리즘 및 IP 주소 범위가 일치해야 합니다. 불일치가 발생하면 연결에 실패합니다. 다음 방법 중 하나를 사용하여 일치하지 않는 경우 알고리즘, 프로토콜 또는 정책을 조정하여 수정합니다.
원격 엔드포인트가 IKE/IPsec을 실행 중이 아닌 경우 이를 나타내는 ICMP 패킷이 표시됩니다. 예를 들면 다음과 같습니다.
ipsec auto --up vpn.example.com
# ipsec auto --up vpn.example.com ... 000 "vpn.example.com"[1] 192.0.2.2 #16: ERROR: asynchronous network error report on wlp2s0 (192.0.2.2:500), complainant 198.51.100.1: Connection refused [errno 111, origin ICMP type 3 code 3 (not authenticated)] ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 일치하지 않는 알고리즘의 예:
ipsec auto --up vpn.example.com
# ipsec auto --up vpn.example.com ... 003 "vpn.example.com"[1] 193.110.157.148 #3: dropping unexpected IKE_SA_INIT message containing NO_PROPOSAL_CHOSEN notification; message payloads: N; missing payloads: SA,KE,Ni
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 일치하지 않는 IPsec 알고리즘의 예:
ipsec auto --up vpn.example.com
# ipsec auto --up vpn.example.com ... 182 "vpn.example.com"[1] 193.110.157.148 #5: STATE_PARENT_I2: sent v2I2, expected v2R2 {auth=IKEv2 cipher=AES_GCM_16_256 integ=n/a prf=HMAC_SHA2_256 group=MODP2048} 002 "vpn.example.com"[1] 193.110.157.148 #6: IKE_AUTH response contained the error notification NO_PROPOSAL_CHOSEN
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 일치하는 버전과 일치하지 않으면 응답 없이 원격 엔드포인트가 요청을 삭제할 수도 있었습니다. 이는 모든 IKE 패킷을 삭제하는 방화벽과 동일합니다.
IKEv2 (Traffic Selectors - TS)의 일치하지 않는 IP 주소 범위의 예:
ipsec auto --up vpn.example.com
# ipsec auto --up vpn.example.com ... 1v2 "vpn.example.com" #1: STATE_PARENT_I2: sent v2I2, expected v2R2 {auth=IKEv2 cipher=AES_GCM_16_256 integ=n/a prf=HMAC_SHA2_512 group=MODP2048} 002 "vpn.example.com" #2: IKE_AUTH response contained the error notification TS_UNACCEPTABLE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IKEv1의 일치하지 않는 IP 주소 범위의 예:
ipsec auto --up vpn.example.com
# ipsec auto --up vpn.example.com ... 031 "vpn.example.com" #2: STATE_QUICK_I1: 60 second timeout exceeded after 0 retransmits. No acceptable response to our first Quick Mode message: perhaps peer likes no proposal
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IKEv1에서 PreSharedKeys ()를 사용할 때 양쪽이 동일한 에 배치되지 않으면 전체 IKE 메시지가 읽을 수 없게 됩니다.
ipsec auto --up vpn.example.com
# ipsec auto --up vpn.example.com ... 003 "vpn.example.com" #1: received Hash Payload does not match computed value 223 "vpn.example.com" #1: sending notification INVALID_HASH_INFORMATION to 192.0.2.23:500
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IKEv2에서 불일치- 오류로 인해 AUTHENTICATION_FAILED 메시지가 표시됩니다.
ipsec auto --up vpn.example.com
# ipsec auto --up vpn.example.com ... 002 "vpn.example.com" #1: IKE SA authentication request rejected by peer: AUTHENTICATION_FAILED
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
최대 전송 단위
IKE 또는 IPsec 패킷을 차단하는 방화벽 이외의 네트워킹 문제의 가장 일반적인 원인은 암호화된 패킷의 증가된 패킷 크기와 관련이 있습니다. 최대 전송 단위(MTU)보다 큰 네트워크 하드웨어 조각 패킷(예: 1500바이트). 종종 조각이 손실되고 패킷이 다시 집계되지 않습니다. 이로 인해 작은 규모의 패킷을 사용하는 ping 테스트가 작동하지만 다른 트래픽이 실패하면 간헐적인 오류가 발생합니다. 이 경우 SSH 세션을 설정할 수 있지만 원격 호스트에 'ls -al /usr' 명령을 입력하여 바로 터미널이 중지됩니다.
이 문제를 해결하려면 터널 구성 파일에 the mtu=1400
옵션을 추가하여 MTU 크기를 줄입니다.
또는 TCP 연결의 경우 MSS 값을 변경하는 iptables 규칙을 활성화합니다.
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
이전 명령에서 시나리오의 문제를 해결하지 않으면 set-mss
매개변수에 더 작은 크기를 직접 지정합니다.
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1380
# iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1380
NAT(네트워크 주소 변환)
IPsec 호스트가 NAT 라우터 역할을 할 때 실수로 패킷을 다시 매핑할 수 있습니다. 다음 예제 구성은 문제를 보여줍니다.
주소가 172.16.0.1인 시스템에는 NAT 규칙이 있습니다.
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
주소 10.0.2.33의 시스템이 패킷을 192.168.0.1로 보내는 경우 라우터는 IPsec 암호화를 적용하기 전에 소스 10.0.2.33을 172.16.0.1로 변환합니다.
그런 다음 소스 주소가 10.0.2.33인 패킷이 더 이상 conn myvpn
설정과 일치하지 않으며 IPsec은 이 패킷을 암호화하지 않습니다.
이 문제를 해결하려면 라우터의 대상 IPsec 서브넷 범위에 대해 NAT를 제외하는 규칙을 삽입합니다. 예를 들면 다음과 같습니다.
iptables -t nat -I POSTROUTING -s 10.0.2.0/24 -d 192.168.0.0/16 -j RETURN
iptables -t nat -I POSTROUTING -s 10.0.2.0/24 -d 192.168.0.0/16 -j RETURN
커널 IPsec 하위 시스템 버그
예를 들어 버그로 인해 IKE 사용자 공간과 IPsec 커널이 동기화 해제되는 경우 커널 IPsec 하위 시스템이 실패할 수 있습니다. 이러한 문제를 확인하려면 다음을 수행합니다.
cat /proc/net/xfrm_stat XfrmInError 0 XfrmInBufferError 0 ...
$ cat /proc/net/xfrm_stat
XfrmInError 0
XfrmInBufferError 0
...
이전 명령의 출력에 0이 아닌 값은 문제가 있음을 나타냅니다. 이 문제가 발생하면 새 지원 케이스 를 열고 해당 IKE 로그와 함께 이전 명령의 출력을 연결합니다.
Libreswan 로그
Libreswan은 기본적으로 syslog
프로토콜을 사용합니다. journalctl
명령을 사용하여 IPsec과 관련된 로그 항목을 찾을 수 있습니다. 로그에 대한 해당 항목은 pluto
IKE 데몬에 의해 전송되므로 "pluto" 키워드를 검색합니다. 예를 들면 다음과 같습니다.
journalctl -b | grep pluto
$ journalctl -b | grep pluto
ipsec
서비스에 대한 실시간 로그를 표시하려면 다음을 수행합니다.
journalctl -f -u ipsec
$ journalctl -f -u ipsec
기본 로깅 수준에 설정 문제가 표시되지 않으면 /etc/ipsec.conf
파일의 config setup
섹션에 plutodebug=all
옵션을 추가하여 디버그 로그를 활성화합니다.
디버그 로깅은 많은 항목을 생성하며, journald
또는 syslogd
서비스 속도에 따라 syslog
메시지가 제한될 수 있습니다. 전체 로그가 있는지 확인하려면 로깅을 파일로 리디렉션합니다. /etc/ipsec.conf
를 편집하고 구성 설정
섹션에 logfile=/var/log/pluto.log
를 추가합니다.
23.3.16. control-center를 사용하여 VPN 연결 구성 링크 복사링크가 클립보드에 복사되었습니다!
그래픽 인터페이스와 함께 Red Hat Enterprise Linux를 사용하는 경우 GNOME 제어 센터에서
VPN 연결을 구성할 수 있습니다.
사전 요구 사항
-
NetworkManager-libreswan-gnome
패키지가 설치되어 있습니다.
절차
-
Super 키를 누른 상태에서
Settings
를 입력하고 Enter 를 눌러control-center
애플리케이션을 엽니다. -
왼쪽에서
Network
항목을 선택합니다. - + 아이콘을 클릭합니다.
-
VPN
을 선택합니다. ID
메뉴 항목을 선택하여 기본 구성 옵션을 확인합니다.일반
gateway - 원격 VPN 게이트웨이의 이름 또는
IP
주소입니다.인증
유형
-
IKEv2 (Certificate)
- 클라이언트는 인증서로 인증됩니다. 더 안전합니다(기본값). IKEv1(XAUTH)
- 클라이언트는 사용자 이름 및 암호 또는 PSK(사전 공유 키)로 인증됩니다.다음 구성 설정은
고급
섹션에서 사용할 수 있습니다.그림 23.1. VPN 연결의 고급 옵션
주의gnome-control-center
애플리케이션을 사용하여 IPsec 기반 VPN 연결을 구성할 때고급
대화 상자에 구성이 표시되지만 변경 사항은 허용하지 않습니다. 결과적으로 사용자는 고급 IPsec 옵션을 변경할 수 없습니다. 대신nm-connection-editor
또는nmcli
툴을 사용하여 고급 속성 구성을 수행합니다.식별
Domain
- 필요한 경우 도메인 이름을 입력합니다.보안
-
Phase1 알고리즘
- Libres
wan 매개변수와 같이 - 암호화된 채널을 인증하고 설정하는 데 사용할 알고리즘을 입력합니다. Phase2 알고리즘
-esp
Libreswan 매개변수에 해당합니다 -IPsec
협상에 사용할 알고리즘을 입력합니다.PFS를 지원하지 않는 이전 서버와의 호환성을 확인하려면 PFS(Perfect Forward Secrecy)를 해제
하려면 PFS 필드를 선택합니다.-
Phase1 Lifetime
-ikelifetime
Libreswan 매개변수 - 트래픽을 암호화하는 데 사용되는 키의 유효 기간에 해당합니다. Phase2 Lifetime
-salifetime
Libreswan 매개변수 - 만료되기 전에 특정 연결 인스턴스가 얼마나 오래되어야 하는지에 해당합니다.보안상의 이유로 암호화 키를 수시로 변경해야 합니다.
원격 네트워크
-rightsubnet
Libreswan 매개변수 - VPN을 통해 도달해야 하는 대상 프라이빗 원격 네트워크에 해당합니다.범위를 좁
힐
수 있도록 좁은 필드를 확인합니다. IKEv2 협상에서만 효과가 있습니다.-
조각화 활성화
- IKE 조각화를 허용할지 여부에 관계없이fragmentation
Libreswan 매개변수에 해당합니다. 유효한 값은yes
(기본값) 또는no
입니다. -
Mobike 활성화
-mobike
Libreswan 매개변수에 해당합니다. - Cryostat 및 Multihoming Protocol (MOBIKE, RFC 4555)을 허용할지 여부에 따라 연결을 처음부터 다시 시작할 필요없이 끝점을 마이그레이션할 수 있습니다. 이는 유선, 무선 또는 모바일 데이터 연결 간에 전환하는 모바일 장치에서 사용됩니다. 값은no
(기본값) 또는yes
입니다.
-
IPv4 방법
-
Automatic (DHCP)
- 연결하는 네트워크가DHCP
서버를 사용하여 동적IP
주소를 할당하는 경우 이 옵션을 선택합니다. -
Link-Local Only
- 연결된 네트워크에DHCP
서버가 없고IP
주소를 수동으로 할당하지 않는 경우 이 옵션을 선택합니다. 임의의 주소는 접두사169.254/16
인 RFC 3927 에 따라 할당됩니다. -
수동
-IP
주소를 수동으로 할당하려는 경우 이 옵션을 선택합니다. disable
-IPv4
는 이 연결에 대해 비활성화되어 있습니다.DNS
DNS
섹션에서Automatic
이ON
인 경우OFF
로 전환하여 IP를 쉼표로 분리하는 데 사용할 DNS 서버의 IP 주소를 입력합니다.라우트
경로
섹션에서Automatic
이ON
인 경우 DHCP의 경로가 사용되지만 정적 경로도 추가할 수 있습니다.OFF
인 경우 정적 경로만 사용됩니다.-
address
- 원격 네트워크 또는 호스트의IP
주소를 입력합니다. -
넷마스크 -
위에서 입력한IP
주소의 넷마스크 또는 접두사 길이입니다. -
gateway - 위에서 입력한 원격 네트워크 또는 호스트로 이어지는 게이트웨이의
IP
주소입니다. metric
- 네트워크 비용, 이 경로에 제공할 기본 값입니다. 더 낮은 값이 더 높은 값보다 우선합니다.이 연결은 네트워크의 리소스에만 사용
연결이 기본 경로가 되지 않도록 하려면 이 확인란을 선택합니다. 이 옵션을 선택하면 연결을 통해 자동으로 학습되거나 여기에 입력된 경로로 특별히 예정된 트래픽만 연결을 통해 라우팅됩니다.
-
VPN
연결에서IPv6
설정을 구성하려면 메뉴 항목을 선택합니다.IPv6 방법
-
자동
-IPv6
SLAAC(상태 비저장 주소 자동 구성)를 사용하여 하드웨어 주소 및RA(라우터 알림)를 기반으로 자동, 상태 비저장 구성을 만들려면 이 옵션을 선택합니다. -
자동, DHCP만
- 이 옵션을 선택하여 RA를 사용하지 않고DHCPv6
에서 정보를 직접 요청하여 상태 저장 구성을 생성합니다. -
Link-Local Only
- 연결된 네트워크에DHCP
서버가 없고IP
주소를 수동으로 할당하지 않는 경우 이 옵션을 선택합니다. 임의의 주소는FE80::0
접두사를 사용하여 RFC 4862 에 따라 할당됩니다. -
수동
-IP
주소를 수동으로 할당하려는 경우 이 옵션을 선택합니다. disable
- 이 연결에 대해IPv6
가 비활성화되어 있습니다.DNS
,경로
,이 연결을 네트워크의 리소스에만 사용하는
것은IPv4
설정에 공통입니다.
-
-
VPN
연결 편집을 완료하면 버튼을 클릭하여 구성을 사용자 지정하거나 버튼을 클릭하여 기존 연결을 위해 저장합니다. -
프로필을
ON
으로 전환하여VPN
연결을 활성화합니다. - DHCP 또는 SLAAC(상태 비저장 주소 자동 구성)가 있는 네트워크에서 이 호스트를 사용하는 경우 연결이 리디렉션될 수 있습니다. 자세한 내용 및 완화 단계는 연결이 터널을 우회하지 못하도록 전용 라우팅 테이블에 VPN 연결 할당을 참조하십시오.
23.3.17. nm-connection-editor를 사용하여 VPN 연결 구성 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Enterprise Linux를 그래픽 인터페이스와 함께 사용하는 경우 nm-connection-editor
애플리케이션에서 VPN 연결을 구성할 수 있습니다.
사전 요구 사항
-
NetworkManager-libreswan-gnome
패키지가 설치되어 있습니다. IKEv2(Internet Key Exchange 버전 2) 연결을 구성하는 경우:
- 인증서는 IPsec 네트워크 보안 서비스(NSS) 데이터베이스로 가져옵니다.
- NSS 데이터베이스에서 인증서의 닉네임을 알고 있습니다.
절차
터미널을 열고 다음을 입력합니다.
nm-connection-editor
$ nm-connection-editor
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 버튼을 클릭하여 새 연결을 추가합니다.
-
IPsec 기반 VPN
연결 유형을 선택하고 을 클릭합니다. VPN
탭에서 다음을 수행합니다.VPN 게이트웨이의 호스트 이름 또는 IP 주소를
게이트웨이
필드에 입력하고 인증 유형을 선택합니다. 인증 유형에 따라 다른 추가 정보를 입력해야 합니다.-
IKEv2(Certifiate)
는 더 안전한 인증서를 사용하여 클라이언트를 인증합니다. 이 설정에는 IPsec NSS 데이터베이스에 있는 인증서의 닉네임이 필요합니다. IKEv1(XAUTH)
은 사용자 이름 및 암호(사전 공유 키)를 사용하여 사용자를 인증합니다. 이 설정을 사용하려면 다음 값을 입력해야 합니다.- 사용자 이름
- 암호
- 그룹 이름
- Secret
-
원격 서버가 IKE 교환의 로컬 식별자를 지정하는 경우
Remote ID
필드에 정확한 문자열을 입력합니다. 원격 서버에서 Libreswan을 실행하면 이 값은 서버의leftid
매개변수에 설정됩니다.선택 사항:
버튼을 클릭하여 추가 설정을 구성합니다. 다음 설정을 구성할 수 있습니다.식별
-
domain
- 필요한 경우 도메인 이름을 입력합니다.
-
보안
-
Phase1 알고리즘
은 like Libres
wan 매개변수에 해당합니다. 암호화 채널을 인증하고 설정하는 데 사용할 알고리즘을 입력합니다. Phase2 알고리즘
은esp
Libreswan 매개변수에 해당합니다.IPsec
협상에 사용할 알고리즘을 입력합니다.PFS를 지원하지 않는 이전 서버와의 호환성을 확인하려면 PFS(Perfect Forward Secrecy)를 해제
하려면 PFS 필드를 선택합니다.-
Phase1 Lifetime
은ikelifetime
Libreswan 매개변수에 해당합니다. 이 매개변수는 트래픽을 암호화하는 데 사용된 키가 유효한 시간을 정의합니다. -
Phase2 Lifetime
은salifetime
Libreswan 매개변수에 해당합니다. 이 매개 변수는 보안 연관이 유효한 기간을 정의합니다.
-
연결
원격 네트워크는
rightsubnet
Libreswan 매개변수에 해당하며 VPN을 통해 도달해야 하는 대상 프라이빗 원격 네트워크를 정의합니다.범위를 좁
힐
수 있도록 좁은 필드를 확인합니다. IKEv2 협상에서만 효과가 있습니다.-
조각화
는 Libreswan 매개변수에 해당하고 IKE 조각화를 허용할지 여부를 정의합니다.유효한 값은
yes
(기본값) 또는no
입니다. -
Enable Mobike
는mobike
Libreswan 매개변수에 해당합니다. 매개 변수는 MTU 및 Multihoming Protocol(RFC 4555)(RFC 4555)을 허용하여 연결을 처음부터 다시 시작할 필요 없이 끝점을 마이그레이션할지 여부를 정의합니다. 이는 유선, 무선 또는 모바일 데이터 연결 간에 전환하는 모바일 장치에서 사용됩니다. 값은no
(기본값) 또는yes
입니다.
IPv4 Settings
탭에서 IP 할당 방법을 선택하고 선택적으로 추가 정적 주소, DNS 서버, 검색 도메인 및 경로를 설정합니다.- 연결을 저장합니다.
-
nm-connection-editor
를 종료합니다. - DHCP 또는 SLAAC(상태 비저장 주소 자동 구성)가 있는 네트워크에서 이 호스트를 사용하는 경우 연결이 리디렉션될 수 있습니다. 자세한 내용 및 완화 단계는 연결이 터널을 우회하지 못하도록 전용 라우팅 테이블에 VPN 연결 할당을 참조하십시오.
NetworkManager 가 해당 연결에 대한 새 구성 파일을 만든 다음 기존 연결을 편집하는 데 사용되는 동일한 대화 상자를 엽니다. 이러한 대화 상자의 차이점은 기존 연결 프로필에 세부 정보 메뉴 항목이 있다는 것입니다.
버튼을 클릭하여 새 연결을 추가하면23.3.18. 연결이 터널을 우회하지 못하도록 전용 라우팅 테이블에 VPN 연결 할당 링크 복사링크가 클립보드에 복사되었습니다!
DHCP 서버와 SLAAC(상태 비저장 주소 자동 구성) 모두 클라이언트의 라우팅 테이블에 경로를 추가할 수 있습니다. 예를 들어 악의적인 DHCP 서버는 이 기능을 사용하여 VPN 터널 대신 물리적 인터페이스를 통해 트래픽을 리디렉션하도록 VPN 연결이 있는 호스트를 강제 수행할 수 있습니다. 이 취약점은 tunnelVision이라고도 하며 CVE-2024-3661 취약점 문서에 설명되어 있습니다.
이 취약점을 완화하기 위해 전용 라우팅 테이블에 VPN 연결을 할당할 수 있습니다. 이렇게 하면 DHCP 구성 또는 SLAAC가 VPN 터널을 위해 의도된 네트워크 패킷의 라우팅 결정을 조작할 수 없습니다.
사용자 환경에 하나 이상의 조건이 적용되는 경우 단계를 따르십시오.
- 하나 이상의 네트워크 인터페이스에서 DHCP 또는 SLAAC를 사용합니다.
- 네트워크에서는 잘못된 DHCP 서버를 방지하는 DHCP 스누핑과 같은 메커니즘을 사용하지 않습니다.
VPN을 통해 전체 트래픽을 라우팅하면 호스트가 로컬 네트워크 리소스에 액세스할 수 없습니다.
사전 요구 사항
- NetworkManager 1.40.16-18 이상을 사용합니다.
프로세스
- 사용할 라우팅 테이블을 결정합니다. 다음 단계는 표 75을 사용합니다. 기본적으로 RHEL은 테이블 1-254를 사용하지 않으며 이 테이블 중 하나를 사용할 수 있습니다.
VPN 경로를 전용 라우팅 테이블에 배치하도록 VPN 연결 프로필을 구성합니다.
nmcli connection modify <vpn_connection_profile> ipv4.route-table 75 ipv6.route-table 75
# nmcli connection modify <vpn_connection_profile> ipv4.route-table 75 ipv6.route-table 75
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이전 명령에서 사용한 테이블에 대해 우선순위가 낮은 값을 설정합니다.
nmcli connection modify <vpn_connection_profile> ipv4.routing-rules "priority 32345 from all table 75" ipv6.routing-rules "priority 32345 from all table 75"
# nmcli connection modify <vpn_connection_profile> ipv4.routing-rules "priority 32345 from all table 75" ipv6.routing-rules "priority 32345 from all table 75"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 우선순위 값은 1에서 32766 사이의 모든 값일 수 있습니다. 값이 작을수록 우선순위가 높습니다.
VPN 연결을 다시 연결합니다.
nmcli connection down <vpn_connection_profile> nmcli connection up <vpn_connection_profile>
# nmcli connection down <vpn_connection_profile> # nmcli connection up <vpn_connection_profile>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
표 75에 IPv4 경로를 표시합니다.
ip route show table 75
# ip route show table 75 ... 192.0.2.0/24 via 192.0.2.254 dev vpn_device proto static metric 50 default dev vpn_device proto static scope link metric 50
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력은 원격 네트워크에 대한 경로와 기본 게이트웨이가 라우팅 테이블 75에 할당되므로 모든 트래픽이 터널을 통해 라우팅되는지 확인합니다. VPN 연결 프로필에
ipv4.never-default true
를 설정하면 기본 경로가 생성되지 않으므로 이 출력에 표시되지 않습니다.표 75에 IPv6 경로를 표시합니다.
ip -6 route show table 75
# ip -6 route show table 75 ... 2001:db8:1::/64 dev vpn_device proto kernel metric 50 pref medium default dev vpn_device proto static metric 50 pref medium
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력은 원격 네트워크에 대한 경로와 기본 게이트웨이가 라우팅 테이블 75에 할당되므로 모든 트래픽이 터널을 통해 라우팅되는지 확인합니다. VPN 연결 프로필에
ipv4.never-default true
를 설정하면 기본 경로가 생성되지 않으므로 이 출력에 표시되지 않습니다.