dehio3’s diary

仕事、生活、趣味のメモ

ciscoスイッチで対象の機器が接続しているポート番号を調査する方法

手順

ping

Switch#ping 192.168.9.91

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.9.91, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/8 ms

arpテーブルからmacアドレスを確認

Switch#show arp | i 192.168.9.91
Internet  192.168.9.91            1   <macアドレス>  ARPA   Vlan3

アドレステーブルから該当のmacアドレスの転送するインタフェースを確認

Switch#show mac address-table | i <macアドレス>
   3    <macアドレス>    DYNAMIC     Gi0/21

尚、カスケード先なのかどうかは判断できないので注意。

jq1.5をインストールして、Route53で特定の文字列を含むレコードを抽出する。

はじめに

環境の調査で特定の文字列を含むレコードを全て取得したかったのでaws_clijqを使って実現した。

とりあえず特定のzoneのレコードを全て一行ずつ表示

aws route53 list-resource-record-sets --hosted-zone-id /hostedzone/xxxxxxxxxx | jq -c -r '.ResourceRecordSets[]'

特定のNameのレコードを表示(完全一致)

aws route53 list-resource-record-sets --hosted-zone-id /hostedzone/xxxxxxxxxx | jq -c -r '.ResourceRecordSets[] | select( .Name == "test.example.com." )'

特定の文字列をNameに含むレコードを表示

aws route53 list-resource-record-sets --hosted-zone-id /hostedzone/xxxxxxxxxx | jq -c -r '.ResourceRecordSets[] | select( .Name | test("^test") )'

こけた・・

error: test is not defined
.ResourceRecordSets[] | select( .Name | test("^test") )
                                        ^^^^
1 compile error

???

jqで階層構造になったデータから特定の値を持った、特定の階層のデータを抽出するとき - つれづれ日記

jq 1.5から正規表現を使えるmatch()とtest()がある。

$ jq -V
jq version 1.3

だめじゃん・・・

jqのアップデート

$ yum check-update | grep jq
$

アップデートが既存のリポジトリだと無い。。

作業メモ:CentOS6.5 64bit へのjqインストール | My diary for @halchiyo

どうやらただバイナリを置くだけで使えるらしい。

github.com

とりあえずローカルに取得

mkdir ~/bin
wget https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64 -O ~/bin/jq
chmod +x ~/bin/jq
 ./bin/jq -V
jq-1.5

やったー!!

特定の文字列をNameに含むレコードを表示(再)

aws route53 list-resource-record-sets --hosted-zone-id /hostedzone/xxxxxxxxxx | jq -c -r '.ResourceRecordSets[] | select( .Name | test("^test") )'

やったーとれたー!

EFSを試してみた

はじめに

東京リージョンでAmazon Elastic File System (EFS) が利用可能になったので試してみました。

やったこと

  • 単体で起動しているWEBサーバ(EC2)のコンテンツ部分をEFSに変更した。
  • 本番環境では2台間でのコンテンツの同期をrsyncで実施してるので、EFSに置き換えたい。

参考

環境

作業

NFS クライアントのインストール
$ sudo yum install -y amazon-efs-utils
読み込んだプラグイン:etckeeper, langpacks, priorities, update-motd
amzn2-core                                                                                                                                       | 2.4 kB  00:00:00
epel/x86_64/metalink                                                                                                                             | 7.6 kB  00:00:00
141 packages excluded due to repository priority protections
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ amazon-efs-utils.noarch 0:1.2-1.amzn2 を インストール
--> 依存性の処理をしています: stunnel >= 4.56 のパッケージ: amazon-efs-utils-1.2-1.amzn2.noarch
--> トランザクションの確認を実行しています。
---> パッケージ stunnel.x86_64 0:4.56-6.amzn2.0.1 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

========================================================================================================================================================================
 Package                                     アーキテクチャー                  バージョン                                   リポジトリー                           容量
========================================================================================================================================================================
インストール中:
 amazon-efs-utils                            noarch                            1.2-1.amzn2                                  amzn2-core                             13 k
依存性関連でのインストールをします:
 stunnel                                     x86_64                            4.56-6.amzn2.0.1                             amzn2-core                            149 k

トランザクションの要約
========================================================================================================================================================================
インストール  1 パッケージ (+1 個の依存関係のパッケージ)

