裏セグメントからyumやwget等したい場合の設定


裏セグメントのホスト(たとえばVPCのEIPついてないのとかDBやNASなど裏においときたいやつ)
から名前解決とかメールとかyumとかwgetとか時刻同期とかメールしたい!
という場合の設定についてざっくりまとめさせていただきます。

とりあえず2パターンあります。
NATする(AWSの場合NATインスタンスを使う)パターンと、
グローバル通信できる管理サーバにソフトウェアを入れて解決するパターン。

★NATする(AWSの場合NATインスタンスを使う)パターン

db側はInternetGatewayつけてなくてパブリックでなくローカルなルーティングな場合、
名前解決をはじめ外に出られないです。(※)
NATインスタンスを作るのも勿体ないと、複数NICがついたwebをnat化しようとしたところ、
マルチインタフェースなインスタンスはNATの出口に出来ない模様でした。
(※)最近新しくとったアカウントはVPCオンリーになっていてそちらだとグローバルIPがどんどん勝手に振られるようです。。(EIPつけざるをえない仕様)

NATインスタンス作成方法は以下URLから
Amazon VPCトレーニング-NATインスタンスの作成方法
VPC詳細 -ほぼ週刊AWSマイスターシリーズ第7回-
Amazon VPCでNATを使ってPublic SubnetとPrivate Subnetを分ける

一番上のスライドのとおりでnatインスタンスを作成可能。
 ざっくりいうと、
 VPCサブネットをつくり、
 ”ami-vpc-nat”AMIでNATインスタンスを作成し、
 NATインスタンスの”Change Source/DestCheck”をDisableにし、
 NATインスタンスにEIPをアソシエートし、
 PublicSubnetのRouterTableにNATインスタンスのIDを追加し、
 必要に応じてNATインスタンスのSecurityGroupを設定する

そのほか、一般的なルータ化設定方法と同様に、
インスタンス作成後にiptablesでnatのルール設定が必要になる模様。
[shell]/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/16 -j MASQUERADE
service iptables save
iptables –list -t nat[/shell]
上記スライドのとおりNATインスタンスをデフォルトゲートウェイにするルーティング設定も必要
forwardingの設定も必要
[shell]# vi /etc/sysctl.conf
—————————————————-
net.ipv4.ip_forward = 0

net.ipv4.ip_forward = 1
—————————————————-
# sysctl -p[/shell]

ルータ化設定方法(NAT)
natテーブルを利用したLinuxルータの作成

NAT化したらクライアント側のデフォルトゲートウェイをNATサーバに指定します

新しいデフォルトゲートウェイ追加
[shell]# /sbin/route add default gw 10.0.0.251 dev eth0
# netstat -rn[/shell]

古いデフォルトゲートウェイ削除
[shell]# /sbin/route del default gw 10.0.0.2 dev eth0
# netstat -rn[/shell]

確認
[shell]# ping yahoo.co.jp[/shell]

★グローバル通信できる管理サーバにソフトウェアを入れて解決するパターン

とりあえず名前解決から。bindを使う場合です。

・内部DNSを構築
参考:
内部向け DNS サーバの構築

@DNSサーバ側
[shell]# rpm -qa|grep bind
bind-utils-9.3.6-20.P1.el5_8.5
ypbind-1.19-12.el5_6.1
bind-libs-9.3.6-20.P1.el5_8.5

yum install bind.x86_64 bind-devel.x86_64
Installed:
bind.x86_64 30:9.3.6-20.P1.el5_8.6
bind-devel.x86_64 30:9.3.6-20.P1.el5_8.6

Dependency Installed:
bind-libs.i386 30:9.3.6-20.P1.el5_8.6

Dependency Updated:
bind-libs.x86_64 30:9.3.6-20.P1.el5_8.6
bind-utils.x86_64 30:9.3.6-20.P1.el5_8.6

