사실 공격도 그리 많지않고 로그에 찍히는건 별로 없지만, 심신의 안정을 위해 geoip 차단을 해보고자 삽질해보고 그 결과를 올려놓습니다.
다음 단계로는 netflow 활성화 / ELK 스택으로 분석까지 해볼 예정입니다..만 쉽지않네요
혹시 하신분이 계신다면 알려주시면 감사하겠습니다
출처: https://www.cron.dk/firewalling-by-country-on-edgerouter/
일단 wget 은 설치되어 있다고 가정하며, 아래 모든 명령어는 ssh 상에서 진행됩니다.
EdgeRouter 12 / v2.0.9 Hotfix 4 기준 정상작동 확인했습니다.
1. {FW_GroupName} 을 필요한 networkgroup 이름으로 치환해 networkgroup 생성
> {FW_GroupName}
> {FW_GroupDescription}
configure
set firewall group network-group {FW_GroupName} description '{FW_GroupDescription}'
commit
2. 국가별 서브넷 받는 스크립트 생성.
cd ~/
mkdir GeoIP
touch GeoIP/GeoIP.sh
// 해당 GeoIP폴더 절대경로 기억해두기.
// 예를 들어 user=username인경우, /home/user/GeoIP
> contryList = "kr jp"에 원하는 국가 수정( 에시의 경우는 한국, 일본)
> /home/{user}/GeoIP/ 경로 본인 경로 맞게 수정 필요
> 아래 내용 적절히 수정해 GeoIP.sh 에 추가
vi ~/GeoIP/GeoIP.sh
#!/bin/bash
countryList="kr jp"
firewallGroupName={FW_GroupName}
#mkdir /config/zonefiles
function loadcountry () {
firewallGroupName=$1
country=$2
echo "Downloading country definition for $country..." >> /var/log/alex
wget http://www.ipdeny.com/ipblocks/data/countries/${country}.zone -O /home/{user}/GeoIP/${country}.zone -q
echo "Adding rules to firewall group $firewallGroupName..." >> /var/log/alex
for rule in `cat /home/{user}/GeoIP/${country}.zone`; do
ipset add $firewallGroupName $rule
done
}
ipset -F $firewallGroupName
for country in $countryList; do
loadcountry $firewallGroupName $country
done
3. 권한부여 & 실행
> 권한부여
cd ~/GeoIP
chmod 755 GeoIP.sh && chmod a+x GeoIP.sh
> 실행
sudo ./GeoIP.sh
// ipset -L {FW_GroupName 을 통해 실제로 잘 작동했는지 확인 가능합니다.
// ***주의사항 - GUI 상에서는 IPset에 상기 데이터가 추가되지 않으며, 임의 수정을 하면 안됩니다.***
sudo ipset -L {FW_GroupName}
4. 매일 실행하도록 crontab 추가
sudo crontab -e
> 실행후 다음 붙여넣기
0 5 * * * /bin/bash /home/{user}/GeoIP/GeoIP_KR.sh
해당 스크립트는 매일 새벽 05시에 스크립트 실행 - 원하는 시간, 스크립트 지정필요
5. 필요한 firewall rule 에 ip list 형태로 설정.
------------------------------------------------------------------------------------------------------------------------------
제 국가 설정은
허용 List : kr jp
거부 List : cn ru nl pl ve de hu gb rs il fi bg id in
입니다.
개인적으로 사용하는 vpn 서버, syncthing 서버에 설정해뒀는데, 잘 작동하네요.
추가로, US 같이 IP주소가 엄청나게 많은 동네를 IP리스트에 쑤셔넣으면 장비가 못버티니 화이트리스트/블랙리스트를 잘 설정해야 할듯 합니다.