본문 바로가기

Server/Linux계열

CentOS : 방화벽 설정(iptables)

설정파일을 수정하기위해 에디터로 오픈
vi /etc/sysconfig/iptables

여러가지 설정들이 있음

# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*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 21 -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
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
COMMIT
 


예외상황을 등록한다.
예제) 21번 포트로 접속가능
 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

설정에 맞게 수정하면 된다. 

수정후 서비스를 재실행시켜줘야 반영된다.
실행 명령어 : service iptables restart
실행하면 모두 "OK"가 떨어지면 반영이 된것이다.



===== iptables명령어를 이용한 방법 =====
출처 : http://blog.naver.com/choi05okk/90094234790

▶ iptables 사용법

-기본 모두 막고 시작하기-
# iptables -F
# iptables -X
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT DROP
-루프백 허용-
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o -lo -j ACCEPT

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 INPUT -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 INPUT -s 외부주소 -p tcp -m tcp --sport 포트번호 -j ACCEPT

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

① DNS 포트 허용

iptables -A INPUT -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 INPUT -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 INPUT -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 INPUT -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 INPUT -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 INPUT -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 INPUT -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 INPUT -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 INPUT -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 INPUT -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 INPUT -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

예제 :

- 중국발 해킹을 통하여 웹서버를 공격하고 있다는 사실을 알았다.
찾아낸 IP는 10.10.1.1 ~ 10.10.1.255, 10.10.2.3, 10.10.3.5 와 같으며 접근통제정책을 통하여

위의 IP에 대하여 web 접속을 거부하라. 단, 10.10.1.33 IP는 web 접속을 허락하여야 한다.

/sbin/iptables -A INPUT -s 10.10.1.33 -p tcp --dport 80 -j ACCEPT

/sbin/iptables -A INPUT -s 10.10.1.1/10.10.1.255 -p tcp --dport 80 -j DROP

/sbin/iptables -A INPUT -s 10.10.2.3 -p tcp --dport 80 -j DROP

/sbin/iptables -A INPUT -s 10.10.3.5 -p tcp --dport 80 -j DROP

/sbin/iptables -A INPUT -s 202.190.123.68 -p tcp --dport 21 -j DROP

/sbin/iptables -A INPUT -s 118.217.12.35 -p tcp --dport 1:65535 -j DROP

- PING 명령어는 서버 내부에서는 사용가능해야 하며, 192.168.1.13, 192.168.1.11 IP를 제외하고는
모두 거부하라.

/sbin/iptables -A INPUT -s 192.168.1.13 -p icmp --icmp-type echo-request -j ACCEPT

/sbin/iptables -A INPUT -s 192.168.1.11 -p icmp --icmp-type echo-request -j ACCEPT

/sbin/iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

- 110포트와 143포트는 localhost와 192.168.1.13, 192.168.1.11 에서는 허용하고
외부에서는 차단하라.

/sbin/iptables -A INPUT -s 192.168.1.13 -p tcp --dport 110 -j ACCEPT

/sbin/iptables -A INPUT -s 192.168.1.11 -p tcp --dport 110 -j ACCEPT

/sbin/iptables -A INPUT -p tcp -m tcp --dport 110 -j DROP

/sbin/iptables -A INPUT -p tcp -m tcp --dport 110 -j DROP

/sbin/iptables -A INPUT -s 192.168.1.13 -p tcp --dport 143 -j ACCEPT

/sbin/iptables -A INPUT -s 192.168.1.11 -p tcp --dport 143 -j ACCEPT

/sbin/iptables -A INPUT -p tcp -m tcp --dport 143 -j DROP

- ssh와 ftp에 대해서는 iptables 를 통하여 문제 2번에 해당하는 정책을 사용하여 똑 같이 적용하라.

/sbin/iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT

/sbin/iptables -A INPUT -s 192.168.1.13 -p tcp --dport 22 -j ACCEPT

/sbin/iptables -A INPUT -s 192.168.1.11 -p tcp --dport 22 -j ACCEPT

/sbin/iptables -A INPUT -p tcp -m tcp --dport 22 -j

 

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

리눅스 기초명령어  (0) 2011.06.27
리눅스 캐릭터셋 설정  (0) 2011.06.24
[SERVER] rsync로 백업하기  (0) 2010.10.13
[LINUX]특정 도메인의 메일 서버 알아내기  (0) 2010.09.01
Unix command, 정리  (0) 2010.05.07