総ダウンロード容量: 162 k
インストール容量: 338 k
Downloading packages:
(1/2): stunnel-4.56-6.amzn2.0.1.x86_64.rpm                                                                                                       | 149 kB  00:00:00
(2/2): amazon-efs-utils-1.2-1.amzn2.noarch.rpm                                                                                                   |  13 kB  00:00:00
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                                    908 kB/s | 162 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
etckeeper: pre transaction commit
  インストール中          : stunnel-4.56-6.amzn2.0.1.x86_64                                                                                                         1/2
  インストール中          : amazon-efs-utils-1.2-1.amzn2.noarch                                                                                                     2/2
etckeeper: post transaction commit
  検証中                  : amazon-efs-utils-1.2-1.amzn2.noarch                                                                                                     1/2
  検証中                  : stunnel-4.56-6.amzn2.0.1.x86_64                                                                                                         2/2

インストール:
  amazon-efs-utils.noarch 0:1.2-1.amzn2

依存性関連をインストールしました:
  stunnel.x86_64 0:4.56-6.amzn2.0.1

完了しました!
NFSディレクトリの作成
# mkdir /var/www/html_efs
マウント

マウント前

# df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         983M     0  983M    0% /dev
tmpfs            998M     0  998M    0% /dev/shm
tmpfs            998M  109M  890M   11% /run
tmpfs            998M     0  998M    0% /sys/fs/cgroup
/dev/xvda1        30G  5.4G   25G   18% /
tmpfs            200M     0  200M    0% /run/user/1000
tmpfs            200M     0  200M    0% /run/user/1025
# mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 fs-******.efs.ap-northeast-1.amazonaws.com:/ /var/www/html_efs

マウント後

# df -h
ファイルシス                                   サイズ  使用  残り 使用% マウント位置
devtmpfs                                         983M     0  983M    0% /dev
tmpfs                                            998M     0  998M    0% /dev/shm
tmpfs                                            998M  109M  890M   11% /run
tmpfs                                            998M     0  998M    0% /sys/fs/cgroup
/dev/xvda1                                        30G  5.4G   25G   18% /
tmpfs                                            200M     0  200M    0% /run/user/1000
tmpfs                                            200M     0  200M    0% /run/user/1025
fs-******.efs.ap-northeast-1.amazonaws.com:/   8.0E     0  8.0E    0% /var/www/html_efs
コンテンツのコピー

サイズ

# du -shb /var/www/html
737505878       /var/www/html

コピー

# time cp -pr /var/www/html/* /var/www/html_efs/.

real    9m8.649s
user    0m0.130s
sys     0m2.991s
転送速度

約 1,345,813byte/s

メトリック

ClientConnections

ファイルシステムへのクライアント接続の数。

DataReadIOBytes / DataWriteIOBytes

ファイルシステムの読み込み/書き込みオペレーションのバイト数。

MetadataIOBytes

メタデータオペレーションのバイト数。

ファイルサイズ(du -sh)など確認などメタデータを参照した時に上がる。

TotalIOBytes

読み込みデータ、書き込みデータ、メタデータオペレーションを含む、各ファイルシステムオペレーションのバイト数。

PercentIOLimit

ファイルシステムが汎用パフォーマンス モードの I/O 制限にどれだけ近づいているか。

このメトリクスが 100% になっていることが多い場合、最大 I/O パフォーマンスモードを使用したファイルシステムにアプリケーションを移行することを検討する必要あり。

BurstCreditBalance

ファイルシステムのバーストクレジットの数。

  • ファイルシステムのサイズによって決定されるベースラインレートで時間の経過とともにクレジットを取得し、データを読み書きするたびにクレジットを使用
  • ベースラインレートは、ストレージの 1 TiB あたり 50 MiB/秒です (同様に、ストレージの 1 GiB あたり 50 KiB/秒)
  • 新しく作成されたファイルシステムは、最初のクレジットバランスが 2.1 TiB から始まり、100 MiB/秒で連続して実行するのに十分な大きさになるまで (つまり、2 TiB)、100 MiB/秒のバーストレートでデータを追加
PermittedThroughput

ファイルシステムのサイズと BurstCreditBalance における、ファイルシステムで許可されるスループットの最大容量。

感想

puppetで「Provider useradd does not support features manages_passwords; not managing attribute password」

事象

  • puppetでアカウント作成したらアカウントがロックされた状態で作成された。
  • アカウントを作成するモジュールでパスワードは設定してる。

