Ubuntu 16.04에서 인증서 및 사전 공유 키를 사용하는 StrongSwan 기반 IPsec VPN


이 페이지에서

  1. Strongswan 설치(바이너리 및 소스 코드)
  2. 소스를 사용한 Strongswan 컴파일\n
  3. 사이트 간 VPN
  4. 사전 공유 키 기반 터널
  5. X.509 인증서 기반 터널

소개

이 기사에서는 IPsec 프로토콜의 오픈 소스 구현에 중점을 둡니다. 네트워크 계층의 보안은 다음 두 가지 구성 요소로 구성된 IPsec 프로토콜을 사용하여 보장됩니다.

  • 인증 헤더(AH)\n
  • ESP(보안 페이로드 캡슐화)\n

패킷 무결성 및 인증은 AH를 사용하여 보장되며 ESP 구성 요소는 기밀성 및 보안 기능을 제공합니다. IPsec의 오픈 소스 구현인 StrongSwan(Strong Secure WAN)은 인터넷 키 교환(IKE v1/2)/의 두 버전을 모두 지원하는 잘 알려진 도구입니다. 키 공유 또는 인터넷 키 교환은 IPSec VPN(가상 사설망)의 일부입니다. IKE 메커니즘은 ESP 프로토콜에서 데이터 암호화를 위해 두 당사자 간에 키를 공유하는 데 사용됩니다. OpenSSL의 암호화 및 무결성 알고리즘(예: AES, SHA 등)과 암호화 라이브러리는 IKE 단계에서 사용됩니다. 그러나 보안 알고리즘의 Linux 커널 구현은 IPSec의 주요 부분(ESP & AH)에서 사용됩니다. 스트롱스완.

스트롱스완 기능

  • 사전 공유 키 기반 인증 지원.
  • 인증에는 X.509 형식의 인증서가 지원됩니다.\n
  • IKE v1/v2를 모두 지원하는 단일 데몬입니다.\n
  • 타사 플러그인 및 라이브러리를 쉽게 통합할 수 있습니다.\n
  • 하드웨어 토큰은 openSC 프로젝트를 사용하여 지원됩니다.\n

Gateway-to-Gateway 및 Road Warrior VPN은 strongswan에서 지원됩니다. 네트워크 트래픽은 사이트 간 VPN에 있는 조직의 게이트웨이 장치에서 암호화되거나 해독됩니다. 그러나 게이트웨이 기기에서 최종 사용자/클라이언트 머신까지 두 번째 보안 채널이 설정됩니다.

이 기사에서는 strongSwan 도구가 Ubuntu 16.04(LTS)에 설치됩니다. 하드웨어 토큰용 OpenSC 통합과 마지막으로 사전 공유 키와 x.509 인증서를 사용하여 게이트웨이 간 터널 생성을 보여드리겠습니다. . 하드웨어 토큰 또는 하드웨어 보안 모듈(HSM)(예: USB 및 스마트 카드)을 strongswan과 함께 사용하여 암호화 키(공개 및 비공개) 및 인증서를 저장할 수 있습니다. strongswan의 하드웨어 토큰 지원은 오픈소스 프로젝트인 OpenSC(도구 및 라이브러리 세트)를 사용하여 제공됩니다. PKCS#15 기반 파일 구조 및 PKCS#11 API를 사용한 스마트 카드 액세스도 OpenSC 도구에서 제공됩니다. 다음 스마트 카드는 openSC에서 지원됩니다.

  • 웨스트코스
  • 세트코스
  • CardOs
  • 스타코스
  • 아셉코스

Strongswan 설치(바이너리 및 소스 코드)

strongswan의 바이너리 패키지(deb/rpm )는 널리 사용되는 거의 모든 Linux 배포판에서 사용할 수 있습니다. 바이너리와 소스 코드(원하는 기능 포함)를 사용하여 strongswan을 설치하는 방법은 이 문서에서 포괄적으로 설명합니다.

strongswan의 바이너리 패키지는 Ubuntu 16.04 LTS에서 다음 명령을 사용하여 설치할 수 있습니다.

aptitude install strongswan

Ubuntu 리포지토리에서 사용 가능한 strongswan 플러그인은 다음과 같습니다.

Ubuntu 플랫폼에 설치한 후 구성 파일 및 폴더(ipsec.conf, ipsec.secrets, ipsec.d,strongswan.conf, strongswan.d)는 /etc 디렉터리에 저장됩니다.

소스를 사용한 Strongswan 컴파일

  • Opensc(strongswan에서 HSM 지원용).
  • PC/SC (Ubuntu 플랫폼에서 스마트 카드 리더 지원에 필요)\n
  • GMP 라이브러리(strongswan에서 수학 연산에 필요).\n
  • OpenSSL 도구(AES,SHA1과 같은 잘 알려진 암호화 알고리즘 구현).\n
  • PKCS(공개 키 암호화 표준) 1,7,8,11,12.\n

