iptables (방화벽설정)
2017.01.18 11:31
방화벽 설치
명령어
yum -y install iptables
서비스 등록
명령어
chkconfig iptables on
서비스 시작
명령어
service iptables start
테이블 수정
명령어
vi /etc/sysconfig/iptables
1) 체인(chain)
iptables에는 filter 테이블에 미리 정의된 세가지의 체인이 존재하는데 이는 INPUT, OUTPUT, FORWARD 이다. 이 체인들은 어떠한 네트워크 트래픽(IP 패킷)에 대하여 정해진 규칙들을 수행한다.
가령 들어오는 패킷(INPUT)에 대하여 허용(ACCEPT)할 것인지, 거부(REJECT)할 것인지, 버릴(DROP)것인지를 결정한다.
- INPUT : 호스트 컴퓨터를 향한 모든 패킷
- OUTPUT : 호스트 컴퓨터에서 발생하는 모든 패킷
- FORWARD : 호스트 컴퓨터가 목적지가 아닌 모든 패킷, 즉 라우터로 사용되는 호스트 컴퓨터를 통과하는 패킷
2) 매치(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) : 특정 모듈과의 매치
3) 타겟(target)
iptables는 패킷이 규칙과 일치할 때 동작을 취하는 타겟을 지원한다.
- ACCEPT : 패킷을 받아들인다.
- DROP : 패킷을 버린다(패킷이 전송된 적이 없던 것처럼).
- REJECT : 패킷을 버리고 이와 동시에 적절한 응답 패킷을 전송한다.
- LOG : 패킷을 syslog에 기록한다.
- RETURN : 호출 체인 내에서 패킷 처리를 계속한다.
REJECT는 서비스에 접속하려는 사용자의 액세스를 거부하고 connection refused라는 오류 메시지를 보여주는 반면 DROP은 말 그대로 telnet 사용자에게 어떠한 경고 메시지도 보여주지 않은 채 패킷을 드롭한다. 관리자의 재량껏 이러한 규칙을 사용할 수 있지만 사용자가 혼란스러워하며 계속해서 접속을 시도하는 것을 방지하려면 REJECT를 사용하는 것이 좋다.
4) 연결 추적(Connection Tracking)
iptables는 연결 추적(connection tracking)이라는 방법을 사용하여 내부 네트워크 상 서비스 연결 상태에 따라서 그 연결을 감시하고 제한할 수 있게 해준다. 연결 추적 방식은 연결 상태를 표에 저장하기 때문에, 다음과 같은 연결 상태에 따라서 시스템 관리자가 연결을 허용하거나 거부할 수 있다.
- NEW : 새로운 연결을 요청하는 패킷, 예, HTTP 요청
- ESTABLISHED : 기존 연결의 일부인 패킷
- RELATED : 기존 연결에 속하지만 새로운 연결을 요청하는 패킷, 예를 들면 접속 포트가 20인 수동 FTP의 경우 전송 포트는 사용되지 않은 1024 이상의 어느 포트라도 사용 가능하다.
- INVALID : 연결 추적표에서 어디 연결에도 속하지 않은 패킷
상태에 기반(stateful)한 iptables 연결 추적 기능은 어느 네트워크 프로토콜에서나 사용 가능하다. UDP와 같이 상태를 저장하지 않는 (stateless) 프로토콜에서도 사용할 수 있다.
5) 명령어(commond)
- -A (--append) : 새로운 규칙을 추가한다.
- -D (--delete) : 규칙을 삭제한다.
- -C (--check) : 패킷을 테스트한다.
- -R (--replace) : 새로운 규칙으로 교체한다.
- -I (--insert) : 새로운 규칙을 삽입한다.
- -L (--list) : 규칙을 출력한다.
- -F (--flush) : chain으로부터 규칙을 모두 삭제한다.
- -Z (--zero) : 모든 chain의 패킷과 바이트 카운터 값을 0으로 만든다.
- -N (--new) : 새로운 chain을 만든다.
- -X (--delete-chain) : chain을 삭제한다.
- -P (--policy) : 기본정책을 변경한다.