메뉴 닫기

iptables 를 알아보자

iptables table의 종류

리눅스의 방화벽인 iptables에 간단하게 알아보면,

iptables에는 크게

raw
mangle
nat
filter

4개의 테이블이 존재 한다.

여기서는 일반적으로 리눅스 서버에서 많이 쓰이는 filter table에 대해서
간단하게 설명해 보겠다.
filter 테이블에는 INPUT, FORWARD, OUTPUT 3개의 chain이 존재한다.
3개의 chain은 단어 설명 그대로

INPUT – 외부에서 방화벽(목적지 IP가 방화벽)서버로 들어오는 패킷 제어
FORWARD – 외부 패킷이 방화벽을 통과해 다른 네트워크로 흘러가는것을 제어(ex. 브릿지 방화벽, vpn등)
OUTPUT – 방화벽(출발지 IP가 방화벽)에서 외부로 나가는 패킷 제어

일반적으로 많이 사용한느 centos 5.x를 초기 설치 하게 되면
/etc/sysconfig/iptables vi 편집기로 열어보면
아래와 같이 기본 룰이 설정이 되어 있다.
====================================================================================
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT – [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp –icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp –dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp –dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp –dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT –reject-with icmp-host-prohibited
COMMIT
===================================================================================

위 설정은 centos 설치시 기본 설정이기 때문에 서버 관리자가 불필요한 부분은 삭제하고
본인 서버에 맞게 커스터 마이징을 하면된다.
가장 좋은 방화벽 정책이라면 모든 포트를 다 막고 필요한 port만 허용을 해서
방화벽을 관리하는게 가장좋지만 OUTPUT을 다 막게 되면 서버가 client 입장이
되어서 외부서버에 접속하게 될때 어려움을 많이 격게 된다.
그래서 일반적으로는 대부분 INPUT쪽에 여러가지 정책을 설정해 사용하고 있다.

ex)모든 정책 ALL DROP

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

이때 주의 사항은 기본 INPUT, FORWARD, OUTPUT ALL DROP 이기 때문에 꼭 본인이 접속하고 있는
아이피는 또는 접속 port(ex 22 port)을 INPUT, OUTPUT chain ACCEPT 해주어야 한다.

원격으로 작업시에는 iptables 잘못된 DROP정책은 원격 접속 자체를 차단해 버려서
콘솔로 작업을 해야 할 상황이 올수도 있다.

ex)
관리자 원격 주소가 1.1.1.1 이라고 하면

iptables -A INPUT -s 1.1.1.1 -j ACCEPT
iptables -A OUTPUT -d 1.1.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

룰을 만들때는 최대한 자세하게 적는게 좋지만 설명을 하기위해서 간단하게 적도록 하겠다.
ex)
iptables -A INPUT -p tcp –dport 22 -s 1.1.1 -j ACCEPT
iptables -A OUTPUT -p tcp –sport 22 -d 1.1.1 -j ACCEPT

이렇게 기본적으로 관리자쪽 접속을 허용해 놓고 세부적인 방화벽 룰 설정에 들어가면된다.

위에서도 설명했지만 기본적으로 ALL DROP이기 때문에
80 port 를 허용하려면

iptables -A INPUT -p tcp –dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp –sport 80 -j ACCEPT

이렇게 ALL DROP을 했을시에는 항상 INPUT, OUTPUT 을 전부 고려해서
신중하게 적용해야 한다.
위와는 반대로 INPUT chain 만 차단하게되면
외부로 열려있는 서비스 포트만 허용해 주면된다.

ex) 관리자 아이피 1.1.1.1

iptables -A INPUT -s 1.1.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

80번 포트 허용
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
53번 포트 허용
iptables -A INPUT -p tcp –dport 53 -j ACCEPT
iptables -A INPUT -p udp –dport 53 -j ACCEPT

일반적인 서버라면 이렇게 라도 설정해서 외부에 불필요한 접근을
차단하는것도 서버 보안의 좋은 예라고 할수 있겠다.
나중에는 위 상황을 응용해서 비정상 네임서버 질의를 차단하는 방법을
알아보도록 하겠다.

 

[polldaddy rating=”7739789″] 

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x