2019年5月27日 星期一

postfix main.cf 參數說明

#原centos postfix設定

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 550
debug_peer_level = 5
debugger_command =
     PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
     ddd $daemon_directory/$process_name $process_id & sleep 5

sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.11.0/samples
readme_directory = /usr/share/doc/postfix-2.11.0/README_FILES
inet_protocols = ipv4



外發域配置
參數︰myorigin
說明︰myorigin參數用於指定該服務器使用哪個域名來外發郵件。
     預設值的情況下myorigin採用本機主機名稱(與參數myhostname相同)。
建議︰在很小的網路中,採用預設值配置。而在Internet中,我們建議你保持myorigin與mydomain參數相同。也就是說採用該伺服器所在的域名稱。
例如︰
myorigin = $myhostname (預設值)
myorigin = $mydomain (推薦)
 
接收域配置
參數︰mydestination
說明︰用於指定該伺服器的使用哪個域名來接收郵件。
我們建議,系統安裝好後,盡量不要改動這個參數。
例如︰
預設值設定: mydestination = $myhostname localhost.$mydomain
廣泛設定: mydestination = $myhostname localhost.$mydomain $mydomain
多DNS設定:mydestination = $myhostname localhost.$mydomain www.$mydomain ftp.$mydomain
轉發限制
參數︰mynetworks
relay_domains
mydestination
說明︰轉發限制在郵件系統中非常重要。C-Link為客戶預設值配置了最安全的轉發限制參數。
與轉發限制的參數有很多︰主要請參看mynetworks、relay_domains、mydestination。
系統故障報告配置
參數︰
notify_classes
說明︰該參數用於告知系統,在哪種情況下用哪種模式通知用戶。
可以選擇的參數類型有︰
bounce 郵件原封不動彈回;
2bounce 將雙份彈回郵件發送給Postmaster;
delay 將拖延的郵件的頭部資訊通知Postmaster;
policy 將被系統過濾掉的資訊通知Postmaster;
protocol 將協議錯誤資訊通知Postmaster;
resource 將因系統資源短缺而投遞失敗的資訊通知Postmaster;
software 將因軟錯誤而投遞失敗的資訊通知Postmaster.
例如︰
預設值: notify_classes = resource, software
主機名配置
參數︰myhostname
說明︰myhostname參數用於描述執行C-Link系統的伺服器所符合規則的域名全稱。在許多UNIX系統中,C-Link會自動檢測出正確的名稱。但在某些作業系統中需要手工配置,如TurboLinux。
例如: myhostname = host.local.domain (local hostname is not FQDN)
myhostname = host.virtual.domain (virtual interface)
myhostname = virtual.domain (virtual interface)
原始域配置
參數︰mydomain
說明︰系統自己檢測。暫不開放。
系統內部網路子網配置
參數︰mynetworks_stype
mynetworks
說明︰mynetworks_stype用於設定郵件系統內部子網的限制情況。通常情況下設定為subnet。在單機情況下設定為host.
設定的子網內部,郵件可以開放式轉發。這對於配置郵件集群很有作用。但要小心使用,防止將郵件系統設定為OPEN RELAY。
例如︰
mynetworks_style = subnet
mynetworks_style = host
mynetworks = 168.100.189.0/28, 127.0.0.0/8
 
統內部網路位址配置
參數︰inet_interfaces
說明︰inet_interfaces用於指定特定的網路位址。
系統保留,暫不開放。
例如︰inet_interfaces = all
inet_interfaces = virtual.host.name (virtual domain)
inet_interfaces = $myhostname localhost.$mydomain (non-virtual mailer)

進程限制
參數︰default_process_limit
說明︰用於限制SMTP服務的最大同時連接數量。預設值為50。根據伺服器配置及作業系統的不同,可以做非常寬限的配置。
例如︰default_process_limit = 1024
本地同時同址分發限制
參數︰local_destination_concurrency_limit
說明︰系統保留,暫不開放。
例如︰local_destination_concurrency_limit = 2
 
