PostfixとDovecotの連携
はじめに
インフラエンジニア初学者のぽれいんと申します。
転職する前はプログラミングスクールにて主にHTML、CSS、Ruby、MySQL等について学びました。
※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。
<前回の記事>
↑↑まだ見ていない方はこちらから↑↑
<参考>
メールサーバー構築(Postfix+Dovecot) - CentOSで自宅サーバー構築
Postfix+Dovecotによるメールサーバ構築 | DevelopersIO
使用する環境
- サーバー
- Amazon EC2
- インスタンスタイプ: t2.micro (1台)
- オペレーティングシステム: Amazon Linux 2
- Amazon EC2
本日のやりたいこと
①今回は送信メールサーバをPostfix、受信メールサーバをDovecotとしてメールの送受信をできるようにする。
②Maildir形式を採用し、telnetを使用しメールが届いているか確認できるようにする。
DNSやpostfixの設定は前回記事を参考にどうぞ
Dovecot
Dovcotのインストール
yum install -y dovecot
ユーザを作成し、パスワードを設定
useradd porain
passwd porain
----パスワードを2回入力----
porain
porain
/etc/dovecot/dovecot.confの設定(主役)
cp -a /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.'date +"%m%d"'
vi /etc/dovecot/dovecot.conf
以下のように変更
----------------------------------------
#protocols = imap pop3 lmtp
↓
#protocols = imap pop3 lmtp
#pop3での通信を許可
protocols = pop3
----------------------------------------
/etc/dovecot/conf.d/10-mail.confの設定(脇役1)
cp -a /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.'date +""%m%d"'
vi /etc/dovecot/dconf.d/10-mail.conf
以下のように変更
----------------------------------------
# mail_location = maildir:~/Maildir
↓
#メールボックスの場所を定義
mail_location = maildir:~/Maildir
----------------------------------------
/etc/dovecot/conf.d/10-auth.confの設定(脇役2)
cp -a /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.'date +""%m%d"'
vi /etc/dovecot/dconf.d/10-auth.conf
以下のように変更
----------------------------------------
#disable_plaintext_auth = yes
↓
#平文でのログインを許可
disable_plaintext_auth = no
----------------------------------------
/etc/dovecot/conf.d/10-ssl.confの設定(脇役3)
cp -a /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.'date +""%m%d"'
vi /etc/dovecot/dconf.d/10-ssl.conf
以下のように変更
----------------------------------------
#ssl = required
↓
#ssl = required
#SSL接続しなくてもOKにする
ssl = yes
----------------------------------------
/etc/dovecot/conf.d/10-master.confの設定(脇役4)
cp -a /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.'date +""%m%d"'
vi /etc/dovecot/dconf.d/10-master.conf
以下のように変更
----------------------------------------
service pop3-login {
inet_listener pop3 {
#port = 110
}
↓
service pop3-login {
inet_listener pop3 {
# pop3の通信を許可
port = 110
}
----------------------------------------
いや、設定ファイル多すぎ…(笑)
doveconfコマンドで設定ファイルを確認
doveconf -a
doveconf -n
-a:読み込まれる全ての設定を表示
-n:デフォルト値と異なる全ての設定を表示
※設定がしっかりしてないとエラー箇所が表示される
動作確認
確認のためのメールを送信
echo "test" | mail -s test -r from@example.com porain@mail.hogehoge.com
※メールアドレスはユーザ名@ドメイン名で設定
telnetをインストール
yum install -y telnet
telnet localhost 110
+OK Dovecot readyの表示でPOP3に接続成功
以下のコマンドを順番に実行し、メールの受信を確認
user porain
pass porain
list
retr 1
user : 作成したユーザ名を入力
pass : 設定したパスワードを入力
list : 送られてきたメッセージを表示
retr : 指定したメッセージを詳細表示
以上!!!!
メールサーバ構築(SMTPサーバ)
はじめに
インフラエンジニア初学者のぽれいんと申します。
転職する前はプログラミングスクールにて主にHTML、CSS、Ruby、MySQL等について学びました。
※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。
<前回の記事>
↑↑まだ見ていない方はこちらから↑↑
本日のやりたいこと
今回は電子メールを利用するためのメールサーバの構築を行う。
使用する環境
- サーバー
- Amazon EC2
- インスタンスタイプ: t2.micro (1台)
- オペレーティングシステム: Amazon Linux 2
- Amazon EC2
メールサーバとは
メールサーバの種類
メールサーバには以下の2種類がある。
これらのサーバを総合してメールサーバと呼ぶ。
メールの保存形式
SMTPサーバに送信されたメールの保存形式は以下の2種類がある。
- Mailbox形式
- Maildir形式
Mailbox形式は古くから使われている形式でユーザごとに受信したすべてのメールを平文で1つのファイルに連結して保存する。そのため、ファイルが壊れるとすべてのメールを失うことになってしまう。
Maildir形式は1通のメールを1つのファイルとして保管する。そのため、1つファイルが壊れても1通のメールを失うのみで留まる。
メールの読み出し(受信)
メールサーバに蓄積されたメールはPOPまたはIMAPというプロトコルを使って読み出すことができる。
- POP
POP(Post Office Protocol)は2021年現在バージョンが3になっているためPOP3とも呼ばれる。メールサーバにメールが届いた際にユーザがパソコンなどの端末にメールをダウンロードして、端末上で管理するのが特徴。
IMAP(International Message Access Protocol)は2021年現在バージョンが4になっているためIMAP4とも呼ばれる。インターネットを利用しメールにアクセスする通信規約のためメールサーバにあるメールを端末にダウンロードする必要がなくメールサーバ上で管理されているメールをメールソフトで閲覧するのが特徴。
メール配送の仕組み
- クライアントがメールを送信するとSMTPサーバがそれを受け取る。
- SMTPサーバはメールを受け取るとIPアドレスよりPOPサーバ(IMAPサーバ)にメールを転送する。
- 送信先クライアントはPOPサーバからメールをダウンロードする。(IMAPサーバにメールが保存される)
メールサーバの構築(SMTPサーバ)
rootユーザになる
sudo su -
postfixの起動確認(※postfixはCentOSにデフォルトで入っています。)
rpm -qa postfix
ステータス・自動起動を確認
systemctl status postfix
systemctl is-enabled postfix
postfixのプロセスが動いているか確認
ポート番号を確認
ps -efH | grep postfix
netstat -anp | grep master
メールを送信するためのコマンドmailをインストール
yum install -y mailx
自分宛にメールを送信できるか確認
mail -s 件名 root@localhost
メールログの確認
tail -f /var/log/maillog
メールが受信できているか確認
DNSサーバと連携
<SMTPサーバの設定>
設定ファイルのバックアップファイルを作成
cp /etc/postfix/main.cf /etc/postfix/main.cf_20210821
ls /etc/postfix/main.cf_20210821
コメントアウトの行を排除したファイルを作成し、設定ファイルに上書き
grep -v ^# /etc/postfix/main.cf | cat -s > /tmp/post.txt
cp /tmp/post.txt /etc/postfix/main.cf
y
postfixの設定ファイルを編集
vi /etc/postfix/main.cf
以下を変更
----------ここから---------------------
inet_interfaces = localhost
↓
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost
↓
mydestination = $myhostname, $mydomain
----------ここまで---------------------
以下を先頭に追記
----------ここから---------------------
myhostname = mail.hogeohoge.com
mydomain = hogehoge.com
myorigin = $myhostname
mynetworks = 172.31.0.0/16, 127.0.0.1
----------ここまで---------------------
設定を変更したため再起動し、プロセスとポート番号を確認
systemctl restart postfix
ps -efH | grep postfix
netstat -anp | grep master
<DNSサーバの設定>
BINDのステータスを確認
systemctl status named
Unit named.service could not be found.と表示される場合はBINDのインストールがされていないためDNSサーバの構築が必要。
↓DNSサーバの構築は以下の記事を参照↓
(任意の)正引きのゾーンデータベースファイルに以下を追記
vi /var/named/hogehoge.com.zone
最終行に以下を追記
------------ここから-----------------------
mail IN A xxx.xxx.x.xx
------------ここまで-----------------------
※xxx.xxx.x.xxはSMTPサーバのIPアドレス
構文チェック
named-checkzone hogehoge.com /var/named/hogehoge.com.zone
以下のようにOKが表示されればOK
zone hogehoge.com/IN: loaded serial 2017080701
OK
/etc/resolv.conf を変更
vi /etc/resolv.conf
------------------------------------------
---以下をコメントアウト---
#nameserver 172.31.0.2
---以下を追記---
#ローカルループアップアドレス
nameserver 127.0.0.1
------------------------------------------
namedを起動し、プロセスとポート番号を確認
systemctl restart named
ps -efH | grep named
netstat -anp | grep 53
ドメインを使ってメールを送信
mail -s 件名 root@mail.hogehoge.com
メールログの確認
tail -f /var/log/maillog
メールが受信できているか確認
以上!!!!
DNSサーバ構築
はじめに
インフラエンジニア初学者のぽれいんと申します。
転職する前はプログラミングスクールにて主にHTML、CSS、Ruby、MySQL等について学びました。
※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。
<前回の記事>
↑↑まだ見ていない方はこちらから↑↑
使用環境
- サーバー
- Amazon EC2
- インスタンスタイプ: t2.micro (1台)
- オペレーティングシステム: Amazon Linux 2
- Amazon EC2
DNSサーバの構築
rootユーザになる
sudo su -
bindのインストール
yum install -y bind
bindを自動起動を有効にして起動
systemctl enable named
systemctl start named
namedプロセスの起動確認
ps -efH | grep named
以下プロセスが起動していることを確認
named 3341 1 0 08:07 ? 00:00:00 /usr/sbin/named -u named -c /etc/name .conf
netstat -anp | grep named
以下のようにnamedが利用する53番ポートがオープンしていることを確認
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 3341/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 3341/named
tcp6 0 0 ::1:53 :::* LISTEN 3341/named
tcp6 0 0 ::1:953 :::* LISTEN 3341/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 3341/named
udp6 0 0 ::1:53 :::* 3341/named
unix 2 [ ] DGRAM 20948 3341/named
コピーを作成してnamed.confの編集
cp /etc/named.conf /etc/named.conf.org
vi /etc/named.conf
--------ここから--------------
・全てのサーバから名前解決できるようにする
listen-on port 53 { 127.0.0.1; }; → listen-on port 53 { 127.0.0.1;any; };
listen-on-v6 port 53 { ::1; }; → listen-on-v6 port 53 { ::1;any; };
・全てのサーバからクエリの受付を許可
allow-query { localhost; }; → allow-query { any; };
--------ここまで--------------
※anyを使用するとセキュリティに問題があるように思われるが、他でセキュリティの強化が図れる。しかし、現場で作業する際は上長に設定値の確認を行う。
/etc/named.confの構文チェック
named-checkconf
ゾーンデータベースファイルの作成・編集
vi /var/named/hogehoge.com.zone
-----------ここから---------------
$ORIGIN hogehoge.com.
$TTL 900
@ IN SOA ns.hogehoge.com. sample.hogehoge.com. (
2017080701 ; Serial
3600 ; Refresh
900 ; Retry
1814400 ; Expire
900 ) ; Minimum
IN NS ns
ns IN A 192.168.1.10
hoge IN A 192.168.2.21
porain IN A 192.168.3.33
-----------ここまで---------------
/var/named/hogehoge.zoneの構文チェック
named-checkzone hogehoge.com /var/named/hogehoge.com.zone
以下のようにOKが表示されればOK
zone hogehoge.com/IN: loaded serial 2017080701
OK
named.confに追記
vi /etc/named.conf
以下を追記
-----------ここから---------------
#以下管理したいゾーン情報
zone "hogehoge.com" IN {
type master;
file "/var/named/hogehoge.com.zone";
};
-----------ここまで---------------
/etc/named.confの構文チェック
named-checkconf
/etc/resolv.confの編集
vi /etc/resolv.conf
---以下をコメントアウト---
#nameserver 172.31.0.2
---以下を追記---
#ローカルループアップアドレス
nameserver 127.0.0.1
bindの再起動・プロセス・ポート番号のリッスンを確認
systemctl restart named
ps -efH | grep named
netstat -anp | grep named
↑でLinuxのIPアドレスが開通していることを確認!
digコマンドで名前解決ができているか確認
dig porain.hogehoge.com
以上!!!!!!!!!!!!!!
AWS ~ボリュームの変更~
はじめに
インフラエンジニア初学者のぽれいんと申します。
転職する前はプログラミングスクールにて主にHTML、CSS、Ruby、MySQL等について学びました。
※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。
<前回の記事>
<参考記事>
EBS ボリュームへの変更のリクエスト - Amazon Elastic Compute Cloud
ボリュームサイズ変更後の Linux ファイルシステムの拡張 - Amazon Elastic Compute Cloud
EC2での操作
2.変更するインスタンスを選択しストレージに移動
3.ボリュームIDを選択
4.アクション^よりボリュームの変更を選択
5.サイズに変更したい値を入力して、変更を選択
※ ▼Elastic Block Store のボリュームからボリュームサイズの変更が可能だが事故を防ぐために、上記のやり方の方が安全と判断。
インスタンス内での操作
rootになる
sudo su -
各ボリュームで使用中のファイルシステムを確認
df -hT
-以下上記コマンド実行結果例-
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 482M 0 482M 0% /dev
tmpfs tmpfs 492M 0 492M 0% /dev/shm
tmpfs tmpfs 492M 476K 492M 1% /run
tmpfs tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/xvda1 xfs 8.0G 2.1G 6.0G 26% /
tmpfs tmpfs 99M 0 99M 0% /run/user/1000
tmpfs tmpfs 99M 0 99M 0% /run/user/0
ボリュームに拡張が必要なパーティションがあるか確認
lsblk
-以下上記コマンド実行結果例-
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 10G 0 disk
mqxvda1 202:1 0 8G 0 part /
growpart /dev/xvda 1
増加したボリュームサイズがパーティションに反映されていることを確認
lsblk
-以下上記コマンド実行結果例-
xvda 202:0 0 10G 0 disk
mqxvda1 202:1 0 10G 0 part /
各ボリュームのファイルシステムのサイズを確認
df -h
-以下上記コマンド実行結果例-
Filesystem Size Used Avail Use% Mounted on
devtmpfs 482M 0 482M 0% /dev
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 492M 476K 492M 1% /run
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 2.1G 6.0G 26% /
tmpfs 99M 0 99M 0% /run/user/1000
tmpfs 99M 0 99M 0% /run/user/0
ボリュームでファイルシステムを拡張
xfs_growfs -d /
-以下上記コマンド実行結果例-
meta-data=/dev/xvda1 isize=512 agcount=4, agsize=524159 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1 spinodes=0
data = bsize=4096 blocks=2096635, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2096635 to 2620923
変更を確認
df -h
-以下上記コマンド実行結果例-
Filesystem Size Used Avail Use% Mounted on
devtmpfs 482M 0 482M 0% /dev
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 492M 476K 492M 1% /run
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/xvda1 10G 2.1G 8.0G 21% /
tmpfs 99M 0 99M 0% /run/user/1000
tmpfs 99M 0 99M 0% /run/user/0
以上!!!!!!
Docker-compose
はじめに
インフラエンジニア初学者のぽれいんと申します。
転職する前はプログラミングスクールにて主にHTML、CSS、Ruby、MySQL等について学びました。
※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。
<前回の記事>
<参考>
Docker Compose を使う|初心者が絵で理解する Docker
《滅びの呪文》Docker Composeで作ったコンテナ、イメージ、ボリューム、ネットワークを一括完全消去する便利コマンド - Qiita
docker-compose.ymlの書き方について解説してみた - Qiita
docker-compose の書き方! 分かりやすいDockerFileとの違い | SHURA-SPOT
docker-compose
docker-composeとは複数のコンテナから成るサービスを自動的に構築、起動してくれる便利なツール。コンテナを複数用意するため、管理がしやすい。
・イメージ図
docker-compose インストール
curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
docker-compose.ymlの書き方
・基本構文
version: "3"
services:
web:
container_name: web
build: ./web
ports:
- "80:80"
volumes:
- ./work:/work
db:
container_name: db
build: ./db
ports:
- "3306:3306"
volumes:
- ./work:/work
・基本構文の意味
version: #composeファイル形式の宣言
services: #サービス。これの下にサービスの名称を記入
container_name: #コンテナの名称
build: #Dockerfileのあるディレクトリを指定してイメージをビルド
ports: #公開用のポートの指定
volumes: #作業フォルダの同期
・こういうのもあるよ
environment: #環境変数の指定
restart: always # いつもコンテナの再起動を実施
depends_on # サービス間の依存関係を指定
便利
今までの状態を元に戻す場合(破滅の呪文)
docker-compose down --rmi all --volumes --remove-orphans
docker rm `docker ps -f "status=exited" -q`
Dockerの基礎の基礎の基礎
はじめに
インフラエンジニア初学者のぽれいんと申します。
転職する前はプログラミングスクールにて主にHTML、CSS、Ruby、MySQL等について学びました。
※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。
<前回の記事>
<参考記事>
Dockerfileとdocker buildコマンドでDockerイメージの作成:いまさら聞けないDocker入門(3)(1/2 ページ) - @IT
Dockerfileとdocker buildコマンドでDockerイメージの作成:いまさら聞けないDocker入門(3)(2/2 ページ) - @IT
コンテナ
コンテナは仮想基盤を提供する方式として、従来からのホストOS型、ハイパーバイザ型に加えてここ近年はコンテナ型と呼ばれるものが利用されるようになってきたそう。
メリット
- 起動が速い
- 同じ構成の環境を簡単に再現
デメリット
- ホストとコンテナで異なるOSは使えない
使ってみる
dockerをインストール
yum install docker
dockerを起動し、プロセスを確認
systemctl start docker
ps -efH | grep docker
mkdir /opt/porain
cd /opt/porain/
'dockertest'をindex.htmlにリダイレクト
echo 'dockertest' > index.html
Dockerfileを作成
Dockerfile…Dockerコンテナーの構成内容をまとめて記述するシンプルなテキスト形式のファイル
Dockerfileの記述方法
{命令} | 用途 |
---|---|
FROM | 元となるDockerイメージの指定 |
MAINTAINER | 作成者の情報 |
RUN | コマンドの実行 |
ADD | ファイル/ディレクトリの追加 |
CMD | コンテナーの実行コマンド 1 |
ENTRYPOINT | コンテナーの実行コマンド 2 |
WORKDIR | 作業ディレクトリの指定 |
ENV | 環境変数の指定 |
USER | 実行ユーザーの指定 |
EXPOSE | ポートのエクスポート |
VOLUME | ボリュームのマウント |
vi Dockerfile
###以下を記入
--------------------------
FROM nginx
EXPOSE 80
COPY index.html /usr/share/nginx/html
CMD nginx -g "daemon off;"
--------------------------
my_nginxという名前でDockerコンテナーの起動、構成、Dockerイメージの作成
まで一気に実行
docker build . -t my_nginx
Dockerイメージ一覧を確認
docker images
Docerコンテナを起動
docker run -d -p 80:80 --name web my_nginx
Dockerコンテナ一覧を確認
docker ps
以上