vi /etc/named.conf
—————
options {
// zone ファイルの格納場所
directory "/var/named";
// BIND の利用を許す範囲を指定
allow-query {
// 自分自身( localhost )
127.0.0.1;
// 10.0.0.* ( Subnet 255.255.255.0 )
10.0.0.0/24;
};
// スレーブ DNS のアドレスを記述。内向き DNS の場合は必要ないが一応記載 。
allow-transfer {
// 自分自身( localhost )
127.0.0.1;
// 10.0.0.* ( Subnet 255.255.255.0 )
10.0.0.0/24;
};
// 自前で名前解決できないとき、まずはプロバイダの DNS へ聞きに行く様にする。
// LAN 内名前解決のパフォーマンス向上にもつながるらしい。 2003/07/29 追記
forwarders {
211.132.xxx.xxx; // ISAOのプライマリ DNS の IP アドレス
211.132.xxx.xxx; // ISAOのセカンダリ DNS の IP アドレス
};
};

// ルート DNS の情報
zone "." {
// ルート DNS の情報である事を明示
type hint;
// ファイル名
file "named.ca";
};

// localhost の正引きの設定
zone "localhost" {
// Master DNS Serverであることを示す
type master;
// ファイル名
file "localhost.zone";
};

// localhost の逆引きの設定
zone "0.0.127.in-addr.arpa" {
// Master DNS Serverであることを明示
type master;
// ファイル名
file "0.0.127.in-addr.arpa";
};

// 10.0.0.* の逆引きの設定
zone "0.0.10.in-addr.arpa" {
// Master DNS Serverであることを明示
type master;
// ファイル名
file "empty";
};
—————

wget ftp://ftp.nic.ad.jp/internet/rs.internic.net/domain/named.root
cp named.root /var/named/named.ca

vi /var/named/empty
———————————————————–
; BIND reverse data file for empty rfc1918 zone
;
; DO NOT EDIT THIS FILE – it is used for multiple zones.
; Instead, copy it, edit named.conf, and use that copy.
;
$TTL 86400
@ IN SOA localhost root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
86400 ) ; Negative Cache TTL
;
@ IN NS localhost.
———————————————————–

vi /var/named/localhost.zone
—-
$TTL 86400
@ IN SOA @ root (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
86400 ) ; Negative Cache TTL
IN NS @
IN A 127.0.0.1
—-

vi /var/named/0.0.127.in-addr.arpa
—-
$TTL 86400

@ IN SOA localhost. root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
86400 ) ; Negative Cache TTL
IN NS localhost.
1 IN PTR localhost.
—-

vi /etc/sysconfig/named
OPTIONS="-4"
/etc/init.d/named start
ps -ef|grep named
named 4801 1 0 12:02 ? 00:00:00 /usr/sbin/named -u named -4
chkconfig named on[/shell]

@DNSクライアント側
[shell]vi /etc/resolv.conf

nameserver 10.0.0.10
nameserver 10.0.0.2

# dig +noall +answer www.isao.net
www.isao.net. 1800 IN A 218.42.137.171
# dig +noall +answer www.yahoo.co.jp
www.yahoo.co.jp. 372 IN CNAME www.g.yahoo.co.jp.
www.g.yahoo.co.jp. 17 IN A 124.83.203.233[/shell]

※なぜbindかというと慣れてるからです。
unboundのほうが簡単なようです。以下参考。
Unboundをインストールしてみた

これだけだと名前は解決できるがyumはできないです。
bindだけでは名前しか解決できないので、
squidとntpdをいれてnasからのyumとwgetとntpdateを行えるようにします。

・フォワードプロキシを構築しyumとwgetとcurlをする

※webサーバフロントエンドを高速化するリバースプロキシではありません。
 コンテンツをキャッシュして内部からのダウンロードを高速化(または規制)するほうの使い方です。

@プロキシサーバ側
[shell]yum install squid.x86_64 –enablerepo=epel
Installed:
squid.x86_64 7:2.6.STABLE21-6.el5

