CentOS

ER図の自動生成

ER図などDBの定義を自動で生成できる、SchemaSpy。Docker Hub でホスティングされていて、非常に便利。

$ docker run -v "$PWD/schema:/output" --net="host" schemaspy/schemaspy:latest -t pgsql -host [DBHOST] -db [DBNAME] -u [DBUSER] -p [DBPASS]

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