腳本

1.郵件服務器的工作原理
2.Mail server 與 DNS 之間的關係
3.dns 的基本配置
4.postfix的基本配置
一.郵件服務器的工作原理
當今這個互聯網當道的時代,e-mail已經成爲人與人之間一個很普遍的溝通渠道了,電子郵件可以很快速的幫你將文件或信息傳輸到地球的任何一個有網絡地方,同樣也可以收取郵件。
下面就用一張圖來看看郵件傳輸的原理:

• MUA(Mail User Agent)
郵件用戶代理,最常見的如Thundbird、KDE、Outlook等,就是提供用戶編寫、瀏覽、收取郵件的,MUA幫助用戶將電子郵件發送到郵件服務器上。
• MTA(Mail Transfer Agent)
郵件傳輸代理,MTA最主要的功能就是:接收來自MUA或者是其他MTA的郵件,或者是將從MUA接受到的郵件轉發給目標MTA;使用的是SMTP(簡單郵件傳輸協議),端口爲25。
下面再用一張圖來看看郵件接收的原理:

從前面可以知道,我們在發送郵件的時候使用的是SMTP協議,但接受郵件的時候,我們使用的是POP3、IMAP等協議。用戶需要輸入賬號&密碼才能收發郵件,但是存在一個問題,就是郵件的安全問題,通過SSL加密,就有了POP3s,IMAPs協議,這些加密方式是在郵件傳輸的過程中加密,如果想在發送端就加密,可以使用基於RSA公鑰加密體系的郵件加密軟件PGP。
收件協議使用的端口:
POP3 –110
IMAP –143
POP3s –993
IMAPs –995
二.Mail server 與 DNS 之間的關係
因爲網絡惡意使用與垃圾郵件氾濫的種種因素,目前已經沒有人會使用ip來首發郵件,通常都是使用 賬號@主機名 來處理的 ,因此,想要架設Mail server ,就要有合法的主機名,也就是說,搭建Mail server 的前提是搭建一個dns服務器。
郵件服務器使用dns的信息: A , MX
當一封郵件要發送出去時,郵件服務器會先分析郵件的目標主機的dns,先取得MX標誌,有可能會有幾臺主機,然後以最優先的MX主機發送出去。
三.dns的搭建與基本配置
1.實驗環境
兩臺Linux虛擬機,
www.client.com 172.25.254.100
www.server.com 172.25.254.200
2.安裝bind
在服務端(www.server.com)搭建dns
yum install bind -y
3.修改配置文件
vim /etc/named.conf

vim /etc/named.rfc1912.zones
增加兩個塊“client.com”,“server.com”

下面到/var/named/ 目錄下添加並編寫子配置文件 client.com.zone&server.com.zone

再修改/etc/resolv.conf

服務器端的dns就搭建好了,重啓服務即可,然後到客戶端再修改/etc/resolv.conf即可。

最後測試我們的dns是否搭建成功:
服務端:dig -t mx client.com

客戶端:dig -t mx server.com

到此我們的dns就搭建好了。
四.postfix的基本配置
我們先看看postfix進程的25端口開放情況:
netstat -antlpe | grep master

發現25端口只對本機開放,這是不行的,修改爲all即可
vim /etc/postfix/main.cf

然後再修改/etc/postfix/main.cf 的 76、83、164行:

改完後重啓服務,然後去客戶端修改/etc/postfix/main.cf 同樣幾處,然後重啓服務。
五.測試
我們在客戶端這臺主機裏給服務器那端發送郵件:

然後去服務端查看郵件:

