CentOS7でメール受信時にスクリプトを実行する

Postfixの設定

すでにインストール済みのはずなのでアップデートしてから設定。DNSの設定は済んでいるものとする。

yum -y update postfix
cp /etc/postfix/main.cf /etc/postfix/main.cf.org
vi /etc/postfix/main.cf
diff /etc/postfix/main.cf.org  /etc/postfix/main.cf

サブドメイン限定で受信するだけなので編集するのはこれだけ。ユーザーのローカルから処理するように alias_maps の設定も変える。

76a77
> myhostname = noah.rocca.co.jp
113c114
< #inet_interfaces = all
---
> inet_interfaces = all
116c117
< inet_interfaces = 127.0.0.1
---
> #inet_interfaces = 127.0.0.1
386c387,388
< alias_maps = hash:/etc/aliases
---
> #alias_maps = hash:/etc/aliases
> alias_maps = hash:/home/<username>/.aliases

エイリアスに以下を追記して受信時にスクリプト呼び出し。今回、ローカルから処理したいので、ローカル側で以下の設定とした。

touch /home/<username>/.aliases.db
vi /home/<username>/.aliases

test@sub.domain.ltd で受信。

test: "| /home/<username>/commands/bin/script"

Rootで反映して再起動

postalias /home/<username>/.aliases
systemctl restart postfix

なんかあったら以下でログ確認のこと。

tail -f /var/log/maillog

ポートについて

今回は受信だけなので25さえ空けてればOKです。

さくらのVPSでCentOS7にローカル接続の設定

何度やっても忘れますので備忘録。 192.168.0.5 に設定する例です。

nmcli connection up "System eth1"
nmcli c m "System eth1" connection.autoconnect yes
nmcli connection modify "System eth1" ipv4.method manual ipv4.addresses "192.168.0.5/24" connection.autoconnect yes
nmcli connection up "System eth1"
ip addr

CentOS7で快適な開発環境を作る(Vim, Tmux, Zsh)

いろんな宗派があると思うので、私はこうだよ、という備忘録。

とりあえず

これは入れておく。

yum install -y git wget

Tmux2.9

yum で入れると古すぎるので、開発環境だし最新を入れます。 3.0 だと新しすぎて怖いので、 2.9 で。ソースからコンパイルlibeventncurses が無いとコンフィグエラー起きるので入れ忘れなきよう。

cd /usr/local/src/
yum install -y libevent-devel ncurses-devel
wget https://github.com/tmux/tmux/releases/download/2.9a/tmux-2.9a.tar.gz
tar -zxvf tmux-2.9a.tar.gz
cd tmux-2.9a/
./configure
make
make install

Vim8

当然のごとく、ソースからコンパイルruby は使わないのとインストールが面倒だったのでオプションに入れませんでした。

cd /usr/local/src/
git clone https://github.com/vim/vim.git
yum install -y lua-devel lua python-dev python3-dev perl-ExtUtils-Embed lua-devel ncurses-devel python-devel python36 python36-libs python36-devel python36-pip
yum remove -y vim-enhanced
cd vim
./configure     --enable-fail-if-missing     --with-features=huge     --disable-selinux     --enable-luainterp     --enable-perlinterp     --enable-pythoninterp=dynamic     --with-python-config-dir=/usr/lib64/python2.7/config     --enable-python3interp=dynamic     --with-python3-config-dir=/usr/lib64/python3.6/config-3.6m-x86_64-linux-gnu     --enable-cscope     --enable-fontset     --enable-multibyte     vi_cv_path_python3=/usr/bin/python3.6
make
make install
vim

Zsh(Oh-my-zsh + Powerlevel10k)

こちらも最新版が必要なので、ソースからコンパイル

cd /usr/local/src/
wget https://downloads.sourceforge.net/project/zsh/zsh/5.8/zsh-5.8.tar.xz
tar xvf zsh-5.8.tar.xz
cd zsh-5.8/
./configure --enable-multibyte
make
make install
echo /usr/local/bin/zsh >> /etc/shells

Oh-my-zsh + Powerlevel10kのインストール。ここからは開発するユーザー権限で作業します。

sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

~/.zshrc のテーマを ZSH_THEME="powerlevel10k/powerlevel10k" に変更。再度ログインすると、Cuiの設定画面が出てくるのでそれに従ってPowerlevel10kを設定する。

CentOS7にPHP74, PostgreSQL12, MariaDB10.4をインストールする

PostgreSQL12

12用のリポをゲットしてインストール。

yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum -y install postgresql12-server postgresql12-contrib
cp /var/lib/pgsql/12/data/pg_hba.conf /var/lib/pgsql/12/data/pg_hba.conf.org
vi /var/lib/pgsql/12/data/pg_hba.conf
diff /var/lib/pgsql/12/data/pg_hba.conf.org /var/lib/pgsql/12/data/pg_hba.conf

編集した差分はこちら。ローカルかつ特定のユーザーからしかアクセスできないように設定。

84c84
< local   all             all                                     peer
---
> local   all             all                                     trust
86c86
< host    all             all             127.0.0.1/32            ident
---
> host    all             <dbusername>       127.0.0.1/32            md5
88c88
< host    all             all             ::1/128                 ident
---
> #host    all             all             ::1/128                 ident
91,93c91,93
< local   replication     all                                     peer
< host    replication     all             127.0.0.1/32            ident
< host    replication     all             ::1/128                 ident
---
> #local   replication     all                                     peer
> #host    replication     all             127.0.0.1/32            ident
> #host    replication     all             ::1/128                 ident

データベースの初期化。

PGSETUP_INITDB_OPTIONS="-E UTF8 --no-locale" /usr/pgsql-12/bin/postgresql-12-setup initdb
su - postgres
psql

ユーザーの追加。権限の変更。ユーザー一覧の確認。

CREATE ROLE <dbusername> CREATEDB LOGIN PASSWORD '<dbpassword>';
ALTER USER kir014912 SUPERUSER;
\du;

rootに戻ってサービスの登録と起動。ファイヤーウォールの設定。

firewall-cmd --state
firewall-cmd --list-all
firewall-cmd --permanent --zone=public --add-service=postgresql
systemctl restart firewalld.service
firewall-cmd --list-all
systemctl enable postgresql-12.service
systemctl start postgresql-12

MariaDB10.4

以下のリポジトリにバージョン指定すればインストール指定したバージョンでインストールが可能。インストール後は初期設定。

curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash -s -- --mariadb-server-version=mariadb-10.4
yum install -y MariaDB-server MariaDB-client
mysql_secure_installation

初期設定はrootのパスワード設定以外はだいたいYesで。

cp /etc/my.cnf.d/mariadb-server.cnf /etc/my.cnf.d/mariadb-server.cnf.org
vi /etc/my.cnf.d/mariadb-server.cnf
diff  /etc/my.cnf.d/server.cnf.org  /etc/my.cnf.d/server.cnf

[mysqld] 以下に追記。

12a13,15
> character-set-server = utf8mb4
> [client-mariadb]
> default-character-set = utf8mb4

サービス登録と起動、ファイヤーウォールの設定。

systemctl enable mariadb
systemctl start mariadb
firewall-cmd --permanent --zone=public --add-service=mysql
systemctl restart firewalld.service
firewall-cmd --list-all

PHP74

epelリポジトリからPHP74のインストール。ipaフォントはプロジェクトで使うのでついでに入れてます。

yum install -y epel-release
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum install -y --enablerepo=remi-php74 php php-mysql php-pgsql httpd-tools php-curl php-dom php-gd php-pecl-imagick php-zip  php-mbstring php-openssl php-xml unzip ipa-gothic-fonts ipa-pgothic-fonts fontconfig
php -v

composer なしにはPHPで何もできないように思うので初めから入れておく。

cd /usr/local/src/
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/local/bin/composer

さくらのクラウドでCentOS7を導入したメモ - その3

ロードバランサの設定

スイッチ+ルーター にロードバランサの構成とした。WEB側のサーバーのみロードバランサを利用し、DB側は別途ローカルスイッチを作成し、ローカルからアクセスすることとした。

内容はここと全く同じ。

manual.sakura.ad.jp

cp /etc/sysctl.conf /etc/sysctl.conf.org
vi /etc/sysctl.conf

以下を追記する。

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

反映

sysctl -p

バイスの追加

/etc/sysconfig/network-scripts/ifcfg-lo:0

以下を記述。

DEVICE=lo:0
IPADDR=仮想IPアドレス
NETMASK=255.255.255.255

反映

ifup lo:0

さくらのクラウドでCentOS7を導入したメモ - その2

IPアドレスの設定(ローカルスイッチ)

ip addr
vi /etc/sysconfig/network-scripts/ifcfg-eth1

eth1の設定がなかったので追加

DEVICE=eth1
BOOTPROTO=static
DEVICE=eth1
BOOTPROTO=static
ONBOOT=yes
GATEWAY=192.168.0.1
PREFIX=24
IPADDR=192.168.0.<*>

設定の反映と確認

systemctl restart NetworkManager
systemctl restart network
nmcli d

phpのインストールと設定

