dovecot v2 效能調校

調整cache

https://wiki.dovecot.org/Authentication/Caching
有三個可以調整

auth_cache_size: Authentication cache size, 0 disables caching (default). 
auth_cache_ttl: Time to live in seconds for cache entries. 
auth_cache_negative_ttl: If a passdb or userdb lookup didn't return any data (i.e. the user doesn't exist)
auth_cache_verify_password_with_worker: Password hash verifications are done by the auth master process by default. Setting this to "yes" moves the verification to auth-worker processes. v2.2.34+)
ps: It should be pretty safe to set very high TTLs

調整fsync與service_count

https://datahunter.org/dovecot_performance
可以調整fsync

#Default to no fsyncing
mail_fsync = never
protocol lda {
  # Enable fsyncing for LDA
  mail_fsync = optimized
}
protocol lmtp {
  # Enable fsyncing for LMTP
  mail_fsync = optimized
}
service imap-login {
   service_count = 0
   client_limit = $default_client_limit
   vsz_limit = 64M
}

CEntOS 7 postfix 新增lmtp 與 managesieve功能

之前自己製作的mail server (綁定AD) , 休假功能使用的是 lda + sieve + managesieve 的方式進行, 可是在朋友公司運行時, 卻發生效率不彰的狀況(活躍的email帳號約500個).
查詢了一下, 發現官方已經建議使用 lmtp 的方式取代 lda , 原因是lda屬於觸發類型, 而 lmtp是常駐服務類型, 常駐服務類型效率較好.
於是將自己製作的 docker mail server 改良成 lmtp , 有機會再請朋友測試效率.

以下是讓centos啟用lmtp功能的設定文件(登入帳號密碼guest)

https://docs.kafeiou.pw/iammis/技術文章/HowTo/10033_(CEntOS7.9)新增lmtp_managesieve功能.txt

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>

(docker)透過Web修改Active Directory密碼-PWM

微軟的網域主控站非常好用, 尤其用來管控帳號密碼.
但是修改密碼,就必須透過加入網域的主機才能修改, 有點不方便,
尤其有些人的電腦並沒有加入網域, 要是想改密碼更是麻煩.

基於APACHE 2.0授權的 https://github.com/pwm-project/pwm 就能協助我們修改密碼.

簡易安裝步驟:



確認AD安裝certificate service


產生ad自己的證書(需要有private key) , 否則無法使用port 636 + tls 加密方式連線


安裝


1. 下載做好的container
https://www.pwm-project.org/artifacts/pwm
下載最新版docker images .tar 檔案
如:
wget https://www.pwm-project.org/artifacts/pwm/build/2020-08-20T23_36_49Z/pwm-docker-image-2.0.0-SNAPSHOT.tar

2. 安裝
docker load –input=pwm-docker-image-2.0.0-SNAPSHOT.tar

3. docker 執行
docker run -d –name pwm -p 8443:8443 –restart always –dns=<active directory ip> -v “/opt/pwm/config/:/config/” pwm/pwm-webapp

4. 登入進行第一次安裝設定
https://ip:84443/


安裝過程注意事項:


1. 連線要用加密的方式,否則無法改密碼
2. 要提供管理者群組的LDAP
如:
CN=Domain Admins,CN=Users,DC=test,DC=com
3. 因為PWM額外提供安全提問, 這些提問並不是Active Directory原本的, 需要另外提供空間,此時請選擇local db存放.
其實這不是很重要, 忘了密碼,還能在域控直接修改

安裝成功後, 請先用管理者帳號登入, 登入時需要額外設定忘記密碼的安全提問(管理者可直接跳過),
此時要選擇修改設定檔案, 將修改密碼的複雜度降低(但不可低於原本網域設定), 我是順便將安全提問改成一個就好.

搭配httpd reverse proxy


需修改SiteURL,改完需要重開pwm才能生效
這種方式可以讓網址擁有正式的加密證書(e.g. let’s encrypt)