預設值同時同址分發限制
參數︰default_destination_concurrency_limit
說明︰系統保留,暫不開放。
例如︰default_destination_concurrency_limit = 10
隊列重發週期
參數︰queue_run_delay
說明︰用於設定隊列處理程式對拖延郵件的掃描週期。預設值為1000秒。
例如︰queue_run_delay = 1000
最長隊列生命期
參數︰maximal_queue_lifetime
說明︰用於設定隊列處理程式對滯留郵件的最長儲存期。預設值為5天。
例如︰maximal_queue_lifetime = 5

最小投遞失敗週期
參數︰minimal_backoff_time
說明︰用於設定隊列處理程式對無法投遞的郵件的最短巡迴時間。預設值為1000秒。
例如︰minimal_backoff_time= 1000
最長投遞失敗週期
參數︰maximal_backoff_time
說明︰用於設定隊列處理程式對無法投遞的郵件的最長巡迴時間。預設值為4000秒。
例如︰maximal_backoff_time= 4000
錯誤命令緩沖時間
參數︰smtpd_error_sleep_time
說明︰當SMTP服務端口接收到非法的命令時,系統將緩沖處理的時間間隔。
這個參數對於防止惡意攻擊非常有效。
例如︰smtpd_error_sleep_time = 5
smtpd_error_sleep_time =0
軟錯誤容忍次數
參數︰smtpd_soft_error_limit
說明︰SMTP服務所允許的軟錯誤次數。這個參數對於防止惡意攻擊非常有效。預設值10次。
例如︰smtp_soft_error_limit = 5
硬誤容忍次數
參數︰smtpd_hard_error_limit
說明︰SMTP服務所允許的硬錯誤次數。這個參數對於防止惡意攻擊非常有效。預設值100次。
例如︰smtp_hard_error_limit = 100
郵件頭部過濾
參數︰header_checks
說明︰用於過濾郵件的頭部資訊。
例如︰header_checks = regexp:/wdpost/filter/header_checks
檔案header_checks內容遵循完全的regexp強大的字元串語法匹配規則。
如,/^to: *friend@public\.com$/ REJECT
SMTP連接控制過濾
參數︰smtpd_client_restrictions
說明︰smtpd_client_restrictions 參數的功能非常強大。它可以對連接到C-Link郵件伺服器的各種客戶端以及其他伺服器進行限制。
該參數有以下的選項可以靈活配置設定。
reject_unknown_client 拒絕不能IP反向解析的位址;
permit_mynetworks 允許子網中的連接;
check_client_access maptype:mapname 檢測在mapname檔案中設定的規則;
reject_maps_rbl拒絕符合rbl行為條件的連接。
reject_unauth_pipelining 拒絕為認証的管道連接。
預設值狀態下,該參數不做設定。
例如︰smtpd_client_restrictions = HELO

握手要求控制過濾
參數︰smtpd_helo_required
說明︰設定C-Link郵件系統是否在SMTP連接時必須進行HELO或EHLO握手。預設值為不需要。
例如︰smtpd_helo_required = no
HELO握手主機控制過濾
參數︰smtpd_helo_restrictions
說明︰當HELO握手必須時。該參數用於驗証握手資訊是否符合要求。
可以選擇的參數有︰
reject_invalid_hostname 拒絕錯誤的hostname。
permit_naked_ip_address 拒絕裸IP位址。
reject_unknown_hostname 拒絕為被DNS A或MX紀錄指定的域名。
reject_non_fqdn_hostname 拒絕不符合域名規則的域名。
check_helo_access maptype:mapname 根據mapname中設定的資訊限制。
RFC821類型信封位址控制過濾
參數︰strict_rfc821_envelopes
說明︰設定C-Link系統是否必須只接受符合RFC821所定義的負荷規則的郵件位址。預設值為no.
例如︰strict_rfc821_envelopes = yes
發信人位址限制過濾
參數︰smtpd_sender_restrictions =
說明︰設定發信人位址必須符合的規則。確實為任意。
可以設定為以下參數︰
reject_unknown_sender_domain 拒絕為沒有DNS A或MX紀錄的發信人域名。
check_sender_access maptype:mapname 根據mapname檔案中的規則設定。
reject_non_fqdn_sender 拒絕不符合規則的發信人位址。

