본문 바로가기
OS/Linux

iptables

by 화뉘 2013. 3. 4.

 1) 방화벽 기본 정책

iptables 방화벽의 시작은 기본 정책을 수립하는 것이다. iptables를 이용하여 방화벽을 구성할 경우 두 가지 정책 중 한가지를 선택하면 된다. 일반적으로 모든 패킷에 대해서 무시하는 것이 방화벽의 기본 정책이다.

 

방화벽의 기본 정책
 
* 모든 것을 허용한 후 제한할 것을 거부한다.

* 모든 것을 거부한 후 필요한 것만 허용한다.
 


두 개중 일반적으로 모든 것을 막아버리는 것을 기본 정책으로 한다.


대부분의 리눅스 배포판은 모든 것을 거부하는 것을 기본 정책으로 채택하고 있으나, 페도라코어 리눅스의 경우는 모든 것을 허용하는 정책을 기본으로 하고 있다. 그러면 기본 정책으로 모든 것에 대해서 거부하는 정책을 택하여 다음과 같이 실행하여 기본 보안 정책을 수립한다.

 


iptables -L 명령으로 iptables의 테이블 상태를 점검할 수 있다. iptables -L 명령을 실행해 보면 INPUT과 FORWARD, OUTPUT 체인의 정책 모두 DROP으로 설정되 있음을 확인할 수 있다.

 


이것은 리눅스 서버로 어떠한 패킷이든 들어오고 나갈 수 없는 상태임을 의미하여, 로컬이든 외부에서 로컬 컴퓨터로는 네트워크가 차단된 것처럼 연결할 수 없게 된다. 그러면 ping 127.0.0.1 명령으로 루프백에 핑을 테스트해 봅시다. 루프백으로 핑이 나가질 않음을 알수 있다.

 


루프백으로 모든 패킷이 자유롭게 들어오고 나갈 수 있도록 다음과 같이 명령을 실행해 보자.

 


루프백 주소로 핑을 날리면 핑이 나감을 확인 할 수 있다. 핑 뿐만 아니라 로컬에서 제공하는 모든 네트워크 서비스에 접근할 수 있게 된다.

 

 


▶ iptables 사용법

iptables [-t table] command [match] [target\jump]


-A(--append) : 규칙을 추가한다.

-N(--new-chain) : 새로운 체인 생성

-X(--delete-chain) : 체인 제거

-P(--policy) : 체인 기본정책 변경

-L(--list) : 체인의 규칙상태 보기

-F(--flush) : 체인내의 모든 규칙 제거(방화벽 초기화)

-Z(--zero) : 체인내의 모든 규칙의 패킷과 바이트의 카운트를 0으로 초기화

-D(--delete) : 규칙을 삭제

-R(--replace) : 새로운 규칙으로 대체

-I(--insert) : 체인의 가장 처음에 규칙을 추가한다.

-E(--rename-chain) : 체인의 이름을 변경한다.

 

2) iptables 체인 종류

INPUT : 로컬로 들어오는 패킷(입력 패킷)

FORWARD : INPUT와 OUTPUT 역할, 라우터에 방화벽을 적용할 때 쓰임

OUTPUT : 외부로 나가는 패킷(출력 패킷)


INPUT 체인에 사용자 정의로 체인을 추가하여 INPUT 체인 대신에 사용할 수 있는데, 페도라 코어의 경우는 RH-Firewall-1-INPUT라는 사용자 정의 체인을 사용한다. 3개의 기본 체인(INPUT, OUTPUT, FORWARD)은 수정이나 삭제가 불가능하며, 사용자 정의 체인은 다음과 같은 방법으로 생성해 줄 수 있다.

 

 


3) iptables 다루기


▶ 방화벽 정책 초기화

# iptables -F
# iptables -X

# iptables -Z
 

 


▶ 기본 정책 설정


# iptables -P INPUT DROP
# iptables -P OUTPUT DROP

