운영체제 관리/리눅스(Linux)

iptables를 사용한 방화벽 구축

본클라쓰 2010. 2. 20. 10:27

 iptables은 리눅스 시스템을 지나가는 모든 패킷에 대해 제어하고 흐름의 방향을 바꿀 수있는 인터페이스 프로그램입니다. iptables를 사용하며 불필요한 접속을 원천적으로 차단하고 수상한 접속 시도에 대해서 간단한 방법으로 로그를 남길 수 있기 때문에 각종 서버에서 유용하게 사용될 수 있습니다. 즉, iptables는 패킷 단위로 동작하며 패킷의 흐름을 제어하는 규칙을 적용하는 프로그램입니다.


 예를 들어 IP주소를 바탕으로 특정 IP 대역에서 오는 모든 접속을 거부할 수 있으며 특정 포트로의 접속을 모두 막을 수도 있습니다. 또한 특정 패턴을 가진 패킷을 다른 컴퓨터로 전달할 수도 있으며 그 이외도 많은 조건들을 정의할 수 있습니다. 또한 이런 규칙들을 모두 조합해서 사용이 가능합니다.

 



iptables 의 세 가지 chain


 모든 패킷은 chain 규칙을 통해 패킷을 처리합니다. 서버로 들어오는 모든 패킷은 세 가지 chain 중 하나를 통과하게 됩니다. 세 가지 체인은 INPUT, OUTPUT, FORWARD 체인입니다.


서버로 들어오는 모든 패킷은 INPUT 체인을 통과합니다. 그리고 나가는 모든 패킷은 OUTPUT 체인을 통과합니다. 그리고 다른 서버로 보내는 패킷은 FORWARD 체인을 통과합니다. 각 체인에는 여러 가지 규칙이 있으며 해당 규칙에 부합하는 경우 패킷을 거부(DROP, REJECT) 하거나 받아들일(ACCEPT) 수 있는 설정이 있습니다. 


 


* 기본 정책을 확인하기

# iptables -L


위의 명령어를 입력하며 각 체인 별로 policy라는 부분을 통해 기본 정책을 확인 할 수 있습니다.

#iptables -L

Chain INPUT (policy ACCEPT)

tartget      prop opt source    destination

DROP      tcp- anywhere     192.168.10.2    tcp dpt:telnet


Chain FORWARD (policy ACCEPT)

target      prop opt source    destination


Chain OUTPUT (policy ACCEPT)

target      prop opt source   destination

REJECT  tcp - anywhere    210.210.210.0  tcp dpt:http


 


 

 다음은 eth0 이라는 네트워크 카드로 부터 192.168.10.2 라는 호스트로 들어오는 23번 포트의 모든 텔넷 접속을 제한하는 명령입니다.

# iptables-A INPUT -i eth0 -p TCP -d 192.168.10.2 --dport 23 -j DROP


각 옵션에 대한 설명은 다음과 같습니다.

-A INPUT : INPUT 체인에 새로운 규칙을 추가(ADD)

-i eth0 : 특정 네트워크 디바이스 즉, eth0에게만 해당됨을 뜻함

-p TCP : TCP 패킷을 제한

-d 192.168.10.2 : 목적지 주소가 192.168.10.2

--dport 23 : 목적지 컴퓨터 접속 포트가 23번 일 경우

-j DROP : DROP으로 패킷을 처리합니다.


-j 옵션에 사용할 수 있는 기본적인 동작은 다음의 세 가지가 있습니다.

DROP : 패킷에 거부함. 전혀 반응하지 않음

REJECT : 패킷을 거부하되 상대방에게 즉각 접속 거부 신호를 보냅니다.

ACCEPT : 접속을 허용합니다.

 

만약 1.1.1.1 에서 오는 패킷을 DROP 시키기 위해서는 다음과 같은 명령어를 입력합니다.

# iptables -A INPUT -s 1.1.1.1 -j DROP

-s 아이피 옵션은 소스 아이피를 지정하는 옵션입니다.



 


* 모든 설정 초기화 명령어

# iptables -F

모든 체인의 설정을 지웁니다. INPUT 체인만 지울 경우 iptables -F INPUT 이라고 입력하면 됩니다.



 


※ iptables 룰 순서

 iptables 룰의 적용되는 순서는 모든 것이 거부된 후 허용을 추가해도 허용이 동작하지 않습니다. 따라서 모두 허용을 지정한 후 거부를 지정해야 합니다.


'운영체제 관리 > 리눅스(Linux)' 카테고리의 다른 글

디렉토리 설명  (0) 2010.02.28
계정 관리  (0) 2010.02.20
PHP 사용하기  (0) 2010.02.16
Apache 서버 시스템 시작과 동시 실행시키기  (0) 2010.02.16
MySQL 루트 계정 비번 입력  (0) 2010.02.16