[CentOS] CentOS6 iptables 방화벽
by Choi HyeSun
iptables
-
iptables이 패킷을 필터링 하는 것이 아니라 커널에 탑재된 netfilter 기능으로 하며 단지 netfilter의 룰을 세워주는 것
-
허용되는 규칙이 먼저 나오고 나중에 거부하는 규칙을 정의
iptables 방식
-
모든 것을 허용하고 일부를 제한(Blacklist)
-
일부를 허용하고 모든 것을 제한(Whitelist)
iptables 용어
테이블(tables)
-
iptables에는 테이블이라는 광범위한 범주가 있음
-
이 테이블은 filter, nat, mangle, raw 같은 4개의 테이블로 구성
-
이중에서 우리에게 필요한 것은 필터링 규칙을 세우는 filter 테이블이다.
체인(chain)
-
iptables에는 filter 테이블에 미리 정의된 세가지의 체인이 존재 - INPUT, OUTPUT, FORWARD
-
INPUT : 호스트 컴퓨터를 향한 모든 패킷
-
OUTPUT : 호스트 컴퓨터에서 발생하는 모든 패킷
-
FORWARD : 호스트 컴퓨터가 목적지가 아닌 모든 패킷, 즉 라우터로 사용되는 호스트 컴퓨터를 통과하는 패킷
-
-
이 체인들은 어떠한 네트워크 트래픽(IP 패킷)에 대하여 정해진 규칙들을 수행
- 가령 들어오는 패킷(INPUT)에 대하여 허용(ACCEPT)할 것인지, 거부(REJECT)할 것인지, 버릴(DROP)것인지 결정
매치(match)
-
iptables에서 패킷을 처리할 때에 만족해야 하는 조건
-
이 조건을 만족시키는 패킷들만 규칙을 적용
-
조건 종류
-
--source (-s) : 출발지 IP주소나 네트워크와의 매칭
-
--destination (-d) : 목적지 IP주소나 네트워크와의 매칭
-
--protocol (-p) : 특정 프로토콜과의 매칭
-
--in-interface (i) : 입력 인터페이스
-
--out-interface (-o) : 출력 인터페이스
-
--state : 연결 상태와의 매칭
-
--string : 애플리케이션 계층 데이터 바이트 순서와의 매칭
-
--comment : 커널 메모리 내의 규칙과 연계되는 최대 256바이트 주석
-
--syn (-y) : SYN 패킷을 허용하지 않음
-
--fragment (-f) : 두 번째 이후의 조각에 대해서 규칙을 명시
-
--table (-t) : 처리될 테이블
-
--jump (-j) : 규칙에 맞는 패킷을 어떻게 처리할 것인가를 명시
-
--match (-m) : 특정 모듈과의 매치
-
타겟(target) - 정책
-
iptables는 패킷이 규칙과 일치할 때 동작을 취하는 타겟을 지원
-
종류
-
ACCEPT : 패킷을 받음
-
DROP : 패킷을 버림(패킷이 전송된 적이 없던 것처럼)
-
REJECT : 패킷을 버리고 이와 동시에 적절한 응답 패킷을 전송
-
LOG : 패킷을 syslog에 기록
-
RETURN : 호출 체인 내에서 패킷 처리를 계속함
-
-
DROP VS REJECT
-
DROP은 말 그대로 telnet 사용자에게 어떠한 경고 메시지도 보여주지 않은 채 패킷을 드롭
-
REJCECT는 서비스에 접속하려는 사용자의 액세스를 거부하고 connection refused 라는 오류메시지를 보여줌
-
관리자의 재량껏 이러한 규칙을 사용할 수 있음
-
사용자가 혼란스러워하며 계속해서 접속을 시도하는 것을 방지하려면 REJECT를 사용하는 것이 좋음
-
연결 추적(Connection Tracking)
-
iptables는 연결 추적(Connection Tracking) 이라는 방법을 사용하여 내부 네트워크 상 서비스 연결에 따라서 그 연결을 감시하고 제한할 수 있게 해 줌
-
연결 추적 방식은 연결 상태를 표에 저장하기 때문에, 다음과 같은 연결 상태에 따라서 시스템 관리자가 연결을 허용하거나 거부할 수 있음
-
NEW : 새로운 연결을 요청하는 패킷, 예, HTTP 요청
-
ESTABLISHED : 기존 연결의 일부인 패킷
-
RELATED : 기존 연결에 속하지만 새로운 연결을 요청하는 패킷, 예를 들어 접속 포트가 20인 수동 FTP의 경우 전송 포트는 사용되지 않은 1024 이상의 어느 포트라도 사용 가능하다.
-
INVALID : 연결 추적표에서 어디 연결에도 속하지 않은 패킷
-
-
상태에 기반(stateful)한 iptables 연결 추적 기능은 어느 네트워크 프로토콜에서나 사용 가능
-
UDP와 같이 상태를 저장하지 않는 (stateless) 프로토콜에서도 사용할 수 있음
사용법
명령어
- iptables [command] [chain] [options] [정책(타겟)]
command
-
-A (–append) chain : 체인에 새로운 규칙을 추가
-
-C (–check) : 패킷 테스트
-
-D (–delete) chain : 체인의 어떤 지점에 규칙을 제거
- -D (–delete) chain rulenum : 체인에서 rulenum에 일치하는 규칙 제거
-
\–E (–rename-chain) old-chain new-chain : 체인의 명칭 바꾸기
-
-F (–flush) [chain] : 모든 체인의 모든 규칙을 제거(일시적, 재부팅하면 원상복구)
-
-I (–insert) chain [rulenum] : 체인의 rulenum 지점에 규칙을 삽입 (default 1=first)
-
-L (–list) [chain] : 모든 체인의 규칙들을 나열(출력)
-
-N (–new) chain : 새로운 체인 생성
-
-R (–replace) chain rulenum : 체인의 rulenum 지점에 규칙을 교환(교체)
-
-X (–delete-chain) [chain] : 사용자 정의 비어진 체인 제거
-
-Z (–zero) [chain] : 해당 체인이나 모든 체인내의 모든 규칙들의 패킷과 바이트의 카운트를 0으로 만듬
-
-P (–policy) : 기본정책
- \–P (–policy) chain target : 미리 만들어진 체인 정책 바꾸기
options
-
-t : table 사용 default는 filter이므로 nat을 사용하려면 필히 nat이라고 지정해야 함
-
-o : 패킷이 나가는 네트워크 장치를 지정. 보통 OUTPUT, FORWARD 체인에 사용
-
-i : 패킷이 들어오는 인터페이스를 지정하는데 사용. INPUT과 FORWARD 체인에 사용
-
-p : 프로토콜을 지시할 때 사용. 보통 TCP, UDP, ICMP 같은 것들이 사용
-
-j : 타겟(ACCEPT, DROP, FEJECT)을 설정하겠다는 의미
-
-s : 출발지 주소 도메인 넷마스크 등을 표기
-
-d : 목적지의 주소 도메인 넷마스크 등을 표기
-
--sport : 출발지 포트
-
--dport : 목적지 포트
-
-m state : 연결상태를 의미한다. ESTABLISHED, NEW 등
-
NEW : 새로운 접속을 만드는 패킷
-
ESTABLISHED : 존재하는 접속에 속하는 패킷. 즉 접속이 허가되고 통신하면서 발생되는 패킷
-
RELATED : 기존의 접속의 부분은 아니지만 연관성을 가진 패킷으로 ICMP 에러나 ftp 데이터 접속을 형성하는 패킷
-
INVALID : 어떤 이유로 확인할 수 없는 패킷. 알려진 접속과 부합하지 않는 ICMP 에러와 out of memory 등을 포함. 보통 이런 패킷은 DROP 됨.
-
-
! : 아닌 not의 의미로 사용
-
--tcp-flags : tcp 패킷의 특성인 SYN, ACK, FIN, PSH, URG, RST 등을 설정
-
--limit : 지정한 시간동안의 최대 매칭횟수를 정의. ddos공격을 차단하는데 사용
기본 동작
-
패킷에 대한 동작은 위에서부터 차례로 각 규칙에 대하여 검사
그 규칙이 일치하는 패킷에 대하여 타겟에 지정한 ACCEPT, DROP등을 수행 -
규칙이 일치하고 작업이 수행되면, 그 패킷은 해당 규칙의 결과에 따라 처리하고 체인에서 추가 규칙을 무시
-
패킷이 체인의 모든 규칙과 매치하지 않아 규칙의 바닥에 도달하면 정해진 기본정책(policy)이 수행
-
기본 정책은 policy ACCEPT, policy DROP으로 설정할 수 있음
- 일반적으로 기본 정책은 모든 패킷에 대해 DROP을 설정하고 특별히 지정된 포트와 IP주소 등에 대해 ACCEPT를 수행하게 만듦
iptables 예제
- 현재 자신의 방화벽 규칙을 확인
- 기존 정책 제거
- 기본 정책을 ACCEPT로 설정
-
21, 23, 25, 80 포트를 차단하는 정책(각각 하나씩 규칙을 만들 것)
- (1개씩 열던 여러 개씩 열던 한 번 칠 때마다 한 개씩 쌓이는 것 같음)
- 첫 번째 정책을 삭제
- 세 번째 정책의 출발지 IP를 192.68.1.0/24로 수정
- 출발지 IP가 A클라스 사설 IP일 경우 차단하는 정책
- 출발지 IP가 192.168.10.1부터 192.168.10.100, 그리고 192.168.150.0.24이고 목적지 IP는 192.168.10.170이고 목적지 포트는 3306일 경우 차단하는 정책
- tcp 패킷이 초당 10개가 올 경우 차단하는 정책(limit match 이용)
- 하나의 세션에서 10개의 패킷이 매칭된 후 tcp 패킷이 분당 100개가 올 경우 차단하는 정책
- 초기화
- 80포트 REJECT
- 80포트 DROP
Subscribe via RSS