LINUX(Server)

Iptables

천천히, 한 걸음씩 2024. 5. 1. 22:02

Iptables

* iptables

- 리눅스 서버를 보호하기 위해서
  패킷 필터링을 통해 기본적인 방화벽을 구성할 수 있다.

- 커널의 IP패킷 필터링 기능을 하는 Netfilter에 
  규칙을 설정하고 관리하는 도구가 iptables이다.
  
  +@ 패킷 필터링
  
  네트워크를 통과하는 모든 패킷들은 
  헤더에 출발지와 목적지 , 어떤 프로토콜을 이용하는지에
  관한 정보를 담고 있다.
  
  Ex) 2계층 - MAC주소   , 3계층 - IP주소 , 4계층 - PORT번호
  
  패킷의 헤더정보를 확인하고 들어오는 패킷 ( INPUT )과
  나가는 패킷 ( OUTPUT )과 통과하는 패킷 ( FORWARD ) 등을
  검사하여 허용 및 거부하는 기능을 한다.
  
  
* 체인  

  INPUT체인 : 호스트에 들어온 패킷이 통과하는 곳
  OUTPUT체인 : 나가는 패킷이 통과하는 곳
  FORWARD체인 : 다른 호스트로 전달되는 패킷이 통과하는 곳
  
  
* Target ( 대상 )

- 필터링 규칙에 맞는 패킷에 대한 처리

ACCEPT  : 허용
DROP    : 폐기 ( 거부 메세지 x )
REJECT  : 거부 ( 거부 메세지 o )
LOG     : 로그 출력
  

* 옵션

-A 체인의 마지막에 규칙을 추가
-D 체인의 규칙을 삭제
-P 체인의 정책을 변경
-L  체인의 리스트 출력
-I  체인의 처음에 규칙을 추가
-F  체인의 규칙을 모두 제거


* 규칙

-s 출발지 IP주소/대역
-d 도착지 IP주소/대역
--sport 출발지 포트번호
--dport 도착지 포트번호
-j 타겟
-p 프로토콜 ( icmp , udp , tcp ,all .. )
-i  입력 인터페이스 ( eth0 , bond0 )
-o 출력 인터페이스 ( eth0 , bond0 )
-m state --state상태 패킷상태(ESTABLISHED,NEW,등)


! 실습

@Server-A
#service iptables status // 방화벽의 상태 확인

#iptables -nL // 기존 설정 확인
#iptables -F // 기존 설정 제거
#iptables -nL // 기존 설정 확인


@Serer-B , Client-Linux

#ping 100.100.100.100 // o
#ssh 100.100.100.100 // o

Ex1 ) 모든 패킷 허용 , icmp프로토콜만 거부

@Server-A
#iptables -A INPUT -p icmp -j DROP // INPUT체인에 icmp 프로토콜
   폐기 룰셋 추가

@Serer-B , Client-Linux

#ping 100.100.100.100 // x
#ssh 100.100.100.100 // o


Ex2 ) 모든 패킷 허용 , icmp프로토콜 , ssh 서비스 거부

@Server-A
#iptables -A INPUT -p tcp --dport 22 -j DROP // INPUT체인에 ssh 프로토콜
폐기 룰셋 추가
#iptables -nL

@Serer-B , Client-Linux

#ping 100.100.100.100 // x
#ssh 100.100.100.100 // x


Ex3 ) 모든 패킷 허용 , icmp프로토콜만 거부 (reject)

@Server-A
#iptables -F
#iptables -A INPUT -p icmp -j REJECT // INPUT체인에 icmp 프로토콜
거부 룰셋 추가

@Serer-B , Client-Linux

#ping 100.100.100.100 // x  Destination Port Unreachable
#ssh 100.100.100.100 // o


Ex4 ) 모든 패킷 허용 , icmp프로토콜 , ssh 서비스 거부 ( REJECT )

@Server-A
#iptables -A INPUT -p tcp --dport 22 -j REJECT // INPUT체인에 ssh 프로토콜
거부 룰셋 추가
#iptables -nL

