こんにちは、インフラエンジニア の 加藤(@kuromitsu_ka)です。
今回は、Sambaのアクセス制御をDNS名で実施したので必要だった設定を記載します。
エニグモ社では、令和の今もオンプレミスでSambaを利用した古き良きログの集約サーバが稼働しています。この度、オンプレミスのログサーバと同じ構成のものをAWSに構築することになりました。その際、Sambaのアクセス制御で少し工夫した部分があったので、ログを残します。
エニグモ社のログ集約サーバの仕組み
ログサーバからアプリサーバごとにディレクトリを作成して、Sambaインストール済みのサーバをログサーバからマウントすることでログを集約しています。インフラチームでない開発者は、基本的にサーバへSSHできないので、ログサーバだけアクセスを許可することで、ログを確認できるようにしています。
Sambaのアクセス制御をDNS名で設定する動機
オンプレミスのSambaのアクセス制御は、公開ディレクトリごとにIPセグメントやログサーバのIPを指定してアクセス許可設定しています。オンプレミスのサーバでは、プライベートIPが固定でしたが、AWSでは、サーバが再作成されても大丈夫なように、DNS名でアクセス制御することにしました。
- オンプレミスでのSambaアクセス許可設定
hosts allow = ログサーバのIPや、本番環境のIPセグメント
AWSでは、SGでアクセス制御をしてもよかったのですが、運用上が面倒なのでSambaの設定でアクセス制御することとなりました。
- AWSでの理想のSambaアクセス許可設定
hosts allow = ログサーバのホスト名
SambaサーバのDNS名でのアクセス制御に必要だった設定
ログサーバからマウントされるアプリやDBのサーバ(Sambaサーバ側)ではレコード引きを許可する設定と、ホワイトリスト設定が必要で、ログサーバ(Sambaクライアント側)では、ログサーバの逆引きレコードが必要でした。
必要だった設定(Sambaサーバ側)
ホスト名のIPをレコード引きを許可する設定が必要でした。
- ホスト名検索の許可
dns proxy = yes hostname lookups = yes
- ホワイトリスト設定
hosts allow = ログサーバのドメイン名
必要な設定(Sambaクライアント側)
Sambaのアクセスには、PTRレコードが必要でした。
- CloudFormationでログサーバ作成と同時に逆引きレコードも設定できるようにしました。
RecordSetPtr: Type: AWS::Route53::RecordSet Properties: HostedZoneId: ${PTRレコードホストゾーン} Type: PTR Name: !Sub - ${FourthOctet}.${ThirdOctet}.${SecondOctet}.${FirstOctet}.in-addr.arpa - FirstOctet: !Select [0, !Split [ ".", !GetAtt Instance.PrivateIp ]] SecondOctet: !Select [1, !Split [ ".", !GetAtt Instance.PrivateIp ]] ThirdOctet: !Select [2, !Split [ ".", !GetAtt Instance.PrivateIp ]] FourthOctet: !Select [3, !Split [ ".", !GetAtt Instance.PrivateIp ]] ResourceRecords: - !Sub - ${良きホスト名} TTL: 300
デバッグログ
SambaサーバのDNS名でのアクセス制御に、逆引きレコードが必要となった際のログです。
- PTRレコードがない状態でのアクセス
Sambaクライアント側からだと弾かれてしまいます。
[root@SambaClient ~]# mount.cifs //${Sambaサーバ}/test test -o vers=3.0,password=,dir_mode=0755 -vvv mount.cifs kernel mount options: ip=10.195.101.57,unc=\\10.195.101.57\syslog,vers=3.0,dir_mode=0755,user=root,pass=******** mount error(13): Permission denied Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
- Sambaサーバ側のログ
IPベースで制御していそうでした。「matchname failed on 10.195.100.9」 ※この際、SambaクライアントのIPは10.195.100.9
Denied connection from 10.195.100.9 (10.195.100.9) [2022/04/11 16:44:43.212303, 0] ../../source3/smbd/server.c:1788(main) smbd version 4.10.16 started. Copyright Andrew Tridgell and the Samba Team 1992-2019 [2022/04/11 16:44:43.266814, 0] ../../lib/util/become_daemon.c:136(daemon_ready) daemon_ready: daemon 'smbd' finished starting up and ready to serve connections [2022/04/11 16:44:45.916505, 0] ../../lib/util/access.c:365(allow_access) Denied connection from ip-10-195-100-9.ap-northeast-1.compute.internal (10.195.100.9) [2022/04/11 16:45:17.430789, 0] ../../lib/util/access.c:365(allow_access) Denied connection from ip-10-195-100-9.ap-northeast-1.compute.internal (10.195.100.9)
- 逆引きレコードのホスト名で、弾かれていることが判明しました。
# nslookup 10.195.100.9 9.100.195.10.in-addr.arpa name = ip-10-195-100-9.ap-northeast-1.compute.internal. Authoritative answers can be found from:
動作確認
DNS名で許可しているサーバからのみ、Sambaマウントできることを確認します。
許可しているログサーバのDNS名は、logserver
です。
- Sambaサーバの許可設定
[root@SambaServer ~]# cat /etc/samba/smb.conf [global] : dns proxy = yes hostname lookups = yes : include = /etc/samba/smb.d/test.conf [root@SambaServer ~]# [root@SambaServer ~]# [root@SambaServer ~]# cat /etc/samba/smb.d/test.conf [test] : hosts allow = 127. logserver
- 逆引きを設定していおらず、アクセス許可もされていない他のクライアントからだと、Sambaマウントできない。
[root@NotAllowedSambaClient ~]# hostname -I 10.195.100.9 [root@NotAllowedSambaClient ~]# [root@NotAllowedSambaClient ~]# [root@NotAllowedSambaClient ~]# nslookup 10.195.100.9 9.100.195.10.in-addr.arpa name = ip-10-195-100-9.ap-northeast-1.compute.internal. Authoritative answers can be found from: [root@NotAllowedSambaClient ~]# [root@NotAllowedSambaClient ~]# [root@NotAllowedSambaClient ~]# mount.cifs //${Sambaサーバ}/test test -o vers=3.0,password=,dir_mode=0755 -vvv mount.cifs kernel mount options: ip=${Sambaサーバ}/,unc=\\${Sambaサーバ}/\test,vers=3.0,dir_mode=0755,user=root,pass=******** mount error(13): Permission denied Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
- 逆引きレコード設定済みのアクセス許可のあるログサーバ(
logserver
)からだと、Sambaマウントできる。
[root@logserver ~]# hostname -I 10.195.116.243 [root@logserver ~]# [root@logserver ~]# [root@logserver ~]# nslookup 10.195.116.243 243.116.195.10.in-addr.arpa name = logserver.honyarara.com. Authoritative answers can be found from: [root@logserver ~]# [root@logserver ~]# [root@logserver ~]# mount.cifs //${Sambaサーバ}/test test -o vers=3.0,password=,dir_mode=0755 -vvv mount.cifs kernel mount options: ip=${Sambaサーバ},unc=\\${Sambaサーバ}\test,vers=3.0,dir_mode=0755,user=root,pass=******** [root@logserver ~]# [root@logserver ~]# [root@logserver ~]# df -h ファイルシス サイズ 使用 残り 使用% マウント位置 : //10.195.101.57/test 50G 19G 32G 38% /root/test
感想
今回は、古のシステムを触ったので供養ブログとなりましたが。
事例がパッと見つからない課題は、毎回取り組むのが楽しいです。
困った時は、ドキュメントを読むのが大事ですね。