ruci에서 방화벽 설정 general setting 탭을 보면 input, output, forwading의 기본 정책 및 zones과 zone->forwarding 등의 방화벽 기본 정책에 대한 부분이 있습니다.
OpenWrt 처음 사용자나 linux 패킷 필터 도구 iptables에 대한 경험이 없이면 이게 뭔가 싶기도 하고 때에 따라서는 잘못된 설정으로 연결이 안되거나 굳이 불필요한 설정을 하는 경우가 있는데요. 처음 사용자 및 방화벽 정책 수립에 어려움이 있는분께 도움이 됬으면 좋겠습니다.
iptables filter table
luci 방화벽 설정부분에 대한 설명에 앞서 iptables의 5개 table 중에서 패킷 필터링을 담당하는 filter table에 대한 개념이 약간 필요한데 설명은 여기로 대체합니다.
여기서 중요한 것은 iptables filter table은 INPUT, OUTPUT, FORWARD 체인으로 구성되며 각 체인에 규칙을 정해 패킷을 ACCEPT, REJECT, DROP 할지 결정하며,규칙은 순차적으로 실행한다 입니다.
- INPUT 체인 : 네트워크 인터페이스/존에 들어오는 정책
- OUTPUT 체인 : 네트워크 인터페이스/존에서 나가는 정책
- FORWARD 체인 : 네트워크 인터페이스/존에서 다른 네트워크 인터페이스/존으로 전달하는 정책
- 각 체인에 규칙을 정해 패킷을 ACCEPT, REJECT, DROP 할지 정책을 결정하며 규칙은 순차적으로 실행한다.
주의사항
방화벽 설정 변경으로 라우터와의 연결이 끊어지거나 연결이 차단될 수 있습니다. (부주의로 인해 라우터로의 접근이 차단되어 펌웨어를 다시 올리는 경우도 있으니 주의가 필요합니다.)
샘플

이건 제 라우터의 현재 방화벽 luci 화면입니다. (샘플 화면)
위에 보면 general setting이 보이고요. 아래는 zones 설정 부분이 있습니다.
general setting 부분은 iptables의 전체적인 기본 체인 정책(최상위 정책)을 어떻게 할 것인지 정하는 구간이며,
zones 설정 부분은 /etc/config/network에서 network 인터페이스가 위치하는 방화벽 구역(zone)을 나타냅니다. 예들들어 lan영역(zone)에는 br-lan이 wan zone에는 eth0.2가 vpn0에는 wg0이 vpn1에는 xfrm0 네트워크 인터페이스가 위치하는 것이며 xfrm0 네트워크 인터페이스의 경우 vpn1영역 방화벽 정책을 적용받게 됩니다. 이러한 zone 설정은 위의 general setting의 전체적인 기본 정책의 하위 정책으로 general setting의 전체 기본 정책보다 먼저 패킷 필터링 규칙을 적용받습니다.
하나씩 끊어서
그림1

lan zone
- ① : lan 영역에 위치한 네트워크 장치 br-lan은 lan영역에서 들어오는 패킷은 모두 허용해야 합니다. 허용하는 다른 규칙 없이 만약 기본정책 차단(REJECT, DROP) 한다면 내부 네트워크의 장치들은 라우터에서 들어오는 패킷을 허용하지 않으므로 통신을 하지 못하게 됩니다. 따라서 INPUT 체인의 기본 정책은 ACCEPT 입니다. 용기있는 분은 테스트 삼아 REJECT나 DROP을 해 보시는것을 추천 드립니다. 저는 용기가 없어요.
- ③ : lan 영역의 패킷은 wan영역으로 전달(FORWARD)이 되어야 인터넷에 연결을 할 수 있습니다. 따라서 lan --> wan으로 패킷을 전달할 수 있게 해야 인터넷에 연결할 수 있습니다.
wan zone
- ② : wan영역에서 즉 외부 인터넷에서 들어오는 패킷은 기본적으로 차단해야 합니다. 필요한 경우 따로 특정 port만 열어 줍니다(여기서 설명할것은 아님). 따라서 기본 정책은 REJECT입니다.
- ④ : lan 영역에서 wan영역으로 전달된 패킷은 사설 ip 구간에서 생성된 패킷으로 외부 인터넷 연결을 위해선 공인 ip로 변경이 필요하므로 MASQUERADE = yes 입니다. wan영역을 제외한 다른 영역은 기본적으로 masquerading이 필요하지 않습니다.
그림2