收信人位址限制過濾
參數:smtpd_recipient_restrictions
說明︰設定特殊的發信人位址參數限制。
可以選擇的參數有︰
check_relay_domains 檢測轉發域。
permit_auth_destination 允許經過認証的到達站。
reject_unauth_destination 拒絕為經過認証的到達站。
permit_mx_backup 允許反查詢MX主機名稱。
check_recipient_access maptype:mapname 根據mapname檔案中設定的規則限制。
reject_unknown_recipient_domain 拒絕轉發到沒有DNS A或MX紀錄的域名。
reject_non_fqdn_recipient 拒絕不符合規則的轉發目標。
reject_unknown_sender_domain 拒絕沒有IP反解析紀錄的發件人域名。
ETRN命令限制過濾
系統保留,不開放。
反垃圾郵件組織過濾
參數︰maps_rbl_domains
說明︰這是一個非常有特色的反垃圾郵件功能。這個參數通常設定為
maps_rbl_domains = blackholes.mail-abuse.org
如果RBL lookup打開,系統回自動與全球著名的反垃圾郵件組織mail-abuse進行同步。組織來自mail-abuse所列舉的不安全的電子郵件伺服器。
在預設值狀態下這個功能是關閉的。
SMTP對話行長度限制過濾
參數︰line_length_limit
說明︰設定SMTP所接受的最長字符行的長度。
預設值為2048位元組。
郵件頭部長度限制過濾
參數︰header_size_limit
說明︰設定SMTP所接受的最長郵件頭部資訊的長度。
預設值為102400位元組
收件人數量限制過濾
參數︰extract_recipient_limit
說明︰限制擴展的收件人數量限制。這通常用於防止採用"sendmail -t"的模式來進行的攻擊行為。
郵件長度限制過濾
參數︰message_size_limit
說明︰這個參數很重要。用於限制系統所接受的最大的單封郵件長度。預設值為10240000 位元組。
例如︰message_size_limit = 20480000
彈回郵件長度過濾
參數︰bounce_size_limit
說明︰這個參數非常重要,用於設定彈回的最大郵件尺寸。預設值為50000 位元組。

2019年5月12日 星期日

Docker 教學-2 Dockerfile基礎教學

Docker 教學2 -轉貼IT邦教學筆記參考



Dockerfile 說明
  • Dockerfile 由一行行命令語句組成,並且支援以 # 開頭的註解行。
  • Dockerfile 分為四部分:
    • 基底映像檔資訊
    • 維護者資訊
    • 映像檔操作指令
========================================================================
# This dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format: Instruction [arguments / command] ..
# 基本映像檔,必須是第一個指令
FROM ubuntu
# 維護者: docker_user <docker_user at email.com> (@docker_user)
MAINTAINER docker_user docker_user@email.com
# 更新映像檔的指令
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
# 建立新容器時要執行的指令