# iptables -P FORWARD DROP
 

 


▶ 사용자 정의 체인 생성 및 INPUT 체인에 추가


# iptables -N 사용자정의체인명

# iptables -A INPUT -j 사용자정의체인명
 

 


▶ 허용 정책 설정

루프백 접속 허용

다른 곳과 네트워크가 연결되어 있지 않더라도 시스템의 기본 네트워크이며 로컬 호스트의 인터페이스인 루프백에 대해서는 접속이 이뤄질 수 있도록 해야 하므로, 다음과 같이 설정한다.


iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT
 

 


내부 네트워크 접속


iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.0.0/24 -j ACCEPT

iptables -A OUTPUT -s 192.168.0.0/24 -d 192.168.0.0/24 -j ACCEPT
 

 


내부 -> 외부 접속


iptables -A FORWARD -s 외부주소 -p tcp -m tcp --sport 포트번호 -j ACCEPT

iptables -A OUTPUT -d 외부주소 -p tcp -m tcp --dport 포트 -j ACCEPT
 

 


① DNS 포트 허용


iptables -A FORWARD -p udp -m udp --sport 53 -j ACCEPT

iptables -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
 

 

② ICMP 핑 허용


iptables -A OUTPUT -o eth0 -p icmp --icmp-type echo-request -j ACCEPT

iptables -A FORWARD -i eth0 -p icmp --icmp-type echo-reply -j ACCEPT

iptables -A OUTPUT -o eth0 -p icmp --icmp-type echo-reply -j ACCEPT
 

 

③ SSH 포트 허용 ( 192.168.0.1 -> 172.16.1.20)


iptables -A fedora -s 172.16.1.20 -p tcp -m tcp --sport 22 -j ACCEPT

iptables -A OUTPUT -d 172.16.1.20 -p tcp -m tcp --dport 22 -j ACCEPT
 

 

④ HTTP 포트 허용


iptables -A FORWARD -i eth0 -p tcp -m tcp --sport 80 --dport 1024:65535 -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp -m tcp --sport 1024:65535 --dport 80 -j ACCEPT
 

 

⑤ FTP 포트 허용

* 명령(제어) 포트(tcp 21) 접속


iptables -A FORWARD -i eth0 -p tcp -m tcp --sport 21 --dport 1024:65535 -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp -m tcp --sport 1024:65535 --dport 21 -j ACCEPT
 


*데이터 포트(tcp20) 접속(능동 모드 접속)


iptables -A FORWARD -i eth0 -p tcp -m tcp --sport 21 --dport 1024:65535 -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp -m tcp --sport 1024:65535 --dport 21 -j ACCEPT
 


*데이터 포트(tcp 1024이상의 포트) (Passive 모드 접속)


iptables -A FORWARD -i eth0 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -j ACCEPT
 

 


외부 -> 내부 접속

① SSH 포트 허용


iptables -A FORWARD -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp -m tcp --sport 22 -j ACCEPT
 

 

② http 포트 허용


iptables -A FORWARD -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT

iptables -A OUTPUT -o eth0 0p tcp -m tcp --sport 80 -j ACCEPT
 

 

③ ftp 포트 허용 ( passive mode)


iptables -A FORWARD -i eth0 -p tcp -m tcp --dport 21 -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp -m tcp --sport 21 -j ACCEPT


iptables -A FORWARD -i eth0 -p tcp -m tcp --dport 1024:65535 -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp -m tcp --sport 1024:65535 -j ACCEPT

'OS > Linux' 카테고리의 다른 글

Ubuntu 기본 명령어  (0) 2014.09.03
CentOS 버전 확인  (0) 2013.04.25
인스턴스에서 시간을 한국으로 변경하는 방법  (0) 2011.05.24
system 언어팩 변경하는 방법  (0) 2011.05.11
CentOS에서 Vim 설치  (0) 2011.01.24

댓글