Application 구동 환경에서 특정 시점에 network 이슈가 발생으로 packet 전송이 늦어지는 경우를 대비하여 종종 response timeout을 두어 exception 처리를 해달라고 개발 요구사항을 내는 경우가 있다. 그런 경우 특정 설정값 또는 default 설정값대로 동작을 잘 하는지 확인을 해야하는데, 간단한 연동 구조인 경우 dummy server를 만들어서 특정 api의 response 전 sleep을 길게 주는 형태로 테스트를 한다. 하지만 dummy server를 만들기 좀 까다롭거나 좀 더 테스트를 빠르게 하기 위해서 iptables의 string pattern match filtering을 사용하면 어떨까? 하는 생각이 들어 string match에 대한 단위 테스트를 해보았다.
* 테스트 환경 : CentOS7
* 참고 man 페이지 :
man iptables
man iptables-extensions
서버 준비
server.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/ping")
def read_root():
return {"pong"}
@app.get("/myname")
def read_root():
return {"jinakim"}
Request | Response |
GET http://localhost:9090/ping | ["pong"] |
GET http://localhost:9090/myname | ["jinakim"] |
Request URL에 포함된 string으로 차단
1. "name"이 포함된 9090 port로 인입되는 packet을 차단하도록 설정
iptables -I INPUT -p tcp --dport 9090 -m string --string "name" --algo bm -j DROP
2. GET http://localhost:9090/ping 요청 -> 성공
3. GET http://localhost:9090/myname 요청 -> 응답 대기 상태로 멈춰있음
4. 설정한 방화벽을 해제하고 다시 GET http://localhost:9090/myname 요청 -> 성공
iptables -D INPUT -p tcp --dport 9090 -m string --string "name" --algo bm -j DROP
Response Body에 포함된 string으로 차단
1. "pong"이 포함된 9090 port에서 인입되는 packet을 차단하도록 설정
iptables -I INPUT -p tcp --sport 9090 -m string --string "pong" --algo bm -j DROP
2. GET http://localhost:9090/ping 요청 -> 응답 대기 상태로 멈춰있음
3. GET http://localhost:9090/myname 요청 -> 성공
4. 설정한 방화벽을 해제하고 다시 GET http://localhost:9090/ping 요청 -> 성공
iptables -D INPUT -p tcp --sport 9090 -m string --string "pong" --algo bm -j DROP
'Engineering > Network' 카테고리의 다른 글
[tcpdump] 덤프 파일 사이즈가 커서 wireshark로 열리지 않는 경우를 대비하여 pcap 파일 분할하여 저장하기 (0) | 2024.01.10 |
---|---|
iptables 활용하여 Connection timeout, Response timeout 테스트 하기 (0) | 2022.04.04 |
docker 사용 시, iptables 로 방화벽 설정하기 (DOCKER-USER Chain) (0) | 2021.11.29 |
wireshark : display filter로 원하는 protocol, ip, port 만 filtering 하기 (0) | 2021.08.16 |
[tcpdump] 네트워크 패킷 캡쳐하기 (자주 사용하는 옵션 정리) (0) | 2021.07.25 |
댓글