我的大意造成一件郵件資安事件

是這樣的, 我前幾個月, 在郵件服務器(postfix+dovecot)上面, 加上一個能支援vacation休假回覆功能的設定 managesieve
在 dovecot掌管認證的10-auth.conf, 開通支援靜態認證的設定 auth-static.conf.ext , 並且在該設定加上

passdb {
driver = static
args = nopassword=y
}

代表不需要密碼就能通過認證, 專門給 managesieve 休假功能使用的


但是沒想到這是個錯誤的設定, 居然讓所有的帳號以imap方式, 不需要密碼就能登入(發信會失敗, 因為發信一定要密碼正確) , 好險我這系統帳號與email是不一樣的, 很難猜到哪個帳號使用哪個EMAIL ,所以一直都沒有問題.
直到我發現改了自己帳號的密碼, 居然還是可以用舊密碼登入, 看了log 才驚覺問題大了, 趕緊研究問題所在, 本來誤以為是roundcubemail , 或是postfix 被入侵了, 但測試卻不是, 最後才發現是 auth-static.conf.ext 的設定出錯了, 改成以下這樣, 讓外面使用imap登入的帳號無法適用靜態登入, 就沒有安全上的問題了.

passdb {
driver = static
args = proxy=y host=localhost nopassword=y
}

CentOS 7.8 上安裝fail2ban

fail2ban 很好用, 可用來監控server的log, 智慧型增加防火牆設定, 阻擋暴力入侵.

但是google查詢 fail2ban ,可以發現一大堆設定, 嘆為觀止. 實際安裝起來真是“容易卻很艱難, 簡單又極複雜”.

最近我用自製的 docker快速建立支援Active Directory的Mail Server , 透過網域主控站, 管理郵件伺服器的帳號, 非常方便.

但是我卻遇到暴力破解帳號密碼的攻擊.

主機在越南, 該ip以前就曾被列入黑名單, 有可能過去”被用來“做壞事, 在吃好幫相報的效應下, 超級有名氣!
想當然這個ip被白道認定是壞主機要防禦, 黑道認定是好主機要入侵, 名符其實”被欺負又被全世界討厭的感覺”

tail 一下maillog , 真是不得了, 隨時隨地都有ip嘗試暴力入侵, 每分鐘大概有千次sasl auth連線入侵紀錄.

由於先前安裝mail server, docker 並沒有加上 –net=host , 所以log看不出來從哪個ip入侵,
因此使用我的docker mail server , 必須加上 –net=host 的參數, 使用fail2ban才有意義.

此外預設 fail2ban 查看的log跟docker不同, 需要注意一下 , fail2ban的 jail.local 參數backend要改用auto.

以下是安裝紀錄:

1. 安裝套件
***2020-12-10更新, 若系統運行很久才裝, 要考慮之前已預裝的fail2ban, 請先移除先前所有fail2ban套件,以及/etc/fail2ban的目錄後,再重新安裝

yum install epel-release -y
yum install fail2ban fail2ban-all fail2ban-systemd
systemctl enable fail2ban

2. 建立jail.local
postfix-sasl : 30分鐘入侵3次就關進監獄,關一天 ,
recidive: 一個月兩次進監獄的累犯關一年

