-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun_dlp.sh
More file actions
executable file
·138 lines (117 loc) · 4.5 KB
/
run_dlp.sh
File metadata and controls
executable file
·138 lines (117 loc) · 4.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/bin/bash
# ==============================================================================
# [환경 변수 정의]
# ==============================================================================
PROXY_USER="mitm"
PROXY_PORT=8080
CONF_DIR="/home/$PROXY_USER/.mitmproxy"
DLP_SCRIPT="dlp_proxy.py"
RULE_FILE="sensitive_info.json"
LOG_FILE="dlp.log"
CURRENT_DIR=$(pwd)
# ==============================================================================
# [유틸리티 함수]
# ==============================================================================
function log_info {
echo -e "\033[32m[*]\033[0m $1"
}
function log_error {
echo -e "\033[31m[!]\033[0m $1"
}
function check_root {
if [ "$EUID" -ne 0 ]; then
log_error "root 권한으로 실행해야 합니다. (sudo ./run_dlp.sh)"
exit 1
fi
}
function cleanup {
echo ""
echo "=========================================="
log_info "DLP Proxy를 종료합니다."
log_info "iptables 규칙을 초기화합니다..."
iptables -t nat -F
log_info "설정이 원상복구 되었습니다. 인터넷이 정상적으로 작동합니다."
echo "=========================================="
}
# ==============================================================================
# [핵심 기능 함수]
# ==============================================================================
function setup_user() {
if id "$PROXY_USER" &>/dev/null; then
log_info "사용자 '$PROXY_USER'가 이미 존재합니다."
else
log_info "사용자 '$PROXY_USER'를 생성합니다..."
useradd -r -m $PROXY_USER
fi
}
function setup_permissions() {
# 1. 설정 디렉토리 생성 및 권한 부여
if [ ! -d "$CONF_DIR" ]; then
log_info "설정 디렉토리($CONF_DIR)를 생성합니다..."
mkdir -p "$CONF_DIR"
fi
chown -R $PROXY_USER:$PROXY_USER "$CONF_DIR"
# 2. 스크립트 실행 권한 부여
log_info "스크립트 파일 권한을 조정합니다..."
chmod 644 "$CURRENT_DIR/$DLP_SCRIPT" "$CURRENT_DIR/$RULE_FILE" 2>/dev/null
# 3. 로그 파일 생성 및 권한 부여 (Permission Denied 방지)
FULL_LOG_PATH="$CURRENT_DIR/$LOG_FILE"
if [ ! -f "$FULL_LOG_PATH" ]; then
touch "$FULL_LOG_PATH"
fi
chown $PROXY_USER:$PROXY_USER "$FULL_LOG_PATH"
chmod 666 "$FULL_LOG_PATH"
log_info "로그 파일($LOG_FILE) 권한 설정 완료."
}
function generate_and_trust_cert() {
CERT_FILE="$CONF_DIR/mitmproxy-ca-cert.pem"
if [ -f "$CERT_FILE" ]; then
log_info "기존 인증서($CERT_FILE)를 발견했습니다. 재사용합니다."
else
log_info "인증서 파일이 없습니다. 새로 생성합니다..."
sudo -u $PROXY_USER mitmdump --mode transparent --set confdir="$CONF_DIR" &
MITM_PID=$!
sleep 5
kill $MITM_PID
wait $MITM_PID 2>/dev/null
log_info "새로운 인증서가 생성되었습니다."
fi
log_info "인증서를 시스템 신뢰 목록에 동기화합니다..."
cp "$CERT_FILE" /usr/local/share/ca-certificates/mitmproxy.crt
chmod 644 /usr/local/share/ca-certificates/mitmproxy.crt
update-ca-certificates > /dev/null
log_info "시스템 인증서 동기화 완료."
}
function setup_iptables() {
log_info "iptables 규칙을 설정합니다 (80, 443 -> $PROXY_PORT)..."
iptables -t nat -F
iptables -t nat -A OUTPUT -p tcp --dport 80 -m owner ! --uid-owner $PROXY_USER -j REDIRECT --to-port $PROXY_PORT
iptables -t nat -A OUTPUT -p tcp --dport 443 -m owner ! --uid-owner $PROXY_USER -j REDIRECT --to-port $PROXY_PORT
log_info "규칙 적용 완료."
}
function run_proxy() {
echo "=========================================="
log_info "DLP Proxy가 실행 중입니다."
log_info "인증서 위치: $CONF_DIR"
log_info "종료하려면 Ctrl+C를 누르세요."
echo "=========================================="
sudo -u $PROXY_USER mitmdump \
--mode transparent \
--showhost \
--set confdir="$CONF_DIR" \
-p $PROXY_PORT \
-s "$DLP_SCRIPT"
}
# ==============================================================================
# [메인 실행 흐름]
# ==============================================================================
check_root
trap cleanup EXIT
echo "=========================================="
echo " DLP Transparent Proxy Setup "
echo "=========================================="
setup_user
setup_permissions
generate_and_trust_cert
setup_iptables
run_proxy