2025年9月15日月曜日

サーバーログイン通知:msmtp を使用したメール送信

msmtp は、軽量で使いやすいSMTPクライアントです。

1. msmtpのインストール

sudo dnf install msmtp -y


Alma 10

sudo dnf --releasever-minor="" install msmtp

https://forum.directadmin.com/threads/almalinux-10-error-unable-to-find-a-match-msmtp.73169/



2. 設定ファイルの作成


ユーザーごとの設定ファイルを作成します。ここでは、Gmailを例にします。


vi ~/.msmtprc

以下の内容を記述します。


# Gmailアカウントの設定

account default

host smtp.gmail.com

port 587

auth on

tls on

tls_starttls on

from your_gmail_address@gmail.com

user your_gmail_address@gmail.com

password your_app_password

logfile ~/.msmtp.log

※your_app_passwordはGmailのアプリパスワードを使用します。通常のログインパスワードは使わない


3. 権限の設定


セキュリティのため、設定ファイルは自分だけが読み書きできるようにします。


chmod 600 ~/.msmtprc


4. スクリプトの作成


vi /usr/local/bin/login_notification.sh


#!/bin/bash


# メールアドレス設定

MAIL_ADDRESS="your_email@example.com"


# サーバーホスト名取得

HOSTNAME=$(hostname)


# ログイン情報を変数に格納

USER_NAME=$PAM_USER

LOGIN_IP=$PAM_RHOST

LOGIN_DATE=$(date +"%Y-%m-%d %H:%M:%S")


# メール件名と本文の作成

SUBJECT="SSH Login Notification: $USER_NAME on $HOSTNAME"

BODY="

User: $USER_NAME

IP Address: $LOGIN_IP

Date: $LOGIN_DATE

Server: $HOSTNAME

"


# 除外したいユーザーのリスト

EXCLUDE_USERS=("root" "testuser" "guest")


# ログインユーザーが除外リストに含まれているかチェック

for user in "${EXCLUDE_USERS[@]}"; do

    if [ "$USER_NAME" = "$user" ]; then

        # 該当ユーザーの場合、何もしないでスクリプトを終了

        exit 0

    fi

done


# 除外リストに含まれていないユーザーの場合、通知処理を実行

# ここに通知を送るコマンド(例:msmtp、curlなど)を記述

# msmtpを使ってメール送信

echo -e "Subject: $SUBJECT\nTo: $MAIL_ADDRESS\n\n$BODY" | msmtp -t


PostfixのようなフルMTAをインストールすることなく、外部のSMTPサーバー経由でメールを送信できるようになります外部SMTPサーバーへの接続設定自体は必要です。


4. スクリプトに実行権限を付与します。


sudo chmod +x /usr/local/bin/login_notification.sh



5. PAM(Pluggable Authentication Modules)の設定


pam_execモジュールを使って、ログイン成功時に先ほど作成したスクリプトを実行するように設定します。

sshdのPAM設定ファイル /etc/pam.d/sshdを編集します。


sudo vi /etc/pam.d/sshd


ファイルの末尾に以下の行を追加します。


account    required     pam_exec.so /usr/local/bin/login_notification.sh


2025年5月21日水曜日

 Raspberry Piにk8s - kubeadm

pi@raspberrypi:~ $ uname -a

Linux raspberrypi 6.12.25+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.12.25-1+rpt1 (2025-04-30) aarch64 GNU/Linux

こちらを3台。

hostname

pi@raspberrypi:~ $ sudo hostnamectl set-hostname k8s-master

pi@raspberrypi:~ $ sudo hostnamectl set-hostname k8s-node1 

pi@raspberrypi:~ $ sudo hostnamectl set-hostname k8s-node2 


hosts

192.168.1.201 k8s-master

192.168.1.202 k8s-node1

192.168.1.203 k8s-node2 


kernel modules

pi@k8s-node1:~ $ cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf

overlay

br_netfilter

EOF

overlay

br_netfilter

pi@k8s-node1:~ $

