CentOS

rsync を使ったサーバー間のデータコピー

rsync -e "ssh -p 2288" -rva /home/user/work user@111.22.3.0:/home/user/work

ポートを指定する場合は、-e “ssh -p 2288”で指定する。
オプション-nで、dry-run実行となる。

rsync -e "ssh -p 2288" -rvna /home/user/work user@111.22.3.0:/home/user/work

失敗する場合は、パーミッションの問題が多そうです。

Let’s encrypt 更新失敗 対応

sclでインストールした、python2.7 で、証明書の自動更新が失敗していた為、
手動で実行してみると下記のエラーとなる。

OSError: Command /opt/eff.org/certbot/venv/bin/python2.7 -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip wheel failed with error code 1

調べてみると、pipのバージョンが古い可能性が有るということなので、下記を実行して更新ができるようになりました。

pip2.7 install --upgrade setuptools
pip2.7 install --upgrade virtualenv
pip2.7 install --upgrade pip

Let’s encrypt 証明書失効処理

使用していないドメインを、certbot-auto で更新しない形にしたかったので、失効処理を調べて実行した際のメモ

./certbot-auto revoke --cert-path=/etc/letsencrypt/archive/www.example.com/cert1.pem

cert1.pem は、最新の証明書を指定。
実行すると、下記、証明書の格納ディレクトリ、更新ファイルが削除されていました。

/etc/letsencrypt/archive/www.example.com/
/etc/letsencrypt/live/www.example.com/
/etc/letsencrypt/renewal/www.example.com.conf

CentOS7.2 fail2ban で DDos を防ぐ

毎回設定を忘れるのでメモ

filter

$ vi /etc/fail2ban/filter.d/apache-ddos.conf
[Definition]
failregex = <HOST>.*"(HEAD|GET|POST).*
ignoreregex = \.(?i)(jpe?g|gif|png|bmp|pdf|js|css|woff|eot|ttf|ico|txt|xml|swf|xlsx?|docx?|pptx?)
              \/wp-admin.*

banする条件

$ vi /etc/fail2ban/jail.d/local.conf

[apache-ddos]
enabled = true
port = http,https
# フィルタ名
filter = apache-ddos
# 監視するログ名
logpath = /var/log/httpd/ssl/www*_access_log

# 許容する接続回数
# 5回以上不正に接続するとBANされる
maxretry = 5
# 不正アクセスカウント時間
# 80秒(80)
findtime = 360
# BANした後、再び接続できるようになるまでの時間(秒)
# 86400秒 = 1日
bantime = 86400
backend = polling

自分のIPは除外

$ vi /etc/fail2ban/jail.conf

[DEFAULT]

#
# MISCELLANEOUS OPTIONS
#

# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space (and/or comma) separator.
ignoreip = 127.0.0.1/8 xxx.xxx.xxx.xxx/32

設定の有効化・チェック

$ systemctl reload fail2ban
$ fail2ban-regex /var/log/httpd/ssl/www.example.com_access_log /etc/fail2ban/filter.d/apache-ddos.conf ← フィルターのチェック
$ fail2ban-client status apache-ddos ← banされたIPアドレスの確認
$ less /var/log/fail2ban.log ← fail2banのログの確認

Docker on Vagrant(CentOS7)でDockerから外部に出ていけない現象

結論

net.ipv4.conf.all.forwarding = 0になっているので、1にする。

$ sysctl net.ipv4.conf.all.forwarding
net.ipv4.conf.all.forwarding = 0

$ sudo sysctl net.ipv4.conf.all.forwarding=1
net.ipv4.conf.all.forwarding = 1
$ sysctl net.ipv4.conf.all.forwarding
net.ipv4.conf.all.forwarding = 1

事の発端

HostからVagrant経由で、Dockerにアクセスしてもなぜか繋がらなくなった。

docker-composeでビルドし直してみる。

$ docker-compose build --no-cache
....
 IPv4 forwarding is disabled. Networking will not work