이 기사에서는 스마트 카드 리더에 대한 지원을 추가하기 위해 PCSC-Lite 도구를 Ubuntu 플랫폼의 opensc와 함께 설치합니다. CCID 판독기에는 PCSC-Lite가 권장됩니다.

strongswan 컴파일을 시작하기 전에 다음 명령을 실행하여 필수 소프트웨어를 설치하십시오.

1. Opensc 설치

aptitude install opensc

2. GMP 라이브러리 설치

aptitude install libgmp10

GMP의 개발 라이브러리를 설치합니다.

aptitude install libgmp-dev

OpenSSL libcrypto는 다음 명령을 사용하여 설치됩니다.

apt-get install libssl-dev

컴파일 단계

/usr/src/ 폴더로 이동하고 wget 명령어를 사용하여 strongswan의 최신 릴리스를 다운로드합니다.

cd /usr/src
wget https://download.strongswan.org/strongswan-5.5.0.tar.gz

압축 파일을 추출하고 추출된 폴더 내부로 이동하여 구성 스크립트를 실행합니다.

tar –xzf strongswan-5.5.0.tar.gz
cd strongswan-5.5.0

구성 스크립트를 실행하여 strongswan의 종속성을 확인합니다. HSM 지원은 아래와 같이 strongswan의 최신 버전에서 이미 활성화되어 있습니다.

구성 스크립트를 실행하고 접두사 /usr/local을 사용하고 openssl 지원을 활성화합니다.

./configure --prefix=/usr/local  --enable-openssl

다음 스냅샷은 필요한 모든 종속성이 이미 시스템에 설치되어 있으므로 구성 스크립트에서 생성된 오류가 없음을 보여줍니다.

다음 두 명령어를 실행하여 /usr/local 디렉터리 아래에 strongswan을 컴파일하고 설치합니다.

make
make install

Ubuntu 플랫폼에서 strongswan의 컴파일 및 설치가 완료되었으며 여러 구성 파일(strongswan.conf, ipsec.conf 및 ipsec.secrets) 및 폴더(strongswan.d,ipsec.d)가 /usr/local/etc 경로 아래에 복사됩니다. . VPN 정책의 구성은 ipsec.conf 파일에 배치되고 기밀 비밀은 ipsec.secrets 파일에 저장됩니다. Strongswan 플러그인 구성은 strongswan.d 디렉터리에 저장됩니다.

전송 및 터널 VPN 모두 strongswan에서 지원됩니다. 터널 모드에서는 채널의 사이트 간 보안이 제공되며 cisco, huawei 및 juniper 장치와 같은 다른 공급업체와 작동합니다.

사이트 간 VPN

다음 그림은 네트워크에서 strongswan 기반 VPN 게이트웨이 기기의 배치를 보여줍니다. 조직의 192.168.223.0/24 및 192.168.222.0/24 사설 네트워크 간에 보안 통신 채널이 설정됩니다.

A와 B 비공개 네트워크 간에 IPsec을 사용하기 전에 A 측의 VPN 게이트웨이가 네트워크 연결이 정상인지 확인하는 원격 측 VPN 시스템(B)을 ping할 수 있도록 조직의 VPN 게이트웨이 간 라우팅이 작동하는지 확인하세요.

아래와 같이 strongswan 도구의 기본 구성은 /usr/local/etc/ 디렉토리 안에 있습니다.

사전 공유 키 기반 터널

첫 번째 경우에는 게이트웨이 장치 간에 공유 비밀 기반 VPN이 생성됩니다. 잘 알려진 키 공유 알고리즘 Diffie-Hellman은 상호 인증을 위해 strongswan에서 사용됩니다. IPsec 프로토콜 작동 방식에 대한 자세한 내용은 다음 링크에서 확인할 수 있습니다.

https://translate.google.com/translate?hl=ru&sl=en&tl=ko&u=http://www.unixwiz.net/techtips/iguide-ipsec.html

VPN 구성:

(곁에)

strongswan VPN 정책의 기본 구성은 ipsec.conf 파일에 있습니다. 아래와 같은 정보는 이 구성 파일에서 찾을 수 있습니다.

  • IKE 버전
  • 터널 유형\n
  • 소스 및 대상 게이트웨이
  • VPN의 사설 네트워크

A측의 ipsec.conf는 다음과 같습니다.

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.101
        leftsubnet=192.168.223.0/24
        right=192.168.1.102
        rightsubnet=192.168.222.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel

IPsec 비밀(공유 키, 비공개 키의 비밀번호, hsm 잠금 해제 핀)은 ipsec.secrets 파일에 저장됩니다. 아래와 같이 두 VPN 당사자 간의 샤드 비밀은 \test12345\입니다.

