SECUI MF2 장비 URL 기반 차단 해제 도구 만든 이야기 + ETC

파아란곰탱이·2021년 7월 2일
0

잡담 및 일화

목록 보기
1/5

지금은 장비가 바뀌었으니 아마 상관없는 이야기일것이다.

때는 2020년, 아작난 다리를 어느정도 고치고 모 부대 사이버방호실에서 한창 열심히 일하고 있었다. 요일마다 정기적으로 해야하는 일들이 있었는데 그 중 하나가 인터넷망에서 차단할 IP나 URL을 등록하는 것이였다. 이게 골치 아팠던게 차단 목록은 국방망에 올라왔다는 것이다.

국방망에서 인터넷망으로 데이터 옮기는거는 제약이 많이 걸려있긴 했지만, 어째저째 잘 옮겼다. 그렇게 평균적으로 일주일에 약 1000건정도의 차단이 이루어졌다.

그런데 여기서 URL 차단에 관련된 문제가 발생한다.
이 문제가 발생한 원인은 두가지가 있다.

  1. 이게 차단할 때 1500개 단위의 그룹으로 차단 가능하고, 20개의 그룹을 만들수 있다는것
  2. 이 장비가 운영된지 시간이 좀 지나서 차단 누적량이 많다는것

그래서 진짜 가~끔 가다 무해하다고 판단된 것에 대해 차단 해제 명령이 떨어지기도 한다.

하지만 이 SECUI MF2장비......

차단을 할 때는 정해진 양식의 엑셀 파일에 차단 목록을 넣으면 알아서 그 파일을 파싱해 차단을 수행해준다. 그런데 차단 해제는 저렇게 자동으로 해주는 기능이 없었다.

이 말인 즉슨 차단 해제 명령이 한번에 몇천개씩 떨어지면, 이를 수행 하려면 사람이 일일히 손으로 하나씩 입력을 해서 차단 해제해야 한다는 것이다. 여기서 더 골때리는게 위에서 말했듯이 20개의 그룹으로 나눠져 있다는것, 그리고 이게 그룹 통합 검색이 없었다는것이다. 그래서 20개 그룹에 대해 전부 검색을 하나씩 해봐야 겨우 차단 해제가 된다는 것이다.

이 장비의 최신 버전은 그런 기능이 있을지는 모르겠지만, 군대에서 그런걸 기대하면 안된다는것을 뼈저리게 느꼈기에 꼼짝없이 차단 해제만 줄창 할 예정이였다.

심지어 다른 부대 관련 부서에 그쪽은 어떻게 처리하냐고 물어보니 돌아온 답변이 이거였다.

  1. 우리도 그냥 일일히 손으로 해제한다.
  2. 사실 우린 명령 씹고 안한다.

심지어 우리 상위 부대에서도 '예하 부대중에 이거 빠르게 하는데 있으면 방법 공유좀' 이라고 할 정도였다.

그래서 나는 이 차단해제를 자동으로 해 줄수 있는걸 만들기로 했다.

처음에는 구글 익스텐션으로 만들어볼까 생각했다. MF2장비의 GUI콘솔이 웹 기반이였기 때문이다. 그런데 이거 까보니 그냥 웹에 플래시 기반으로 띄워놓은거였다.......


아 이건 좀 아닌데 생각 하면서 다른 방법을 생각해보니, 어차피 우리가 매 주 백업을 진행하면서 SSH로 해당 장비들에 직접 접근하곤 했다. 어차피 차단 내역은 장비 내부에 정보가 있을 것이다. 그렇다면 해당 정보가 담긴 파일을 찾아서 직접 조작을 가하면 되지 않는가? 라는 생각을 했다.

하지만 그 파일들이 사람이 읽을수 없는 바이너리 파일일 가능성이 있었다. 그러면 이 바이너리 파일을 해석해서 차단 해제를 해야되는데 이건 답이 없다고 생각했고 만약 바이너리 파일이라면 그냥 포기할려 했다.

다행이도 바이너리의 형태는 아니였다. IP차단 목록은 SQLite 파일이고 URL차단 목록은 단순 텍스트 형태로 차단 목록이 지정되어 있었다.

그런데 URL 차단 파일이 골치 아픈게 파일 형태가 JSON 비슷하게 KEY-VALUE의 구조처럼 생겼는데 JSON은 아니였다. 즉, 이거 읽을때 이미 구현된 JSON 파서는 이용이 불가능 했다는 것이다. 또한 이 파일에는 차단 목록만 있던게 아니라 그룹에 관련된 설정, 그리고 URL 차단 관련 설정도 같이 있었다.

여기서 든 생각이 '아 이거 잘못 건들면 영창으로 안 끝나겠다' 라고 생각했다. 하지만 그렇다고 몇전개나 되는걸 하나하나 어느 세월에 해제 하겠는가. 그래서 까짓거 내가 파서 만들면 안되나 라고 생각했다.

다행히도 MF2 장비 내에는 python이 기본 탑재 되어있었다. 몰론 그게 2.6 버전이긴 했지만.....

어쨌든 설마 쉘 스크립트로 작업해야 하나 라는 걱정이 없어지고 선녀같은 python으로 해당 기능을 구현하기로 했다.

구현한것은 다음과 같다.

  1. CLI기반 URL 차단 해제
  2. CLI기반 IP 차단 해제

2번의 IP차단 해제는 SQLite 파일을 불러와서 쿼리를 때리면 되니깐 어려운게 없었다. 문제는 1번이다. 1번의 기능을 구현하기위해 해당 파일을 읽어서 정리된 data로 만들어 주는 파서를 직접 구현해야했다. 이를 위해 해당 파일의 구조를 분석해 파일에 맞는 정규식을 작성하였다. 이게 제일 힘들었다. 정규식 길이만 엄~청 길었기 때문이다.

솔직히 정규식을 짜는데 오래 걸려서 그렇지, 정규식만 완성 되면 나머지는 일사천리였다.

정규식으로 해당 파일을 성공적으로 읽기만 하면 그 내부에서 제거할 요소를 골라내는것은 단순히 문자열 비교만 하면 되었기 때문이다.

이렇게 짜서 차단 해제를 해보니 모든 작업이 1분안에 끝났다. 이걸로 다른 사람들은 차단 해제에 대해 고통 받지 않았으면 좋겠다.

는 나 전역 후 인터넷망 UTM 다른 회사 장비로 바뀌었다네;;;;

이거 소스 밖에 들고올수 있었으면 증거로 좋았겠지만 군대에서 만든거라 가져 나올수가 없었다 ㅠㅠ

사용한것

  1. 정규식 모듈 re
  2. 파이썬
  3. MF2메뉴얼 참고
  4. 내 피같은 개인정비 시간
profile
파아란곰탱이

0개의 댓글