cp -p /etc/squid/squid.conf{,.date +%Y%m%d}
vim /etc/squid/squid.conf
diff /etc/squid/squid.conf{,.date +%Y%m%d}
590d589
< acl lan src 10.0.0.0/255.255.255.0
638d636
< http_access allow lan
2795,2797d2792
< header_access X-Forwarded-For deny all
< header_access Via deny all
< header_access Cache-Control deny all
3012d3006
< visible_hostname xx-stg.isao.net
4284c4278
< forwarded_for off

> # forwarded_for on
service squid start
chkconfig squid on
netstat -lnpt|grep squid
tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 5010/(squid)[/shell]

@クライアント側
[shell]vi /etc/yum.conf

proxy=http://10.0.0.10:3128/

yum grouplist

vi ~/.wgetrc

http_proxy=10.0.0.10:3128

vi ~/.curlrc

proxy=http://10.0.0.10:3128
–[/shell]
※wget等のためのプロキシの指定
そのた、gitやgemやvagrantなんかはこちらに書いてありました。

リポジトリのインストールは以下を参考に

RPMforge EPEL ELRepo Remi リポジトリインストール

・時刻同期のためにntpdを立てる
@ntpサーバ側
[shell]touch /etc/ntp.drift
cp -p /etc/ntp.conf{,.org}
vi /etc/ntp.conf

server ntp.nict.jp
server ntp.jst.mfeed.ad.jp
driftfile /etc/ntp.drift

service ntpd start
chkconfig ntpd on
ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
ntp.nict.jp 133.243.238.243 2 u 2 64 3 33.951 -102.58 3.204
ntp2.jst.mfeed. 210.173.160.86 2 u 2 64 3 2.568 -102.27 2.897[/shell]

@ntpクライアント側
[shell]ntpdate 10.0.0.10
# ntpdate -b 10.0.0.10
24 Jan 14:58:55 ntpdate[6730]: step time server 10.0.0.10 offset 0.070994 sec
# crontab -e
# crontab -l
0 * * * * /usr/sbin/ntpdate -bs 10.0.0.10 > /dev/null 2>&1[/shell]
クラウドの場合時刻がずれやすいと聞いたことがありますし、時刻がずれるとログの時刻やDBの時刻のカラムがずれたりなどで、
アプリケーションへの影響が深刻になる可能性があるかもしれません。忘れずに設定が必要かと思います。

★LAN内部からMTAサーバに転送してメールしたい場合の設定

