smtp-check
This commit is contained in:
Executable
+63
@@ -0,0 +1,63 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function usage {
|
||||||
|
echo 'usage: <SERVER> [USERNAME PASSWORD]'
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function connect_server {
|
||||||
|
openssl s_client -starttls smtp -connect "$server:587" -ign_eof 2>/dev/null <<EOF
|
||||||
|
quit
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
function auth_server {
|
||||||
|
base64=$(echo -ne "\0$username\0$password" | base64)
|
||||||
|
openssl s_client -starttls smtp -connect "$server:587" -ign_eof 2>/dev/null <<EOF
|
||||||
|
ehlo .
|
||||||
|
auth plain $base64
|
||||||
|
quit
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_smtp_connection {
|
||||||
|
echo -n "check smtp server <$server> port 587 ... "
|
||||||
|
if connect_server | grep -q CONNECTED; then
|
||||||
|
echo SUCCESS
|
||||||
|
else
|
||||||
|
echo FAILURE && exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_smtp_auth {
|
||||||
|
echo -n "check smtp authentication <$server> port 587 username=<$username> ... "
|
||||||
|
set +e
|
||||||
|
output=$(auth_server)
|
||||||
|
if echo "$output" | grep -q CONNECTED; then
|
||||||
|
if echo "$output" | grep -q "Authentication successful"; then
|
||||||
|
echo OK
|
||||||
|
else
|
||||||
|
echo wrong username or password! && exit 2
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo wrong server connection! && exit 1
|
||||||
|
fi
|
||||||
|
set -e
|
||||||
|
}
|
||||||
|
|
||||||
|
### MAIN
|
||||||
|
|
||||||
|
set -Eeuo pipefail
|
||||||
|
|
||||||
|
server=${1:-}
|
||||||
|
username=${2:-}
|
||||||
|
password=${3:-}
|
||||||
|
|
||||||
|
[[ -z "$server" ]] && usage
|
||||||
|
|
||||||
|
if [[ -z "$username" ]]; then
|
||||||
|
check_smtp_connection
|
||||||
|
else
|
||||||
|
[[ -z "$password" ]] && usage
|
||||||
|
check_smtp_auth
|
||||||
|
fi
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
username=postmaster@mangue-et-solidaire.re
|
|
||||||
password=
|
|
||||||
base64=$(echo -ne "\0$username\0$password" | base64)
|
|
||||||
|
|
||||||
openssl s_client -starttls smtp -connect mail1.zourit.net:587 -ign_eof <<EOF | grep "Authentication successful"
|
|
||||||
ehlo mangue-et-solidaire.re
|
|
||||||
auth plain $base64
|
|
||||||
quit
|
|
||||||
EOF
|
|
||||||
@@ -7,50 +7,49 @@ result=0
|
|||||||
|
|
||||||
function usage {
|
function usage {
|
||||||
echo 'usage: <DOMAIN> [ https | 443 | smtps | 587 | pop3 | 993 | imap | 995 | ALL ]'
|
echo 'usage: <DOMAIN> [ https | 443 | smtps | 587 | pop3 | 993 | imap | 995 | ALL ]'
|
||||||
exit -1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
function check_ssl {
|
function check_ssl {
|
||||||
local protocol=$1
|
local protocol=$1
|
||||||
case $protocol in
|
case $protocol in
|
||||||
SMTPS )
|
SMTPS)
|
||||||
local extra="-starttls smtp -showcerts"
|
local extra="-starttls smtp -showcerts"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
echo -n "$protocol "
|
|
||||||
|
|
||||||
|
echo -n "$protocol "
|
||||||
|
|
||||||
certificate_info=$(echo | timeout $TIMEOUT openssl s_client $extra -connect $DOMAIN:$2 2>/dev/null)
|
certificate_info=$(echo | timeout $TIMEOUT openssl s_client $extra -connect $DOMAIN:$2 2>/dev/null)
|
||||||
|
|
||||||
issuer=$(echo "$certificate_info" | openssl x509 -noout -text 2>/dev/null | grep Issuer: | cut -d: -f2)
|
issuer=$(echo "$certificate_info" | openssl x509 -noout -text 2>/dev/null | grep Issuer: | cut -d: -f2)
|
||||||
date=$( echo "$certificate_info" | openssl x509 -noout -enddate 2>/dev/null | cut -d'=' -f2)
|
date=$(echo "$certificate_info" | openssl x509 -noout -enddate 2>/dev/null | cut -d'=' -f2)
|
||||||
date_s=$(date -d "${date}" +%s)
|
date_s=$(date -d "${date}" +%s)
|
||||||
now_s=$(date -d now +%s)
|
now_s=$(date -d now +%s)
|
||||||
date_diff=$(( (date_s - now_s) / 86400 ))
|
date_diff=$(((date_s - now_s) / 86400))
|
||||||
|
|
||||||
if [[ -z $date ]]; then
|
if [[ -z $date ]]; then
|
||||||
echo -n "does not respond "
|
echo -n "does not respond "
|
||||||
echo -ne "\033[31;1m"
|
echo -ne "\033[31;1m"
|
||||||
echo FAILURE
|
echo FAILURE
|
||||||
(( result += 1 ))
|
((result += 1))
|
||||||
elif [[ $date_diff -gt 20 ]]; then
|
elif [[ $date_diff -gt 20 ]]; then
|
||||||
echo -n "issuer:$issuer "
|
echo -n "issuer:$issuer "
|
||||||
echo -n "will expire in $date_diff days "
|
echo -n "will expire in $date_diff days "
|
||||||
echo -ne "\033[32;1m"
|
echo -ne "\033[32;1m"
|
||||||
echo ok
|
echo ok
|
||||||
elif [[ $date_diff -gt 0 ]];then
|
elif [[ $date_diff -gt 0 ]]; then
|
||||||
echo -n "issuer:$issuer "
|
echo -n "issuer:$issuer "
|
||||||
echo -n "will expire in $date_diff days "
|
echo -n "will expire in $date_diff days "
|
||||||
echo -ne "\033[31;1m"
|
echo -ne "\033[31;1m"
|
||||||
echo WARNING
|
echo WARNING
|
||||||
(( result += 1 ))
|
((result += 1))
|
||||||
else
|
else
|
||||||
echo -n "issuer:$issuer "
|
echo -n "issuer:$issuer "
|
||||||
echo -n "has already expired $date_diff ago "
|
echo -n "has already expired $date_diff ago "
|
||||||
echo -ne "\033[31;1m"
|
echo -ne "\033[31;1m"
|
||||||
echo FAILURE
|
echo FAILURE
|
||||||
(( result += 1 ))
|
((result += 1))
|
||||||
fi
|
fi
|
||||||
echo -ne "\033[0m"
|
echo -ne "\033[0m"
|
||||||
}
|
}
|
||||||
@@ -58,23 +57,27 @@ function check_ssl {
|
|||||||
#MAIN
|
#MAIN
|
||||||
[[ -z "$DOMAIN" ]] && usage
|
[[ -z "$DOMAIN" ]] && usage
|
||||||
case $PROTOCOL in
|
case $PROTOCOL in
|
||||||
https | 443 )
|
https | 443)
|
||||||
check_ssl HTTPS 443;;
|
check_ssl HTTPS 443
|
||||||
smtps | 587 )
|
;;
|
||||||
check_ssl SMTPS 587;;
|
smtps | 587)
|
||||||
pop3 | 995 )
|
check_ssl SMTPS 587
|
||||||
check_ssl POP3 995;;
|
;;
|
||||||
imap | 993 )
|
pop3 | 995)
|
||||||
check_ssl IMAP 993;;
|
check_ssl POP3 995
|
||||||
all | ALL )
|
;;
|
||||||
check_ssl HTTPS 443
|
imap | 993)
|
||||||
check_ssl SMTPS 587
|
check_ssl IMAP 993
|
||||||
check_ssl POP3 995
|
;;
|
||||||
check_ssl IMAP 993
|
all | ALL)
|
||||||
;;
|
check_ssl HTTPS 443
|
||||||
*)
|
check_ssl SMTPS 587
|
||||||
usage
|
check_ssl POP3 995
|
||||||
;;
|
check_ssl IMAP 993
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
usage
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
exit "$result"
|
exit "$result"
|
||||||
Reference in New Issue
Block a user