[ Iptables 설치 및 설정 ]


iptables는 리눅스상에서 방화벽을 설정하는 도구입니다.

iptables는 커널상에서 netfilter 패킷필터링 기능을 사용자 공간에서 제어하는 수준으로 사용할 수 있습니다.

패킷 필터링이란 지나가는 패킷의 헤더를 보고 그 전체 패킷의 운명을 결정하는것을 말하며, 헤더에 필터링할 정보인 출발지 ip:port , 도착지ip:port 등 프로토콜 옵션등을 가지며, 데이터는 각각 전송데이터가 들어갑니다.

특정 조건을 가지고 있는 패킷에 대해 허용(ACCEPT) 및 차단(DROP)등을 지정할 수 있습니다.

특히 iptables 정책은 여러 구분으로 나눠지며 중요한 부분은 Chain입니다.

 

Chain INPUT : 서버로 들어오는 기본정책

- 서버를 목적지로 삼는 모든 패킷은 INPUT Chain을 통해 서버로 통과하게 된다.

 

Chain OUTPUT : 서버에서 나가는 기본정책

- 서버에서 생성되어 외부로 나가는 모든 패킷은 OUTPUT Chain을 통해 서버에서 나가게 된다.

 

Chain FORWARD : 서버에서 forwarding 되는 기본 정책

- 해당 서버가 목적지가 아닌 이 서버를 거쳐 패킷이 통과하는 Chain이다.




우분투에서 설치 방법


- 우분투에서는 iptables 가 설치되어 있지 않습니다.

우분투에서 기본적으로 ufw 라는 방화벽을 쓰며, 해당 방화벽을 disable시킨 상태에서 iptables 설치 

# apt-get install iptables-persistent

# cp /usr/share/netfilter-persistent/plugins.d/15-ip4tables /etc/init.d/iptables 해당 파일 init.d에 복사

# /etc/init.d/iptables start iptables 시작 명령어# /etc/init.d/iptables flush iptables 종료 명령어

# update-rc.d -f iptables defaults 부팅시 iptables 자동으로 올라오도록 설정


insserv: warning: script ‘K01iptables’ missing LSB tags and overrides


insserv: warning: script ‘iptables’ missing LSB tags and overrides


위와 같은 에러가 뜰경우 아래 파일에 LSB tag값이 지정되어있지 않다는 메세지이며 상단에 아래 문구삽입


# vi /etc/init.d/iptables 

### BEGIN INIT INFO 

# Provides: skeleton 

# Required-Start: $remote_fs $syslog 

# Required-Stop: $remote_fs $syslog 

# Default-Start: 2 3 4 5 

# Default-Stop: 0 1 6 

# Short-Description: Example initscript 

# Description: This file should be used to construct scripts to be # placed in /etc/init.d. 

### END INIT INFO


iptables의 파일 위치 /etc/iptables/rules.v4 해당 파일을 수정하여 룰적용을 하는 방법 및 명령어를 이용하여 룰적용을 하는 방법이 있습니다.

 

 

 

centos 6 에서 설치방법

 

- centos6 경우 iptables가 대부분 설치가 되어 있습니다.

# yum install -y iptables

# chkconfig iptables on 서비스를 시작프로그램에 등록합니다.

# service iptables start iptables 실행 명령어

# service iptables stop iptables 종료 명령어

iptables의 파일위치 /etc/sysconfig/iptables

 



매치

 

- 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) 특정 모듈과의 매치

 

 


타겟

 

- iptables는 패킷이 규칙과 일치할 때 동작을 취하는 타겟을 지원한다.

ACCEPT 패킷을 받아들인다.

DROP 패킷을 버린다 (패킷이 전송된 적이 없던 것처럼)

REJECT 패킷을 버리고 이와 동시에 적절한 응답 패킷을 전송한다.

LOG 패킷을 syslog에 기록한다.RETURN 호출 체인 내에서 패킷 처리를 계속한다.

 


 

연결추적

 

