In
& Out
방화벽 규칙을 생성할 때 가장 헷갈리는 부분은 단연코 트래픽의 방향일 거라고 생각합니다.
In
, Out
어디로 설정해야할 지 저도 처음에는 굉장히 헤맸던 적이 있습니다.
사진에 보이는 것처럼 방화벽 규칙 리스트에 화살표 모양으로 된 부분이 보이시죠?
여기서 오른쪽(→
) 화살표는 In
을 의미하고,
왼쪽(←
) 화살표는 Out
을 의미합니다.
사전적인 의미로 풀어보자면 In
은 방화벽 인터페이스로 들어오는 트래픽을 의미하고,
Out
은 방화벽 인터페이스에서 나가는 것을 뜻한다고 합니다.
그럼에도 이 방향에 대해서 다소 애매한 면이 있습니다.
제일 많이 헷갈리는 부분 중 하나는 방화벽 내부에서의 트래픽 흐름인데요.
결론부터 말씀드리면 방화벽 내부에서의 트래픽 흐름은 고려할 필요가 전혀 없습니다.
이렇게 혼동이 오는 이유 중 가장 큰 이유는 방화벽 장비와 그 인터페이스를 분리해서 생각하기 때문인데요.
여기서 Host
에서 Host 2
로 통신을 한다고 가정해보겠습니다.
그럼 우리는 보통
- (1) Host 1에서 출발한 트래픽이
LAN 1
에 포트에 도착 - (2)
LAN 1
포트에서LAN 2
포트로 트래픽 전달 - (3)
LAN 2
포트에서 HOST 2로 트래픽 전송
위와 같은 방식으로 생각하시는 분들이 많을겁니다. 너무나도 맞는 생각이구요.
그렇다면 여기서 어떤 것이 IN
이고 OUT
인걸까요?
(1)
은 아무래도 IN
이 맞는 것 같습니다.
(3)
은 OUT
이 확실하구요.
(2)
가 조금 애매하네요.
LAN 1
에서 보내고 있으니 OUT
인지, 또 LAN 2
에서는 받는 입장이니 IN
같기도 하고 ..
(2)는 생각할 필요가 전혀 없습니다.
(2)
는 방화벽 내부에서 흐르는 트래픽으로 IN
도 OUT
도 아닙니다.
방화벽에서 IN
과 OUT
을 구별하는 기준은, 철저히 방화벽 입장에서 바라 보았을 때 트래픽이 어떻게 흐르는지 정해집니다.
방화벽으로 향하는 트래픽은 모두 IN
으로 인식 하면 되고,
방화벽 밖으로 빠져나가는 트래픽은 OUT
으로 인식 하면 됩니다.
심플하죠?
Inbound
= ALL DENY, OUTBOUND
= ALL PASS
방화벽 규칙을 적용할 때는 INBOUND
규칙을 생성하는 것이 가장 기본적입니다.
그 이유는 인바운드 규칙을 통해 외부 네트워크에서 내부 네트워크로 들어오는 트래픽 제어가 가능하기 때문이죠.
기본적으로 WAN 인터페이스나 새로 생성된 인터페이스의 경우에는 초기에 아무런 규칙(자동 설정 규칙 제외)이 설정되어 있지 않습니다.
아무런 규칙이 설정되어 있지 않는 경우 방화벽은 기본적으로 인바운드 트래픽에 대해서 ALL DENY
정책을 유지합니다.
외부와의 경계가 되는 WAN
인터페이스의 경우에는 인바운드 트래픽에 대해서 ALL Deny
정책이 기본이 되어야 하는 것이 당연하다고 볼 수 있습니다.
반대로 OUTBOUND
의 경우에는 ALL PASS
가 유지되도록 되어 있습니다.
이러한 설정 때문에 WAN
인터페이스에서 아무런 규칙이 없어도 내부의 호스트들이 인터넷과 통신이 가능한 이유였죠.
방화벽 규칙?
이제부터 몇 가지 기본적인 방화벽 규칙에 대해서 살펴보도록 하겠습니다.
이러한 규칙을 잘 조합하여 응용하면 사용자 환경에 맞는 규칙은 얼마든지 생성할 수 있습니다.
1. 특정 네트워크로의 접근만 허용하기
제 실습 환경 기준으로 Internal
인터페이스에 할당된 네트워크인 192.168.100.0/24
에서 LAN
네트워크인 192.168.1.0/24
로 접근을 허용해보도록 하겠습니다.
왼쪽 메뉴에서 Firewall
-> Rules
-> Internal
로 이동할게요. 그리고 화면 오른쪽에 +
버튼을 눌러 새 규칙을 생성하겠습니다.
Action
은 Pass
로 지정해주세요.
Interface
는 해당 률이 적용되는 인터페이스를 의미합니다. 현재 저는 Internal
인터페이스에 이 룰을 적용시킬 것이므로 기본으로 설정되어 있는 값 그대로 두겠습니다.
Direction
은 IN
으로 설정합니다.
혹시 여기서 192.168.100.0/24
네트워크에서 192.168.1.0/24
로의 접근이라고 생각하여 OUT
으로 설정하시면 안됩니다.
위에서 이해했던 방화벽의 트래픽 방향에 대해서 다시 한번 강조하면 방화벽 규칙은 철저하게 방화벽 입장에서 생각해주세요!
방화벽 입장에서는 192.168.100.0/24
네트워크에서 출발한 트래픽이 들어오는 것이므로 IN
이 맞습니다.
Source
의 경우에는 클릭하면 여러 카테고리가 나오는데요.
여기서 Networks
카테고리에는 방화벽 인터페이스 이름이 나타납니다.
각 인터페이스는 하나의 네트워크를 의미해요. 예를 들어 Internal NET
은 Internal 인터페이스에 대한 네트워크 전체를 의미합니다.
또는 Internal address
는 해당 인터페이스의 주소 즉, 192.168.100.1
을 의미해요.
지금 제가 설정하려는 규칙은 Internal
네트워크(192.168.100.0/24
) 대역들이 LAN
네트워크(192.168.1.0/24
) 대역에 접근하도록 하기 위함이니
Internal net
으로 설정해줘야 합니다.
Destination
의 경우에는 192.168.1.0/24
네트워크 즉, LAN net
을 선택해주시면 됩니다.
Save
버튼을 눌러 설정을 저장하고 나오시면 방금 생성한 규칙이 인터페이스에 생성됩니다.
그리고 화면 우측 상단에 Apply Changes
가 나오구요 이걸 클릭해 설정을 적용하시면 됩니다.
이렇게 되면 Internal
네트워크에 속한 호스트들이 LAN
네트워크에 속한 호스트들과 통신을 할 수 있습니다.
2. 특정 네트워크로의 접근 차단하기
차단 규칙의 설정은 앞선 접근 규칙의 설정에서 Action
만 변경해 주면 됩니다.
기존 동작인 Pass
에서 Block
또는 Reject
중 하나를 선택해주세요.
두 선택지 모두 차단을 위한 Action 이지만, 그 동작에는 약간의 차이가 있습니다.
Block | Reject |
---|---|
- 패킷 조용히 삭제 - 발신자에게 어떠한 응답도 보내지 않음 - 발신자는 패킷이 어떻게 되었는지 알 수 없음 |
- 패킷이 삭제되지만, 발신자에게 오류 메시지 반환 - TCP 연결의 경우 TCP RST 패킷이 반환 - 발신자는 패킷이 차단되었다는 것을 명확히 알 수 있음 |
3. 인터넷 연결은 허용! BUT. Private Network 접근은 차단
방화벽 내부에 Private Network 많은 경우에는 이러한 Private Network를 어떻게 관리할 수 있을까요?
방화벽 내부에 P1
, P2
, P3
라는 Private Network가 존재한다고 가정하고, 여기에 추가로 P4
라는 새로운 Private Network가 생성되었다고 가정해볼게요.
그런데 P4
네트워크의 경우 보안상 민감하여 확실한 격리가 필요합니다.
그로 인해 P4
네트워크는 P1
, P2
, P3
네트워크와 완전히 단절되어야 합니다. 그렇지만 외부(인터넷)으로는 통신이 가능해야 하죠.
이런 경우에 방화벽 규칙을 적용한다고 가정해보겠습니다.
먼저 P1
네트워크 인터페이스에 새로 생성된 P4
로의 접근을 차단해야 하고, P2
, P3
역시 이러한 규칙을 생성해야 합니다.
또한 P4
네트워크는 인터넷에 대한 접근이 필요하므로 목적지를 0.0.0.0/0
으로 설정하는 Pass
규칙을 생성해야 하는데,
이렇게 되면 다른 Private Network에서 접근할 수 있는 문제가 생깁니다.
만약 이 상황에서 P1
, P2
, P3
네트워크 역시 보안상 이유로 격리해야 한다면? P4
규칙에도 각 네트워크에 대한 접근 차단 규칙을 설정해야 합니다.
여기서 관리해야 할 네트워크가 더 늘어난다면? 관리 포인트가 늘어날 수록 관리자만 힘들어집니다.
Aliases
와 Destination invert
를 사용하면 이러한 문제를 해결할 수 있습니다.
먼저 Firewall
-> Aliases
메뉴로 접근해주세요.
여기서 Private Network에 주소에 대한 Alias를 작성해주면 됩니다.
Content
는 각 Private Network에 대한 CIDR을 입력해 콤마로 구분하여 작성해주면 됩니다.
그리고 저장한 후 다시 Firewall
-> Rules
-> Internal
메뉴로 이동하여 새로운 규칙을 생성할게요.
앞서 살펴본 1. 특정 네트워크로의 접근만 허용하기에서와 같이 Action은 Pass
, Source는 해당 인터페이스의 net
(Internal net)으로 설정합니다.
여기서 핵심은 Destination 설정인데요.
Destination
을 방금 Aliases에서 만든 Private_Network
로 지정해주세요.
그리고 Destination / Invert
를 체크해주세요.
이렇게 하면 Destination에 대해서 반전이 일어납니다.
그럼 Private Network를 목적지로 하는 패킷을 제외한 나머지 패킷에 대해서만 Pass가 되고 나머지는 Block이 되죠.
마무리
이번 포스팅을 통해 OPNsense 구축에 있어서 많은 도움이 되었으면 좋겠습니다.