vi /etc/fail2ban/jail.local
###############################
[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1

# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport

[postfix-sasl]
enabled = true
bantime  = 86400
findtime  = 1800
maxretry = 3
filter   = postfix[mode=auth]
logpath = <docker maillog>
backend  = auto

[dovecot]
enabled = true
maxretry = 3
bantime  = 86400
findtime  = 1800
filter = dovecot[mode=aggressive]
logpath =  <docker maillog>
backend  = auto

[recidive]

enabled  = true
bantime  = 31536000  ; 1 year
findtime = 18144000  ; 1 month
maxretry = 2
logpath = /var/log/fail2ban.log
backend = auto
###############################


3. 啟用fail2ban

systemctl start fail2ban


4. 查看狀態

fail2ban-client status postfix-sasl


5.手動解除

fail2ban-client set postfix-sasl unbanip <IP>

spamassassin阻擋廣告信,請不要用 RDNS_NONE

https://pasztor.at/blog/fixing-rdns_none-with-spamassassin/

原本很開心找到這個判斷 RDNS_NONE , 可以透過檢查該ip是否有反解名稱reverse dns, 若沒有反解名稱, 大概就能確定絕對不是正規的郵件伺服器.

可是後來發現很多時候會造成誤判, 例如寄信的電腦ip是10.x.x.x 是內部ip, 本來就無法取得rdns, 但是還是被認定是RDNS_NONE, 無奈下, 只好把這判斷拿掉.

你必須懂的postfix+amavisd擋廣告順序

就連我都會誤解!
以為只要在postfix的main.cf裡面設定各式各樣的擋廣告方式(包含參考黑名單網站),就可以高枕無憂了,
可是事情並不是我們憨人想得這麼簡單
擋廣告總有順序的.

  1. amavisd 優先
    這部分很重要,有時候很多廣告商,都利用gmail , amazons發送廣告信, amavisd 很容易直接pass, 要解決這問題, 就只能土法煉鋼, 將廣告的網域,email寫到amavisd的黑名單上.
  2. postfix 次要
    若amavisd認定pass , 這邊再怎麼設定都沒用, 因為根本不會跑到這裡來.
    若amavisd沒有認定pass, 也沒認定是廣告(分數不足), 就會跑到這裡來,

我的設定, 就是讓amavisd可以定義黑白名單, 接下來才是設定postfix本身的名單限制
推薦看一下我製作的docker mail server設定
https://github.com/WilliamFromTW/docker-Postfix-AD

啟用postgrey心得

因為postgrey的機制會造成收信延遲, 所以必須設定白名單,與自動白名單,讓常用的郵件不再受限制.
1.白名單可在/etc/postfix/postgrey_whitelist_clients.local 新增
2.自動白名單,以centos 7為例子, 可在 /etc/sysconfig/postgrey 新增, 意指35天內,只要成功三次,就會一直是白名單成員
POSTGREY_OPTS=”–delay=60 –auto-whitelist-clients=5 –max-age=35″

tar 備份檔案,成功後刪除原檔案

將特定目錄下的所有檔案壓縮,
原本直接使用bzip2就可以了,直接將檔案壓起來, 但是我遇到nfs掛載,權限設定的限制,因此無法使用.
後來改用tar, 可以成功產生一個新的壓縮檔案, 但是原本檔案卻還在,會變成多餘
爬文發現tar有刪除原檔案的指令, 因此記錄下來

!/bin/sh
cd /u3/backup/exp/`date +'%d'`
for fich in *.dmp; do
tar -jcvf $fich.tar.bz2 --remove-files $fich
done

網域主控如何限制win 10的microsoft store app

windows 10帶來了新的app安裝方式 microsoft store, 有點類似 mac 的store ,
但是網域主控卻無法針對其中的app進行管控(除非全部都用win10 enterprise), 這對資訊安全有一定程度的影響,
畢竟漏洞多, 容易被入侵.
因此早期都採用整個microsoft store阻擋的方式, 禁用全部的app

但是問題來了, 有些好用的app也因次被鎖住無法使用, 這很是困擾
因此我來個土法煉鋼的方式, 避開microsoft的app(除了microsoft開頭字眼的app外,全部限制),
有點粗暴, 但目前也想不出好方法

,

powershell 寄送email(tls, port 587)

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { return $true }
$EmailToAddresses = @("test1@test.com", "test2@test.com")
$EmailTo = ""
$EmailFrom = "it@test.com"
$Subject = "subjects"
$Body = "FYI"
$SMTPServer = "192.1.2.1"
$filenameAndPath = "C:\sayhello\sayhello.csv"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("username", "password");
foreach ($EmailTo in $EmailToAddresses)
{
$SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body)
$attachment = New-Object System.Net.Mail.Attachment($filenameAndPath)
$SMTPMessage.Attachments.Add($attachment)
$SMTPClient.Send($SMTPMessage)
}
1 ... 36 37 38 39 40 ... 77