auditctl -w /usr/bin/ssh -p x -k ssh_exec

 

/usr/bin/ssh 를 감시

 

실행되는 경우 

 

ssh_exec 라는 태그 적용

 

 

 

 

ausearch -k ssh_exec -i

 

ssh_exec 라는 태그가 붙은 로그 출력

 

 

'Linux' 카테고리의 다른 글

ulimit -a  (0) 2025.09.11
차단 IP 조회 쉘 스크립트  (1) 2025.08.11
[shell script] 조건문에 사용되는 연산자  (0) 2025.05.08
/run,tmpfs, journalctl  (0) 2025.03.19
자바 버전 설정 alternatives  (0) 2025.03.11

 

- cor

core file size 프로그램이 크래시 했을 때 생성되는 core dump 파일의 최대 크기
data seq size 프로세스의 데이터 세그먼트(힙 메모리) 크기 제한
scheduling priority 프로세스의 우선순위 값
file size 생성가능한 단일 파일의 최대 크기
pending signals 해당 사용자가 동시에 보낼 수 있는 보류 중인 시그널 수
max locked memory mlock()등을 통해 RAM에 고정 할 수 있는 메모리 크기
max memory size 프로세스가 사용할 수 있는 최대 메모리 크기
open files 한 프로세스가 동시에 열 수 있는 파일 디스크립터 개수
pipe size 파이프(IPC)의 버퍼 크기 512바이트 * 숫자
POSIX message queues POSIX 메시지 큐에서 사용할 수 있는 최대 크기
real-time priority 실시간 스케줄링 우선순위
stack size 스택 메모리 크기 제한
cpu time 프로세스가 사용할 수 있는 cpu 시간 제한
max user processes 한 사용자가 동시에 실행할 수 있는 프로세스 개수
virtual memory 가상 메모리 크기 제한
file locks 파일에 걸 수 있는 lock의 개수

 

 

'Linux' 카테고리의 다른 글

ssh 접속한 사람 잡기  (0) 2026.06.01
차단 IP 조회 쉘 스크립트  (1) 2025.08.11
[shell script] 조건문에 사용되는 연산자  (0) 2025.05.08
/run,tmpfs, journalctl  (0) 2025.03.19
자바 버전 설정 alternatives  (0) 2025.03.11

 

IP 차단 여부를 자주 체크해서 전달해야 하는 일이 있는데,

굳이 우리팀에서 확인해서 알려주지 않아도 되도록 스크립트를 작성했다.

OliveTin에서 실행결과를 출력해주기 때문에

다른팀에서 터미널 접속할 필요없이 OliveTin만 실행해서 결과확인이 가능하게 되었다.

 

 

구성요소는

디렉토리 2개

  • ip_list - 전체 차단 된 ip 목록
  • diff - 이전에 있던 전체 차단 된 ip 목록의 변경사항

쉘 스크립트 1개

  • denied_ip.sh - 실행 스크립트

텍스트 및 기타로그파일 1개

  • target_list.txt - 차단 된 ip 목록 파일의 경로가 적힌 파일

이렇게 구성되어있다.

 

우선

전체 차단 ip 목록을 생성

이후 전체 차단 ip목록 파일을 diff로 비교하여 차이점 발생 시 diff 폴더에 저장

이후 오래된 전체 차단 ip 목록 삭제

 

diff 파일 확인하여 최근 차단된 ip로 표시하여 출력

diff에는 있으나 전체 차단 ip 목록에 없는 경우 차단해제 표시하여 출력

 

 

 

 

 

 

 

#!/bin/bash
cd /root/denied_ip
DATE=$(date '+%Y%m%d_%H:%M:%S')
LOG_DIR="ip_list"
DIFF_DIR="diff"
TMP_DIFF="$DIFF_DIR/tmp_diff.log"

mkdir -p "$LOG_DIR" "$DIFF_DIR"
LOGFILE="denied_ip_$(date '+%Y%m%d_%H%M%S').log"
FULL_PATH="$LOG_DIR/$LOGFILE"

DIFF_FILE="diff_$(date '+%Y%m%d_%H%M%S').log"
DIFF_PATH="$DIFF_DIR/$DIFF_FILE"

target_list="target_list.txt"

# all denied ip listi
echo "###" > "$FULL_PATH"
echo "### iptables" >> "$FULL_PATH"
echo "###" >> "$FULL_PATH"

sudo iptables -L INPUT -n -v | awk 'NR>2 && $1 ~ /^[0-9]+$/ {print $8}' >> "$FULL_PATH"
echo -e "\n\n" >> "$FULL_PATH"

while IFS= read -r SRC
do
  # 빈 줄이나 #로 시작하는 줄 스킵
  case "$SRC" in
    ''|\#*) continue ;;
  esac
  echo "###" >> "$FULL_PATH"
  echo "### $(basename "$SRC")" >> "$FULL_PATH"
  echo "###" >> "$FULL_PATH"
  awk '$1 ~ /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/ { print $1 }' "$SRC" >> "$FULL_PATH"
  echo -e "\n\n" >> "$FULL_PATH"
done < "$target_list"
# compare all denied ip lists
log_files=($(ls -1t "$LOG_DIR"/denied_ip_*.log 2>/dev/null))