.基本dns配置
(1)服務端
[root@mail-qq ~]# yum install bind -y
[root@mail-qq ~]# systemctl stop firewalld
具體操作
[root@mail-qq ~]# vim /etc/named.conf
options {
// listen-on port 53 { 127.0.0.1; }; 設置爲any
// listen-on-v6 port 53 { ::1; }; 設置爲any
directory “/var/named”;
dump-file “/var/named/data/cache_dump.db”;
statistics-file “/var/named/data/named_stats.txt”;
memstatistics-file “/var/named/data/named_mem_stats.txt”;
// allow-query { localhost; }; 設置爲any
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes;

dnssec-enable yes;
dnssec-validation no; 未註冊
[root@mail-qq ~]# vim /etc/named.rfc1912.zones
zone “qq.com” IN { 配置westos和qq的dns信息
type master;
file “qq.com.zone”;
allow-update { none; };
};
zone “westos.com” IN {
type master;
file “westos.com.zone”;
allow-update { none; };
[root@mail-qq ~]# cd /var/named
[root@mail-qq named]# ls
data named.ca named.localhost slaves
dynamic named.empty named.loopback
[root@mail-qq named]# cp named.localhost westos.com.zone -p
[root@mail-qq named]# cp named.localhost qq.com.zone -p
[root@mail-qq named]# ls
data named.ca named.localhost qq.com.zone westos.com.zone
dynamic named.empty named.loopback slaves
[root@mail-qq named]# vim westos.com.zone
[root@mail-qq named]# cp westos.com.zone qq.com.zone -p
cp: overwrite ‘qq.com.zone’? y
[root@mail-qq named]# vim qq.com.zone
[root@mail-qq named]# vim qq.com.zone
[root@mail-qq named]# vim westos.com.zone
[root@mail-qq named]# systemctl restart named
[root@mail-qq named]# vim /etc/resolv.conf
[root@mail-qq named]# cat /etc/resolv.conf
Generated by NetworkManager
search qq.com
nameserver 172.25.254.100 主dns
No nameservers found; try putting DNS servers into your
ifcfg files in /etc/sysconfig/network-scripts like so:
#
DNS1=xxx.xxx.xxx.xxx
DNS2=xxx.xxx.xxx.xxx
DOMAIN=lab.foo.com bar.foo.com
(2)客戶端
[root@mail-westos ~]# vim /etc/resolv.conf
[root@mail-westos ~]# cat /etc/resolv.conf
Generated by NetworkManager
search westos.com
nameserver 172.25.254.100
No nameservers found; try putting DNS servers into your
ifcfg files in /etc/sysconfig/network-scripts like so:
#
DNS1=xxx.xxx.xxx.xxx
DNS2=xxx.xxx.xxx.xxx
DOMAIN=lab.foo.com bar.foo.com
2.修改配置文件/etc/postfix/main.cf
(1)服務端
[root@mail-qq named]# vim /etc/postfix/main.cf
line:76 myhostname = mail-qq.qq.com 設置主機名稱
line:83 mydomain = qq.com 設置本地域名
line:99 myorigin = myhostname 設置郵件頭中的mail from 值
line:116 inet_interfaces = all 設置監聽地址
line:164 mydestination=myhostname
mydomain,localhost 設置收信地址
[root@mail-qq named]# systemctl restart postfix.service
[root@mail-qq named]# mail [email protected]
Subject: test
123456
.
EOT
[root@mail-qq named]# mailq
Mail queue is empty
(2)測試端
[root@mail-westos ~]# vim /etc/postfix/main.cf
line:76 myhostname = mail-qq.qq.com 設置主機名稱
line:83 mydomain = qq.com 設置本地域名
line:99 myorigin = myhostname 設置郵件頭中的mail from 值
line:116 inet_interfaces = all 設置監聽地址
line:164 mydestination=myhosyname
mydomain,localhost 設置收信地址
[root@mail-westos ~]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
“/var/spool/mail/root”: 1 message 1 new
N 1 root Sat Apr 22 03:42 21/715 “test”
& q
Held 1 message in /var/spool/mail/root
You have mail in /var/spool/mail/root
3.遠程主機發郵件
(1)遠程主機
[root@foudation61 ~]# telnet 172.25.254.100 25
Trying 172.25.254.100…
Connected to 172.25.254.100.
Escape character is ‘^]’.
220 mail-qq.qq.com ESMTP Postfix
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
250 2.1.5 Ok
data
354 End data with .
test
test
test
.
250 2.0.0 Ok: queued as 631CB37E127
quit
221 2.0.0 Bye
Connection closed by foreign host.
(2)接受端
[root@mail-westos ~]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
“/var/spool/mail/root”: 2 messages 1 new 2 unread
U 1 root Sat Apr 22 03:42 22/725 “test”
N 2 [email protected] Sat Apr 22 04:03 15/495
4.dovecot的使用與安裝(代收其他用戶郵件,也可遠程代收)
[root@mail-westos ~]#yum install dovecot -y
[root@mail-westos ~]# vim /etc/dovecot/dovecot.conf
49 disable_plaintext_auth = no
24 protocols = imap pop3 lmtp
[root@mail-westos ~]# vim /etc/dovecot/conf.d/10-mail.conf
30 mail_location = mbox:~/mail:INBOX=/var/mail/%u
[root@mail-westos ~]# cd /var/mail
[root@mail-westos mail]# ls
root rpc student
[root@mail-westos mail]# su - student
[student@mail-westos ~]mkdir - p /home/student/mail/.imap
touch /home/student/mail/.imap/INBOX
[student@mail-westos ~]$ logout
[root@mail-westos mail]# systemctl restart dovecot
[root@mail-westos mail]# yum install mutt -y
[root@mail-qq named]# mail [email protected]
Subject: test
test
test
.
EOT
[root@mail-qq named]# mailq
Mail queue is empty
[root@mail-westos mail]# mail -u student
Heirloom Mail version 12.5 7/5/10. Type ? for help.
“/var/mail/student”: 1 message 1 new
N 1 root Sat Apr 22 04:27 22/730 “test”
& q
Held 1 message in /var/mail/student
[root@mail-westos mail]# mutt -f pop:/[email protected]
進入後輸入用戶密碼,登錄即可查看到
5軟件thunderbird(postfix)客戶端
1.下載thunderbird軟件
2.編輯配置文件/etc/dovecot/dovecot.conf
3執行thunderbird命令。打開客戶端。

Bash腳本基礎
BASH = GNU Bourne-Again Shell,BASH 是 GNU 組織開發和推廣的一個項目。
Bash腳本類似批處理,簡單來講就是把許多的指令集合在一起,並提供循環、條件、判斷等重要功能,語法簡單實用,用以編寫程序,大大簡化管理員的操作,並可以完成圖形工具所無法實現的功能
3如何創建新shell腳本?
(1). 創建包含bash命令的文本文件。文件的第一行應爲:
#!/bin/bash
(2). 使文件可執行(使用chmod +x scripts)
(3). 將文件放置在用戶的PATH的目錄中  
~/bin – 用於用戶的私有程序  
/usr/local/bin – 本地開發、系統上的其他人使用的腳本  
/usr/local/sbin - 本地開發、由root使用的腳本直接運行腳本和使用source命令運行腳本是不同的!  
腳本調試模式:  
 #!/bin/bash -x  
 # bash -x scripts  
4引用和轉義  
引用和轉義在shell解析字符串時用於去除字符串中特殊字符或保留詞語的特殊含義。這會導致按字面處理字符串,而不是展開變量或將其部分內容視作具有特殊含義。  
引用有三種類型:  
弱引用  
將字符串放置在雙引號中,保留字符串中所有字符的文字值,
、\和!字符除外。換言之,變量
擴展和命令擴展在雙引號內仍起作用。
echo “can I have a $FRUIT”
echo “The current time is $(date +%r).”
強引用
將字符串放置在單引號中,保留字符串中所有字符的文字值,同時禁用所有擴展:
echo “Make $$$ Fast”
rm 'untitled folder'
轉義
非引用的\是轉義字符。它保留了下一個字符的文字值。(例如,\$PATH是確切的字符串$PATH,而
不是PATH變量的內容。)
echo Make \$\$\$ Fast\!
ls untitled\ folder
www.westos.org
5[root@server0 ~]# echo # not a comment #
[root@server0 ~]# echo \# not a comment #
# not a comment
[root@server0 ~]# echo \# not a comment \#
# not a comment #
[root@server0 ~]# echo '# not a comment #'
# not a comment #
[root@server0 ~]# echo '$HOME'
$HOME
[root@server0 ~]# echo '
pwd'
pwd
[root@server0 ~]# echo '"Hello,world"'
"Hello,world"
6[root@server0 ~]# echo "$HOME"
/root
[root@server0 ~]# echo "
pwd"
/root
[root@server0 ~]# echo ""Hello, world""
Hello, world
[root@server0 ~]# echo "\$HOME"
$HOME
[root@server0 ~]# echo "\
pwd`”
pwd
[root@server0 ~]# echo “\”Hello, world\””
“Hello, world”
7Shell變量
shell變量用於爲稍後在腳本中使用的名稱指定值,並且僅限於shell命令行或從中聲明變
量的腳本。
若要定義或指定值:
FRUIT=apple
若要參考或使用變量:
FRUIT {FRUIT}
[root@server0 ~]# FIRST=John
[root@server0 ~]# LAST=Doe
[root@server0 ~]# echo FIRST LAST
John Doe
[root@server0 ~]# echo FIRST_ LAST
Doe
[root@server0 ~]# echo {FIRST}_ LAST
John_Doe
8命令替換
命令替換在子shell中執行指定命令並用命令輸出替換腳本中的命令替換。
語法:
(shellcommand):touchdatafile. (id -un)
TODAY=(date +%Y-%m-%d)  
[root@server0 ~]# TAROUTPUT=
(tar cvf /tmp/backup.tar $(find /etc -type f -mtime 1))
tar: Removing leading /' from member names
[root@server0 ~]# echo $TAROUTPUT
/etc/hosts.allow /etc/hosts.deny /etc/sysconfig/iptables /etc/xinetd.d/tftp /etc/rht
/etc/firewalld/zones/public.xml.old /etc/firewalld/firewalld.conf.old /etc/xinetd.conf
9算術運算符
算術運算符指的是可以在程序中實現加、減、乘、除等數學運算的運算符。
operator meaning
<VARIABLE>++ 增量後
<VARIABLE>-- 減量後
- 減法
+ 加法
** 冪運算
* 乘法
/ 除法
% 餘數
+= 加等
-= 減等
10.Shell計算命令:
用$[]表示數學運算。
# echo $[1+2]
# a=1; echo $[$[$a+1]*2]
用expr表示數學運算。
# echo
expr 1 + 2
用let指示數學運算。
# let A=1+2
# echo $A
用(())表示數學運算。bash內建功能,效率高。
#!/bin/bash
for ((i=1;i<10;i++))
do
((j+=i))
done
echo $j
11.循環
for循環用於值列表中的相同命令的重複。
[root@server0 ~]# for HOST in host{1..3};do echo $HOST;done
host1
host2
host3
[root@server0 ~]# for NUM in $(seq 2 2 8);do echo $NUM;done
2
4
6
8
12.循環與計算結合:
#!/bin/bash
for ((i=1;i<=100;i++))
do
((j+=i))
#j=
expr j+ i
#let j+=i
#j=$[j+=i]
done
echo $j
也可以寫成一行:
# for((i=0; i<=100; i++));do j=
expr j+ i` ;done;echo j  
www.westos.org  
13數據庫備份示例:  
 #!/bin/bash  
for DB in
(mysql -e “show databases;” -E -N | grep -v ‘^*’ | grep -v ‘schema)doechoBackingup DB”
mysqldump DB>/dbbackup/ DB.dump
done
echo “”
for DBDUMP in /dbbackup/*
do
SIZE=(statprintf DBDUMP)
echo “DBDUMP SIZE”
done
腳本練習舉例:
[root@localhost mnt]# vim test.sh

[root@localhost mnt]# cat test.sh
#!/bin/bash #寫腳本環境,
echo hello word

/etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
腳本執行:
[root@localhost mnt]# sh test.sh
hello word
[root@localhost mnt]# chmod +x test.sh
[root@localhost mnt]# /mnt/test.sh ##腳本的絕對路徑
hello word

變量()  
[root@localhost mnt]# sh test.sh   
    LOCAL USER is root  
[root@localhost mnt]# cat test.sh   
    #!/bin/bash  
    NAME=”LOCAL USER is”  
    echo
NAME USER  
[root@localhost mnt]# vim test.sh   
[root@localhost mnt]# sh test.sh   
    LOCAL USER is root  
    my name is student_DUCK  
[root@localhost mnt]# cat test.sh   
    #!/bin/bash  
    NAME=”LOCAL USER is”  
    echo
NAME USERFIRSTNAME=studentFAMNAME=DUCKechomynameis {FIRSTNAME}_$FAMNAME

[root@localhost mnt]# echo a  
    1  
[root@localhost mnt]# echo
a0

[root@localhost mnt]# echo ${a}0 ##變量和其他字符組合使用

[root@localhost mnt]# vim test.sh
[root@localhost mnt]# sh test.sh
LOCAL USER is root
my name is student_DUCK
TIME is Tue Apr 25 19:28:19 EDT 2017
[root@localhost mnt]# cat test.sh
#!/bin/bash
NAME=”LOCAL USER is”
echo NAME USER
FIRSTNAME=student
FAMNAME=DUCK
echo my name is {FIRSTNAME}_ FAMNAME
TIME=(date)echoTIMEis TIME
[root@localhost mnt]# vim show_ip.sh
[root@localhost mnt]# sh show_ip.sh
localhost.qq.com’s ipaddress is : 172.25.254.137
[root@localhost mnt]# cat show_ip.sh
#!/bin/bash
IPADDRESS=(ifconfig eth0 | grep inet | grep inet6 -v | awk -F " " '{print 2}’)
HOSTNAME=hostname
echo “HOSTNAMEsipaddressis: IPADDRESS”

[root@localhost mnt]# vim check_file.sh
[root@localhost mnt]# sh check_file.sh
/etc/hello is not exist
/etc/passwd/ is not exist
/etc/group is exist
[root@localhost mnt]# cat check_file.sh
#!/bin/bash
for NAME in /etc/hello /etc/passwd/ /etc/group
do
ls -l NAME &>/dev/null && echo NAME is exist ||echo $NAME is not exist
done
Ping ip 腳本
[root@localhost mnt]# sh host_check.sh
172.25.254.1 is down
172.25.254.2 is down
172.25.254.3 is down
172.25.254.4 is down
172.25.254.5 is down

[root@localhost mnt]# cat host_check.sh
#!/bin/bash
for NUM in 172.25.254.{1..40}
do
ping -c1 -w1 NUM &>/dev/null && echo NUM is up || echo $NUM is down
done

四則運算以及計算的幾種命令:

  • 減法
  • 加法
    ** 冪運算
  • 乘法
    / 除法
    % 餘數

方法1:[]表示計算

[root@localhost mnt]# echo [1+2]      + 加法  
3  
[root@localhost mnt]# echo
[5-4] -減法
1[root@localhostmnt]# echo [5*4]                                     *乘法  
20  
[root@localhost mnt]# echo
[2**10] *冪運算
1024
ot@localhost mnt]# echo [24/6]      /除法  
4  
[root@localhost mnt]# echo
[10%3] %取餘 結果顯示餘數:10除3等餘3,餘1,所以結果爲1
1
方法2:
[root@localhost mnt]# echo expr 2 \* 3
6
[root@localhost mnt]# echo expr 10 \% 3
1
[root@localhost mnt]# echo expr 10 \/ 3
3
[root@localhost mnt]# echo expr 10 \+ 3
13
[root@localhost mnt]# echo expr 10 \- 3
7
方法3:
[root@localhost mnt]# let A=1+2
[root@localhost mnt]# echo A  
3  
[root@localhost mnt]# let C=2*10  
[root@localhost mnt]# echo
C
20
[root@localhost mnt]# let D=2**10
[root@localhost mnt]# echo $D
1024

++ 增量後
– 減量後
+= 加等
-= 減等

[root@localhost mnt]# vim test.sh
[root@localhost mnt]# sh test.sh
1
2
3
4
5
6
7
8
9
10
[root@localhost mnt]# cat test.sh
#!/bin/bash
for ((i=1;i<=10;i++))
do
echo $i
done
[root@localhost mnt]#

例:+=
[root@localhost mnt]# vim test.sh
[root@localhost mnt]# sh test.sh
1
3
6
10
15
21
28
36
45
[root@localhost mnt]# cat test.sh
#!/bin/bash
for ((i=1;i<10;i++))
do
((j+=i))
echo $j
done

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章