태그 보관물: server

SLACK으로 SSH 로그인 알림 확인

서버를 운영하면서 가장 무서운 일은 허가되지 않은 인원이 운영하는 서버에 몰래 접근하여 어떠한 작업을 한다는 것이다.
아무리 보안에 신경을 쓴다고 해도 보안 문제는 쉽게 해결이 되지 않기 때문에 해당 부분에 대해서 누군가 로그인을 한다면 해당 부분에 대한 알림을 통해서 허가 받은 인원이 작업을 하고 있다는 사실을 알기 위해서 슬랙을 통한 알림을 설정한다.

Slack으로 알림을 주기 위한 Web Hook 쉡 스크립트

#!/bin/sh

url="https://hooks.slack.com/services/XXX/YYY/ZZZ" # 슬랙 WebHook으로 설정한 URI
channel="#ssh" # 알림을 받을 SLACK CHANNEL
icon=":dark_sunglasses:" # 알림을 보내는 아이콘 설정
host="`hostname`"

if [ "$PAM_TYPE" != "close_session" ]; then
content="\"attachments\": [ { \"mrkdwn_in\": [\"text\", \"fallback\"], \"fallback\": \"SSH LOGIN: $PAM_USER connected to \`$host\`\", \"text\": \"SSH LOGIN TO \`$host\` \", \"fields\": [ { \"title\": \"USER ID\", \"value\": \"$PAM_USER\", \"short\": true }, { \"title\": \"USER IP\", \"value\": \"$PAM_RHOST\", \"short\": true } ], \"color\": \"#F35A00\" } ]"
curl -X POST --data-urlencode \
      "payload={
        \"channel\": \"$channel\",
        \"mrkdwn\": true,
        \"username\": \"SSH_MONITOR\",
        $content,
        \"icon_emoji\": \"$icon\"
    }" $url &
fi

if [ "$PAM_TYPE" == "close_session" ]; then
content="\"attachments\": [ { \"mrkdwn_in\": [\"text\", \"fallback\"], \"fallback\": \"SSH LOGOUT: $PAM_USER connected to \`$host\`\", \"text\": \"SSH LOGOUT TO \`$host\` \", \"fields\": [ { \"title\": \"USER ID\", \"value\": \"$PAM_USER\", \"short\": true }, { \"title\": \"USER IP\", \"value\": \"$PAM_RHOST\", \"short\": true } ], \"color\": \"#F35A00\" } ]"
curl -X POST --data-urlencode \
      "payload={
        \"channel\": \"$channel\",
        \"mrkdwn\": true,
        \"username\": \"SSH_MONITOR\",
        $content,
        \"icon_emoji\": \"$icon\"
    }" $url &
fi

스크립트 생성 후 실행 권한 부여

sudo chmod +x /etc/ssh/scripts/ssh_notify_to_slack.sh

SSH 로그인시 알림을 실행하기 위한 PAM 등록

SSH의 접속에 대한 세션 샅애값이 변경될 때 알림을 주기 위해서 pam_exec.so를 활용하여 SlackWeb Hook으로 알림을 준다.

sudo echo "session optional pam_exec.so seteuid /etc/ssh/scripts/ssh_notify_to_slack.sh" >> /etc/pam.d/sshd

윈도우에서 Redis 서비스로 설치하기

  1. DownLoad URL
    https://github.com/dmajkic/redis/downloads
  2. 디렉토리 생성
    • 소스위치
      c:\devTools\redis
    • 로그위치
      c:\devTools\redis\log
    • DataBase 위치
      c:\devTools\redis\db
    • 설정파일 위치
      c:\devTools\redis\conf
  3. 설정파일 생성
    • 설정파일 생성(소스파일 폴더에 redis.conf 파일이 존재함)
      c:\devToos\redis\conf\redis.conf
    • BIND 수정(접속할 때 사용할 IP)
      bind 127.0.0.1
    • LOGFILE 위치 설정
      c:\devTools\redis\log\redis.log
    • DIR 위치 설정(DataBase가 생성되는 위치)
      c:\devTools\redis\db\
  4. 윈도우 서비스 실행 등록
    • 실행파일 다운로드
      https://github.com/kcherenkov/redis-windows-service/downloads
    • 서비스 등록
      sc create "REDIS-ST" binpath= "c:\devTools\redis\RedisService_1.1.exe c:\devTools\redis\conf\redis.conf" start= "auto" DisplayName= "REDIS"
    • 서비스 삭제
      sc delete "REDIS-ST"

 

CLIENT 접속

c:\devTools\redis\redis-cli.exe -h ${redis-ip} -p ${redis-port}

 

Cluster

  1. redis 설정파일 생성
    • redis-master.conf
    • redis-slave.conf
  2. redis-master.conf 편집
    • PORT 변경
      7379
    • BIND 변경
      127.0.0.1
    • LOGFILE 이름 변경
      logfile /service/redis/log/redis_master.log
    • DIR 변경(DataBase가 생성되는 위치)
      dir /service/redis/db/
    • DBFILENAME 이름 변경
      dbfilename /service/redis/db/dump_master.rdb
    • SECURITY 섹션에서 requirepass 주석을 풀어주고 비밀번호를 설정
      # requirepass ${password}
  3. redis-slave.conf 편집
    • PORT 변경
      port 8379
    • BIND 변경
      bind 127.0.0.1
    • LOGFILE 이름 변경
      logfile /service/redis/log/redis_master.log
    • DIR 변경(DataBase가 생성되는 위치)
      dir /service/redis/db/
    • DBFILENAME 이름 변경
      dbfilename /service/redis/db/dump_master.rdb
    • SECURITY 섹션에서 requirepass 주석을 풀어주고 비밀번호를 설정
      requirepass ${password}
    • REPLICATION 섹션에서 slaveof 주석을 풀어주고 마스터의 접속정보를 설정
      slaveof ${master-ip} ${master-port}
    • REPLICATION 섹션에서 masterauth 주석을 풀어주고 마스터 접속에 필요한 비밀번호를 설정한다.
      masterauth ${master-password}
    • REPLICATION 섹션에서 repl-ping-slave-period 주석을 풀어주고 마스터와 싱크주기를 설정한다.
      repl-ping-slave-period 10
    • REPLICATION 섹션에서 repl-timeout 주석을 풀어주고 마스터 연결시의 timeout을 설정한다.

      repl-ping-slave-period 보다는 커야된다 

      repl-timeout 60
  4. 윈도우 서비스 실행 등록
    • 마스터 서비스 등록
      sc create "REDIS-MT" binpath= "c:\devTools\redis\RedisService_1.1.exe c:\devTools\redis\conf\redis.conf" start= "auto" DisplayName= "REDIS-MASTER"
    • 마스터 서비스 삭제
      sc delete "REDIS-MT"
    • 슬레이브 서비스 등록
      sc create "REDIS-SL" binpath= "c:\devTools\redis\RedisService_1.1.exe c:\devTools\redis\conf\redis.conf" start= "auto" DisplayName= "REDIS-SLAVE"
    • 슬레이브 서비스 삭제
      sc delete "REDIS-SL"