roundcubemail 加上Active Directory 通訊錄範例

修改config/config.inc.php
網域伺服器 192.168.1.1
網域: test.com

$config['address_book_type'] = 'ldap';

$config['ldap_public']['Global'] = array(
'name' => '台灣總公司',
'hosts' => array('192.168.1.1'),
'port' => 3268,
'user_specific' => false,
'base_dn' => 'dc=test,dc=com',
'bind_dn' => 'cn=administrator,cn=users,dc=test,dc=com',
'bind_pass' => 'password',
'ldap_version' => 3,
'search_fields' => array (
'mail','cn',),
'name_field' => 'cn',
'email_field' => 'mail',
'writable' => 'false',
'scope' => 'sub',
'sizelimit' => 6000,
'sort' => 'cn',
'filter' => '(&(mail=)(|(&(objectClass=user)(!(objectClass=computer)))))',
'fuzzy_search' => true,
'global_search' => true
);

2022/11/05

我後來使用docker doundcubemail 重新安裝, 因為用latest , 當時版本 1.6.x 版本 , 發現上面的設定已經不能用了, 改用以下設定(紅色部分需調整)

$config['address_book_type'] = 'ldap';
$config['ldap_debug'] = true;
$config['ldap_public'] = array(
    'MyAdLdap' => array (
        'name' => 'TW',
        'hosts' => array('網域主機IP'),
        'sizelimit' => 6000,
        'port' => 3268,
        'use_tls' => false,
        'user_specific' => false,
        'base_dn' => 'OU=group,DC=test,DC=com',
        'bind_dn' => 'user@test.com',
        'bind_pass' => 'password',
        'writable' => false,
        'ldap_version' => 3,
        'search_fields' => array(
           'mail',
           'cn',
        ),
        'fieldmap' => array(
            'name' => 'cn',
            'email' => 'mail',
            'surname' => 'sn',
            'firstname' => 'givenName',
        ),
        'sort' => 'sn',
        'scope' => 'sub', # or 'list'
        'filter' => '(&(mail=*)(|(&(objectClass=user)(!(objectClass=computer)))(objectClass=group)))',
        'global_search' => true,
        'fuzzy_search' => true,
        'vlv' => false,
    ),
);

詳請參考 https://github.com/roundcube/roundcubemail/wiki/Configuration:-LDAP-Address-Books#prerequisites

vim 的virsual mode , 如何滑鼠按右鍵就複製

其實我也很不懂vim的v-mode , virsual mode , 反正屎用docker時候, 好多container 需要另外安裝vim ,
安裝結束後, 我就卡關了 XD ,
因為我習慣按滑鼠右鍵, 就把複製的文字貼上去 , 但是常常出現(insert) virsual 錯誤無法貼上
網上找了好久, 找到一種方式, 輸入 set mouse-=a , 就可以解決了

https://gist.github.com/u0d7i/01f78999feff1e2a8361

安裝roundcube心得

前陣子弄了docker image postfixad , 可以讓我簡單架設可與網域主控站整合的郵件服務器.


既然有了郵件服務器, 通常還要提供roundcube這類的webmail ,

但是我不想使用webmail的最大問題: 就是帳號跟郵件不一致

登入webmail的帳號與email不相同時, 就很麻煩, 例如:
登入的帳號是 001 , 可是emai卻變成 001@kafeiou.pw , 而不是網域在mail屬性建立的william@kafeiou.pw
這困擾我很久, 甚至想要自己寫一個roundcube的plugin , 想要登入的時候, 改寫email,

後來發現roundcube有個plugin很好用, 就是 new_user_dialog , 啟用後,第一次登入,會強迫設定名字與email, 雖然帳號與email不相同, 就讓麻瓜自行更改吧, 哈

以下列出docker 安裝roundcube方式