・sendmailの場合
@MTAの設定
ローカルからのメール転送を受け付ける設定をする
sendmail.cfをコンパイルする為に必要なrpmの導入
[shell]# yum install sendmail-cf[/shell]
設定の修正
[shell]# cd /etc/mail
# cp -p sendmail.mc{,.date +%Y%m%d}
# vi sendmail.mc
dnl DAEMON_OPTIONS(Port=smtp,Addr=10.0.0.251, Name=MTA')dnl
LOCAL_DOMAIN(
mydmainname.com’)dnl[/shell]
※全方位から許可してRELAYを制限しています()
[shell]# cp -p access{,.date +%Y%m%d}
# vi access
Connect:localhost.localdomain RELAY
Connect:localhost RELAY
Connect:127.0.0.1 RELAY
Connect:10.0.0 RELAY[/shell]
設定の更新
[shell]# makemap -v hash /etc/mail/access.db < /etc/mail/access
# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf[/shell]
sendmail再起動
[shell]# /etc/init.d/sendmail restart[/shell]

@メールクライアントの設定
バックアップ
[shell]# cp -p /etc/mail/submit.cf{,.org} ; ls -al /etc/mail/submit.cf*
# cp -p /etc/mail/local-host-names{,.org}; ls -al /etc/mail/local-host-names*[/shell]

設定変更
[shell]# DJ_HOSTNAME=fromのドメインになるクライアントのホスト名を指定
# sed -i ‘s/^#Dj\$w.Foo.COM$/\0\nDj’${DJ_HOSTNAME}’/’ /etc/mail/submit.cf
# echo ${DJ_HOSTNAME} >> /etc/mail/local-host-names
# sed -i "s/D{MTAHost}\[127\.0\.0\.1\]/D{MTAHost}[10.0.0.251]/g" /etc/mail/submit.cf[/shell]
※MTAHostにメールMTAアドレスを指定
※Dj設定しない場合は/etc/hostsの127.0.0.1の行の3カラム目にlocalhostの代わりに書いたドメインがfromになります。

比較確認
[shell]# diff /etc/mail/submit.cf{,.org}
# diff /etc/mail/local-host-names{,.org}[/shell]

最後にmailコマンドで送信確認をします
[shell]# mail -s title-testmail hoge@gmail.com[/shell]

DKIMとかSPFレコードとか必要なら別途設定のこと。

・postfixの場合
@メールサーバ側の設定
[shell]# vi /etc/postfix/main.cf

mynetworks = 54.249.xxx.xxx/32, 10.122.4.56/32, 10.121.18.78/32 54.249.xxx.xxx/32

# service postfix reload[/shell]

※ローカルから許可(上記はVPCでないAWS環境なので/32指定しているがVPCなら/24等でOK)
※ほかの設定は適宜済んでる前提

@メールクライアントの設定
[shell]# vi /etc/postfix/main.cf

myhostname = [クライアントホストのFQDN]
relayhost = [MTAのFQDN]

# service postfix reload[/shell]

・qmailの場合
tcp.smtpにRELAY許可するように書いてハッシュDB更新します。
[shell]# cp -p tcp.smtp{,.date +%Y%m%d}
# vi tcp.smtp
10.0.0.:allow,RELAYCLIENT=""

# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp[/shell]

vpopmailも入ってるなら
[shell]# /home/vpopmail/bin/clearopensmtp[/shell]

DBの中身を確認する
[shell]# cdbdump < /home/vpopmail/etc/tcp.smtp.cdb > ./tcp.smtp.date +%Y%m%d.txt[/shell]

※クライアント側はsendmailかpostfixの場合を確認のこと
※PATHは適宜ご確認ください

NATインスタンスないとすこし設定が複雑になりそうですね。シンプルなほうがよければNATがいいと思います。
ただ、管理サーバはあるけどIFが複数だったりNATインスタンス代がもったいない場合にアプリいれれば解決します。


裏セグメントのホスト(たとえばVPCのEIPついてないのとか)から名前解決とかメールとかyumとかwgetとか時刻同期したい!
という場合の設定についてざっくりまとめさせていただきます。

とりあえず2パターンあります。
NATする(AWSの場合NATインスタンスを使う)パターンと、
グローバル通信できる管理サーバにソフトウェアを入れて解決するパターン。

★NATする(AWSの場合NATインスタンスを使う)パターン

db側はInternetGatewayつけてなくてパブリックでなくローカルなルーティングな場合、
名前解決をはじめ外に出られないです。
NATインスタンスを作るのも勿体ないと、複数NICがついたwebをnat化しようとしたところ、
マルチインタフェースなインスタンスはNATの出口に出来ない模様でした。

NATインスタンス作成方法は以下URLから
Amazon VPCトレーニング-NATインスタンスの作成方法
VPC詳細 -ほぼ週刊AWSマイスターシリーズ第7回-
Amazon VPCでNATを使ってPublic SubnetとPrivate Subnetを分ける

一番上のスライドのとおりでnatインスタンスを作成可能。
 ざっくりいうと、
 VPCサブネットをつくり、
 ”ami-vpc-nat”AMIでNATインスタンスを作成し、
 NATインスタンスの”Change Source/DestCheck”をDisableにし、
 NATインスタンスにEIPをアソシエートし、
 PublicSubnetのRouterTableにNATインスタンスのIDを追加し、
 必要に応じてNATインスタンスのSecurityGroupを設定する

そのほか、一般的なルータ化設定方法と同様に、
インスタンス作成後にiptablesでnatのルール設定が必要になる模様。
[shell]/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/16 -j MASQUERADE
service iptables save
iptables –list -t nat[/shell]
上記スライドのとおりNATインスタンスをデフォルトゲートウェイにするルーティング設定も必要
forwardingの設定も必要
[shell]# vi /etc/sysctl.conf
—————————————————-
net.ipv4.ip_forward = 0

net.ipv4.ip_forward = 1
—————————————————-
# sysctl -p[/shell]

ルータ化設定方法(NAT)
natテーブルを利用したLinuxルータの作成

NAT化したらクライアント側のデフォルトゲートウェイをNATサーバに指定します

新しいデフォルトゲートウェイ追加
[shell]# /sbin/route add default gw 10.0.0.251 dev eth0
# netstat -rn[/shell]

古いデフォルトゲートウェイ削除
[shell]# /sbin/route del default gw 10.0.0.2 dev eth0
# netstat -rn[/shell]

確認
[shell]# ping yahoo.co.jp[/shell]

★グローバル通信できる管理サーバにソフトウェアを入れて解決するパターン

とりあえず名前解決から。bindを使う場合です。

・内部DNSを構築
参考:
内部向け DNS サーバの構築

@DNSサーバ側
[shell]# rpm -qa|grep bind
bind-utils-9.3.6-20.P1.el5_8.5
ypbind-1.19-12.el5_6.1
bind-libs-9.3.6-20.P1.el5_8.5

yum install bind.x86_64 bind-devel.x86_64
Installed:
bind.x86_64 30:9.3.6-20.P1.el5_8.6
bind-devel.x86_64 30:9.3.6-20.P1.el5_8.6

Dependency Installed:
bind-libs.i386 30:9.3.6-20.P1.el5_8.6

Dependency Updated:
bind-libs.x86_64 30:9.3.6-20.P1.el5_8.6
bind-utils.x86_64 30:9.3.6-20.P1.el5_8.6

vi /etc/named.conf
—————
options {
// zone ファイルの格納場所
directory "/var/named";
// BIND の利用を許す範囲を指定
allow-query {
// 自分自身( localhost )
127.0.0.1;
// 10.0.0.* ( Subnet 255.255.255.0 )
10.0.0.0/24;
};
// スレーブ DNS のアドレスを記述。内向き DNS の場合は必要ないが一応記載 。
allow-transfer {
// 自分自身( localhost )
127.0.0.1;
// 10.0.0.* ( Subnet 255.255.255.0 )
10.0.0.0/24;
};
// 自前で名前解決できないとき、まずはプロバイダの DNS へ聞きに行く様にする。
// LAN 内名前解決のパフォーマンス向上にもつながるらしい。 2003/07/29 追記
forwarders {
211.132.xxx.xxx; // ISAOのプライマリ DNS の IP アドレス
211.132.xxx.xxx; // ISAOのセカンダリ DNS の IP アドレス
};
};

// ルート DNS の情報
zone "." {
// ルート DNS の情報である事を明示
type hint;
// ファイル名
file "named.ca";
};

// localhost の正引きの設定
zone "localhost" {
// Master DNS Serverであることを示す
type master;
// ファイル名
file "localhost.zone";
};

// localhost の逆引きの設定
zone "0.0.127.in-addr.arpa" {
// Master DNS Serverであることを明示
type master;
// ファイル名
file "0.0.127.in-addr.arpa";
};

// 10.0.0.* の逆引きの設定
zone "0.0.10.in-addr.arpa" {
// Master DNS Serverであることを明示
type master;
// ファイル名
file "empty";
};
—————

wget ftp://ftp.nic.ad.jp/internet/rs.internic.net/domain/named.root
cp named.root /var/named/named.ca

vi /var/named/empty
———————————————————–
; BIND reverse data file for empty rfc1918 zone
;
; DO NOT EDIT THIS FILE – it is used for multiple zones.
; Instead, copy it, edit named.conf, and use that copy.
;
$TTL 86400
@ IN SOA localhost root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
86400 ) ; Negative Cache TTL
;
@ IN NS localhost.
———————————————————–