対応

以下のサイトを参照

www.puppetcookbook.com

This means the ruby language support that puppet needs to manage a users password is missing and requires additional software to be installed. If you're running on CentOS / Fedora this can be fixed by installing the ruby-shadow package, and on Debian / Ubuntu libshadow-ruby will fulfil the requirement. This is most often seen in gem or source based installs as your package manager should handle this dependency when installing puppet via a package.

ruby-shadowを入れる必要あり!?

# rpm -qa | grep ruby-shadow
ruby-shadow-2.2.0-2.el6.x86_64

既に入ってる。

puppetのパッケージを確認。

# rpm -qa | grep puppet
puppet-3.8.7-1.el6.noarch
puppetlabs-release-6-11.noarch

updateある??

# yum list updates | grep puppet
facter.x86_64                        1:2.4.6-1.el6                 puppetlabs-products
hiera.noarch                         1.3.4-1.el6                   puppetlabs-products
puppetlabs-release.noarch            22.0-2                        puppetlabs-products

動いてる他の環境だと

$ rpm -qa | grep puppet
puppetlabs-release-22.0-2.noarch
puppet-3.8.7-1.el6.noarch

puppetlabs-release をupdateしてみる

yum update puppetlabs-release

再度疎通を実施

puppet agent -t -d

まだ出る。

Provider useradd does not support features manages_passwords; not managing attribute password

puppetlabs-productsリポジトリの他のupdateも上げてみる。

# yum update hiera
# yum update facter

再度疎通を実施

puppet agent -t -d

解消せず。。

パッケージ入れなおしたし、とりあえずpuppet再起動してみる。

# /etc/init.d/puppet restart

再度shadowを確認

# cat /etc/passwd

パスワード設定された!!

どのパッケージだったかは不明。。

とりあえず ruby-shadow があるのにエラー出る時はパッケージアップデートして再起動。

puppetで「Warning: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [certificate revoked for /CN=********* ]」

事象

疎通コマンド実行したら以下のエラーが出た。

Warning: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [certificate revoked for /CN=********* ]
agent からのテスト疎通コマンド
puppet agent -t
puppet agent -t -d (デバック)

対応

以下を参考 d.hatena.ne.jp

これは、Ruby(Net::HTTP?)が SSL証明書を見つけることができなくて、HTTPS 接続に失敗しているのが原因らしい。Net::HTTP が、SSL証明書を見つけられるようにしてあげれば良い。

らしく

証明書をダウンロードする

$ wget http://curl.haxx.se/ca/cacert.pem

で対応してる。

そもそもサーバとクライアントにある証明書を調査

  • サーバ
# find /var/lib/puppet/ssl -type f -ls
526835    4 -rw-r--r--   1 puppet   puppet        775  9月  8  2017 /var/lib/puppet/ssl/ca/ca_pub.pem
526836   24 -rw-r--r--   1 puppet   puppet      21834  6月 12 12:07 /var/lib/puppet/ssl/ca/inventory.txt
526843   12 -rw-r--r--   1 puppet   puppet       9173  6月 12 12:07 /var/lib/puppet/ssl/ca/ca_crl.pem
526838    4 -rw-r--r--   1 puppet   puppet          4  6月 12 12:07 /var/lib/puppet/ssl/ca/serial
526839    4 -rw-r--r--   1 puppet   puppet       1968  9月  8  2017 /var/lib/puppet/ssl/ca/ca_crt.pem
526840    4 -rw-r-----   1 puppet   puppet       3243  9月  8  2017 /var/lib/puppet/ssl/ca/ca_key.pem
526842    4 -rw-r-----   1 puppet   puppet         20  9月  8  2017 /var/lib/puppet/ssl/ca/private/ca.pass
526845    4 -rw-r--r--   1 puppet   puppet       1968  1月 10 14:57 /var/lib/puppet/ssl/certs/ca.pem
400727   12 -rw-r--r--   1 puppet   puppet       9173  6月 12 12:07 /var/lib/puppet/ssl/crl.pem
  • クライアント(エラー出てるサーバ)