yum install -y epel-release
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum install -y --enablerepo=remi-php74 php php-fpm php-mysql php-pgsql httpd-tools php-curl php-dom php-gd php-pecl-imagick php-zip  php-mbstring php-openssl php-xml unzip ipa-gothic-fonts ipa-pgothic-fonts fontconfig
systemctl enable php-fpm
systemctl start php-fpm
mkdir /run/php
vi /etc/php-fpm.d/www.conf

以下変更

user = nginx
group = nginx
listen = /run/php/php7.4-fpm.sock
listen.owner = www
listen.group = www

ソースコンパイルのnginxだとlistenが違ってるが、yumで構築した環境からの移行なので、パスを揃える。起動時に /run/php が作られるように設定。

vi /etc/tmpfiles.d/php-fpm.conf

以下を記述。

d /run/php 0755 www www

yumの設定をそのままコピー

mkdir /etc/nginx/conf/snippets
vi /etc/nginx/conf/snippets/fastcgi-php.conf

phpの設定をコピペ

# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+?\.php)(/.*)$;

# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;

# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;

fastcgi_index index.php;
include fastcgi.conf;

Let's Encryptのインストールと設定

yum -y install certbot

旧サーバーから /etc/letsencrypt ディレクトリ以下一式持ってくる。
*自動更新のcronはサイト移転終わってからやる。

nginxの設定

ユーザーの追加

useradd -s /sbin/nologin www
passwd www
mkdir /var/www
chown -R www:www /var/www
mkdir /etc/nginx/sites-available /etc/nginx/sites-enabled 
cd /etc/nginx
cp conf/nginx.conf conf/nginx.conf.org
vi conf/nginx.conf

追記、変更

user  www;
worker_processes  auto;
http {
server_tokens off;
##
# Gzip Settings
##

gzip on;

# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

##
# Virtual Host Configs
##

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

Basic認証

htpasswd -c /etc/nginx/.htpasswd username

nginxとphp-fpm再起動

systemctl restart nginx
systemctl restart php-fpm

composerインストール

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/local/bin/composer

さくらのクラウドでCentOS7を導入したメモ - その1

ログインユーザーの追加とSSHの設定

ユーザーの追加

useradd <username>
passwd <username>
usermod -G wheel <username>

SSHの設定

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org
vi /etc/ssh/sshd_config

以下の部分をnoに変更

PermitRootLogin no 
PasswordAuthentication no

保存したら

systemctl restart sshd
su - <username>

ここからログインユーザー側

mkdir .ssh
chmod 700 .ssh
vi ~/.ssh/authorized_keys

認証キー追加したら

chmod 600 ~/.ssh/authorized_keys

SiteGuardの導入

さくらのVPSさくらのクラウドではSiteGuardが無償提供されています。スタートアップスクリプトが残念ながらApacheバージョンでしたので手動で導入。

cd /usr/local/src
curl -OL <SiteGuard Server Edition のインストールファイル>
tar -zxvf siteguard-server-edition-*****.tar.gz
cd siteguard-server-edition-****
make install

SiteGuardのプラグインを導入するため、nginxはソースからコンパイルする必要があります。 ここ注意。あと、、、めんどくさい。

必要なライブラリを入れてきます。詳しく調べてないけど、OpenSSLは1.1.1を入れた方がよさそうだったのでソースからコンパイル

yum install -y zlib-devel pcre-devel apr-devel apr-util-devel java-1.8.0-openjdk
cd /usr/local/src
curl -OL https://www.openssl.org/source/openssl-1.1.1j.tar.gz
tar -zxvf openssl-1.1.1j.tar.gz
./config --prefix=/usr/local/openssl-1.1.1 shared zlib
make depend
make
make install
vi /etc/ld.so.conf.d/openssl-1.1.1.conf

以下を追加

/usr/local/openssl-1.1.1/lib

保存して反映。

ldconfig

ようやくnginxをインストール

cd /usr/local/src
curl -OL http://nginx.org/download/nginx-1.18.0.tar.gz
tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0
./configure --add-module=/opt/jp-secure/siteguardlite/nginx --with-http_ssl_module --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --with-openssl=/usr/local/src/openssl-1.1.1j
make
make install

systemdの設定

vi /usr/lib/systemd/system/nginx.service

以下を記述。

[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/etc/nginx/logs/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/conf/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

登録、自動起動

systemctl start nginx
systemctl enable nginx

これで最後、SiteGuardのセットアップ。

cd /opt/jp-secure/siteguardlite/
./setup.sh

ファイヤーウォールの設定をすれば終了。

firewall-cmd --list-all
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --add-service=https --zone=public --permanent
firewall-cmd --add-port=9443/tcp --zone=public --permanent
firewall-cmd --reload