vi /var/named/localhost.zone
—-
$TTL 86400
@ IN SOA @ root (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
86400 ) ; Negative Cache TTL
IN NS @
IN A 127.0.0.1
—-

vi /var/named/0.0.127.in-addr.arpa
—-
$TTL 86400

@ IN SOA localhost. root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
86400 ) ; Negative Cache TTL
IN NS localhost.
1 IN PTR localhost.
—-

vi /etc/sysconfig/named
OPTIONS="-4"
/etc/init.d/named start
ps -ef|grep named
named 4801 1 0 12:02 ? 00:00:00 /usr/sbin/named -u named -4
chkconfig named on[/shell]

@DNSクライアント側
[shell]vi /etc/resolv.conf

nameserver 10.0.0.10
nameserver 10.0.0.2

# dig +noall +answer www.isao.net
www.isao.net. 1800 IN A 218.42.137.171
# dig +noall +answer www.yahoo.co.jp
www.yahoo.co.jp. 372 IN CNAME www.g.yahoo.co.jp.
www.g.yahoo.co.jp. 17 IN A 124.83.203.233[/shell]

※なぜbindかというと慣れてるからです。
unboundのほうが簡単なようです。以下参考。
Unboundをインストールしてみた

これだけだと名前は解決できるがyumはできないです。
bindだけでは名前しか解決できないので、
squidとntpdをいれてnasからのyumとwgetとntpdateを行えるようにします。

