IT. POST LIST

POST ALL LABEL

iptables 설치 및 설정 (centos5 ~ centos6)

By 때찌때찌맴매 - 12월 04, 2013

1. 설치

– yum -y install iptables



2. 기본 명령어

– /etc/init.d/iptables start : 시작

– /etc/init.d/iptables stop : 중지

– /etc/init.d/iptables restart : 재시작

– /etc/init.d/iptables status : 상태확인

– /etc/init.d/iptables save : 저장

– service iptables start/stop/restart/save



– iptables -nL : 설정여부 확인

1.PNG



– iptables -A : 추가

2.PNG



– iptables -D : 제거

3.PNG

3. 설정 파일

– /etc/sysconfig/iptables

– 위 경로에 파일이 없을 경우 default 설정을 추가해 주고 iptables save를 하면 생김



4. 설정

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [49:25377]
-A INPUT -i lo -j ACCEPT # 로컬 호스트는 모두 허용
-A INPUT -s 118.34.143.244 -j ACCEPT # 특정 아이피는 모두 허용
-A INPUT -s 69.162.77.122 -j DROP # 특정 아이피 막음
-A INPUT -m state –state INVALID -j DROP
-A INPUT -m iprange –src-range 114.58.0.0-114.58.255.255 -j DROP # 인도네시아쪽 아이피 대역대 막음
-A INPUT -m iprange –src-range 202.70.0.0-202.70.255.255 -j DROP # 인도네시아쪽 아이피 대역대 막음
-A INPUT -m iprange –src-range 125.164.0.0-125.164.255.255 -j DROP # 인도네시아쪽 아이피 대역대 막음
-A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp –dport 25 -m state –state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp –dport 53 -m state –state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m udp –dport 53 -m state –state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp –dport 110 -m state –state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m udp –dport 123 -m state –state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp –dport 443 -m state –state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -j LOG –log-level 7
-A INPUT -p tcp -j DROP # 위에 선언된 포트를 제외하고는 모두 막음
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state –state INVALID -j DROP
-A OUTPUT -p tcp -m tcp –dport 53 -m state –state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p udp -m udp –dport 53 -m state –state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp –dport 7899 -m state –state NEW,ESTABLISHED -j ACCEPT
COMMIT

■ iptables
– 설정파일 : /etc/sysconfig/iptables
– 설정복구 : iptables-restore < 백업파일 (내부적으로 설정파일에 덮어 씀)
– 설정저장 : /etc/init.d/iptables save (수정 내용을 설정파일에 저장)
(내부적으로는 iptables-save > /etc/sysconfig/iptables 하여 영구반영)
– 설정백업 : iptables-save (설정 파일내용이 출력됨)
■ system-config-firewall / system-config-firewall-tui
– GUI 및 TUI 를 통하여 리눅스 방화벽 설정. 내부적으로는 iptable 이용.
– 따라서 system-config-firewall 사용시 iptables 명령어를 이용하여

작업한 내용은 삭제됨.
– 설정파일 : /etc/sysconfig/system-config-firewall
# cat /etc/sysconfig/system-config-firewall
# Configuration file for system-config-firewall
–enabled
–port=2222:tcp
–port=5900-5902:tcp
–service=dns

■ iptables VS system-config-firewall
– system-config-firewall 은 GUI 및 TUI 를 이용하여 편리하게 방화벽 셋팅
– “적용” 클릭시 iptables 에 방화벽 룰 자동 셋팅
– 따라서 적용시 iptables 명령어를 이용하여 작업한 내용은 삭제됨.
-> system-config-firewall  수정 -> 적용 -> iptables 반영
– iptable을 직접 사용시 system-config-firewall 사용으로 인한 덮어씀 방지
(패키지 삭제: yum remove system-config-firewall.noarch
system-config-firewall-base.noarch
system-config-firewall-tui.noarch )

– 간단 수정 – > system-config-firewall, 전문가 -> iptables 사용
■ iptables Rule

* 기본 명령어
-A(–append)       : 규칙을 추가한다.
-N(–new-chain)    : 새로운 체인 생성
-X(–delete-chain) : 체인 제거
-P(–policy)       : 체인 기본정책 변경
-L(–list)         : 체인의 규칙상태 보기
-F(–flush)        : 체인내의 모든 규칙 제거(방화벽 초기화)
-Z(–zero)         : 체인내의 모든 규칙의 패킷과 바이트의 카운트 초기화
-D(–delete)       : 규칙을 삭제
-R(–replace)      : 새로운 규칙으로 대체
-I(–insert)       : 체인의 가장 처음에 규칙을 추가한다.
-E(–rename-chain) : 체인의 이름을 변경한다.

