Ssh লগইন সফল হলে আমি কীভাবে একটি ইমেল সতর্কতা সেট আপ করব?


56

কারও কাছে কি এমন বাশ স্ক্রিপ্ট রয়েছে যা কোনও এসএস সার্ভারে সফল লগইন করার ক্ষেত্রে কাউকে ইমেল বা অবহিত করবে? আমার ব্যক্তিগত বাক্সে যদি কেউ লগ ইন করে তবে আমি অবহিত হতে চাই।

আমি উবুন্টু 12.04 চলমান এক্সফেস ব্যবহার করছি

উত্তর:


46

সতর্কতা: মতামত অনুসারে, ব্যবহারকারী নামক কোনও ফাইল তৈরি করে তবে এটি কাজ করে না ~/.ssh/rc*

/etc/ssh/sshrcনিম্নলিখিত সামগ্রীগুলি সংশোধন বা তৈরি করুন :

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`

logger -t ssh-wrapper $USER login from $ip
echo "User $USER just logged in from $ip" | sendemail -q -u "SSH Login" -f "Originator <from@address.com>" -t "Your Name <your.email@domain.com>" -s smtp.server.com &

এসএসএইচ-এর মাধ্যমে যে কোনও সময় লগ ইন করবেন এটি ইমেল দ্বারা কার্যকরভাবে আপনাকে অবহিত করবে, এবং লগইন সিসলগে লগ হবে।

দ্রষ্টব্য: আপনি প্রয়োজন হবে sendemailপ্যাকেজ ( sudo apt-get install sendemail) ইমেল বিজ্ঞপ্তি কাজ করার জন্য।

দ্রষ্টব্য: পোর্ট ফরওয়ার্ডিংয়ের সাথে কাজ করে, তবে -N বিকল্পের সাথে নয়।


ক্লায়েন্ট যদি টিটিওয়াইয়ের অনুরোধ না করে তবে এটি কি কাজ করে? যেমন ssh -Nকেবল পোর্ট ফরওয়ার্ডিং সহ।
gertvdijk

যখন আমরা জিএমএলটি এসএমটিপি সার্ভার হিসাবে ব্যবহার করি তখন এটি কী কাজ করে?
ব্যবহারকারী 155073

এটির একটি সতর্কতা দরকার : ব্যবহারকারী কোনও ফাইল তৈরি করে যদি এটি ~/.ssh/rcসুরক্ষা পরিমাপ হিসাবে একেবারেই অকেজো হয় তবে এটি কাজ করে না । @ অ্যাডোসাইগুয়াস সম্পর্কিত উত্তর pam_execসঠিক।
ফ্রিটজ

2
@ মিচিড: আপনি যদি প্রশ্নটি বিবেচনা করেন তবে "যদি কেউ আমার ব্যক্তিগত বাক্সে লগ ইন করে তবে আমি অবহিত হতে চাই" " , তাহলে এটি গ্রহণযোগ্য হতে পারে। তাহলে আপনি যদি শুধুমাত্র একটি ব্যবহারকারী অ্যাকাউন্ট আছে। অন্যথায় আপনাকে প্রতিটি নতুন যুক্ত হওয়া অ্যাকাউন্ট সহ সমস্ত অ্যাকাউন্টের জন্য এটি করতে হবে । এবং আদর্শভাবে আপনি নিশ্চিত করেছেন যে ব্যবহারকারীরা তাদের ~/.ssh/rcফাইল সংশোধন বা মুছতে পারবেন না । ভিত্তিক সিস্টেম-ভিত্তিক পদ্ধতি ব্যবহার করা pamআরও বেশি নির্ভরযোগ্য এবং নিরাপদ, কারণ কেবল rootএটির সাথেই গোলযোগ হতে পারে। সুতরাং উত্তরটি হল: sshrdপদ্ধতিগুলি একক-ব্যবহারকারী সিস্টেমগুলির জন্য ঠিক আছে, তবে pamপদ্ধতিটি সমস্ত সিস্টেমের জন্য নির্ভরযোগ্যভাবে কাজ করে ।
ফ্রেটজ

70

সতর্কতা: আপনি যখনই লগইন কনফিগারেশন পরিবর্তন করেন ততক্ষণ, ব্যাকগ্রাউন্ডে ব্যাকআপ ssh সেশনটি ছেড়ে দিন এবং একটি নতুন টার্মিনাল থেকে লগইনটি পরীক্ষা করুন।

যেহেতু sshrcব্যবহারকারীর নিজস্ব ~/.ssh/rcফাইল থাকলে পদ্ধতিটি কাজ করে না , আমি pam_exec@ অ্যাডোসাইগুয়াসের পরামর্শ অনুসারে এটি কীভাবে করবেন তা আমি ব্যাখ্যা করব । ভাল কথা হ'ল এটিকে অন্য কোনও sshফাইলের মধ্যে হুক করে সহজেই (যেমন স্থানীয় লগইন বা সমস্ত লগইন হিসাবে) লগইন প্রকারের সাথে সহজেই মানিয়ে নেওয়া যেতে পারে /etc/pam.d/

প্রথমে আপনাকে কমান্ড লাইন থেকে মেল পাঠাতে সক্ষম হতে হবে। এই সম্পর্কে অন্যান্য প্রশ্ন আছে। কোনও মেল সার্ভারে এটি সম্ভবত ইনস্টল করা সবচেয়ে সহজ mailx(যা সম্ভবত ইতিমধ্যে ইনস্টল করা আছে)।

তারপরে আপনার নীচের বিষয়বস্তু সহ একটি এক্সিকিউটেবল স্ক্রিপ্ট ফাইলের প্রয়োজন login-notify.sh( /etc/ssh/উদাহরণ হিসাবে এটি এনেছি )। আপনি ইমেইল বিজ্ঞপ্তির বিষয়বস্তু এবং বিষয়বস্তু পরিবর্তন করতে ভেরিয়েবল পরিবর্তন করতে পারেন। chmod +x login-notify.shএটাকে এক্সিকিউটেবল করার জন্য এক্সিকিউট করতে ভুলবেন না ।

#!/bin/sh

# Change these two lines:
sender="sender-address@example.com"
recepient="notify-address@example.org"

if [ "$PAM_TYPE" != "close_session" ]; then
    host="`hostname`"
    subject="SSH Login: $PAM_USER from $PAM_RHOST on $host"
    # Message to send, e.g. the current environment variables.
    message="`env`"
    echo "$message" | mailx -r "$sender" -s "$subject" "$recepient"
fi

এটি একবার হয়ে গেলে আপনি নীচের লাইনটি এতে যুক্ত করতে পারেন /etc/pam.d/sshd:

session optional pam_exec.so seteuid /path/to/login-notify.sh

পরীক্ষার উদ্দেশ্যে, মডিউলটি এতে অন্তর্ভুক্ত করা হয়েছে optional, যাতে এক্সিকিউশন ব্যর্থ হলে আপনি এখনও লগ ইন করতে পারেন। পরে আপনি কি নিশ্চিত যে এটি কাজ করে প্রণীত, আপনি পরিবর্তন করতে পারেন optionalথেকে required। তারপরে আপনার হুক স্ক্রিপ্টটির সম্পাদনা সফল না হলে লগইন সম্ভব হবে না (যদি আপনি এটি চান তবে)।

আপনারা যারা পিএএম কী এবং কীভাবে এটি কাজ করে তার একটি ব্যাখ্যা প্রয়োজন, এখানে একটি খুব ভাল


1
এটি বলেছে: /etc/ssh/login-notify.sh failed: exit code 13লগইনের ঠিক পরে :(
ফেলিকজেড

3
ধন্যবাদ, এটি দুর্দান্ত কাজ করে। আপনার sshd_config এ আপনি UsePAMসেট করেছেন তা নিশ্চিত yesকরুন।
নিকোলাস বাদিয়া

2
আমার বা সেলিনাক্সে নতুন যারা অন্যদের কাছে কেবল একটি নোট। পাম_এক্সেক স্ক্রিপ্টটি চালানোর সময় আমি একটি অনুমতি ত্রুটি পেয়েছি। পরে আমি জানতে পেরেছিলাম যে এটি সেলিনাক্সের জন্য ভুলভাবে লেবেল করা হয়েছিল। আমি স্ক্রিপ্টটি ক্লোন করেছি / বিন / যা স্বয়ংক্রিয়ভাবে লেবেল হবে unconfined_u:object_r:bin_t:s0। তারপরে আমি chmod +x /bin/login-notify.shএবং এটি কাজ করে।
রেডজিয়ান্ট

3
/etc/pam.d/login <- টিটি লগইনের জন্য
ফার্নান্দো আন্দ্রে

2
@ 4wk_ ইঙ্গিতটির জন্য ধন্যবাদ। আমি এটিকে ইন্টারনেট সংরক্ষণাগারের লিঙ্ক দিয়ে প্রতিস্থাপন করেছি, সুতরাং এখনই এটি কাজ করা উচিত।
ফ্রেটজ

9

আমরা আমাদের লিনাক্স বাক্সগুলিতে প্রক্রিয়াগুলি নিরীক্ষণের জন্য মনিট ব্যবহার করে যাচ্ছিমনিট এসএমএস-এর মাধ্যমে সফল লগিনগুলিতে ইমেলগুলি দ্বারাও সতর্ক করতে পারে। আমাদের মনিট কনফিগারেশনটি এর মতো দেখাচ্ছে

 check file ssh_logins with path /var/log/auth.log  
     # Ignore login's from whitelist ip addresses
     ignore match "100.100.100.1"    
     # Else, alert
     if match "Accepted publickey" then alert

দ্রষ্টব্য: মেলসারভার কনফিগারেশন, ইমেল ফর্ম্যাট ইত্যাদি monitrcফাইলটিতে সেট করা উচিত

আপডেট করুন: আরো বিস্তারিত লিখেছেন ব্লগ পোস্টে এই


7

নিম্নলিখিতটি লিখুন /etc/profile:

if [ -n "$SSH_CLIENT" ]; then 
    TEXT="$(date): ssh login to ${USER}@$(hostname -f)" 
    TEXT="$TEXT from $(echo $SSH_CLIENT|awk '{print $1}')" 
    echo $TEXT|mail -s "ssh login" you@your.domain 
fi

স্ক্রিপ্টটি কীভাবে কাজ করে

/etc/profileপ্রতিটি লগইন (ব্যাশ শেল ব্যবহারকারীদের জন্য) চালানো হয়। যদি ব্যবহারকারী এসএসএসের মাধ্যমে লগ ইন করে থাকে তবে যদি বিবৃতিটি ইন্ডেন্টড কোড ব্লকটি চালিত করতে পারে তবেই সত্যটি ফিরে আসবে।

এরপরে, আমরা বার্তার পাঠ্যটি তৈরি করব:

  • $(date)dateকমান্ডের আউটপুট দ্বারা প্রতিস্থাপন করা হবে
  • ${USER} ব্যবহারকারীর লগইন নাম দ্বারা প্রতিস্থাপন করা হবে
  • $(hostname -f) লগ ইন করা সিস্টেমের সম্পূর্ণ হোস্টনাম দ্বারা প্রতিস্থাপন করা হবে

দ্বিতীয় TEXTলাইনটি প্রথমটিতে যুক্ত করে, এই ব্যবহারকারীটির লগ ইন করা সিস্টেমটির আইপি ঠিকানা প্রদান করে। শেষ অবধি, উত্পন্ন পাঠ্যটি আপনার ঠিকানায় একটি ইমেলের মাধ্যমে প্রেরণ করা হয়।

সংক্ষিপ্তসার লিনাক্স, ডিফল্টরূপে, প্রতিটি লগইন সিস্টেমের লগ ফাইলগুলিতে ssh দ্বারা বা না হওয়া রেকর্ড করে, তবে কখনও কখনও - বিশেষত এমন সিস্টেমে যা খুব কমই ssh এর মাধ্যমে অ্যাক্সেস করা যায় - দ্রুত এবং নোংরা বিজ্ঞপ্তি কার্যকর হতে পারে।


2

এই অন্যান্য প্রশ্নের মধ্যে আপনার সম্ভবত যা খুঁজছেন তা আপনার কাছে রয়েছে। মূলত আপনি স্ক্রিপ্টে মেল কমান্ডটিতে একটি কল যুক্ত করতে পারেন যা কোনও ব্যবহারকারী ssh: /etc/pam.d/sshd এর মাধ্যমে লগ ইন করলে চালানো হয়


2

আমি এই থ্রেড থেকে চমত্কার উত্তর নিয়েছি এবং এমন কিছু তৈরি করেছি যা কম-বেশি-অনুলিপি-এবং-পেষ্টযোগ্য। এটি ইমেলগুলি প্রেরণ করতে মেলগান ব্যবহার করে যাতে আপনি এসটিএমপি স্থাপনে কোনও সমস্যা থেকে রক্ষা পান। আপনার কেবল একটি মেলগান এপিআই কী এবং প্রেরণকারী ডোমেন দরকার।

এসএসএইচ লগইন করার পরে, স্ক্রিপ্টটি কোনও ইমেল ঠিকানায় লগইন (ব্যবহারকারী, হোস্টনাম, আইপি ঠিকানা এবং সমস্ত বর্তমান পরিবেশের ভেরিয়েবল) সম্পর্কিত বিশদ প্রেরণ করবে। messageভেরিয়েবলটি কাস্টমাইজ করে আপনি যে প্যারামিটারগুলি প্রেরণ করতে চান তা যুক্ত করা সহজ ।

#!/bin/sh

# this script is triggered on SSH login and sends an email with details of the login
# such as user, IP, hostname, and environment variables

# script should be placed somewhere on the server, eg /etc/ssh
# to trigger on SSH login, put this line in /etc/pam.d/sshd:
#   session optional pam_exec.so seteuid /etc/ssh/snippet-for-sending-emails-on-SSH-login-using-PAM.sh

# Script settings
MAILGUN_API_KEY=
MAILGUN_DOMAIN=
SENDER_NAME=
SENDER_EMAIL_ADDRESS=
RECIPIENT_EMAIL_ADDRESS=

if [ "$PAM_TYPE" != "close_session" ]; then
    host=$(hostname)
    ip=$(dig +short myip.opendns.com @resolver1.opendns.com) # gets public IP
    # Message to send, e.g. the current environment variables.
    subject="SSH login - user:$USER pam-host:$PAM_RHOST host:$host ip:$ip" \
    message=$(env)
    curl -s --user '$MAILGUN_API_KEY' \
        https://api.mailgun.net/v3/$MAILGUN_DOMAIN/messages \
        -F from='$SENDER_NAME <$SENDER_EMAIL_ADDRESS>' \
        -F to=$RECIPIENT_EMAIL_ADDRESS \
        -F subject="$subject" \
        -F text="${subject} ${message}"
fi

এটি আমার মতে সেরা উত্তর। এটি সহজ এবং মেশিন থেকে কোনও ইমেল প্রেরণের প্রয়োজন নেই, যা সঠিকভাবে কনফিগার করা না থাকলে স্প্যাম ফোল্ডারে অবশ্যই শেষ হবে।
JayD3e

2

@ ফ্রিজ উত্তর উত্তর মেলগান অভিযোজন

পোস্ট করার পরে আমি লক্ষ্য করেছি @ পাচারানিও মেলগান সম্পর্কে লিখেছেন, তবে তারা খনন দিয়ে কী করছে তা আমি বুঝতে পারি না, তাই আমি আমার সমাধানও পোস্ট করব।

আপনি যদি কোনও ভিএম-তে থাকেন যাতে এসএমটিপি নেই, আপনার মেলগান, সেন্ডগ্রিড বা এর মতো কিছু ব্যবহার করতে হবে। এটি গুগল ক্লাউডে আমার জন্য কাজ করেছে।

এই পদ্ধতির একটি ঝুঁকি হ'ল কোনও আক্রমণকারী যদি আপনার বহির্গামী ইমেল শংসাপত্র প্রেরণ করতে পারে তবে তারা sudo suস্ক্রিপ্টটি খুঁজে পেতে পারে বা আপনি ইমেল পাঠযোগ্যযোগ্য প্রেরণের জন্য স্ক্রিপ্টটি রেখে যান। মেলগানের একটি আইপি শ্বেত তালিকা রয়েছে যা আপনার সেট আপ করা উচিত, তবে এটি অবশ্যই এই নির্দিষ্ট ব্যবহারের ক্ষেত্রে অসম্পূর্ণ।

mydomain.comআপনি আপনার আসল ডোমেনে পরিবর্তন করার পরে এই স্ক্রিপ্টটি মেলগানের সাথে কাজ করবে । আপনি স্ক্রিপ্টটি /root/login-alert.shবা আরও কিছু অস্পষ্ট স্থানে সংরক্ষণ করতে পারেন ।

#!/bin/bash
if [ "$PAM_TYPE" != "close_session" ]; then
    APK='api:your-mailgun-api-key-goes-here' 
    FROM='Login Alert <mailgun@mg.mydomain.com>'
    TO='me@mydomain.com'  
    SUBJECT="Login: $PAM_USER @ mydomain.com from $PAM_RHOST"
    DATE=$(date)
    TEXT="At $DATE a login occurred for $PAM_USER on mydomain.com from $PAM_RHOST"
    curl -s --user $APK \
     https://api.mailgun.net/v3/mg.mydomain.com/messages \
     -F from="$FROM" \
     -F to="$TO" \
     -F subject="$SUBJECT" \
     -F text="$TEXT"
fi

এর পরে /etc/pam.d/sshdআপনি অন্তর্ভুক্ত করার পরিবর্তে @ ফ্রিজ উত্তর অনুসরণ করতে পারেন :

session optional pam_exec.so seteuid /root/login-alert.sh

আমি নোট করেছি এটি আগত ব্যবহারকারীদের জন্য কোনও পঠনের অনুমতি নিয়ে কাজ করে ( chmod 700 /root/login-alert.sh) তাই আগত ব্যবহারকারীদের স্ক্রিপ্টে পঠনের অ্যাক্সেস থাকা দরকার না।


1

এই স্ক্রিপ্টটি /etc/ssh/sshrcএকটি ইমেল প্রেরণ করে এবং সিস্টেম লগারে একটি লগ যুক্ত করে। আপনার ব্যক্তিগত সাবনেট এবং ওয়ার্ল্ড ওয়াইড ওয়েব (প্রয়োজনীয় sudo apt-get install mailutils) এর মধ্যে একটি পার্থক্য তৈরি হয়েছে (যাতে আপনি চাইলে এটি অক্ষম করতে পারেন )।

SUBNET="192.168.0"

IP=`echo $SSH_CONNECTION | cut -d " " -f 1`
CURRENT_SUBNET="$(echo $IP|cut -d'.' -f1-3)"
if [ "$CURRENT_SUBNET" = "$SUBNET" ]; then
        msg="This message comes from same subnet! User $USER just logged in from $IP"
        echo $msg|mail -s "$msg" root
else
        msg="This message comes from different subnet! User $USER just logged in from $IP"
        echo $msg|mail -s "$msg" root
fi

logger -t ssh-wrapper $USER login from $IP

1

আমি /var/log/auth.log ইন " ব্যর্থ " (কেস সংবেদনশীল) শব্দটি সম্বলিত কোনও লাইন পর্যবেক্ষণ করতে সোয়াচ প্যাকেজ থেকে স্বাচডগ ব্যবহার করছি । আমি এটিকে একটি সাধারণ সিস্টেমড পরিষেবা হিসাবে চালানোর জন্য সেট আপ করেছি

apt install swatch

মালিকের মূল, অনুমতি 644 সহ একটি কনফিগার ফাইল /etc/swatch/swatch-auth-log.conf তৈরি করুন -

watchfor /fail/i
  pipe /usr/local/sbin/sendmail -t auth.log@xxx.com

"/ ব্যর্থ / আমি" , কোন RegExp হয় "আমি" ইঙ্গিত করে যে এই কেস অসংবেদী সঙ্গে। (আমার সেন্ডমেল হ'ল একটি স্ক্রিপ্ট যা মেলগুনের মাধ্যমে একটি নির্দিষ্ট ঠিকানায় সমস্ত কিছু প্রেরণ করে , তাই ঠিকানাটি আসলে কোনও ব্যাপার নয়)।

মালিকের মূলের সাথে অনুমতি নিয়ে একটি সিস্টেমযুক্ত পরিষেবা ফাইল /etc/systemd/system/swatch-auth-log.service তৈরি করুন 4৪৪ -

[Unit]
Description=monitor /var/log/auth.log, send fail notices by mail

[Service]
ExecStart=/usr/bin/swatchdog -c /etc/swatch/swatch-auth-log.conf -t /var/log/auth.log

[Install]
#WantedBy=multi-user.target
WantedBy=pre-network.target

তারপরে পরিষেবাটির স্থিতি সক্ষম, শুরু এবং দেখুন -

sudo systemctl enable swatch-auth-log.service
sudo systemctl start swatch-auth-log.service
sudo systemctl status swatch-auth-log.service

একটি সফল স্থিতি প্রতিবেদনের উদাহরণ -

 swatch-auth-log.service - monitor /var/log/auth.log, send fail notices by mail
   Loaded: loaded (/etc/systemd/system/swatch-auth-log.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2019-01-31 21:41:52 PST; 17min ago
 Main PID: 27945 (swatchdog)
    Tasks: 3 (limit: 4915)
   CGroup: /system.slice/swatch-auth-log.service
           ├─27945 /usr/bin/perl /usr/bin/swatchdog -c /etc/swatch/swatch-auth-log.conf -t /var/log/auth.log
           ├─27947 /usr/bin/perl /.swatchdog_script.27945
           └─27949 /usr/bin/tail -n 0 -F /var/log/auth.log

Jan 31 21:41:52 ub18 systemd[1]: Started monitor /var/log/auth.log, send fail notices by mail.
Jan 31 21:41:52 ub18 swatchdog[27945]: *** swatchdog version 3.2.4 (pid:27945) started at Thu Jan 31 21:41:52 PST 2019

সেবা বুটে স্বয়ংক্রিয়ভাবে শুরু দ্বারা monitor করা হবে systemd হল


আলোচনা

মূলত আমি একটি ব্যবহৃত পাম সমাধান উপরে অনুরূপ, কিন্তু /etc/pam.d/common-auth না sshd । এটি ছিল ssh, সুডো এবং লগইনগুলি ধরা। তবে আপডেটের পরে আমার সমস্ত পাসওয়ার্ডগুলি রেসকিউ মোডে পাসওয়ার্ড পরিবর্তন করার পরেও কাজ করা বন্ধ করে দিয়েছে। অবশেষে আমি /etc/pam.d/common-auth কে আবার মূল এবং পাসওয়ার্ডগুলিতে ফিরিয়ে আনলামস্ট্যাক এক্সচেঞ্জ ইউনিক্স এবং লিনাক্স বোর্ডের একটি বিবরণ এখানে

আমি স্থির করেছি যে সুরক্ষা সেটিংস বুঝতে অসুবিধে না করা নিরাপদ হবে। এবং সবকিছু লগ ফাইলগুলিতে যাইহোক।


0

আমি আসলে @ সিরচর্লো উত্তরটি পরিবর্তন করেছি

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`

logger -t ssh-wrapper $USER login from $ip
echo "User $USER just logged in from $ip" | mail -s "SSH Login" "who to <who-to@youremail.com>" &

এটি 14.04, 16.04 এবং Centos 6.5.x সার্ভারগুলিতে আমি সেটআপ করেছি, আমি নিশ্চিত যে আপনাকে এমটিএ কনফিগার করা হয়েছে তা নিশ্চিত করা দরকার, তবে একবার এটি হয়ে গেলে, এটি একটি মোহন কাজ করে। পরবর্তী পদক্ষেপ টিউলিও সতর্কতা

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.