@Serer-B , Client-Linux

#ping 100.100.100.100 // x Destination Port UnReachable
#ssh 100.100.100.100 // x Connection Refuse


Ex5) 기본 정책을 DROP으로 변경
#iptables -F // 기존 설정 제거

#iptables -P INPUT DROP // 기존 정책을 DROP으로 변경
#iptables -nL // 확인

@Server-B , Client-Linux
#ping 100.100.100.100 // x
#ssh 100.100.100.100 // x


Ex6 ) 모든 패킷 거부 , icmp프로토콜만 허가

@Server-A
#iptables -A INPUT -p icmp -j ACCEPT  // icmp프로토콜 허가
#iptables -nL   // 확인


@Server-B , Client-Linux
#ping 100.100.100.100 // o
#ssh 100.100.100.100 // x

  
Ex7 ) 모든 패킷 거부 , icmp프로토콜 , ssh서비스만 허가

@Server-A
#iptables -A INPUT -p tcp --dport 22 -j ACCEPT  // icmp프로토콜 허가
#iptables -nL       // 확인


@Server-B , Client-Linux
#ping 100.100.100.100 // o
#ssh 100.100.100.100 // o
  
  
Ex8) 모든 패킷 거부 , 특정 IP만 허용

@Server-A
#iptables -F
#iptables -A INPUT -s 100.100.100.200 -j ACCEPT
#iptables -nL

@Server-B
#ping 100.100.100.100  // x
#ssh 100.100.100.100 // x

@Client-Linux
#ping 100.100.100.100  // o
#ssh 100.100.100.100 // o


@Server-A
#iptables -F
#iptables -A INPUT -s 100.100.100.250 -j ACCEPT
#iptables -nL

@Server-B
#ping 100.100.100.100  // o
#ssh 100.100.100.100 // o

@Client-Linux
#ping 100.100.100.100  // x
#ssh 100.100.100.100 // x


Ex9) 모든 패킷 거부 , 특정 IP 대역 허가

@Server-A
#iptables -F
#iptables -A INPUT -s 100.100.100.0/24 -j ACCEPT
#iptables -nL

@Server-B
#ping 100.100.100.100  // o
#ssh 100.100.100.100 // o

@Client-Linux
#ping 100.100.100.100  // o
#ssh 100.100.100.100 // o

  
Ex10) OUTPUT 정책 추가

지금까지는 INPUT정책에만 룰셋을 적용 ( OUPUT은 모두 ACCEPT )
통신은 양방향 통신이기 때문에 INPUT과 OUTPUT을 모두 고려해야 한다.

#iptalbes -F
#iptables -A INPUPT -p icmp -j ACCEPT
#iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#iptables -P OUTPUT DROP
#iptables -nL

@Server-B
#ping 100.100.100.100  // x
#ssh 100.100.100.100 // x

@Client-Linux
#ping 100.100.100.100  // x
#ssh 100.100.100.100 // x


Ex11) OUPUT정책 icmp프로토콜 ACCEPT 추가

@Server-A
#iptables -A OUTPUT -p icmp -j ACCEPT
#iptables -nL

@Server-B
#ping 100.100.100.100  // o
#ssh 100.100.100.100 // x

@Client-Linux
#ping 100.100.100.100  // o
#ssh 100.100.100.100 // x


Ex12) OUPUT정책 icmp프로토콜 , SSH서비스  ACCEPT 추가

@Server-A
#iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
#iptables -nL

@Server-B
#ping 100.100.100.100  // o
#ssh 100.100.100.100 // o

@Client-Linux
#ping 100.100.100.100  // o
#ssh 100.100.100.100 // o

'LINUX(Server)' 카테고리의 다른 글

리눅스 정규 표현식 및 입출력 흐름 제어  (0) 2026.01.14
해킹 실무  (2) 2025.06.24
NTP  (0) 2024.04.30
PXE , Kick start  (0) 2024.04.29
DNS  (0) 2024.04.28