CMD /usr/sbin/nginx
========================================================================
####Dockerfile 基本語法
指令
說明
範例
FROM :
映像檔來源
FROM python:3.5
MAINTAINER
維護者訊息
MAINTAINER docker_user docker_user@email.com
RUN
創建映像檔時執行動作
RUN apt-get -y update && apt-get install -y supervisor
RUN ["executable", "param1", "param2"]
創建映像檔時執行動作
RUN ["/bin/bash", "-c", "echo hello"]
CMD command param1 param2
啟動容器時執行的命令
CMD pserve development.ini
CMD ["executable","param1","param2"]
啟動容器時執行的命令
CMD ["param1","param2"]
啟動容器時執行的命令
EXPOSE
容器對外的埠號
EXPOSE 8082
ADD
複製檔案(單檔)
ADD requirements.txt /usr/src/app/
COPY
複製檔案(資料夾)
COPY . /usr/src/app
ENV
環境變數
ENV PG_VERSION 9.3.4
ENTRYPOINT command param1 param2
指定容器啟動後執行的命令
ENTRYPOINT ["executable", "param1", "param2"]
指定容器啟動後執行的命令
ENTRYPOINT ["/docker-entrypoint.sh"]
VOLUME ["/data"]
掛載資料卷
VOLUME /var/lib/postgresql/data
USER daemon
指定運行使用者
RUN groupadd -r postgres && useradd -r -g postgres postgres
WORKDIR /path/to/workdir
指定工作目錄
WORKDIR /usr/src/app
ONBUILD [INSTRUCTION]
基底映像檔建立時執行
ONBUILD COPY . /usr/src/app
RUN 當命令較長時可以使用 \ 來換行。
RUN :
shell 終端中運行命令,即 /bin/sh -c
RUN ["executable", "param1", "param2"] :
使用 exec 執行。
CMD 指定啟動容器時執行的命令, 每個 Dockerfile 只能有一條 CMD 命令 
如果指定了多條命令,只有最後一條會被執行。
CMD ["executable","param1","param2"]
使用 exec 執行,推薦使用;
CMD command param1 param2
/bin/sh 中執行,使用在給需要互動的指令;
CMD ["param1","param2"]
提供給 ENTRYPOINT 的預設參數;
ENTRYPOINT:每個 Dockerfile 中只能有一個 ENTRYPOINT,當指定多個時,只有最後一個會生效。
USER
:要臨時取得管理員權限可以使用 gosu,而不推薦 sudo
WORKDIR
:可以使用多個 WORKDIR 指令,後續命令如果參數是相對路徑,則會基於之前命令指定的路徑
Docker File Base
========================================================================
# 映像檔Image
FROM python:3.5
# 維護者
MAINTAINER Pellok "pellok@double-cash.com"
# 更新
RUN apt-get -y update && apt-get install -y supervisor
# 創建專案資料夾
RUN mkdir -p /usr/src/app
# 指定工作目錄在專案資料夾
WORKDIR /usr/src/app
# 預先要安裝的requirements複製到Docker裡面
ADD requirements.txt /usr/src/app/
# 安裝需要用的插件
RUN pip install --upgrade pip setuptools
RUN pip install --no-cache-dir -r requirements.txt
# 下次Build 的時候複製專案目錄到Docker 裡面
ONBUILD COPY . /usr/src/app
========================================================================
建置
docker build -t sample:base .
========================================================================
Docker File for Project

挑選Image
FROM sample:base
# 安裝cryptography
RUN pip install cryptography
# 設定工作目錄
WORKDIR /usr/src/app/
# 執行Python Setup
RUN python setup.py develop
# 開啟Port
EXPOSE 8082
# 執行專案
CMD pserve development.ini
========================================================================
建置
docker build -t project:v1 .
========================================================================
Pyramid 專案 Docker
#創建一個新專案
pcreate -s alchemy pyramid_dockerlize
cd pyramid_dockerlize
# 創建dockerfile
touch Dockerfile
# 編輯 Dockerfile
# 建置映像檔
docker build -t pyramid_dockerlize .
# 執行容器
docker run -d -P pyramid_dockerlize
========================================================================
Dockerfile
# This dockerfile uses the python pyramid
# VERSION 1 - EDITION 1
# Author: pellok
# Command describe

# 使用的python映像檔版本
FROM python:3.5

MAINTAINER pellok pellok@okborn.com

# 創建存放專案的資料夾
RUN mkdir -p /usr/src/app

# 複製當前目錄的所有檔案到容器內的,資料放在/usr/src/app
COPY . /usr/src/app

# 指定工作目錄
WORKDIR /usr/src/app/

# 安裝環境變數和相依性套件
RUN python setup.py develop

# 初始化DB
RUN initialize_pyramid_dockerlize_db development.ini

# 專案監聽的Port
EXPOSE 6543

# 啟動專案
CMD pserve production.ini
========================================================================