kernel parameters

 pi@k8s-node1:~ $ cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-iptables  = 1

net.bridge.bridge-nf-call-ip6tables = 1

net.ipv4.ip_forward                 = 1

EOF

net.bridge.bridge-nf-call-iptables  = 1

net.bridge.bridge-nf-call-ip6tables = 1

net.ipv4.ip_forward                 = 1

pi@k8s-node1:~ $ 


cntainerd

wget https://github.com/containerd/containerd/releases/download/v2.1.0/containerd-2.1.0-linux-arm64.tar.gz

wget https://github.com/containerd/containerd/releases/download/v2.1.0/containerd-2.1.0-linux-arm64.tar.gz.sha256sum

sha256sum -c containerd-2.1.0-linux-arm64.tar.gz.sha256sum 

sudo tar Cxzvf /usr/local containerd-2.1.0-linux-arm64.tar.gz 

sudo systemctl daemon-reload

sudo systemctl enable --now containerd


runc

wget https://github.com/opencontainers/runc/releases/download/v1.3.0/runc.arm64

sudo install -m 755 runc.arm64 /usr/local/sbin/runc


CNI plugins

wget https://github.com/containernetworking/plugins/releases/download/v1.7.1/cni-plugins-linux-arm-v1.7.1.tgz

mkdir -p /opt/cni/bin

sudo mkdir -p /opt/cni/bin

sudo tar Cxzvf /opt/cni/bin cni-plugins-linux-arm-v1.7.1.tgz ./

sudo swapoff -a



kubeadm

sudo apt-get install -y apt-transport-https ca-certificates curl gpg

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt-get install -y kubelet kubeadm kubectl

sudo apt-mark hold kubelet kubeadm kubectl


kubeadm version

pi@k8s-master:~ $ kubeadm version

kubeadm version: &version.Info{Major:"1", Minor:"33", EmulationMajor:"", EmulationMinor:"", MinCompatibilityMajor:"", MinCompatibilityMinor:"", GitVersion:"v1.33.1", GitCommit:"8adc0f041b8e7ad1d30e29cc59c6ae7a15e19828", GitTreeState:"clean", BuildDate:"2025-05-15T08:25:51Z", GoVersion:"go1.24.2", Compiler:"gc", Platform:"linux/arm64"}


cgroup

/boot/firmware/cmdline.txt に cgroup_memory=1 cgroup_enable=memory

swapoff

sudo dphys-swapfile swapoff && sudo dphys-swapfile uninstall && sudo systemctl disable dphys-swapfile


 

2025年5月20日火曜日

Raspberry Pi

pi@raspberrypi:~ $ cat /etc/os-release 

PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"

NAME="Debian GNU/Linux"

VERSION_ID="12"

VERSION="12 (bookworm)"

VERSION_CODENAME=bookworm

ID=debian

HOME_URL="https://www.debian.org/"

SUPPORT_URL="https://www.debian.org/support"

BUG_REPORT_URL="https://bugs.debian.org/"

インストール後、スタティックIPにしたい。DHCPで振られたIPアドレスにSSH後、nmcliで設定する。

pi@raspberrypi:~ $ sudo nmcli c show

NAME                UUID                                  TYPE      DEVICE 

Wired connection 1  243310b8-ea95-3f02-a82a-0d48d2222b2e  ethernet  eth0   

lo                  82987325-fd00-45b8-9709-f81470c274b6  loopback  lo     

pi@raspberrypi:~ $ sudo nmcli c mod 'Wired connection 1' ipv4.addresses 192.168.1.203/24 ipv4.method manual

pi@raspberrypi:~ $ sudo nmcli con mod 'Wired connection 1' ipv4.gateway 192.168.1.1

pi@raspberrypi:~ $ sudo nmcli con mod 'Wired connection 1' ipv4.dns 1.1.1.1

pi@raspberrypi:~ $ sudo nmcli c down 'Wired connection 1' && sudo nmcli c up 'Wired connection 1'