apt-getでパッケージupdateしようとした所、外部に出ていけなくなっていた。

Vagrant上の、CentOSの、net.ipv4.conf.all.forwardingが 0 になっていて、外部に出れなくなっていた。

原因

ネットワークの再起動で、

sysctl -w net.ipv4.ip_forward=0 > /dev/null 2>&1

となっている。

対策

/etc/sysctl.conf

net.ipv4.ip_forward=1

CentOS が UNEXPECTED INCONSISTENCY で起動しない

Postgresにdumpをリストアしていたら途中でリストアに失敗して、CentOS再起動したらUNEXPECTED INCONSISTENCY;で起動しなくなりました。

/dev/VolGroup00/LogVol00: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
        (i.e., without -a or -p options )
                                                           [FAILED]

*** An error occurred during the file system check.
*** Dropping you to a shell; the system will reboot
*** when you leave the shell.
Give root password for maintenance
(or type Control-D for normal startup):

centos59_64_default_1390292917__Running_

rootでログインして、fsckを実行しろと表示されるので実行。

# fsck  -t  ext3  /dev/VolGroup00/LogVol00

centos59_64_default_1390292917__Running_2

修復はすぐ終わり、起動時にエラーは出なくなりました。

vagrant up でエラーが出るときに確認すること

デバッグログを出力して起動する

$ env VAGRANT_LOG=debug vagrant up

VirtualBoxのコンソールを出力して起動する

$ vi Vagrantfile

config.vm.provider :virtualbox do |vb|
  # Don't boot with headless mode
  vb.gui = true
...
end

今回起動しなかった原因

Vagrantfileのsynced_folderのパーミッションを変えて再起動したら、下記のエラーがでて起動しなくなった。

    Timed out while waiting for the machine to boot. This means that
    Vagrant was unable to communicate with the guest machine within
    the configured ("config.vm.boot_timeout" value) time period. This can
    mean a number of things.

    If you're using a custom box, make sure that networking is properly
    working and you're able to connect to the machine. It is a common
    problem that networking isn't setup properly in these boxes.
    Verify that authentication configurations are also setup properly,
    as well.

    If the box appears to be booting properly, you may want to increase
    the timeout ("config.vm.boot_timeout") value.

timeoutの設定変更したりしたが、起動せず。
GUIモードで、VirtualBoxのコンソール出力して起動したら、起動時にエラーが出ている。

/dev/VolGroup00/LogVol00: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
(i.e., without -a or -p options )
[FAILED]
*** An error occurred during the file system check.
*** Dropping you to a shell; the system will reboot
*** when you leave the shell.
Give root password for maintenance
(or type Control-D for normal startup):

fsckコマンドで修復する必要があるので、コマンドを調べて実行したら無事vagrantからも起動出来ました。

fsck -t ext3 /dev/VolGroup00/LogVol00

Vagrantのsaharaプラグインを使ってみる

Vagrantにはsaharaという、VMの状態をロールバックしたりできるプラグインがあります。
下記に、詳しく書いてあります。

saharaでVagrantの状態管理 – Qiita [キータ].

使ってみる

インストールは、vagrantコマンドでインストールしました。

$ vagrant plugin install sahara
$ vagrant plugin list

確認

$ vagrant plugin list
sahara (0.0.15)

saharaプラグインをインストールするとVirtualBoxに別のイメージが作られて、そこを使って状態を管理するようです。

Oracle_VM_VirtualBox_マネージャー-3-4

Vagrantで構築したCentOSで開発する メール送信テスト環境設定

メール送信のテストする為の環境構築した際にてこずったので、同じミスをしないようにブログに投稿します。

Vagrantについては、昨日書いたエントリーの通りとなります。

suusuke – blog – Vagrantで構築したCentOSで開発する.

目次

  1. Postfixインストール・設定
  2. Dovecotインストール・設定
  3. Hostから送受信テスト