# find /var/lib/puppet/ssl -type f -ls
2882456    4 -rw-r--r--   1 puppet   puppet       1606  6月 12 12:07 /var/lib/puppet/ssl/certificate_requests/<ホスト名>.pem
2882453    4 -rw-r-----   1 puppet   puppet       3247  6月 12 12:07 /var/lib/puppet/ssl/private_keys/<ホスト名>.pem
2882458   12 -rw-r--r--   1 puppet   puppet       9173  6月 12 12:07 /var/lib/puppet/ssl/crl.pem
2882454    4 -rw-r--r--   1 puppet   puppet        775  6月 12 12:07 /var/lib/puppet/ssl/public_keys/<ホスト名>.pem
2882457    4 -rw-r--r--   1 puppet   puppet       1972  6月 12 12:07 /var/lib/puppet/ssl/certs/<ホスト名>.pem
2882455    4 -rw-r--r--   1 puppet   puppet       1968  6月 12 12:07 /var/lib/puppet/ssl/certs/ca.pem
  • クライアント(成功してるサーバ)
# find /var/lib/puppet/ssl -type f -ls
7047134    4 -rw-r--r--   1 puppet   puppet       1610  1月 10 16:53 /var/lib/puppet/ssl/certificate_requests/<ホスト名>.pem
7047031    4 -rw-r-----   1 puppet   puppet       3243  1月 10 16:53 /var/lib/puppet/ssl/private_keys/<ホスト名>.pem
7047205    4 -rw-r--r--   1 puppet   puppet        967  1月 10 16:53 /var/lib/puppet/ssl/crl.pem
7047084    4 -rw-r--r--   1 puppet   puppet        775  1月 10 16:53 /var/lib/puppet/ssl/public_keys/<ホスト名>.pem
7047201    4 -rw-r--r--   1 puppet   puppet       1976  1月 10 16:53 /var/lib/puppet/ssl/certs/<ホスト名>.pem
7047090    4 -rw-r--r--   1 puppet   puppet       1968  1月 10 16:53 /var/lib/puppet/ssl/certs/ca.pem

違いがあるのはクライアントの以下のファイル

/var/lib/puppet/ssl/crl.pem

失敗してる方はサーバと同じサイズだが、成功している方はサイズが小さい。

なんのファイル??

cat /var/lib/puppet/ssl/crl.pem
-----BEGIN X509 CRL-----
中略
-----END X509 CRL-----

上記を成功しているサーバと同じにしたら疎通が成功した!

根本原因はまた別途調査!!

FTP接続専用アカウントでWinSCPでつないだら「Service not available.」がでたので対応した。

やろうとしてること

事象

WinSCPFTP専用アカウントでつないだら以下のエラーが表示。

FTP専用アカウントは/sbin/nologinでアカウント作成)

サーバから切断されました。
接続に失敗しました。
Service not available.

調査

ftpサービスは何?

$ ps -ef | grep ftp
root       759     1  0  8月16 ?      00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

vsftpdが動いてる。

vsftpdの設定は?

$ sudo egrep -v '^#|^$' /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

tcp_wrappersが有効になってる。

tcp_wrappersの設定は?

$ sudo egrep -v '^#|^$' /etc/hosts.allow
all : 127.0.0.1 [::1]

$ sudo egrep -v '^#|^$' /etc/hosts.deny
vsftpd : all

vsftpd 全部拒否られてる。

アクセス制限はセキュリティグループでやるから無効化する!!

tcp_wrappers=NO

で疎通完了!

ELB経由のアクセスでapacheのアクセスログの最初に表示されるIPを元のIPに変える

環境

$ sudo /usr/sbin/httpd -V
Server version: Apache/2.4.6 (CentOS)
Server built:   Nov 19 2015 21:43:13
Server's Module Magic Number: 20120211:24
Server loaded:  APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2

やりたいこと

  • apacheアクセスログの先頭のIPからアクセス元IPを判断してる。
  • ELB経由のアクセスにすると先頭のIPがELBのIPになるため判断できなくなるのを解消したい。

対応

  • mod_remoteipモジュールで、リモートIPアドレスをX-Forwarded-Forに書き換える
$ cat /etc/httpd/conf.d/remote_ip.conf
<IfModule remoteip_module>
    RemoteIPHeader X-Forwarded-For
</IfModule>
$ cat /etc/httpd/conf/httpd.conf
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

先頭を%hから%aに変更する。

ちなみにLogFormatで直接%{X-Forwarded-For}iを指定するやり方もあるけど、アクセス元がX-Forwarded-Forヘッダが付いている状態だとカンマ区切りでアクセス元と、ELB両方のIPが表示されるので注意。

cloudpack.media