Mail Server Test ubuntu: Difference between revisions
No edit summary |
No edit summary |
||
| Line 34: | Line 34: | ||
== روش اول: اسکریپت test-smtp.sh == | == روش اول: اسکریپت test-smtp.sh == | ||
این اسکریپت با استفاده از قابلیت <code>/dev/tcp</code> هستهٔ Bash، اتصال TCP به همهٔ پورتهای استاندارد میلسرور را بررسی میکند. '''نیاز به نصب هیچ ابزار اضافهای ندارد.''' | این اسکریپت با استفاده از قابلیت <code>/dev/tcp</code> هستهٔ Bash، اتصال TCP به همهٔ پورتهای استاندارد میلسرور را بررسی میکند. آدرس IP دامنه نیز بهصورت خودکار resolve و در خروجی نمایش داده میشود. '''نیاز به نصب هیچ ابزار اضافهای ندارد.''' | ||
=== نصب === | === نصب === | ||
| Line 54: | Line 54: | ||
# پورتهای استاندارد میل؛ میتوانید با آرگومان دوم لیست سفارشی بدهید | # پورتهای استاندارد میل؛ میتوانید با آرگومان دوم لیست سفارشی بدهید | ||
PORTS="${2:-25 465 587 110 995 143 993}" | PORTS="${2:-25 465 587 110 995 143 993}" | ||
# یافتن آدرس IP دامنه | |||
IP=$(getent hosts "$SERVER" | awk '{print $1}' | head -n1) | |||
[ -z "$IP" ] && IP="(resolve failed)" | |||
declare -A NAMES=( | declare -A NAMES=( | ||
| Line 65: | Line 69: | ||
) | ) | ||
echo "=== Testing mail server: $SERVER ===" | echo "=== Testing mail server: $SERVER ($IP) ===" | ||
echo "Port Service Status" | echo "Port Service Status" | ||
echo "-----------------------------------" | echo "-----------------------------------" | ||
| Line 99: | Line 103: | ||
=== خروجی نمونه === | === خروجی نمونه === | ||
<pre> | <pre> | ||
=== Testing mail server: mail.example.com === | === Testing mail server: mail.example.com (192.0.2.10) === | ||
Port Service Status | Port Service Status | ||
----------------------------------- | ----------------------------------- | ||
| Line 110: | Line 114: | ||
993 IMAPS OPEN | 993 IMAPS OPEN | ||
</pre> | </pre> | ||
{{Note|آدرس IP در پرانتز کنار نام سرور نمایش داده میشود. اگر resolve ناموفق باشد، عبارت <code>(resolve failed)</code> چاپ میشود.}} | |||
{{Note|این اسکریپت فقط اتصال TCP را بررسی میکند و پروتکل (مثلاً پاسخ SMTP به <code>EHLO</code>) را تست نمیکند. برای تست کامل پروتکل از روش دوم (swaks) استفاده کنید.}} | {{Note|این اسکریپت فقط اتصال TCP را بررسی میکند و پروتکل (مثلاً پاسخ SMTP به <code>EHLO</code>) را تست نمیکند. برای تست کامل پروتکل از روش دوم (swaks) استفاده کنید.}} | ||
Latest revision as of 11:54, 16 August 2026
این صفحه راهنمای تست اتصال به میلسرور (SMTP/IMAP/POP3) در Ubuntu است. دو روش در اینجا آموزش داده میشود:
- اسکریپت سبک test-smtp.sh (بدون نیاز به نصب ابزار اضافه)
- ابزار قدرتمند swaks (SMTP Swiss Army Knife)
پیشنیازها
- سیستمعامل Ubuntu (نسخه ۲۰.۰۴ یا جدیدتر توصیه میشود)
- دسترسی کاربر با مجوز
sudo - نام میزبان یا آدرس IP میلسرور مقصد
- باز بودن پورتهای خروجی در فایروال سمت کلاینت (در صورت وجود)
| پورت | سرویس | پروتکل | رمزنگاری |
|---|---|---|---|
| ۲۵ | SMTP | ارسال | بدون رمزنگاری (یا STARTTLS) |
| ۴۶۵ | SMTPS | ارسال | SSL/TLS |
| ۵۸۷ | Submission | ارسال | STARTTLS |
| ۱۱۰ | POP3 | دریافت | بدون رمزنگاری |
| ۹۹۵ | POP3S | دریافت | SSL/TLS |
| ۱۴۳ | IMAP | دریافت | بدون رمزنگاری |
| ۹۹۳ | IMAPS | دریافت | SSL/TLS |
روش اول: اسکریپت test-smtp.sh
این اسکریپت با استفاده از قابلیت /dev/tcp هستهٔ Bash، اتصال TCP به همهٔ پورتهای استاندارد میلسرور را بررسی میکند. آدرس IP دامنه نیز بهصورت خودکار resolve و در خروجی نمایش داده میشود. نیاز به نصب هیچ ابزار اضافهای ندارد.
نصب
فایل را با نام test-smtp.sh ایجاد کنید:
nano test-smtp.sh
محتوای زیر را در آن قرار دهید:
#!/bin/bash
# test-smtp.sh — بررسی اتصال به پورتهای میلسرور
# استفاده: ./test-smtp.sh [سرور] [لیست پورتها]
SERVER="${1:-smtp.example.com}"
# پورتهای استاندارد میل؛ میتوانید با آرگومان دوم لیست سفارشی بدهید
PORTS="${2:-25 465 587 110 995 143 993}"
# یافتن آدرس IP دامنه
IP=$(getent hosts "$SERVER" | awk '{print $1}' | head -n1)
[ -z "$IP" ] && IP="(resolve failed)"
declare -A NAMES=(
[25]="SMTP"
[465]="SMTPS"
[587]="Submission"
[110]="POP3"
[995]="POP3S"
[143]="IMAP"
[993]="IMAPS"
)
echo "=== Testing mail server: $SERVER ($IP) ==="
echo "Port Service Status"
echo "-----------------------------------"
for PORT in $PORTS; do
if timeout 5 bash -c "echo > /dev/tcp/$SERVER/$PORT" 2>/dev/null; then
STATUS="OPEN"
else
STATUS="CLOSED/FILTERED"
fi
printf "%-10s %-16s %s\n" "$PORT" "${NAMES[$PORT]:-Unknown}" "$STATUS"
done
فایل را اجرایی کنید:
chmod +x test-smtp.sh
نحوه استفاده
# تست همهٔ پورتهای استاندارد
./test-smtp.sh mail.example.com
# تست پورتهای دلخواه (فقط SMTP)
./test-smtp.sh mail.example.com "25 465 587"
# اسکن یک بازهٔ پورت
./test-smtp.sh mail.example.com "$(seq 1 100)"
خروجی نمونه
=== Testing mail server: mail.example.com (192.0.2.10) === Port Service Status ----------------------------------- 25 SMTP OPEN 465 SMTPS OPEN 587 Submission CLOSED/FILTERED 110 POP3 CLOSED/FILTERED 995 POP3S CLOSED/FILTERED 143 IMAP OPEN 993 IMAPS OPEN
روش دوم: ابزار swaks
swaks (SMTP Swiss Army Knife) یک ابزار خط فرمان قدرتمند برای تست کامل و عیبیابی سرورهای SMTP است. با آن میتوانید ایمیل تستی بفرستید، احراز هویت را بررسی کنید، TLS را تست کنید و جزئیات کامل گفتگو با سرور را ببینید.
نصب
sudo apt update
sudo apt install swaks
بررسی نصب:
swaks --version
استفاده پایه
سادهترین شکل — ارسال یک ایمیل تستی به سرور:
swaks --to recipient@example.com --server mail.example.com
مثالهای پرکاربرد
۱. ارسال ایمیل تستی کامل با احراز هویت و TLS (پورت ۵۸۷):
swaks \
--from sender@example.com \
--to recipient@example.com \
--server mail.example.com \
--port 587 \
--tls \
--auth LOGIN \
--auth-user sender@example.com \
--auth-password 'YourPassword'
۲. تست فقط اتصال و گفتگوی اولیه (بدون ارسال واقعی):
swaks --server mail.example.com --quit-after EHLO
۳. نمایش جزئیات کامل گفتگو (مفید برای عیبیابی):
swaks --to test@example.com --server mail.example.com -v
۴. تست سرور بدون رمزنگاری (پورت ۲۵):
swaks --to test@example.com --server mail.example.com --port 25 --protocol SMTP
۵. تست SSL مستقیم (پورت ۴۶۵):
swaks --to test@example.com --server mail.example.com --port 465 --tls
۶. ارسال ایمیل با محتوای سفارشی:
swaks \
--to test@example.com \
--server mail.example.com \
--header "Subject: Test Mail" \
--body "This is a test email sent by swaks."
خروجی نمونه
=== Trying mail.example.com:587... === Connected to mail.example.com. <- 220 mail.example.com ESMTP Postfix -> EHLO localhost <- 250-mail.example.com <- 250-PIPELINING <- 250-SIZE 10240000 <- 250-STARTTLS <- 250-AUTH PLAIN LOGIN <- 250-ENHANCEDSTATUSCODES <- 250 8BITMIME -> STARTTLS <- 220 2.0.0 Ready to start TLS ... -> QUIT <- 221 2.0.0 Bye === Connection closed with remote host.
مقایسه دو روش
| ویژگی | test-smtp.sh | swaks |
|---|---|---|
| نیاز به نصب | خیر | بله (apt install swaks)
|
| تست اتصال TCP به چند پورت | بله | فقط یک پورت در هر بار |
| تست کامل پروتکل SMTP | خیر | بله |
| ارسال ایمیل واقعی | خیر | بله |
| تست احراز هویت (AUTH) | خیر | بله |
| تست TLS/STARTTLS | خیر | بله |
| خروجی جزئیات گفتگو | خیر | بله (-v)
|
| مناسب برای | بررسی سریع باز بودن پورتها | عیبیابی کامل و تست ارسال |
عیبیابی
| مشکل | راهحل |
|---|---|
| همهٔ پورتها CLOSED هستند | فایروال سمت سرور (مثلاً ufw) یا ISP را بررسی کنید: sudo ufw status
|
| نام سرور resolve نمیشود | تست DNS: dig mail.example.com یا nslookup mail.example.com
|
| خطای احراز هویت (۵۳۵) | نام کاربری/رمز عبور را بررسی کنید؛ در Gmail باید از App Password استفاده کنید |
| خطای TLS | مطمئن شوید پورت درست است؛ پورت ۴۶۵ برای SSL مستقیم و ۵۸۷ برای STARTTLS است |
پاسخ 550 هنگام ارسال |
گیرنده یا دامنهٔ فرستنده تأیید نشده؛ SPF/DKIM سرور را بررسی کنید |
Connection timed out |
فایروال کلاینت یا سرور؛ دسترسی به پورت خروجی را تست کنید |