if [ ${#log_files[@]} -ge 2 ]; then
    NEW_FILE="${log_files[0]}"
    OLD_FILE="${log_files[1]}"

    diff "$OLD_FILE" "$NEW_FILE" \
      | grep '^>' \
      | grep -v '#' \
      | sed "s/^> \(.*\)/\1 $DATE/" > "$TMP_DIFF"

    # ip diff save
    if grep -qE '([0-9]{1,3}\.){3}[0-9]{1,3}' "$TMP_DIFF"; then
        mv "$TMP_DIFF" "$DIFF_PATH"
    else
        rm -f "$TMP_DIFF"
    fi

    # old diff file remove
    ls -t "$DIFF_DIR"/diff*.log 2>/dev/null | tail -n +7 | xargs -r rm -f
    rm -f "$OLD_FILE"
fi


############################## result
echo "#######################"
echo "### 최근 차단된 IP  ###"
echo "#######################"
diff_files=($(ls -1t "$DIFF_DIR"/diff*.log 2>/dev/null))

if [ ${#diff_files[@]} -gt 0 ]; then
    for file in "${diff_files[@]}"; do
        while read -r ip; do
            # IP 형식만 추출 (예: "pass 1.2.3.4" 또는 "1.2.3.4 YYYYMMDD_HH:MM:SS")
            target_ip=$(echo "$ip" | awk '{print $1}')
            [[ "$target_ip" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(/[0-9]+)?$ ]] || continue

            if grep -qwF "$target_ip" "$FULL_PATH"; then

                echo "차    단$ip"
            else
                echo "차단해제$target_ip"
            fi
        done < "$file"
    done
 #   echo $DIFF_DIR'/'*
else
    echo "there is no file"
fi
echo ""
echo "######################"
echo "### 모든 차단된 IP ###"
echo "######################"
echo ""
cat "$FULL_PATH"
#echo "$(date '+%H:%M:%S.%3N') - $ip"
sleep 0.5s
exit 0

 

'Linux' 카테고리의 다른 글

ssh 접속한 사람 잡기  (0) 2026.06.01
ulimit -a  (0) 2025.09.11
[shell script] 조건문에 사용되는 연산자  (0) 2025.05.08
/run,tmpfs, journalctl  (0) 2025.03.19
자바 버전 설정 alternatives  (0) 2025.03.11

조건문 작성 시

1. 

[ <공백> <내용><공백>]

ex) [ -z "$VAR" ] [ , ] 은 내용과 공백으로 떨어져 있어야 한다.

 

2. 

변수는 반드시 " " 로 감싼다.

ex) [ -z "$VAR" ]

 

3. 

변수형에 맞는 연산자를 사용한다.

 

문자열 비교

연산자 예시 의미
-z if [ -z "$VAR" ] $VAR 변수에 값이 없는 경우 true
-n if [ -s "$VAR" ] $VAR 변수에 값 있는 경우 true
= if [ "$VAR1" = "$VAR2" ] VAR1 VAR2 변수가 같은 경우 true
!= if [ "$VAR1" != "$VAR2" ] VAR1 VAR2 변수가 다른 경우 true

 

정수 비교

연산자 예시 의미
-eq if [ "$VAR1" -eq "$VAR2" ] 
if [ "$VAR1" -eq 10 ]
VAR1이 VAR2과 같으면 true
VAR1이 10이면 true
-ne if [ "$VAR1" -nq "$VAR2" ]  VAR1이 VAR2과 같지 않으면 true
-le if [ "$VAR1" -le "$VAR2" ]  VAR1이 VAR2 보다 작거나 같으면 true
-lt if [ "$VAR1" -lt "$VAR2" ]  VAR1이 VAR2 보다 작으면 true
-ge if [ "$VAR1" -ge "$VAR2" ]  VAR1이 VAR2 보다 크거나 같으면 true
-gt if [ "$VAR1" -gt "$VAR2" ]  VAR1이 VAR2 보다 크면 true

파일관련 비교

연산자 예시 의미
-e  if [ -e "./test" ] test가 존재하면 true
-f if [ -f "./test" ] test가 파일이면 true
-d if [ -d "./test" ] test가 디렉토리면 true
-s if [ -s "./test" ] test의 사이즈가 0이 아니면 true
-r if [ -r FILE ] FILE의 읽기 권한이 있으면 true
-w if [ -w FILE ] FILE의 쓰기 권한이 있으면 true
-x if [ -x FILE ] FILE의 실행 권한이 있으면 true
-L if [ -L FILE ] FILE이 심볼릭 링크면 true
-nt if [ "test1" -nt "test2" ] test1이 test2보다 최신이면 true
-ot if [ "test1" -ot "test2" ] test1이 test2보다 오래되었으면 true

논리 연산

연산자 예시 의미
&& if [ "$VAR1" = "A"] || [ "$VAR2" = "B" ]  VAR1이 A이고 VAR2가 B이면 true(and)
|| if [ "$VAR1" = "A"] || [ "$VAR1" = "B" ]  VAR1 이 A거나 B이면 true (or)
! if [ ! "$VAR" = "test" ] VAR가 test가 아닐때 true (not)

'Linux' 카테고리의 다른 글

ulimit -a  (0) 2025.09.11
차단 IP 조회 쉘 스크립트  (1) 2025.08.11
/run,tmpfs, journalctl  (0) 2025.03.19
자바 버전 설정 alternatives  (0) 2025.03.11
서버 재부팅시 특정 사용자로 스크립트 실행 crontab  (0) 2025.02.19

+ Recent posts