본문 바로가기
Server/Linux Server

[Linux Server] firewall - iptables

by JINJINC 2023. 4. 6.
728x90
반응형

방화벽 패킷 경로
그림 1 . 방화벽 패킷 경로

목적지가 방화벽 => input에 설정

출발지가 방화벽 => output설정

 iptables 명령어 사용법

반응형
ptables   [-t table명]   명령어    [매칭옵션]     [타겟]

1. iptables [ table 구문 ]

 

# iptables ( -t filter ) -D INPUT -p tcp --dport 80 -j DROP

# iptables -t nat -D INPUT -p tcp --dport 80 -j DROP

# iptables -t mangle -D INPUT -p tcp --dport 80 -j DROP

 

# iptables -A INPUT [-p tcp] [-s 주소] [multiport] [--sport 1024:]

                                             [-d 주소] [multiport] [--dport 21]

                                             [-m state]

                                             [--state NEW,ESTABLISHED,RELATED]

                                            -j ACCEPT

 iptables 명령어

 

 -A, --apend

룰의 제일 마지막에 추가 , 체인에 새로운 룰 추가하기 

# iptables -A INPUT -p tcp --dport 80 -j DROP

 

 -D ,--delete

<방법1>

# iptables -A INPUT -p tcp --dport 80 -j DROP

# iptables -D INPUT -p tcp --dport 80 -j DROP  => 삭제

 

<방법2>

# iptables -L --line

# iptables -D INPUT 1

 

 -I  , --insert

룰의 제일 앞에 추가

# iptables -I INPUT -p tcp --dport 80 -j DROP

 

-L , --list

chain의 모든 룰 목록을 보여준다.

-모든 IP및 포트번호에 대해 reverse lookup 실행 0

( IP->호스트이름, 포트번호->포트이름 변환 )

# iptables -L INPUT

 

- 모든 IP및 포트번호에 대해 reverse lookup 실행 X

# iptables -L INPUT -n

 

- 해당 룰에 매칭된 패킷의 개수 와 바이트 출력

# iptables -L INPUT -v

 

-F , --flush

- 모든 룰을 삭제한다.

# iptables ( -t filter ) -F

# iptables -t nat -F

# iptables -t mangle -F

 

- 일부 chain의 룰만 삭제한다.

# iptables ( -t filter ) -F INPUT

 

※ -P 로 지정한 기본정책은 변경되지 않는다.

 

-N , --new-chain

 

새로운 chain을 생성한다.

# iptables -N TEST

# iptables -A TEST -p tcp --dport 80 -j DROP

# iptables -A TEST -p tcp --dport 21 -j DROP

# iptables -A INPUT -j TEST

# iptables -A OUTPUT -j TEST

# iptables -A FORWARD -j TEST

 

-X , --delete-chain

 

존재하는 chain을 삭제한다.

# iptables -N TEST

# iptables -L

# iptables -X TEST

 

-P, --policy

INPUT 테이블에 있는 모든 룰에 매칭 되지 않을 경우에는 기본정책인 -P 에서 지정된 정책이 적용된다.

# iptables -P INPUT -j DROP

새롭게 생성한 chain에는 기본정책(-P)을 설정할수 없다.

 

 iptables 매칭 옵션

 

-p, --protocol

# iptables -A INPUT -p [ tcp / udp / icmp ]

# iptables -A INPUT -p ! tcp

 

- /etc/protocols 정의된 tcp(6), udp(17), icmp(1)와 같이 number로 지정해도 된다.

 

# iptables -A INPUT -p 6

 

-s, --source

- S 출발지 ip 주소 

- s를 지정하지 않은 경우 모든 IP를 의미한다.

# iptables -A INPUT -s 0/0

# iptables -A INPUT -s any/0

# iptables -A INPUT -s anywhere

# iptables -A INPUT -s 0.0.0.0/0.0.0.0

 

- 특정 네트워크 지정하기

# iptables -A INPUT -s 211.175.185.0/24

# iptables -A INPUT -s 211.175.185.1/32

 

-d, --destination

-d 목적지 ip 주소 

- d를 지정하지 않은 경우 모든 IP를 의미한다.

# iptables -A INPUT -d 211.175.185.1

# iptables -A INPUT -s 1.1.1.1 -d 2.2.2.2

 

-i, -o

