Wisdom’s Cloud
[Linux] netfilter와 iptables 본문
netfilter란?
netfilter는 시스템에 들어오는 모든 패킷을 분석해서 사용자의 뜻대로 처리 및 기록할 수 있도록 하는 프레임워크다.
아래와 같이 5개의 hook 지점을 제공하여 원하는 지점에서 패킷을 처리할 수 있도록 지원한다.
- NF_IP_PRE_ROUTING: 인터페이스를 통해 들어온 패킷을 처리
- NF_IP_LOCAL_IN: 로컬 프로세스로 들어오는 패킷을 처리
- NF_IP_FORWARD: 다른 호스트로 통과시켜 보낼 패킷을 처리
- NF_IP_LOCAL_OUT: 로컬 프로세스에서 나갈 패킷을 처리
- NF_IP_POST_ROUTING: 인터페이스를 통해 나갈 패킷을 처리
iptables란?
iptables는 netfilter에 룰을 넣어 사용자가 원하는대로 접근 통제를 할 수 있도록 하는 도구다.
아래와 같이 iptables는 서로 다른 종류의 패킷 처리를 기능적으로 분리하기 위해 Table이라는 개념을 사용하는데, 이 Table들은 Chain을 가지고 있고, 이 Chain들은 Rule을 가지고 있다.
- Table은 5가지로 구분되며, 각각 사전에 정의된 Chain들을 가지고 있다.
- Filter Table: 패킷을 필터링할 때 사용
- NAT Table: 네트워크 주소를 변환할 때 사용
- Mangle Table: 패킷을 변조할 때 사용
- Raw Table: 연결 추적을 할 때 사용
- Security Table: SELinux을 설정할 때 사용
- Chain은 5가지로 구분되며, hook별로 존재한다.
- PREROUTING: NF_IP_PRE_ROUTING hook에 의해 트리거
- INPUT: NF_IP_LOCAL_IN hook에 의해 트리거
- FORWARD: NF_IP_FORWARD hook에 의해 트리거
- OUTPUT: NF_IP_LOCAL_OUT hook에 의해 트리거
- POSTROUTING: NF_IP_POST_ROUTING hook에 의해 트리거
Rule은 iptables 명령어를 활용하여 설정할 수 있으며, iptables의 기본 문법은 다음과 같다.
iptables [-t table] [action] [chain] [match] [-j target]
- table은 filter, nat, mangle, raw, security가 있으며, 생략하게 되면 자동으로 filter로 적용된다.
- action는 rule을 어떻게 할 지 지정한다.
- -A(--append): 해당 chain에 rule 추가
- -C(--check): 해당 chain에 일치하는 rule이 있는지 확인
- -D(--delete): 해당 chain에서 rule 삭제
- -I(--insert): 해당 chain에 rule 번호를 지정하여 rule 추가
- -R(--replace): 해당 chain에 rule 변경
- -L(--list): 해당 chain의 모든 rule 나열
- -F(--flush): 해당 chain의 모든 rule 삭제
- -N(--new-chain): 사용자 정의 chain 생성
- -X(--delete-chain): 사용자 정의 chain 삭제
- -E(--rename-chain): 사용자 정의 chain의 이름 변경
- chain는 PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING이 있다.
- match는 패킷과 매칭되는 조건을 지정한다.
- -p(--protocol): 매칭되는 프로토콜
- -s(--source): 매칭되는 출발지
- -d(--destination): 매칭되는 목적지
- -i(--in-interface): 매칭되는 입력 인터페이스 (INPUT, FORWARD, PREROUTING chain만 가능)
- -o(--out-interface): 매칭되는 출력 인터페이스 (FORWARD, OUTPUT, POSTROUTING chain만 가능)
- target는 패킷을 어떻게 할 지 지정한다.
- ACCEPT: 패킷을 허용한다.
- DROP: 패킷을 버린다.
- RETURN: 해당 chain의 통과를 중지하고, 이전 chain의 다음 rule에서 다시 시작한다.
즉, 시스템으로 들어오는 모든 패킷은 netfilter의 여러 hook들을 통과하게 된다.
이 때 hook별로 iptables에서 정의한 각 chain들의 rule을 점검하여
해당 rule에 매칭되면 특정 action을 트리거한다.
[참고 문서]
https://slidesplayer.org/slide/14483365/
https://saysecurity.tistory.com/15
https://nyyang.tistory.com/133
'LINUX > Advanced' 카테고리의 다른 글
[Linux] [CentOS] 프로세스 정보 확인 (0) | 2022.11.13 |
---|---|
[Linux] [CentOS] 시스템 구성 정보 확인 (3) | 2022.10.26 |
[Linux] [CentOS] vmcore 분석 (0) | 2022.09.24 |
[Linux] [CentOS] Jumbo Frame (0) | 2022.09.18 |
[Linux] [CentOS] 보안 설정 (0) | 2022.09.16 |