192.168.1.101 192.168.1.102 : PSK 'test12345'

(B면)

원격 측의 ipsec.conf 및 ipsec.secrets 파일의 구성은 아래와 같이 로컬 사이트의 반대입니다.

ipsec.conf 파일의 내용은 다음과 같습니다.

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.102
        leftsubnet=192.168.222.0/24
        right=192.168.1.101
        rightsubnet=192.168.223.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel

ipsec.secrets 파일에는 원격 측의 공유 비밀이 포함되어 있습니다.

192.168.1.102 192.168.1.101 : PSK 'test12345'

양쪽에 구성 파일을 설정한 후 다음 명령을 사용하여 strongswan 데몬(charon)을 시작합니다.

다음 명령은 디바이스에서 생성된 VPN의 상태를 보여줍니다.

ipsec 상태

양측(로컬 및 원격)의 터널 상태는 아래와 같습니다.

이 Linux 명령은 IPsec 터널의 정책 및 상태를 보여줍니다.

ip xfrm state
ip xfrm policy

위의 명령 출력에 표시된 것처럼 중요한 정보 esp/hmac(키)도 ip xfrm 명령으로 표시됩니다.

X.509 인증서 기반 터널

X.509 인증서(공개 키 인증) 기반 터널에서는 인증 기관(CA), 클라이언트 A 및 B에 대한 인증서 생성이 필요합니다.

다음 스크린샷에는 strongswan의 PKI 유틸리티를 사용하여 자체 서명 CA 인증서를 생성하는 과정이 나와 있습니다.

/usr/local/etc/ipsec.d 경로 내부로 이동하여 다음 명령을 실행합니다.

cd /usr/local/etc/ipsec.d
ipsec pki --gen --type rsa --size 4096 --outform pem > private/strongswanKey.pem
ipsec pki --self --ca --lifetime 3650 --in private/strongswanKey.pem --type rsa --dn "C=CH, O=strongSwan, CN=Root CA" --outform pem > cacerts/strongswanCert.pem    

클라이언트 A에 대한 인증서 생성은 다음과 같습니다.

ipsec pki --gen --type rsa --size 2048 --outform pem > private/client1Key.pem
chmod 600 private/client1Key.pem
ipsec pki --pub --in private/client1Key.pem --type rsa | ipsec pki --issue --lifetime 730 --cacert cacerts/strongswanCert.pem --cakey private/strongswanKey.pem --dn "C=CH, O=strongSwan, CN=device1" --san device1 --flag serverAuth --flag ikeIntermediate --outform pem > certs/client1Cert.pem

유사하게 클라이언트 B에 대해 생성된 공개/개인 키 쌍 및 인증서.

ipsec pki --gen --type rsa --size 2048 --outform pem > private/client2Key.pem
chmod 600 private/client2Key.pem
ipsec pki --pub --in private/client2Key.pem --type rsa | ipsec pki --issue --lifetime 730 --cacert cacerts/strongswanCert.pem --cakey private/strongswanKey.pem --dn "C=CH, O=strongSwan, CN=device2" --san device2 --flag serverAuth --flag ikeIntermediate --outform pem > certs/client2Cert.pem

CA 및 클라이언트 인증서를 성공적으로 생성한 후 다음 단계는 ipsec.conf 및 ipsec.secrets 구성을 변경하는 것입니다. ipsec.conf 및 비밀 파일의 변경 사항에 대한 자세한 내용은 strongswan 설명서를 참조하십시오.

A 측에 대한 ipsec.conf 및 ipsec.secrets의 내용은 다음과 같습니다.

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.101
        leftsubnet=192.168.223.0/24
        right=192.168.1.102
        rightsubnet=192.168.222.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        #authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel
        leftcert=client1Cert.pem
        leftid="C=CH, O=strongSwan, CN=device1"
        rightid="C=CH, O=strongSwan, CN=device2"
#192.168.1.101 192.168.1.102 : PSK 'test12345'
: RSA client1Key.pem

B면의 구성도 아래와 같습니다.

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.102
        leftsubnet=192.168.222.0/24
        right=192.168.1.101
        rightsubnet=192.168.223.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        #authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel
        leftcert=client2Cert.pem
        leftid="C=CH, O=strongSwan, CN=device2"
        rightid="C=CH, O=strongSwan, CN=device1"

#192.168.1.102 192.168.1.101 : PSK 'test12345'
: RSA client2Key.pem

ipsec restart 명령을 실행하여 위의 변경 사항을 적용하고 인증서를 사용하여 생성된 터널의 상태를 확인합니다.

ipsec statusall    # at side A
ipsec statusall    # at side B

마지막으로 strongswan 도구를 사용하여 인증서 기반 VPN이 성공적으로 생성되었습니다.