네트워크 진자 너무 어렵다... 힘ㄷㅡㄹ다... 하지만 해야한다! 지난 4일간의 공부를 어떻게 복습하고 정리할지 고민스러웠는데, 우선 가장 힘들었던 방화벽에 관한 글을 하나 쓰려고 한다. 왜냐면 해결해서 뿌듯함. 이거 하나 해결하고 뿌듯했는데 오늘 이중화 통신하면서 다시 기죽음... 네트워크는 어떻게 이렇게 하루하루 어려워지지... 흑흑
많은 것이 힘들었지만... UFW와 IPTABLES가 충돌나서 자꾸 스스로 자살하는게 정말 ㅡㅡ 분명 설치했는데 또 설치하고, 둘이 충돌나서 삭제하고 다시 시도하고 또 설치하고 아오… 이런 것들이 힘들었다. 그래도 어찌어찌 실습 문제 에러의 산을 넘어 거의 다 해결됐다 싶었을 때, 로그가 보이지 않는 것이었다. (두둥) 로그가 안 보이니까 이게 뭔가 실패한건가 싶고, 대체 뭘까... 근데 뭔가 이건 해결이 될 것 같아서 꽤 오래 붙들고 있었다. 그리고 이건 해결이라도 됐지...
우리의 목표는 목표 차단된 트래픽이 어떻게 기록되는지 모니터링을 해보자… 이거임
로깅 활성화
sudo ufw logging on
특정 포트 차단
sudo ufw deny 1234/tcp
네트워크 연결 테스트
nc -v [가상머신 IP] 1234
로그 파일 모니터링
sudo tail -f /var/log/ufw.log
이를 위해서 가상 머신을 2개 띄워놓고 열심히 테스트를 해봤다.
특정 트래픽을 차단하고, 차단된 트래픽이 로그에 기록되는지 확인을 해야 하는데... 차단은 되었으나 로그 파일에 로그가 하나도 쌓이지 않고 있었다!
분명... 트래픽은 차단이 잘 되는 것을 확인 했는데 로그가 안 보인다... 트래픽 차단이 잘 되는지 확실하게 확인하고 나니까, 이게 뭔가 로그 파일의 경로 문제인게 아닐까 하는 생각이 들었다.
sudo apt install ufw
- 설치sudo ufw status
- 상태 확인 (이걸 가장 많이 하게 된다 ^^) sudo ufw enable / disable
- 상태 활성화 / 비활성화 which ufw
- 설치 확인 (사라졌나 싶으면 있나없나 이거로 확인 ㄱ) /etc/rsyslog.d/20-ufw.conf
수정참고한 글 - ufw 방화벽 로그를 ufw.log에 따로 기록하게 하기
글 제목부터 나와 정확히 같은 증상... 그래서 처음엔 이 글만 보고 바로 해결이 될 것이라고 생각했다.
sudo vi /etc/rsyslog.d/20-ufw.conf
관리자 권한으로 20-ufw.conf 파일을 열어서 맨 마지막 줄 주석을 없애준다. (이게 무엇을 의미하는지는 아래에서 설명할 예정)
이렇게 화면이 뜨면 맨 마지막 줄의 #
을 지워주기만 하면 된다.
그리고 재부팅(명령어: sudo systemctl restart rsyslog
)을 해주면... 로그가 뜨는 사람도 있고, 안 뜨는 사람도 있을 것... 나의 경우에는 이렇게 해도 로그가 뜨지 않았다. 힝...
하지만 이 글을 통해서 알게 된 것은, 로그는 어딘가에 쌓이고 있다는 것이었다. /var/log/syslog 파일이나 /var/log/kern.log 파일에!
확인해보니 실제로 kern.log에서 각종 로그가 쌓이고 있다는 것을 확인할 수 있었다. 이 때부터는 로그 파일의 경로 문제다! 하지만... 그 경로를 20-ufw.conf에서 바꿔야 하는 것 같은데 이번 시도는 실패했다. 그래서 다시 무한 구글링 시작.
/etc/rsyslog.d/50-default.conf
참고한 글 - Redirect UFW logs to own file?
영어 울렁증이 있는 나지만 정말 해결하고 싶었기 때문에 지푸라기라도 잡는 심정으로 글을 샅샅이 훑어봤다. 여기에서도 20-ufw.conf를 수정하라는 이야기가 많다. 하지만 발견한 것...!
같은 디렉토리 내의 50-default.conf 파일을 수정해라...?!
:msg,contains,"[UFW " /var/log/ufw.log // 경로 설정해주는 명령어인듯
& stop
바로 위에 적힌 20-ufw.conf의 코드를 50-default.conf 상단에 적어주라는 것이다. 아래 댓글에서도 왜 거길 수정하냐는 질문이 있지만, 그냥 개인적 선호라고만 답한다. 그래도 일단 default
라는 이름이 들어가니 혹시 얘가 ufw의 conf 파일보다는 우선시 되는 것일까 하는 의문을 가진 채로 코드를 수정해봤다.
지금은 예시 화면이 없으나... 이를 통해서 겨우 로그를 확인할 수 있게 되었다.
이게 왜 이렇게 작동하는지(^^...)에 대해서 여러모로 검색하고... ai한테 물어보고... 결국 리눅스가 돌아가는 원리와 함께 해결 과정에서 들었던 의문을 풀 수 있었다.
rsyslog
리눅스에서는 로그 메시지를 처리하는 데 rsyslog를 사용한다. ufw 뿐만 아니라 다양한 로그 파일에 메시지를 기록하는데 쓰인다. 때문에 /etc/rsyslog.d
디렉토리 내에는 여러 설정 파일들이 존재한다. 그 중 20-ufw.conf는 이름에서도 알 수 있듯이 ufw 설정에 관련된 파일이다.
& stop
이게 뭔데 ㅡㅡ?:msg,contains,"[UFW " /var/log/ufw.log
& stop
& stop
에 있는 주석을 해제하면 '이 파일에서 처리된 로그 메시지는 더이상 다른 로그 파일에 기록되지 않는다'를 의미한다고 한다. 위의 경로에 로그 파일을 따로 저장할 것이라고 설정하는 부분이라는 것!
50-default.conf
가 20-ufw.conf
보다 우선순위가 높은가?개인적으로는 default라는 이름 때문에 우선순위를 가져가서 20-ufw.conf에 정의해둔 설정이 먹히지 않는 것이라고 생각했다. 하지만 놀랍게도 반대였다!
rsyslog는 파일 이름의 숫자에 따라서 설정의 우선순위를 정한다!
그렇다는 이야기는 20-ufw.conf가 50-default.conf보다 우선적으로 적용이 된다는 이야기다. 하지만 나의 경우엔 그렇게 안 됐잖아요... (그냥 되는 사람도 잇음 왜 사람 차별하냐...)
우선순위가 높다고 해서 항상 그 규칙이 적용되는 것은 아니란 것을 배웠다. 그렇다면 특정 조건에서는 다른 곳에서의 규칙이 우선시가 될텐데 그것이 무엇일까?
디폴트라는 이름 답게 50-default.conf는 모든 메시지를 처리하는 기본적인 규칙이 설정된 파일이다.
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
kern.* -/var/log/kern.log
auth,authpriv.*
: 모든 인증과 관련된 메시지를 /var/log/auth.log
에 기록*.*;auth,authpriv.none
: 모든 메시지를 /var/log/syslog
에 기록하되, 인증 관련 메시지는 제외한다. kern.*
: 모든 커널 관련 메시지를 /var/log/kern.log
에 기록한다. 특정 로그가 어떤 파일로 기록될지는 해당 메시지의 시설이나 레벨에 따라 달라진다. 그리고 *.*
과 같은 패턴은 모든 메시지를 포괄한다. 때문에 이 규칙이 적용된다면 후속 규칙이 무시될 수 있다. 때문에 이러한 특정 조건 하에서는 메시지가 다른 파일로 납치!되어버릴 수가 있는 것이다.
sudo ufw status verbose
- 로그 레벨 확인
보면 나는 LOW... 임. 그래서... 그랬던 것 같다... 그랬읍니다...
바꾸고 싶다면 /etc/ufw/ufw.conf
위 파일에 가서
LOGLEVEL="high"
이렇게 원하는 값으로 수정해주면 된다.
그래서 굳이 50-default.conf 파일을 수정하지 않더라도 로그 레벨을 올려서 원하는 곳에 로그 띄우기를 성공하신 분도 있었다.
주의할 것은 모든 설정 파일을 바꾼 후 재시작을 해주어야 한다는 것!
sudo ufw reload
sudo systemctl restart rsyslog
ufw, rsyslog 재시작 명령어를 잊지 말고 입력하도록 하자...
kern.log
는 뭐야?!이 파일은 커널엥서 발생하는 다양한 이벤트와 오류 메시지가 기록되는 곳이다.
이렇게 대충 목요일 수업에서 가장 답답했던 부분이 어느정도 이해도 되고 해결도 되었다. 하지만 금요일 수업이 더더욱 어려웠다는 사실… 네트워크에 대해서는 공부하면 할수록 더 어려운 것 같다. 빡쎔… 그래도 이렇게 하나하나 알아가는 재미가 있는 것 같다!! 해피해피~ 열공빡공해서 간zi 개발자가 되겠어~~ 주말의 내가 꼭 공부한 내용을 잘 복습하길 🫶🏻🔪
본 포스팅은 글로벌소프트웨어캠퍼스와 교보DTS가 함께 진행하는 챌린지입니다