・フォワードプロキシを構築しyumとwgetをする

※webサーバフロントエンドを高速化するリバースプロキシではありません。
 コンテンツをキャッシュして内部からのダウンロードを高速化(または規制)するほうの使い方です。

@プロキシサーバ側
[shell]yum install squid.x86_64 –enablerepo=epel
Installed:
squid.x86_64 7:2.6.STABLE21-6.el5

cp -p /etc/squid/squid.conf{,.date +%Y%m%d}
vim /etc/squid/squid.conf
diff /etc/squid/squid.conf{,.date +%Y%m%d}
590d589
< acl lan src 10.0.0.0/255.255.255.0
638d636
< http_access allow lan
2795,2797d2792
< header_access X-Forwarded-For deny all
< header_access Via deny all
< header_access Cache-Control deny all
3012d3006
< visible_hostname xx-stg.isao.net
4284c4278
< forwarded_for off

> # forwarded_for on
service squid start
chkconfig squid on
netstat -lnpt|grep squid
tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 5010/(squid)[/shell]

@クライアント側
[shell]vi /etc/yum.conf

proxy=http://10.0.0.10:3128/

yum grouplist

vi ~/.wgetrc

http_proxy=10.0.0.10:3128
–[/shell]
※wgetのためのプロキシの指定

リポジトリのインストールは以下を参考に

RPMforge EPEL ELRepo Remi リポジトリインストール

・時刻同期のためにntpdを立てる
@ntpサーバ側
[shell]touch /etc/ntp.drift
cp -p /etc/ntp.conf{,.org}
vi /etc/ntp.conf

server ntp.nict.jp
server ntp.jst.mfeed.ad.jp
driftfile /etc/ntp.drift

service ntpd start
chkconfig ntpd on
ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
ntp.nict.jp 133.243.238.243 2 u 2 64 3 33.951 -102.58 3.204
ntp2.jst.mfeed. 210.173.160.86 2 u 2 64 3 2.568 -102.27 2.897[/shell]

@ntpクライアント側
[shell]ntpdate 10.0.0.10
# ntpdate -b 10.0.0.10
24 Jan 14:58:55 ntpdate[6730]: step time server 10.0.0.10 offset 0.070994 sec
# crontab -e
# crontab -l
0 * * * * /usr/sbin/ntpdate -bs 10.0.0.10 > /dev/null 2>&1[/shell]
クラウドの場合時刻がずれやすいと聞いたことがありますし、時刻がずれるとログの時刻やDBの時刻のカラムがずれたりなどで、
アプリケーションへの影響が深刻になる可能性があるかもしれません。忘れずに設定が必要かと思います。