- 특정 인터페이스에 규칙을 적용한다.

. INPUT chain 은 -o 사용할수 없다.

. OUTPUT chain은 -i 사용할수 없다.

 

- 인터페이스 지정

. 1개의 인터페이스 : 인터페이스 지정 할 필요 없다.

. 다중의 인터페이스 : 인터페이스 지정 없으면 모든 인 터페이스에 룰이 적용된다.

 

# iptables -A INPUT -i eth0

 

--sport, --dport

- 표현방법

1024:65535 = 1024 ~ 65535

1024: = 1024 ~ 65535

:1024 = 0 ~ 1024

! 1024:65535 = 0 ~ 1023

 

 -j (--jump)

-j: 매치되는 패킷을 어떻게 처리할지 지정 (--jump)

-j ACCEPT /   -j DROP 

 

# iptables -A INPUT -i eth0 -p TCP -s 1.1.1.1 --sport 1024:65535 --dport 161

 

iptable  - m  옵션

-m match  extended match (may load extension)
 iptables에서 확장 모듈을 활성화 하기 위해 사용하는 플래그 
state 모듈 4가지 (new, established, related ,invaild)

 

-m state 옵션 

연결상태에 따른 패킷을 것을 다루는데, 아래의 3가지 형태의 연결상태에 따른 패킷 확인하여 패킷 필터링 합니다. 

new : 이전에 없던 패킷의 새로운 첫 연결 요청이 client pc로 부터 들어오는 패킷
established : new 상태를 거친 이후의 패킷 / 새로운 연결 요청에 관한 그 후 의 패킷들이 오고가는 상태를 의미related : 새로운 연결 요청이지만, 기존의 연결과 관련된 패킷을 의미
invaild : 이전 상태 중에 어떠한 것도 적용되지 않으며  패킷의 상태를 invaild로 표시( 비정상적인 접근)

iptables -[opiton][체인이름] -m state --state[연결상태]  -p [프로토콜]  -j [정책]
정책 => accept/drop

 

 

- 방화벽 정보 추력하기

# iptables -nL -- 숫자 형태로 화면에 출력한다.
# iptables -L --line-numbers -- rule의 순서를 확인할 수 있다.
# iptables -L -v -- 자세한 정보 출력하기
# iptables -vnL -- 패킷 카운터 확인하기
# iptables -Z -- 패킷 카운터 모든 체인 초기화하기

 

 

 실습 디자인 : FORWARD 필터 구성하기

FORWARD 디자인

# set up  명령어를 입력하면 아래와 같은 화면이 나옵니다. 

firewall configuration 을 선택하여 

security level을 enabled로 바꾸어줍니다. 

위의 설정을 해주면 iptables가 생성됩니다. 

# vi /etc/sysconfig/iptables
# service iptables stop
# service iptables start

/etc/sysconfig/iptables
/etc/sysconfig/iptables

 

- filter 테이블의 기본정책 허용하기
# iptables -P FORWARD DROP
# service iptables save

SAVE를 하지 않으면 /etc/sysconfig/iptables에 적용되지 않고 메모리에만 남아있습니다.

save를 해주면 업데이트 되어 올라간다. 

/etc/sysconfig/iptables
/etc/sysconfig/iptables

- FORWARD 필터 구성하기
<확인1>
# iptables -A FORWARD -s 1.1.1.1 -p tcp --dport 80 -j ACCEPT
# iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# service iptables save
# vi /etc/sysconfig/iptables

<forward 활성화 하기>

# vi /etc/sysctl.conf net.ipv4.ip_forward=1     --7행
# /sbin/sysctl -p

 

 

 

결과

-- srv01 에서 확인하자!
# http 1.1.1.2 -- 0 (INPUT -> OUTPUT)
# ping 2.1.1.1 -- x (FORWARD -> FORWARD)
# httpd 2.1.1.1 -- 0 (FORWARD -> FORWARD)
-- srv03 에서 확인하자!
# http 1.1.1.1 -- x (FORWARD -> FORWARD)
# http 2.1.1.2 -- 0 (INPUT -> OUTPUT)
-- cent02 에서 확인하자!
# http 1.1.1.1 -- 0 (OUTPUT -> INPUT) 
# http 2.1.1.1 -- 0 (OUTPUT -> INPUT)

 

728x90
반응형

댓글