wan zone
- ① : wan영역에서 외부 인터넷과 연결을 위해 패킷이 외부로 나가야합니다. 따라서 OUTPUT 기본 정책은 ACCEPT입니다. 나는 자연인으로 살겠다면 REJECT나 DROP으로 하시면 됩니다.
zone -> forwarding
- ② : lan영역에서는 wan영역, vpn0영역 vpn1영역으로 패킷을 전달할 수 있게 하였습니다. wan영역으로 전달은 위에서 설명을 했고 여기서 질문(question) 입니다. 이글을 본다면 한번 생각해 보세요. 그림을 보면 lan -> vpn0로 패킷을 전달하게 설정을 했는데 wg0 인터페이스를 사용하는 wireguard client는 외부 인터넷 환경에서 라우터로 접속을 하는 클라이언트인 경우 과연 이런 설정이 필요할까요??? 고민해 보세요.
- ③ : vpn0 영역에 위치한 network 장치 wg0는 lan영역 및 wan영역에 패킷을 전달할 수 있어 내부 네트워크 및 인터넷에 접근 할 수 있습니다. (wireguard 클라이언트로 라우터에 접속시 내부 네트워크 접근 및 split tunnel 설정을 안한 경우도 라우터를 통해 인터넷에 접근 가능)
- ④ : vpn1 영역에 위치한 xfrm0 인터페이스는 site-to-site vpn 을 위한 장치로 site-to-site로 연결하여 내부 내크워크로만 접근이 가능합니다. 인터넷이나 다른 영역에는 갈 수가 없습니다.
그림3

forwarding
- ① : 영역별 FORWARD 기본 정책을 설정합니다.
zone->fowarding
- ② : 영역별 zone->forwarding에서 설정한 전달방향은 위의 ① forward 기본 정책의 하위정책으로 우선 적용 됩니다.
만약 lan영역의 ① forward 기본 정책을 accept로 하고 ② zone->forwarding의 설정에서 lan->wan, lan->vpn0, lan->vpn1 전달을 삭제하면 어떻게 될까요? 상위 기본 정책이 accept니까 하위 정책이 없더라도 lan영역에서 wan영역으로 알아서 패킷이 전달 될까요?
답은 ② zone->forwarding의 설정에서 lan->wan, lan->vpn0, lan->vpn1 전달을 삭제하면 ① forward 기본 정책이 ACCEPT 임에도 불구하고 lan 영역에서 다른 영역으로 패킷이 전달되야 하는데 어떤 영역으로 전달할지 몰라 결국 패킷이 전달되지 않습니다.(영역이 lan과 wan 2개만 있다면 어떻게 될지 모르겠지만 영역이 여러개 있을 경우 그러합니다.)
그림4

general settinig
- ① : iptables의 전체적인 INPUT, OUTPUT, FORWARD 체인의 기본 정책입니다.(최상위 정책)
zones
- ② : 영역별 input, output, forward 기본 정책은 위 ① 전체 정책의 하위정책으로 우선 적용됩니다.
따라서 iptables가 패킷 필터링시 ② 영역별 기본 정책을 수행 후 ①의 정책을 수행합니다.
그림5

이러한 설정으로 실제 iptables에 정책은 그림처럼 general setting에서 설정한 전체 기본 정책은 맨 밑에 깔리고 영역(zones)에서 설정한 기본 정책은 전체 기본 정책의 위에 있게 됩니다.
위에서 맨 먼저 언급했듯이 규칙은 순차적으로 처리됩니다. 위에서 아래로. 따라서 generl setting에서 INPUT 체인의 전체 기본 정책을 ACCEPT를 해도 영역별 input 기본 정책을 REJECT해보리면 패킷은 REJECT됩니다. 위에서 이미 REJECT됬으니 밑으로 안 가겠죠.
아무튼 방화벽 정책 설정에서 가장 중요한 부부은 사실 그림1, 그림2 부분입니다. 여기만 주의하면 일반 가정에서 사용하기에는 크게 영향이 없습니다, 예를들어 영역별 forward 정책을 모두 ACCEPT해도, masquerading 을 모두 yes로 해도 문제가 되지 않으나 필요가 없는 정책이고 당장 문제가 되는 것은 아니지만 이러한 정책이 해당 인터페이스로 접근하는 route를 열어놓은 것이므로 위의 샘플 화면처럼 외부에서 vpn 접속을 허용한다든가 할 경우 잠재적인 구멍이 될 수는 있으니 점검해 보시길 바랍니다.