Postfixインストール・設定

Postfixをインストールして、設定ファイルを変更します。
開発環境なので、メールが送れているかチェックしたいだけなので、全てのドメイン宛のメールをローカルの配送する用に設定します。

$ yum -y install postfix
$ cp /etc/postfix/{main.cf,main.cf.org}
$ vi /etc/postfix/main.cf

# 全てのメールを受け取る
inet_interfaces = all

# ローカル配送で不明なユーザを拒否しない
local_recipient_maps =

# Maildir形式として保存するディレクトリを /usr/local/mail/ の下にユーザー毎に作成する
mail_spool_directory = /usr/local/mail/

# ローカル配送で不明なユーザへのメールは maildev へ送る
luser_relay = maildev

# トランスポートマップを指定
transport_maps = hash:/etc/postfix/transport

トランスポートマップの設定

$ vi /etc/postfix/transport

# 全てローカルに配送
*       local:
$ postmap /etc/postfix/transport

設定反映

$ /sbin/service postfix reload

Maildirの場所ですが、通常であれば、~/Maildir/となるのですが、/home/ディレクトリをホストにマウントしており、何度メールを送ってもnot permittedになってしまい、配送に失敗していたため、変更しました。
ただ、Vagrantfileでマウントの設定でユーザーは root パーミッションは 777 にしているつもりなのですが、ここは今後の課題ですね。

Nov 30 19:50:20 localhost postfix/local[5922]: 7D5656F026C: to=<maildev@mail.vagrant-centos59_64.localdomain>, relay=loc
al, delay=0.17, delays=0.14/0/0/0.03, dsn=5.2.0, status=bounced (maildir delivery failed: create maildir file /home/mail
dev/Maildir/new/1385808620.V15I7c25M679327.vagrant-centos59_64: Operation not permitted)

配送先ユーザーmaildevは予め追加しておきます。

$ useradd maildev
$ passwd maildev

元々、sendmailもpostfix入っていないサーバーだったので、mtaの変更は必要ないですが、一応確認だけします。

$ /usr/sbin/alternatives --config mta

1 プログラムがあり 'mta' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.postfix

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:

Dovecotインストール・設定

Dovecotをインストールし、設定します。
各プロトコルを使えるようにと、PostfixでMaildirのパスを変更しているのでそこを設定します。

$ yum -y install dovecot
$ cp /etc/{dovecot.conf,dovecot.conf.org}

protocols = imap imaps pop3 pop3s
mail_location = maildir:/usr/local/mail/%u

Dovecotは、本番環境に合わせて、1系をyumでそのままインストールしました。

Hostから受信テスト

telnetコマンドでメールを送ります。

$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.vagrant-centos59_64.localdomain ESMTP Postfix
helo localhost
250 mail.vagrant-centos59_64.localdomain
mail from: k.suke.suzuki@gmail.com
250 2.1.0 Ok
rcpt to: test@test.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
subject: test
てすとです。
.
250 2.0.0 Ok: queued as 6E27E6F026E
quit
221 2.0.0 Bye
Connection closed by foreign host.

HostにThunderbirdをインストール、アカウントを設定して受信確認できればOKです。
受信トレイ

参考サイト

全てのドメイン宛のメールを受信する – ngの日記.

追記1

Mailcatcher for Drupal and other PHP-applications – The simple version.

vagrant mail で検索してたら、MailCatcherという、ruby製のSMTPサーバーが有ることを知りました。
これを使うと、メールを送信した内容がWEBブラウザで簡単に確認できるようになるようです。
PHPの場合は、php.inisendmail_pathを変更するだけで使えるようになるようです。
※未検証

追記2

試してないけど、synced_folderの書き込めない件は、Vagrantfileの設定のグループを変更するれば出来そう。もしくは、dmode(ディレクトリのパーミッション?)は777になってましたが、fmode(ファイルのパーミッション?)が666なのでそこを変えても出来そうです。
※未検証