XFRM은 Linux 커널에서 IPsec 프로토콜을 구현하는 프레임워크로, IPsec 메시지를 변환하여 원본 메시지를 복원하거나 IPsec 메시지로 변환하는 역할을 수행한다.
IPsec 패킷 수신 절차
IP Layer에서 패킷 수신: 네트워크 인터페이스로 수신된 패킷은 IP 계층으로 전달됩니다.
패킷의 프로토콜 필드를 검사하여 IPsec 관련 프로토콜(AH, ESP)일 경우, XFRM 프레임워크로 전달됩니다.
xfrm4_rcv() 호출: xfrm4_rcv() 함수가 호출되어 IPsec 패킷 처리가 시작됩니다.
xfrm_input()을 통해 SA(Security Association)를 찾습니다.
SA 검색 및 처리: xfrm_state_lookup() 함수가 호출되어 SA를 검색합니다.
SA를 찾을 수 없는 경우 패킷을 드롭(drop)합니다.
SA가 있는 경우, 패킷을 해당 SA에 따라 처리합니다.
프로토콜(AH, ESP)에 따라 ah_input 또는 esp_input 함수가 호출됩니다.
원본 메시지 복원: XFRM은 패킷을 변환하여 원본 메시지를 복원합니다.
전송 모드에서는 xfrm4_transport_input()을, 터널 모드에서는 xfrm4_mode_tunnel_input()을 호출하여 패킷을 처리합니다.
ip_local_delivery()로 반환: 패킷이 원본 메시지로 복원되면, ip_local_delivery()로 전달됩니다.
XFRM 정책 필터링을 통과하면 최종적으로 응용 프로그램 계층으로 전달됩니다.
IPsec 패킷 송신 절차
패킷 송신 경로 설정: 패킷이 전송 계층을 거쳐 IP 계층으로 전달되면, xfrm4_output() 함수가 호출되어 SA를 검사합니다.
SA 검사 및 처리: 라우팅 경로에서 SA를 확인하고, 요구되는 SA가 있으면 XFRM 처리를 시작합니다.
SA가 없는 경우 패킷은 그대로 ip_output()으로 전달되어 일반 패킷으로 송신됩니다.
IPsec 메시지로 변환: SA가 있는 경우, xfrm_output()이 호출되어 패킷을 IPsec 메시지(ESP, AH)로 변환합니다.
전송 모드에서는 xfrm4_transport_output()을, 터널 모드에서는 xfrm4_mode_tunnel_output()을 호출하여 IPsec 메시지로 변환됩니다.
ip_output()으로 송신: 변환된 IPsec 메시지는 ip_output()을 통해 네트워크 인터페이스로 전송됩니다.
'네트워크 보안 > 네트워크' 카테고리의 다른 글
strongswan #5 IKE SA INIT, IKE_AUTH, CHILD_SA 설정 (0) | 2024.11.10 |
---|---|
strongswan #4 charon에서 패킷 처리 (sender, receiver, processor) (0) | 2024.11.09 |
strongswan #3 charon 초기화, plugin loading (0) | 2024.11.09 |
strongswan #2 starter -> charon launch, config update (0) | 2024.11.09 |
Netlink Sockets # How to use (0) | 2024.11.03 |