- 내부 네트워크 상 서비스 연결 상태에 따라서 그 연결을 감시하고 제한할 수 있게 해준다. 연결 추적방식은 연결 상태를

표에 저장하기 때문에, 다음과 같은 연결 상태에 따라서 연결을 허용하거나 거부할 수 있다.

NEW 새로운 연결을 요청하는 패킷 (ex: HTTP 요청)

ESTABLISHED 기존 연결의 일부인 패킷

RELATED 기존 연결에 속하지만 새로운 연결을 요청하는 패킷

INVALID 연결 추적표에서 어디 연결에도 속하지 않은 패킷

 



명령어


- iptables의 명령어

-A 새로운 규칙을 추가한다.-D 규칙을 삭제한다.-C 패킷을 테스트 한다.-R 새로운 규칙으로 교체한다.-I 새로운 규칙을 삽입한다.-L 규칙을 출력한다.-F chain으로 부터 규칙을 모두 삭제한다.-Z 모든 chain의 패킷과 바이트 카운터 값을 0으로 만든다.-N 새로운 chain을 만든다.-X chain을 삭제한다.-P 기본정책을 변경한다.

 

 


기본동작

 

- iptables에서의 기본동작

- 패킷에 대한 동작은 위에서 부터 차례로 각 규칙에 대해 검사하고, 규칙과 일치하는 패킷에 대하여 ACCEPT , DROP 등을 수행한다.

- 규칙이 일치하고 작업이 수행되면, 그 패킷은 해당 규칙의 결과에 따라 처리하고 체인에서 추가 규칙을 무시한다.

- 패킷이 체인의 모든 규칙과 매치하지 않아 규칙의 바닥에 도달하면 정해진 기본정책(policy)을 수행한다.

- 기본 정책은 ACCEPT , DROP 으로 설정 가능하다.

- 일반적으로 기본정책은 모든 패킷에 대하여 DROP을 설정하고 특별히 지정된 포트와 IP주소등에 대해 ACCEPT를 수행하게 만든다.

 

- 주의사항

기본 정책 수립에 있어서 DROP 으로 설정할 경우 원격에서 SSH를 접속하여 사용중이라면, 설정하는 순간 서버와 통신이 단절 됩니다. 그러므로 처음 기본 정책을 ACCEPT로 설정하여 SSH 설정을 마친 후 다시 기본정책을 DROP으로 변경하시길 바랍니다.




현재 룰 상태 확인

 

- iptables -nL 명령어를 통해 현재 등록되어있는 룰을 확인할수 있습니다.


위 그림은 iptables -nL 명령어로 통해 확인한 방화벽 룰입니다.iptables -nL line-numbers 로 확인시 룰셋 적용순서까지 확인이 가능합니다.




iptables 명령어 활용

 

- Iptables 는 기본정책이 ACCEPT 인지 DROP 인지에 따라서 설정 방법이 다릅니다.

# iptables -P INPUT ACCEPT INPUT 체인에 들어오는 패킷을 전부 허용 상태에서의 룰 적용 

- 서버로 들어오는 패킷을 전부 허용 시킨 상태에서 DROP 정책으로 하나씩 막는 방식 입니다.


# iptables -P INPUT DROP INPUT 체인에 들어오는 패킷을 전부 드랍 상태에서의 룰 적용 

- 서버로 들어오는 패킷을 전부 막은 상태에서 ACCEPT 정책으로 하나씩 허용하는 방식 입니다.

 

- 초기 셋팅에 아래 내용 추가

# iptables -A INPUT -i lo -j ACCEPT 

- 일반적으로 많은 소프트웨어들이 localhost 어댑터와 통신이 되어야 하기때문에 필요합니다.


# iptables -A INPUT -m state state ESTABLISHED,RELATED -j ACCEPT 

- INPUT Chain에 접속에 속하는 패킷과 기존의 접속 부분은 아니지만 연관성을 가진 패킷을 허용하는 규칙

 

- 특정 IP 접근을 차단한다.