★LAN内部からMTAサーバに転送してメールしたい場合の設定

・sendmailの場合
@MTAの設定
ローカルからのメール転送を受け付ける設定をする
sendmail.cfをコンパイルする為に必要なrpmの導入
[shell]# yum install sendmail-cf[/shell]
設定の修正
[shell]# cd /etc/mail
# cp -p sendmail.mc{,.date +%Y%m%d}
# vi sendmail.mc
dnl DAEMON_OPTIONS(Port=smtp,Addr=10.0.0.251, Name=MTA')dnl
LOCAL_DOMAIN(
mydmainname.com’)dnl[/shell]
※全方位から許可してRELAYを制限しています()
[shell]# cp -p access{,.date +%Y%m%d}
# vi access
Connect:localhost.localdomain RELAY
Connect:localhost RELAY
Connect:127.0.0.1 RELAY
Connect:10.0.0 RELAY[/shell]
設定の更新
[shell]# makemap -v hash /etc/mail/access.db < /etc/mail/access
# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf[/shell]
sendmail再起動
[shell]# /etc/init.d/sendmail restart[/shell]

@メールクライアントの設定
バックアップ
[shell]# cp -p /etc/mail/submit.cf{,.org} ; ls -al /etc/mail/submit.cf*
# cp -p /etc/mail/local-host-names{,.org}; ls -al /etc/mail/local-host-names*[/shell]

設定変更
[shell]# DJ_HOSTNAME=fromのドメインになるクライアントのホスト名を指定
# sed -i ‘s/^#Dj\$w.Foo.COM$/\0\nDj’${DJ_HOSTNAME}’/’ /etc/mail/submit.cf
# echo ${DJ_HOSTNAME} >> /etc/mail/local-host-names
# sed -i "s/D{MTAHost}\[127\.0\.0\.1\]/D{MTAHost}[10.0.0.251]/g" /etc/mail/submit.cf[/shell]
※MTAHostにメールMTAアドレスを指定
※Dj設定しない場合は/etc/hostsの127.0.0.1の行の3カラム目にlocalhostの代わりに書いたドメインがfromになります。

比較確認
[shell]# diff /etc/mail/submit.cf{,.org}
# diff /etc/mail/local-host-names{,.org}[/shell]

最後にmailコマンドで送信確認をします
[shell]# mail -s title-testmail hoge@gmail.com[/shell]

DKIMとかSPFレコードとか必要なら別途設定のこと。

・postfixの場合
@メールサーバ側の設定
[shell]# vi /etc/postfix/main.cf

mynetworks = 54.249.xxx.xxx/32, 10.122.4.56/32, 10.121.18.78/32 54.249.xxx.xxx/32

# service postfix reload[/shell]

※ローカルから許可(上記はVPCでないAWS環境なので/32指定しているがVPCなら/24等でOK)
※ほかの設定は適宜済んでる前提

@メールクライアントの設定
[shell]# vi /etc/postfix/main.cf

myhostname = [クライアントホストのFQDN]
relayhost = [MTAのFQDN]

# service postfix reload[/shell]

・qmailの場合
tcp.smtpにRELAY許可するように書いてハッシュDB更新します。
[shell]# cp -p tcp.smtp{,.date +%Y%m%d}
# vi tcp.smtp
10.0.0.:allow,RELAYCLIENT=""

# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp[/shell]

vpopmailも入ってるなら
[shell]# /home/vpopmail/bin/clearopensmtp[/shell]

DBの中身を確認する
[shell]# cdbdump < /home/vpopmail/etc/tcp.smtp.cdb > ./tcp.smtp.date +%Y%m%d.txt[/shell]

※クライアント側はsendmailかpostfixの場合を確認のこと
※PATHは適宜ご確認ください

NATインスタンスないとすこし設定が複雑になりそうですね。シンプルなほうがよければNATがいいと思います。
ただ、管理サーバはあるけどIFが複数だったりNATインスタンス代がもったいない場合にアプリいれれば解決します。

おすすめ記事