docker run --restart always --name roundcubemail -e ROUNDCUBEMAIL_DEFAULT_HOST=tls://<郵件主機> -e ROUNDCUBEMAIL_SMTP_SERVER=tls://<郵件主機> -p 8080:80 -d roundcube/roundcubemail


安裝wordpress權當公司內部訊息公告網站

以前安裝wordpress(包括目前這個網站)都只用陽春功能, 沒遇到什麼問題,也可以一直更新到最新版.

直到最近想要幫公司裝一個簡單的內部訊息公告網站, 需要安裝兩個插件, 但其中一個插件需要額外安裝php 7.x extension ,
安裝extension這倒是沒什麼問題, 問題是官方的wordpress居然安裝失敗, 要用很多方法才能解決, 實在有夠麻煩.

這個插件就是用來新訊息公告的時候, 可以自動發信給相關的人 , 請參考 mailpoet , 這個插件乾脆就自己弄一個wordpress, 直接將相關的插件都裝起來
雖然mailpoet對於安裝沒有過多的著墨, 其實就跟自己手動安裝一樣簡單, 交由wordrepss wizard就可以了

貼上自己簡單的安裝方式

1. 安裝mariadb container(name:mariadb)
   安裝完畢記得新增一個database名稱叫做wordpress    
   create database wordperss character set utf8mb4 collate utf8mb4_unicode_ci
2. 安裝mailpoet/wordpress
   docker volume create wp-content
   docker run --name mywordpress -v wp-content:/var/www/html/wp-content -p 8080:80 \\
   -d --restart always  mailpoet/wordpress:wp-5.4_php7.4_20200617.1
3. 停用mywordpress , mariadb
   docker stop mywordperss
4. 讓mywordpress與mariadb成為羈絆
   docker network connect myNetwork mariadb
   docker network connect myNetwork mywordpress
5. 啟用mywordpress, mariadb , 進入網頁的wizard , 就可以輸入mariadb的名字進行安裝了
   docker start mariadb
   docker start mywordpress
   

單一docker server,多個Container如何互相認識

安裝非官方的wordpress(mailpoet/wordpress) , 發現指定mysql的ip失敗(一樣是docker) , 原來是忘了將mysql與wordpress這兩個container 綁定相同網路, 這樣兩個container可以互相ping對方的名字, 也可以互相認識了

docker network connect myNetwork <container name>

myNetwork 可修改

談談傳統的FTP系統,使用docker安裝舊規格ftp server

ftp server很老了, 這個系統傳統上使用tcp port 20(資料傳輸),21(命令) , 稱為active mode(主動模式), 後來進化多了“被動模式”就不再限於20,21, 而且加上tls加密功能就更穩固了.

可是我要談的不是這個, 要談的是有些用了2,30年的工具機,例如cnc加工機, 內建ftp client功能, 而且還是停留在傳統的主動模式,
但隨著服務器作業系統的升級, 有可能讓cnc這種工具機無法相容使用, 因此必須要考慮新作業系統裡面, 加裝傳統的ftp系統,

解法很簡單就是裝個docker ftp server,

安裝如下:

1. 建立使用者空間與使用者帳密資料庫
docker volume create --name ftp-user-db
docker volume create --name ftp-user-file

2. 啟動ftp server
docker run -d --restart always --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e "PUBLICHOST=localhost" -v ftp-user-db:/etc/pure-ftpd/passwd -v ftp-user-file:/home/ftpusers stilliard/pure-ftpd

3. 新增使用者
docker exec -it ftpd_server /bin/bash
pure-pw useradd <帳號> -f /etc/pure-ftpd/passwd/pureftpd.passwd -m -u ftpuser -d /home/ftpusers/<帳號>

4. 防火牆
firewall-cmd --add-port=20/tcp --permanent
firewall-cmd --add-port=21/tcp --permanent
firewall-cmd --reload

ps. docker 網站 https://hub.docker.com/r/stilliard/pure-ftpd

1 ... 9 10 11 12 13 14