misc/ssh_tg_notify: Added cache to send fewer notifications

- per IP only once in the next 4 hours
master
Felix Stupp 3 years ago
parent 2e71da368b
commit 08e91883b3
Signed by: zocker
GPG Key ID: 93E1BD26F6B02FB7

@ -1,6 +1,8 @@
--- ---
notify_script: "{{ global_deployment_directory }}/ssh_notify/telegram.sh" notify_directory: "{{ global_deployment_directory }}/ssh_notify"
notify_script: "{{ notify_directory }}/telegram.sh"
notify_cache_directory: "{{ notify_directory }}/cache"
# recipient_id # recipient_id
bot_key: "{{ global_telegram_server_bot_key }}" bot_key: "{{ global_telegram_server_bot_key }}"

@ -7,13 +7,16 @@
- curl - curl
- gawk - gawk
- name: Create directory for notify script - name: Create directories for notify script
file: file:
state: directory state: directory
path: "{{ notify_script | dirname }}" path: "{{ item }}"
owner: root owner: root
group: root group: root
mode: u=rwx,g=rx,o= mode: u=rwx,g=rx,o=
loop:
- "{{ notify_directory }}"
- "{{ notify_cache_directory }}"
- name: Install notify script - name: Install notify script
template: template:

@ -1,13 +1,22 @@
#!/bin/bash #!/bin/bash
# Modified version, original source: https://gitlab.com/snippets/1871482#note_188602535 # Modified version, original source: https://gitlab.com/snippets/1871482#note_188602535
CACHE_DIR={{ notify_cache_directory | quote }}
USERID={{ recipient_id | quote }} USERID={{ recipient_id | quote }}
KEY={{ bot_key | quote }} KEY={{ bot_key | quote }}
TIMEOUT={{ timeout | quote }} TIMEOUT={{ timeout | quote }}
URL="https://api.telegram.org/bot$KEY/sendMessage" URL="https://api.telegram.org/bot$KEY/sendMessage"
if [[ "$PAM_SERVICE" == "sshd" && "$PAM_TYPE" == "open_session" && "$PAM_USER" != "git" && -z "$TMUX" ]]; then if [[ "$PAM_SERVICE" == "sshd" && "$PAM_TYPE" == "open_session" && "$PAM_USER" != "git" && -z "$TMUX" ]]; then
IP="$PAM_RHOST" IP="$PAM_RHOST"
cache_file="$CACHE_DIR/$IP"
cache_mtime=$(stat --format="%Y" "$cache_file")
current_time=$(date +%s)
touch "$cache_file"
if (( cache_mtime > (current_time - 4*60*60) )); then
exit 0
fi
HOSTNAME=$(hostname --fqdn) HOSTNAME=$(hostname --fqdn)
TEXT="Successful login from [$IP](https://ipinfo.io/$IP) for ${PAM_USER} @ ${HOSTNAME} ($(date "+%Y-%m-%d %H:%M"))" TEXT="Successful login from [$IP](https://ipinfo.io/$IP) for ${PAM_USER} @ ${HOSTNAME} ($(date "+%Y-%m-%d %H:%M"))"
curl -s --max-time "$TIMEOUT" -d "chat_id=$USERID" -d "disable_web_page_preview=1" -d "parse_mode=Markdown" -d "text=$TEXT" "$URL" > /dev/null curl -s --max-time "$TIMEOUT" -d "chat_id=$USERID" -d "disable_web_page_preview=1" -d "parse_mode=Markdown" -d "text=$TEXT" "$URL" > /dev/null

Loading…
Cancel
Save