* 확인 : iptables -L -n -v –line-numbers
-L : 리스트
-n : PORT를 이름이 아닌 숫자로 표현
-v : 자세한 출력(인터페이스 장비까지 나옴)
–line-numbers : 정책번호 출력(삽입,삭제시 인덱스로 유용)

* iptables 체인의 종류
INPUT   : 로컬로 들어오는 패킷(입력 패킷)
FORWARD : INPUT와 OUTPUT 역할, 라우터에 방화벽을 적용할 때 쓰임
OUTPUT  : 외부로 나가는 패킷(출력 패킷)

* 사용자 정의 체인 생성 및 INPUT 체인에 추가(옵션)
# iptables -N 사용자정의체인명
# iptables -A INPUT -j 사용자정의체인명
-> 사용자 정의 체인을 설정하고 모든 INPUT 을 사용자 정의 체인으로 보냄
-> 향후 등록시 -> iptables -A 사용자정의체인명 -s IP -d IP -j ACCEPT

* 기타 사항

– 최근 버전의 iptables 는 state(NEW,ESTABLISHED,RELATED) 지원
– iptables -A INPUT -j REJECT –reject-with icmp-host-prohibited
: 모든 입력을 차단
: –reject-with icmp-host-prohibited 있으면 connection denied 통보
: –reject-with icmp-host-prohibited 없으면 connection timeout 발생



■ 정책 적용 방법
* OLD 버전(예, 인터넷과 SSH 을 열 때)
1)iptables -A OUTPUT -p tcp -m tcp –dport 80 -j ACCEPT
2)iptables -A INPUT  -p tcp -m tcp –sport 80 -j ACCEPT
1)iptables -A OUTPUT -p tcp -m tcp –dport 22 -j ACCEPT
2)iptables -A INPUT  -p tcp -m tcp –sport 22 -j ACCEPT
-> 1) 외부(80/22 PORT)로   나가는  패킷 허용
-> 2) 외부(80/22 PORT)에서 들어오는 패킷 허용
=> 위와 같이 INPUT/OUTPUT 을 두개씩 등록 필요

* NEW 버전
1)iptables -A OUTPUT -m state –state NEW -p tcp -m tcp
–dport 80 -j ACCEPT
1)iptables -A OUTPUT -p tcp -m tcp –dport 22 -j ACCEPT
2)iptables -A INPUT  -m state –state ESTABLISHED,RELATED -j ACCEPT
-> 1) 외부(80/22 PORT)로 나가는 신규(NEW 즉 SYN) 패킷 허용
-> 2) 외부에서 들어오는 연결된/관련된(SYNACK, ACK) 패킷 허용
=> 따라서, OUTPUT 관련 정의 하나만 내리면,
INPUT 관련 패킷은 –state ESTABLISHED,RELATED 공통정의로 해결됨.
(이와 반대 상황도 마찬가지로 허용됨.)
=> ESTABLISHED,RELATED 허용의미는 이미 연결되었거나, 기존 연결에 관련된
패킷은 허용한다는 의미(예, FTP 21 포트 열면 20 포트는 자동열림)

* 정책 삽입
# iptables -I OUTPUT [RULE_NUMBER]  -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT -m comment –comment “ACCEPT OUT – WWW”
* 로그 남기는 방법
# iptables -A INPUT -j LOG
-> /var/log/messages 에 로그가 남겨짐
-> 차단된 포트를 확인시 차단 정책 바로위에 정책 설정하면 됨.

– 체인 삭제 : iptables -X 체인명
– 정책 삭제 : iptables -D 체인명 인덱스
* 기본 모두 막고 시작하기
# iptables -F  (방화벽 초기화)
# iptables -X  (체인 제거)
# iptables -Z  (통계 초기화)
# iptables -P INPUT   DROP  (기본정책 DROP 설정)
# iptables -P FORWARD DROP  (기본정책 DROP 설정)
# iptables -P OUTPUT  DROP  (기본정책 DROP 설정)
(OUTPUT 은 편의를 위해서 DEFAULT ACCEPT로 하기도 함.)

* 루프백 허용
# iptables -A INPUT  -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT

