상태 기반 방화벽
Stateful firewall · 상태 기반 방화벽
은 패킷의 주소·포트뿐 아니라 허용된 연결의 상태를 함께 사용해 전달을 결정한다. 연결의 첫 패킷과 이후 반환 패킷의 처리, 와 규칙이 보는 주소를 구분한다.
밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.
01무엇이고, 어떤 일을 하나
- 네트워크 구간 사이의 허용된 통신만 통과시킨다.
- 연결 상태에 맞는 반환 트래픽을 처리한다.
- 거부·상태·변환 자료로 정책 효과와 통신 장애를 분석한다.
02어떤 순서로 동작하나
- 새 흐름 평가
상태표에 없는 트래픽을 적용되는 인터페이스·방향·정책에 따라 평가한다.
- 허용과 상태 생성
허용된 첫 패킷으로 연결 문맥과 필요한 변환 관계를 상태표에 만든다.
- 후속 패킷 처리
후속·반환 패킷은 기존 상태와 일치하는지 평가한다. 도 방화벽 내부에서 시간 제한 상태를 유지할 수 있다.
- 상태 종료
연결 종료나 timeout으로 상태가 사라진다. 정책 변경만으로 기존 상태가 즉시 같은 방식으로 재평가된다고 가정하지 않는다.
03먼저 알아둘 용어와 구성요소
- 패킷과 연결을 허용·거부하는 조건 및 action.
- 허용된 흐름과 프로토콜 진행 상태를 기억하는 기능.
- 명시적으로 허용하지 않은 접근을 거부하는 기본 정책.
- 서로 다른 신뢰·접근 정책을 적용하는 네트워크 구간.
- 유휴 상태 등을 이유로 연결 상태 기록을 만료시키는 시간 조건.
- 출발지·목적지 주소와 포트, 전송 프로토콜로 흐름을 구분하는 대표적 조합.
SSH 실패 로그에서 Jail 집계와 실제 차단까지
주석 처리된 설정, 실행 중인 Jail 통계, 방화벽 action을 구분하여 차단 동작의 증거를 읽는다.
실습 구성과 전제
- 자신의 격리 SSH 서버에서 관리 접속을 복구할 콘솔과 정상 접속원을 준비한다.
- 그림은 설정 설명과 실행 상태를 비교한 자료다. 보이는 통계를 특정 시험 횟수와 자동으로 같다고 간주하지 않는다.
설정 설명과 활성 Jail을 구분하기
- 설정 행 앞의 #은 주석이다. 예제에 enabled=true라는 글자가 있더라도 주석이면 그 행 자체가 Jail을 활성화하지 않는다.
- 실제로 적용된 값은 .local 덮어쓰기와 다른 설정 파일을 합친 결과다. 배포본 파일의 한 부분만 보는 대신 실행 중인 Jail 목록과 maxretry·findtime·bantime을 조회한다.
bashsudo fail2ban-client status sshd sudo fail2ban-client get sshd maxretry sudo fail2ban-client get sshd findtime sudo fail2ban-client get sshd bantime실행 중인 Jail의 상태와 시간 조건을 조회하는 예. 인증 실패 트래픽을 생성하지 않는다.
원본 크기로 보기 ↗- # [sshd]와 # enabled = true 앞에 주석 기호가 보인다. 이 두 줄만으로 sshd Jail이 켜졌다고 판단할 수 없다.
- 주석 옆에는 enabled와 filter 등의 역할을 설명하는 메모가 있다. 옵션 설명과 현재 유효 설정을 구분해 읽어야 한다.
확인 기준sshd Jail이 목록에 있고 유효 설정이 의도한 값인지 확인한다. 설정 파일 수정 후에는 문법 검사와 해당 Jail 재적용이 필요하다.
로그 일치 건수와 차단 건수를 나누어 읽기
- Filter가 로그에서 뽑아낸 주소별 실패 이벤트를 findtime 범위에서 집계한다. 한 번의 로그인 시도에서 여러 줄이 발생할 수 있으므로 Total failed를 사람이 입력한 비밀번호 횟수와 동일시하지 않는다.
- backend는 journalmatch로 저널 항목을 고른다. 서비스 이름과 프로그램 이름이 실제 로그와 다르면 파일이 존재해도 이 Jail에 이벤트가 들어오지 않을 수 있다.
원본 크기로 보기 ↗- 상태 출력은 Currently failed 1, Total failed 12와 Currently banned 1, Total banned 1을 별도 구역에 표시한다.
- Journal matches에 sshd.service와 sshd·sshd-session 조건이 보인다. 파일 경로 하나를 tail하는 방식과 입력 선택 조건이 다르다.
확인 기준같은 시간대의 인증 로그·Found·Ban 사건을 대응시킨다. 통계가 증가했어도 현재 차단 주소와 시험 주소가 같은지는 별도 확인한다.
action에서 실제 패킷 경로로 내려가기
- action_은 banaction 이름을 참조하고, action_mw는 여기에 메일 보고 동작 등을 묶는다. 템플릿에 적힌 이름만으로 실제 방화벽 백엔드를 iptables라고 고정하면 안 된다.
- 내부의 Ban 상태와 커널의 차단 규칙은 서로 다른 확인 지점이다. 설치 환경의 action과 규칙을 읽고, 시험 접속원의 접근 제한과 정상 접속원의 유지 여부를 함께 검증한다.
bashsudo fail2ban-client get sshd actions sudo journalctl -u fail2ban --since '-10 min' --no-pager선택된 action과 최근 서비스 기록을 조회한다. 운영 주소나 인증 비밀을 결과 보고서에 복사하지 않는다.
원본 크기로 보기 ↗- action_ 정의가 %(banaction)s를 참조하므로 실제 실행할 차단 방식은 치환된 설정에 달려 있다.
- action_mw는 차단 템플릿 다음에 메일 관련 동작을 붙인다. 알림 발송과 패킷 차단이 하나의 성공 조건은 아니다.
확인 기준자동 해제 시간이 지난 뒤 Jail 상태와 방화벽 규칙이 함께 해제되는지도 확인한다. 규칙만 사라졌다면 방화벽 reload와 action 오류를 조사한다.
실습에서 확인한 동작 원리
- 설정 설명→유효 Jail→로그 일치→Ban 상태→방화벽 규칙→접속 결과를 순서대로 연결한다.
- 실패 로그 수, 로그인 시도 수, 고유 주소 수는 서로 다른 지표다.
동작·명령 참고 문서
04예제로 따라가기
- 외부에서 내부 웹 서비스로 시작한 연결을 허용해도 모든 내부 서버의 모든 포트가 공개되는 것은 아니다.
- 인바운드에서 허용된 연결의 응답과 내부가 새로 시작한 연결은 정책 의미가 다를 수 있다.
- 로그 주소를 분석할 때 전후 중 어느 지점의 값인지 확인하면 다른 대상을 검사하는 오류를 줄일 수 있다.
05혼동하기 쉬운 점과 확인 기준
- 상태 기반 필터링만으로 허용된 HTTP 요청 안의 ·HTML 문맥까지 이해하고 취약점을 막는다고 볼 수 없다.
- 기존 상태가 유지되면 규칙 변경 결과가 새 연결과 다르게 나타날 수 있다.
06상세 노트 · 실습 자료
헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.
공식 문서 · 표준
기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.