티스토리 뷰
- man 설치
# yum install man
# man iptables
iptables란 netfilter Project에서 개발했으며 광범위한 프로토콜 상태 추적, 패킷 애플리케이션 계층검사, 속도 제한, 필터링 정책을 명시하기 위한 강력한 매커니즘 제공
- iptables 설치
# iptables -V
# service iptables status
만약 설치가 되어 있지 않을 경우 rpm 패키지가 있기 때문에 yum으로 설치하면 된다.
chkconfig을 이용하여 부팅 시 자동 실행되도록 설정해준다.
rpm 패키지 확인
# rpm -qa | grep iptables
iptables 설치
# yum install iptables
chkconfig 등록
# chkconfig --level 2345 iptables on
chkconfig 등록 확인
# chkconfig --list iptables
- iptables 용어
1) 테이블(tables)
iptables 에는 테이블이란 범주가 있으며, filter, nat, mangle, raw 같은 4개의 테이블로 구성되어 있다.
2) 체인(chain)
- filter table
: 규칙에 따라 패킷을 필터링하거나 허용하는 역할을 한다.
: filter 테이블에는 기본적으로 3개의 chain(INPUT, OUTPUT, FORWARD)이 존재한다.
: 들어오는 패킷(INPUT)에 대하여 허용(ACCEPT)할 것인지, 거부(REJECT)할 것인지, 버릴(DROP) 것인지 결정한다.
INPUT chain : 호스트 컴퓨터를 향한 모든 패킷(외부에서 방화벽으로 오는 패킷에 대한 필터링 담당)
OUTPUT chain : 호스트 컴퓨터에서 발생하는 모든 패킷(방화벽 자체에서 외부로 나가는 패킷에 대한 필터링 담당)
FORWARD chain : 호스트 컴퓨터가 목적지가 아닌 모든 패킷, 즉 라우터로 사용되는 호스트 컴퓨터를 통과하는 패킷(내부의 다른 서버에서 방화벽을 통해 외부로 나가는 패킷, 방화벽을 통과하여 방화벽이 보호하는 다른 서버 등으로 향하는 패킷에 대한 필터링 담당)
- nat table
: 패킷을 필터링하는 기능은 없다.
: 방화벽으로 향하는 패킷을 방화벽이 보호하는 다른 네트워크의 다른 주소로 포워딩
: 방화벽 내부 네트워크에서 방화벽을 통해 외부 네트워크로 나갈 때 다른 IP주소로 변환하는 역할을 한다.
POSTROUTING chain : Source NAT(SNAT) 타겟과 매칭되어 내부 네트워크에서 방화벽을 통해 외부로 나갈 때 사용, POSTROUTING은 사무실 등에서 사설 IP를 사용하면서 하나의 공인 IP로 인터넷을 공유하고자 할 때 사용(공유기 역할)
PREROUTING chain : Destination NAT(DNAT) 타겟과 매칭되어 주로 외부에서 방화벽 내부 서버로 향하는 패킷을 방화벽이 보호하는 내부 서버로 포워딩할 때 사용, PREROUTING은 사설 IP로 서버를 운영하면서 외부로 서비스를 하고자 할 때 사용
- mangle table
3) 매치(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) : 특정 모듈과의 매치
4) 타겟(target)
iptables는 패킷이 규칙과 일치할 때 동작을 취하는 타겟을 지원한다.
ACCEPT : 패킷을 받아들인다.
DROP : 패킷을 버린다(패킷이 전송된 적이 없던 것처럼).
REJECT : 패킷을 버리고 이와 동시에 적절한 응답 패킷을 전송한다.
LOG : 패킷을 syslog에 기록한다.
RETURN : 호출 체인 내에서 패킷 처리를 계속한다.
REJECT는 서비스에 접속하려는 사용자의 액세스를 거부하고 connection refused라는 오류 메시지를 보여주는 반면 DROP은 말 그대로 telnet 사용자에게 어떠한 경고 메시지도 보여주지 않은 채 패킷을 드롭한다. 관리자의 재량껏 이러한 규칙을 사용할 수 있지만 사용자가 혼란스러워하며 계속해서 접속을 시도하는 것을 방지하려면 REJECT를 사용하는 것이 좋다.
iptables의 룰셋을 확인할때 아래와 같이 하면 보기가 편리하고 --line-number 옵션을 통해서 각 룰셋의 적용 순서도 확인할 수 있다.
# iptables -nL
# iptables --line-number
- iptables 설정
CentOS 6.5 Minimal 기본 설정
# iptables -L -v
기본 정책이 모든 패킷에 대해 ACCEPT이며, SSH 서비스가 기본적으로 허용되어 있다.
이 정책을 없애고 새로운 정책의 규칙을 작성
기본 정책
1. INPUT 체인의 기본 정책을 ACCEPT로 변경(ACCPET가 아닐 경우 적용, FORWARD, OUTPUT도 동일)
# iptables -P INPUT ACCEPT
2. 체인에 정의된 모든 규칙을 삭제하고 확인해보면 규칙이 모두 제거된 것을 볼 수 있다.
# iptables -F
# iptables -L
3. INPUT 체인에 로컬호스트 인터페이스에 들어오는 모든 패킷을 허용 추가
일반적으로 많은 소프트웨어들이 localhost 어댑터와 통신이 되어야 하기에 필요하다.
# iptables -A INPUT -i lo -j ACCEPT
4. INPUT 체인에 state 모듈과 매치되는 연결상태가 ESTABLISHED, RELATED인 패킷에 대해 허용 추가
INPUT 체인에 접속에 속하는 패킷(응답 패킷을 가진것)과 기존의 접속 부분은 아니지만 연관성을 가진 패킷 (ICMP 에러나 ftp데이터 접속을 형성하는 패킷)을 허용하는 규칙이다.
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
5. INPUT 체인에 프로토콜이 tcp이며 목적지 포트가 22번인 패킷에 대해 허용 추가 (ssh 허용)
# iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
6. 이제 INPUT 체인에 대한 기본 정책을 버림(DROP)으로 변경
# iptables -P INPUT DROP
7. FORWARD 체인에 대한 기본 정책을 버림(DROP)으로 변경
서버를 라우팅 기기로 사용하지 않기에 모든 포워드에 대한 패킷을 DROP
# iptables -P FORWARD DROP
8. OUTPUT 체인에 대한 기본 정책을 허용(ACCEPT)으로 변경
# iptables -P OUTPUT ACCEPT
9. 설정 확인
# iptables -L
10. 설정 저장
iptables 규칙을 만들 때는 순서가 매우 중요하다. 예를 들어 만일 chain에서 로컬 192.168.100.0/24 서브넷에서 들어오는 모든 패킷을 drop하도록 지정한 후 (drop하도록 지정된 서브넷에 포함되는) 192.168.100.13에서 들어오는 패킷을 모두 허용하는 chain (-A)을 그 후에 추가하면 뒤에 추가된 추가 규칙이 무시된다. 먼저 192.168.100.13를 허용하는 규칙을 설정한 후 서브넷을 drop하는 규칙을 설정해야한다.
# service iptables save
# service iptables status
위 명령어를 통해 num 값을 알 수 있고 이를 이용하여 필터링을 제거할 수 있다.
# iptables -D [INPUT|FORWARD|OUTPUT] num
추가한 것과 동일하게 입력해서 제거할 수도 있다.
[+]Reference: http://webdir.tistory.com/170
'Operating System > CentOS' 카테고리의 다른 글
HTTPD, MYSQL, PHP 설치 및 설정 (0) | 2015.07.09 |
---|---|
VIM, GCC, GDB 설치 및 설정 (0) | 2015.07.08 |
USER 관리 (0) | 2015.07.08 |
TELNET 설치 및 설정 (0) | 2015.07.08 |
FTP, VSFTPD 설치 및 설정 (0) | 2015.07.03 |
OpenSSH 설정 (0) | 2015.06.30 |
Hostname & Login interface Message (0) | 2015.06.30 |
Network 설정 (0) | 2015.06.11 |
Console 해상도 설정 (0) | 2015.05.05 |
시스템 확인하기 (0) | 2015.04.01 |