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 |