# iptables -A INPUT -s 115.68.27.76 -j DROP 출발 ip115.68.27.76인 패킷을 차단

# iptables -A INPUT -d 115.68.27.76 -j DROP 목적지 ip115.68.27.76인 패킷을 차단


- 특정 IP 대역대의 접근을 차단한다.

# iptables -A INPUT -s 115.68.27.0/24 -j DROP 출발 ip의 대역이 115.68.27.0/24 인 패킷을 차단

# iptables -A INPUT -d 115.68.27.0/24 -j DROP 목적지 ip의 대역이 115.68.27.76.0/24 인 패킷을 차단


- 포트 범위로 허용 및 거부

# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 50001:50005 -j ACCEPT 

- 접속패킷 포트 50001 ~ 50005 번까지 허용


# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 50001:50005 -j DROP 

- 접속패킷 포트 50001 ~ 50005 번까지 거부


- 특정 IP에 대한 특정 포트허용 및 거부

# iptables -A INPUT -p tcp -s 115.68.27.76 -m state --state NEW -m tcp --dport 80 -j ACCEPT 

- IP 115.68.27.76에 대해 접속패킷 80번 포트를 허용


# iptables -A INPUT -p tcp -s 115.68.27.0/24 -m state --state NEW -m tcp --dport 80 -j ACCEPT 

- IP 115.68.27 대역에 대해 접속패킷 80번 포트를 허용


# iptables -A INPUT -p tcp -s 115.68.27.76 -m state --state NEW -m tcp --dport 80 -j DROP 

- IP 115.68.27.76에 대해 접속패킷 80번 포트를 거부


# iptables -A INPUT -p tcp -s 115.68.27.0/24 -m state --state NEW -m tcp --dport 80 -j DROP 

- IP 115.68.27 대역에 대해 접속패킷 80번 포트를 거부

 

- 인터페이스 지정

# iptables -A INPUT -i eth0 -p tcp dport 80 -j ACCEPT 인터페이스 eth0 로 들어오는 80포트 허용

# iptables -A INPUT -i eth0 -p tcp dport 80 -j DROP 인터페이스 eth0 로 들어오는 80포트 거부


- 룰 적용후 저장

# /etc/init.d/iptables save iptables의 룰을 명령어로 적용시킨 후 해당 명령어로 저장합니다. 

- 위처럼 하는 이유는 iptables 명령어로 룰을 적용시켰을 경우 방화벽을 재시작 하거나, 서버를 재부팅 했을 경우 룰이 저장이 되지 않고 전부 날아가기 때문입니다.

 



룰에대한 설명

 

흰색 부분은 전부 이해되셨을 거라 생각되며, 빨간 부분에 대해서 설명을 해드리겠습니다.

체인 RH-Firewall-1-INPUT의 최상단에 115.68.234.244의 아이피가 DROP 되어 있기 때문에 아래의 방화벽 룰 적용에 관계없이 서버에 접근할 수 없게 됩니다.

, 룰에서 2001포트가 먼저 허용되어 있고, 그뒤에 2000~2500 번 까지 드랍정책이 설정되었기 때문에 2001포트 를 제외한 2000~2500까지 모두 드랍이 되는 정책입니다.

모든 패킷을 거부하는 룰이며, 해당 룰 상단에 룰을 제외한 모든 부분을 거부해 버립니다.

바로 위에 룰이 적용되어 있기 때문에 해당 룰이 적용되지 않습니다.


'Linux Server > etc' 카테고리의 다른 글

[기타] 리눅스서버 사이트 이전  (1) 2018.03.02
[ 기타 ] 해킹점검  (0) 2018.03.02
[기타] rsync 설치 및 사용법  (0) 2017.08.08
[기타] 리눅스 시간 동기화  (0) 2017.03.09
[기타] tcpdump 사용방법  (0) 2017.01.25
Posted by 실력키우기

블로그 이미지
공 부 하 는 직 장 인
실력키우기

태그목록

공지사항

Yesterday
Today
Total

최근에 달린 댓글