—————————–
# 방화벽 초기화 및 기본 설정 샘플
—————————–
1. 초기화 및 기본 차단 정책 설정
# iptables -F
# iptables -X
# iptables -Z
# iptables -P INPUT   DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT  DROP
2. 루프백 설정

# iptables -A INPUT  -i lo -j ACCEPT -m comment –comment “ACCEPT IN  – LOOP BACK”

# iptables -A OUTPUT -o lo -j ACCEPT -m comment –comment “ACCEPT OUT – LOOP BACK”



3. ESTABLISHED,RELATED state 추가

# iptables -A INPUT  -m state –state ESTABLISHED,RELATED -j ACCEPT -m comment –comment “ACCEPT IN  – ESTABLISHED, RELATED”

# iptables -A OUTPUT -m state –state ESTABLISHED,RELATED -j ACCEPT -m comment –comment “ACCEPT OUT – ESTABLISHED, RELATED”



4. ICMP 추가

# iptables -A INPUT  -p icmp -j ACCEPT -m comment –comment “ACCEPT IN  – ICMP”

# iptables -A OUTPUT -p icmp -j ACCEPT -m comment –comment “ACCEPT OUT – ICMP”



5. 필요한 정책 추가 (IN/OUT)

(1) DNS 서버 운영시

# iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 53 -j ACCEPT  -m comment –comment “ACCEPT IN  – DNS SERVER”

# iptables -A INPUT -m state –state NEW -m udp -p udp –dport 53 -j ACCEPT  -m comment –comment “ACCEPT IN  – DNS SERVER”

(2) DNS QUERY

# iptables -A OUTPUT -m state –state NEW -m tcp -p tcp –dport 53 -j ACCEPT -m comment –comment “ACCEPT OUT – DNS QUERY”

# iptables -A OUTPUT -m state –state NEW -m udp -p udp –dport 53 -j ACCEPT -m comment –comment “ACCEPT OUT – DNS QUERY”

(3) 외부 웹서버 접근

# iptables -A OUTPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT -m comment –comment “ACCEPT OUT – WWW”

(4) 내부에 서버 운영시

# iptables -A INPUT  -m state –state NEW -m tcp -p tcp –dport 포트 -j ACCEPT -m comment –comment “주석”

(5) 외부에 서버 접근시

# iptables -A OUTPUT -m state –state NEW -m tcp -p tcp –dport 포트 -j ACCEPT -m comment –comment “주석”



6. 마지막 차단 정책(기본 정책이 DROP 일 경우, 추가하지 않아도 무방함 하지만 추가할 경우 차단을 명시적으로 알려주는 역할. 추가안할 경우 TIMEOUT 발생)
* 로그를 남기겠다면 추가
# iptables -A OUTPUT -j LOG -m comment –comment “LOGGING /etc/var/messages”
# iptables -A INPUT   -j REJECT –reject-with icmp-host-prohibited -m comment –comment “REJECT IN      – ALL”

# iptables -A OUTPUT  -j REJECT –reject-with icmp-host-prohibited -m comment –comment “REJECT OUT     – ALL”

# iptables -A FORWARD -j REJECT –reject-with icmp-host-prohibited -m comment –comment “REJECT FORWARD – ALL”
7. 수정된 정책 저장
/etc/init.d/iptables save
————————–
# 방화벽 적용 샘플 – OLD 버전
————————–

< 내부망 허용 >
# 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 포트 허용(외부 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 INPUT -p icmp -j ACCEPT
iptables -A OUPUT -p icmp -j ACCEPT
or
iptables -A INPUT  -i eth0 -p icmp –icmp-type echo-reply   -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp –icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp –icmp-type echo-reply   -j ACCEPT

* SSH 포트 허용 (192.168.0.1 -> 172.16.1.20, 외부 ssh 서버 접근)
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  -p tcp -m tcp –sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp –dport 80 -j ACCEPT
* FTP 포트 허용
– 명령(제어) 포트(tcp 21) 접속
iptables -A INPUT  -p tcp -m tcp –sport 21 –dport 1024:65535 -j ACCEPT

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

– 데이터 포트(tcp20) 접속(능동 모드 접속)
iptables -A INPUT  -p tcp -m tcp –sport 21 –dport 1024:65535 -j ACCEPT
iptables -A OUTPUT -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

  • Share:

You Might Also Like

0 개의 댓글