【bash】 ディレクトリ下の全rarファイルをzipに変換する

変換する、というか展開して、zipに固め直します。

#!/bin/sh

for dir in *.rar;
do
    echo $dir
    bn="${dir%.*}"
    echo $bn
    mkdir "${bn}"
    cd "${bn}"
    unrar e "../${dir}"
    cd ..
    zip -r "${bn}".zip ./"${bn}"/
done

展開したファイルは消してません。
unrarとかzipとかは先にインストールしておきましょう。

【kafka】 kafkaの中身が見たいとき

trifectaを使います。

バイナリがあるので、ビルドは必要ありません。

wget https://github.com/ldaniels528/trifecta/releases/download/v0.22.0rc8-0.9.0.1/trifecta-cli-0.22.0rc8b-0.9.0.1.bin.jar
wget https://github.com/ldaniels528/trifecta/releases/download/v0.22.0rc8-0.9.0.1/trifecta-ui-0.22.0rc8b-0.9.0.1.zip
unzip trifecta-ui-0.22.0rc8b-0.9.0.1.zip
cd trifecta-ui-0.22.0rc8b-0.9.0.1/bin/
./trifecta-ui &

設定が必要なら、$HOME/.trifecta/config.properties を適当に編集して./trifecta-ui &を起動し直します。

ブラウザで hostname:9000 にアクセスします。

“Observe”のタブからkafkaの中身を見れます。

【debezium/kafka】 kafkaに外部から繋ぎたいとき

デフォルトだとkafka:9092に外から繋げません(たぶん)。

docker-compose.yamlに

kafka:
    (snip)
    environment:
        ADVERTISED_LISTENERS: "PLAINTEXT://xxx.xxx.xxx.xxx:9092"

xxx.xxx.xxx.xxxに外部から接続したい、ホストのアドレスを入れるとつながるようになります。

上記のようにした場合は、SECURITY_PROTOCOL_CONFIGをPLAINTEXTにして繋ぐのをお忘れなく。

【ESXi6.5】 VMware Host Client および ssh接続でvmを複製する

vmOSが CentOS 7.6-1810 での例

ESXiは6.5

ESXiにsshログインする

cd /vmfs/volumes/datastore1
mkdir NEW_VM_NAME
cd NEW_VM_NAME
vmkfstools -i "/vmfs/volumes/datastore1/NAME_OF_VM_COPY_FROM/NAME_OF_VM_COPY_FROM_0.vmdk" -d thin "NEW_VM_NAME_0.vmdk"
cp ../NAME_OF_VM_COPY_FROM/NAME_OF_VM_COPY_FROM.vm* .
mv NAME_OF_VM_COPY_FROM.vmx NEW_VM_NAME.vmx
mv NAME_OF_VM_COPY_FROM.vmsd NEW_VM_NAME.vmsd
cp ../NAME_OF_VM_COPY_FROM/NAME_OF_VM_COPY_FROM.nvram NEW_VM_NAME.nvram
sed -i s/NAME_OF_VM_COPY_FROM/NEW_VM_NAME/g NEW_VM_NAME.vmx

データストアブラウザから新機材の.vmxファイルを右クリックし、仮想マシンの登録

ネットワークカードを削除し、また同一のものを作成する(macアドレスが”自動”になってれば不要)

vm起動時、コピーしたのか移動したのか聞かれるので、コピーと答える

vmを起動したら以下のコマンドでホスト名とipアドレスを変更する

vi /etc/hostname
vi /etc/sysconfig/network-scripts/ifcfg-ens192

以上

【CentOS7】 ESXiでrootパーティションの容量を増やす

CentOS 7.6-1810 での例

この方法では、拡張したいパーティションの末尾を変更して拡張するため、fdisk -l とし、当該パーティションが当該ディスクの一番後ろのパーティションであることを確認しておきます。私の環境の場合、/dev/sda2 でした。

確認したら、ESXi側でディスクの容量を増やしておきます。

vmをリブートして、 fdisk /dev/sda とし、拡張したいパーティションを削除し、同じ番号でディスクの最後まで使い切ったパーティションを作成します。pで確認、wで保存するのを忘れずに。

vmをリブートします。

pvresize /dev/sda2
lvextend -l +100%FREE /dev/centos/root
xfs_growfs /dev/mapper/centos-root

と続けて実行します。

以上。

【iptables】 CentOS6でkeepalivedが両マスタ(スプリットブレイン)になってしまうのを解消する

CentOS6でkeepalivedを複数台にインストールして、起動して /var/log/messages を見てみたら、各サーバで Entering MASTER STATE になったまま、一向に Entering BACKUP STATE になる気配がない。
ip a コマンドを叩くと各サーバで仮想ipがバインドされてしまっている。

という問題の原因は、おそらく iptables の設定で、VRRPパケットが REJECT されてしまい、VRRPパケットがサーバ間で疏通してないからです。

