Embedded Linux/OpenWrt

 

OpenWrt에서 네트워크 응용을 운영하다보면 설정에 의해 네트워크 포트 액세스를 허용/제한 설정을 해야 하는 경우가 있다.

 

firewall 에 rule 추가

SNMP 서비스 액세스를 허용/제한 하기 위해 가장 간단하다고 생각하는 방법은 아래와 같다.

root@OpenWrt:~# uci set firewall.snmp=rule 
root@OpenWrt:~# uci set firewall.snmp.name='reject snmp traffic' 
root@OpenWrt:~# uci set firewall.snmp.src='wan' 
root@OpenWrt:~# uci set firewall.snmp.dest_port='161' 
root@OpenWrt:~# uci set firewall.snmp.target='REJECT' 
root@OpenWrt:~# uci set firewall.snmp.enabled='0' 
root@OpenWrt:~# uci commit

 

위에 명령을 입력하면 firewall에 아래처럼 저장된다.

여기서 사용된 option은 아래와 같다. 특정 ip, port, 날짜 지정 등의 옵션을 사용할 수 있지만 사용 목정에 맞게 심플하게 추가했다.

  • src: "zone name"의 형태로 트래픽 소스 zone을 선택한다. zone 은 network 설정에서 선택한다.
  • dest_port: rule을 적용할 port이다. snmp 서비스 액세스를 제어할 거니까 '161'을 설정
  • target: rule 동작 방법 ("ACCEPT", "REJECT". "DROP", "MARK", NOTRACK") 중 "REJECT" 선택
  • enabled: 이 rule을 사용할지 사용 안할지 선택.

 

위 설정에 의해 enabled가 '1'인 경우 SNMP 포트(161)을 REJECT 하고, enabled가 '0' 인 경우 ACCEPT 하는 rule을 생성했다.

 

방화벽 설정
방화벽 설정 방화벽 설정은 /etc/config/firewall에 있습니다. 개요 OpenWrt는 패킷 필터링, NAT 및 mangling을 위해 netfilter를 사용합니다. UCI 방화벽은 iptables system에서 추상화 된 인터페이스를 제공하여 사용자가 필요한 경우 iptables 규칙을 스스로 제공 할 수있게하면서 가장 일반적인 목적에 맞는 단순한 설정 모델을 제공합니다
https://openwrt.org/ko/docs/guide-user/firewall_configuration#rules

 

 

테스트

먼저, enabled option이 0인 경우 (SNMP ACCEPT)시에는 SNMP 요청에 응답하는 것을 볼 수 있다.

 

root@OpenWrt:~# uci set firewall.snmp.enabled='0' 
root@OpenWrt:~# uci commit 
root@OpenWrt:~# /etc/init.d/firewall reload

 

 

 

이후 SNMP REJECT enable option을 1로 바꾸고 firewall을 reload 하면 SNMP 서비스를 제한할 수 있다.

root@OpenWrt:~# uci set firewall.snmp.enabled='1' 
root@OpenWrt:~# uci commit 
root@OpenWrt:~# /etc/init.d/firewall reload

 

  • SNMP요청에 timeout 발생