iptables-save コマンドでiptablesの設定を確認し、 -A INPUT -p vrrp -j ACCEPT-A INPUT -j REJECT ...(--reject-with icmp-host-prohibited とか)より上に入っているようにします。
-A OUTPUT -p vrrp -j ACCEPT も必要です。

具体的には

iptables -D INPUT -j REJECT --reject-with icmp-host-prohibited
iptables -A INPUT -p vrrp -j ACCEPT
iptables -A OUTPUT -p vrrp -j ACCEPT
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
iptables-save   (設定を表示して確認)

service iptables save   (設定をセーブ)

service iptables restart

という感じになるかと思います。

ちなみにVRRPはプロトコル番号112のIPプロトコルで、UDP(プロトコル番号17),TCP(プロトコル番号6),ICMP(プロトコル番号1) とは別のプロトコルですので、TCPやUDPなどは内部セグメントで全部通してるのになんで疏通しないのかな、と思いがちですね。

【CentOS7】 MongoDBを2.6から3系にアップデートする

いろいろと面倒なことはせず、サクッとダンプ&リストアでやっつけます。

バックアップ&古いの削除

service mongod stop
mkdir mddump
mongodump --dbpath /var/lib/mongo ./mddump
mkdir mdbackup
mv /var/lib/mongo ./mdbackup/
yum remove mongo*     

3.2インストール

vi /etc/yum.repos.d/mongodb-org-3.2.repo とし、内容を

[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc

とします。
もっと新しいバージョンにしたい方は https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/ をご参照ください。

yum install mongodb-org mongodb-org-server を実行します。

vi /etc/mongod.conf とし、17行目のコメントを外した上で

engine: wiredTiger

とします。engineという文字列の前に行頭から半角空白が二個入っているようにします。コロンの後ろのスペースも必要です。

リストア

service mongod start
mongorestore ./mddump

以上~

シェルスクリプトをshcを用いてバイナリ化して難読化する

shcはシェルスクリプトを難読化のためにバイナリ化するアプリケーションです。

詳しくはこちら
http://www.datsi.fi.upm.es/~frosal/sources/shc.html

shcのダウンロードとコンパイル

$ wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz
$ tar xfzv shc-3.8.9b.tgz
$ cd shc-3.8.9b/
$ make

テスト

vi a.sh

#!/bin/sh
echo "1234hoge#"

./shc -v -f a.sh でコンパイル。
./a.sh.x で動くかどうか確認。
a.sh.xをバイナリエディタで確認し、難読化されているか確認してみてください。

メモ

できあがったa.sh.xはセキュリティのため、他の機材では動かないと思います。
shcに -r オプションをつければ、他の機材でも動くバイナリを作れます。

【modsecurity】auditログにmod_remoteipで取ったipアドレスを記録する

apacheのコードを書き換えます。

方法は2種類あります。とりあえず問題なければ1がおすすめ。

1) ログを書くところで修正

ログに書くところだけ変更するので手軽
apache2/msc_logging.c の1647行目に下記のように変更をかけます。

$ diff modsecurity-2.9.1/apache2/msc_logging.c ../modsecurity-2.9.1/apache2/msc_logging.c
1647c1647
<         current_logtime(msr->mp), msr->txid, msr->remote_addr, msr->remote_port,
---
>         current_logtime(msr->mp), msr->txid, msr->useragent_ip ? msr->useragent_ip : msr->remote_addr, msr->remote_port,

2) remote_addr 変数を取ってくるところで修正

全体に変更がかかるので、検証が必要、かも。ちょっとリスキー。
apache2/mod_security2.c の537行目に下記のように変更をかけます。

$ diff modsecurity-2.9.1/apache2/mod_security2.c ../modsecurity-2.9.1/apache2/mod_security2.c
537c537
<     msr->remote_addr = r->connection->client_ip;
---
>     msr->remote_addr = r->useragent_ip ? r->useragent_ip : r->connection->client_ip;

OpenSSLによる楕円曲線暗号の利用

キー生成

openssl ecparam -genkey -name secp384r1 -out ec-key.pem

リクエスト

openssl req -new -sha256 -key ec-key.pem -subj "/C=JP/ST=State/L=City/O=Org./OU=EC Test Div./CN=test.example.com" -out eccsr.pem

自己署名(したければ)

openssl x509 -req -sha256 -days 3650 -in eccsr.pem -signkey ec-key.pem -out eccsr.ct

pfx(にしたければ)

openssl pkcs12 -export -in eccsr.ct -inkey ec-key.pem -out ec141114.pfx

キーを暗号化する場合

openssl ecparam -genkey -name secp384r1 -out ec-key.pem
openssl ec -in ec-key.pem -aes256 -out enc_ec-key.pem
openssl req -new -sha256 -key enc_ec-key.pem -subj "/C=JP/ST=State/L=City/O=Org./OU=EC Test Div./CN=test.example.com" -out eccsr.pem
openssl x509 -req -sha256 -days 3650 -in eccsr.pem -signkey enc_ec-key.pem -out eccsr.ct