Apache2.2.xと2.4.xでのアクセス制限方法の違い

f:id:komeiy:20141223135843j:plain

勉強のためZabbix3.0を入れたのですが、 Apache 2.4.xを使ったところアクセス制限の書き方が変わっていたのでメモしておきます。

2.2.xの時のエントリです。

komeiy.hatenablog.com

Apache 2.4.6で試してみた

以下、試した時のバージョンです。

[root@localhost conf.d]# httpd -v
Server version: Apache/2.4.6 (CentOS)

2.4.6だとこんな感じで書きます。

[root@localhost conf.d]# cat zabbix.conf
#
# Zabbix monitoring system php web frontend
#

#Alias /zabbix /usr/share/zabbix
Alias /zabbix /var/www/html/zabbix

<Directory "/var/www/html/zabbix">
    Options FollowSymLinks
    AllowOverride None
    Require all granted
    php_value max_execution_time 300
    php_value memory_limit 128M
    php_value post_max_size 16M
    php_value upload_max_filesize 2M
    php_value max_input_time 300
    # php_value date.timezone Europe/Riga
</Directory>

Apache2.2.xと2.4.xでの書き方の違い

全てアクセス許可

  • Apache2.2.x Allow from all

  • Apache2.4.x Require all granted

全てアクセス拒否

  • Apache2.2.x deny from all

  • Apache2.4.x Require all denied

特定の接続元を指定する

  • Apache2.2.x allow from deny from

  • Apache2.4.x require ip require not ip

エラーログ

間違えたら/var/log/zabbix/zabbix_server.logに出力が出ると思いますので確認してください。

[Sat Nov 14 23:28:06.550481 2015] [authz_core:error] [pid 15736] [client 192.168.1.100:59410] AH01630: client denied by server configuration: /usr/share/zabbix
[Sat Nov 14 23:52:48.367884 2015] [core:error] [pid 12992] (13)Permission denied: [client 192.168.1.100:53259] AH00035: access to /zabbix/index.php denied (filesystem path '/var/www/html/zabbix/index.php') because search permissions are missing on a component of the path

シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)

RedshiftへSQLWorkbench/Jで接続してみる

redshiftへSQLWorkbench/Jで接続する方法です。

手順は以下の通りです。ポイントは 接続方法に合わせてDriverを選択するという点です。 2015年11月8日時点でpostgresqlの接続もサポートされているようです。

  • SQLWorkbench/Jをインストール
  • Redshift用のDriverをインストール
  • JDBCのURLを確認する
  • 各種パラメータを設定し接続

SQLWorkbench/Jをインストール

公式HPのDownloadsから使用するOSに合わせてStable releaseからダウンロードしインストールします。 MAC OSXの場合、通常のアプリケーションと大差はないので割愛します。

http://www.sql-workbench.net

Redshift用のDriverをインストール

今回はpostgresqlでははなくJDBCで接続します。Driverはこの記事を記載した時点で以下の通りです。

JDBC 4.1 互換ドライバ: https://s3.amazonaws.com/redshift-downloads/drivers/RedshiftJDBC41-1.1.7.1007.jar このドライバーのクラス名は com.amazon.redshift.jdbc41.Driver です。

SQLWorkbench/Jの左下のManage Driverから上記のDriverをimportします。class名はcom.amazon.redshift.jdbc41.Driverです。

RedshiftのJDBC URLを確認

Amazon Management Consoleで以下から確認します。

Clusters- > YourClusterName -> Configuration -> Cluster Database Properties -> JDBC URL

http://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/images/rs-mgmt-clusters-cluster-database-properties-jdbc.png

RedshiftへSQLWorkbench/Jを使用して接続

先ほどimportしたRedshift用のDriverとJDBC URL、Master Username/Passwordを設定します。

f:id:komeiy:20151104131604p:plain

接続が問題なければ以下の通りクエリを投げることが可能です。

f:id:komeiy:20151104131842p:plain

実際にクエリを投げてみるのは各自データ内容に合わせてお好みで。 勉強用だと無料枠を超えてしまうのが痛いですね。


シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

データベース徹底攻略 (WEB+DB PRESS plus)

データベース徹底攻略 (WEB+DB PRESS plus)

データ分析が支えるスマホゲーム開発 ~ユーザー動向から見えてくるアプリケーションの姿~

データ分析が支えるスマホゲーム開発 ~ユーザー動向から見えてくるアプリケーションの姿~

tail -fの結果にタイムスタンプをつける方法のメモ

f:id:komeiy:20150107164847j:plain

メモです。アプリからログに書き込まれたタイミングを確認するなど、出力にタイムスタンプをつけたい時などに使います。

tail -f error.log | while read line; do printf "$(date -u '+%F %T%z')\t$line\n"; done

出力は以下のような感じです。

2015-11-06 23:14:38+0000 Nov  6 23:14:12 komei login[3783]: USER_PROCESS: 3783 ttys000

シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

新しいLinuxの教科書

新しいLinuxの教科書

Linuxシステム[実践]入門 (Software Design plus)

Linuxシステム[実践]入門 (Software Design plus)

zabbix_senderで複数の値を一括登録する

f:id:komeiy:20141012172923p:plain

Zabbixは非常に便利で、Agentでの監視の他に自身で取得可能なあらゆる情報をZabbix senderを使用してサーバへ送信することが可能です。

Zabbix_Senderの使い方

$ zabbix_sender -z zabbix -s "Linux DB3" -k db.connections -o 43

z - Zabbix サーバのホスト(IP アドレスでの指定でも可) s - 監視対象のホスト名 (Zabbix フロントエンドで登録されたもの) k - アイテムキー o - 送信する値

Zabbix_Senderで複数の値を投入する

上記の例だと一つのkeyに対して値を投入していますが、複数のkeyを扱うことが可能です。監視対象側の負荷を軽減することができるので非常に重宝します。

ファイルからデータを投入する

$ zabbix_sender -z 127.0.0.1 -i /tmp/traptest.txt 
Info from server: "Processed 250 Failed 0 Total 250 Seconds spent 0.002668"
Info from server: "Processed 50 Failed 0 Total 50 Seconds spent 0.000540"
sent: 300; skipped: 0; total: 300

-iでファイルを指定します。ファイルの中身はシンプルに以下のような内容でOKです。

<hostname> <key> <value>
<hostname> <key> <value>
<hostname> <key> <value>
<hostname> <key> <value>

直接データを投入する

ファイルに書き出す必要がない場合は以下の通り直接コマンドラインから複数のデータを扱うことも可能です。

$ echo -n -e '<hostname> <key> <value>\n<hostname> <key> <value>' | zabbix_sender -z 127.0.0.1 -p 10051 -i -
info from server: "processed: 2; failed: 0; total: 2; seconds spent: 0.000066"
sent: 2; skipped: 0; total: 2

他にもzabbix_senderとディスカバリを組み合わせることでitemを動的に作成するという小技もありますので、時間を見つけて書いておきたいと思います。


シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

haproxyのステータス確認

f:id:komeiy:20150107164847j:plain haproxyのステータス確認方法をいつも忘れてしまうのでメモ代わりに書いておきます。

haproxyのsocketをcatするsocatコマンドを使います。 以下のように書くことで8080番への入力を標準出力に書き込むことができます。 簡単dす。

$ socat tcp-listen:8080 stdout

haproxyではechoを使って取得したいログの種別を指定します。 まずはバージョン情報など基本的な情報を取ってみます。

root@gw01:~# echo "show info" | socat unix-connect:/etc/haproxy/sock stdio
Name: HAProxy
Version: 1.4.24
Release_date: 2013/06/17
Nbproc: 1
Process_num: 1
Pid: 24498
Uptime: 0d 0h08m59s
Uptime_sec: 539
Memmax_MB: 0
Ulimit-n: 4013
Maxsock: 4013
Maxconn: 2000
Maxpipes: 0
CurrConns: 1
PipesUsed: 0
PipesFree: 0
Tasks: 2
Run_queue: 1
node:gw01
description:

コマンド一覧をhelpで取ってみました。

  clear counters : clear max statistics counters (add 'all' for all counters)
  help           : this message
  prompt         : toggle interactive mode with prompt
  quit           : disconnect
  show info      : report information about the running process
  show stat      : report counters for each proxy and server
  show errors    : report last request and response errors for each proxy
  show sess [id] : report the list of current sessions or dump this session
  get weight     : report a server's current weight
  set weight     : change a server's weight
  set timeout    : change a timeout setting
  disable server : set a server in maintenance mode
  enable server  : re-enable a server that was previously in maintenance mode

backendのステータスなどはshow statで確認可能です。

root@gw01:~# echo "show stat" | socat unix-connect:/etc/haproxy/sock stdio
# pxname,svname,qcur,qmax,scur,smax,slim,stot,bin,bout,dreq,dresp,ereq,econ,eresp,wretr,wredis,status,weight,act,bck,chkfail,chkdown,lastchg,downtime,qlimit,pid,iid,sid,throttle,lbtot,tracked,type,rate,rate_lim,rate_max,check_status,check_code,check_duration,hrsp_1xx,hrsp_2xx,hrsp_3xx,hrsp_4xx,hrsp_5xx,hrsp_other,hanafail,req_rate,req_rate_max,req_tot,cli_abrt,srv_abrt,
07625016-88cc-4533-a0b0-cd006b54c110,FRONTEND,,,0,0,2000,0,0,0,0,0,0,,,,,OPEN,,,,,,,,,1,1,0,,,,0,0,0,0,,,,,,,,,,,0,0,0,,,
2c8ff70e-1345-4642-8689-1ce7d74506a8,6f37e25b-713e-4c31-8671-aec5c23a878e,0,0,0,0,,0,0,0,,0,,0,0,0,0,UP,1,1,0,0,0,1278,0,,1,2,1,,0,,2,0,,0,L4OK,,3,,,,,,,0,,,,0,0,
2c8ff70e-1345-4642-8689-1ce7d74506a8,BACKEND,0,0,0,0,0,0,0,0,0,0,,0,0,0,0,UP,1,1,0,,0,1278,0,,1,2,0,,0,,1,0,,0,,,,,,,,,,,,,,0,0,

こんな感じで必要な情報だけ引っ張ります。svnamestatusをピックアップしています。

root@gw01:~# echo "show stat" | socat unix-connect:/etc/haproxy/sock stdio | grep -v -e '^#\|^$' | cut -d ',' -f 2,18 --output-delimiter=':'
FRONTEND:OPEN
6f37e25b-713e-4c31-8671-aec5c23a878e:UP
BACKEND:UP

サーバ負荷分散入門

サーバ負荷分散入門

サーバ負荷分散入門

サーバ負荷分散入門


シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加




パーフェクトPHP
パーフェクトPHP
posted with amazlet at 15.08.29
技術評論社 (2014-10-31)
売り上げランキング: 10,488


sflowもFluentd+Elastic Searchに入れて可視化してみた

以前にNetflowについて書いたのですが、sflowもelastcsearchに入れたいなと思って色々調べてみました。ちなみに前回からkibanaのバージョンをあげましてkibana 4はこんな画面になってます。検証用のデータですが気持ち的にIPアドレスは隠しました。

f:id:komeiy:20150902212446j:plain

ホワイトを基調のデザインに一新されており個人的には好感が持てるデザインになっています。機能的にはグラフオプションが強化されて実現できることが多くなっています。

komeiy.hatenablog.com

  • kibana 4になり、対応するElastic Searchのバージョンも1.4以降に変更になっているため注意が必要です

調査フェーズ

logstashを使ってElastic Searchへ入れるパターン

まず、調べてたところlogstashで以下のような方法があるようなので少し調査。

https://github.com/NETWAYS/sflow

Tiny sflow collector and parser script based on eventmachine. It listens for sflow v5 samples, parses them and sends it to logstash.

インストール自体は楽そうですが、issuesのやりとりやflow sourceを都度設定ファイルやhostsに書かなければいけない(っぽい)点とsnmpがなぜか絡んでくるのがどうしてもすっきりせずパスしました。

(できれば設定はtd-agent.confで統一したいという思いもありすいません)

sflowをnetflowに変換してあれこれするパターン

世の中には便利なものがあるもので、今回sflowtoolを使うことにしました。結局、NETWAYS/sflowのissueでもsflowtoolをwrapperとして使用する方法について記載がありました。

sflowtoolは名前の通りsflowを扱うためのツールなのですが、任意のポートで受信し他のコレクタに渡したりcsvで吐き出したり、pcap形式に落としたり、あと今回重要なnetflowに対応したコレクタにフローを飛ばすことも可能です。

ということで、sflowtool -> fluentd -> elastic searchの流れでデータを注入することにしました。

sflowtoolインストール

最新版はgithubにあります。Versionは3.28でした。

git clone https://github.com/kplimack/sflowtool.git
cd sflowtool/

cloneしたら、configure / make / make installしてください。

パスが通っていれば$ sflowtoolで起動します。

参考)以下のログが出た人へ

v6 socket() creation failed, Address family not supported by protocol

デフォルトでlisten on both IPv4 and IPv6 socketsなので、ipv6をdisableにしている人は-4オプションを使ってください。

sflowを受信してみる

起動して受信すると以下の項目が値と共に出力されます。

startDatagram 
datagramSourceIP
datagramSize
unixSecondsUTC 
datagramVersion 
agentSubId 
agent
packetSequenceNo
sysUpTime 
samplesInPacket 
startSample ----------------------
sampleType_tag
sampleType
sampleSequenceNo 
sourceId 
meanSkipCount 
samplePool 
dropEvents 
inputPort 
outputPort 
flowBlock_tag
flowSampleType 
headerProtocol 
sampledPacketSize 
strippedBytes 
headerLen 
dstMAC 
srcMAC 
decodedVLAN 
decodedPriority 
IPSize
ip.tot_len 
srcIP 
dstIP 
IPProtocol 
IPTOS 
IPTTL 
TCPSrcPort 
TCPDstPort 
TCPFlags 
endSample   ----------------------
endDatagram   =================================

NetFlowに飛ばしたいのであれば以下のオプションを使います。

To forward Cisco NetFlow v5 records to UDP port 9991 on host collector.mysite.com, the
options would be:

% ./sflowtool -p 6343 -c collector.mysite.com -d 9991

Fluentd(td-agent)で受けてstdoutに出るようtagをdebugにしてみました。一回sflowtoolが受信するのでhostが127.0.0.1になってしまうのが残念です。ただ、本来のNetflowへ変換という意味ではVersion 5へしっかりと変換してくれました。

2015-09-02 23:23:10 +0900 debug.netflow: {"version":"5","flow_seq_num":"19","engine_type":"0","engine_id":"0","sampling_algorithm":"0","sampling_interval":"0","flow_records":"1","ipv4_src_addr":"1.1.4.1","ipv4_dst_addr":"1.1.7.1","ipv4_next_hop":"0.0.0.0","input_snmp":"1026","output_snmp":"1026","in_pkts":"32768","in_bytes":"1507328","first_switched":"2015-09-02T23:23:10.000Z","last_switched":"2015-09-02T23:23:10.000Z","l4_src_port":"52193","l4_dst_port":"80","tcp_flags":"16","protocol":"6","src_tos":"0","src_as":"0","dst_as":"0","src_mask":"0","dst_mask":"0","host":"127.0.0.1"}

ここからのElastic Searchへの挿入は前回と同様です。

その他

  • Elastic Search pluginで@timestamp_sourceは挿入されるのでkibanaから見ると前回と同じ仕様です
  • sflowtoolが増えましたが、既存のFluentdの設計を踏襲できるのでシンプルで分かりやすいと思っています

シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

高速スケーラブル検索エンジン ElasticSearch Server (アスキー書籍)

高速スケーラブル検索エンジン ElasticSearch Server (アスキー書籍)

Network機器をAnsibleで操作(?)してみた

f:id:komeiy:20140820203642j:plain

RAWコマンドならいけるよねということで夜な夜な試してみましたメモです。今回、showコマンドやwr memなどしか試していないです。個人的には設定投入はエラー処理とか考えると他に任せたいなと思います。

Network機器でAnsibleの環境

新たに準備するのが面倒だったので以前に使ったvirtual boxで。古くてすいません。 opensshのバージョンは気にした方が良いです。理由は後述します。

$ ansible --version
ansible 1.9.1

$ cat /etc/redhat-release
CentOS release 6.5 (Final)

$ sudo yum list installed | grep openssh
openssh.x86_64                     5.3p1-112.el6_7                     @updates

Ansible設定

SFTPが開いていないデバイスのために念のためscp_if_sshTrueにしておきます。 セッションは1分あれば十分と判断し、60sにしています。

$ more ansible.cfg
[defaults]
host_key_checking = False
transport=ssh
log_path=ansible.log

[ssh_connection]
scp_if_ssh=True
ssh_args = -o ControlMaster=auto -o ControlPersist=60s

インベントリはメーカーごとに分けています。ここは環境により分けて頂ければと思います。

$ more hosts
[all:vars]
ansible_ssh_user=<username>
ansible_ssh_pass=<password>

[cisco]
1.1.1.1

冒頭に書いた通りrawモジュールを使ってコマンドを打ちます。 show runを出力するtaskと出力をローカルに保存するtaskを作っています。

$ more show-run.yml
---
- hosts: cisco
  gather_facts: no

  tasks:
  - name: sh run
    raw : "show run"
    register: show_run
  - name: sh run output
    local_action: shell /bin/echo "{{ show_run.stdout }}" > /home/komei/ansible-
test/sh_run_{{ inventory_hostname }}.txt
$ ansible-playbook show-run.yml -i hosts

PLAY [cisco] ******************************************************************

TASK: [sh run] ****************************************************************
ok: [1.1.1.1]

TASK: [sh run output] *********************************************************
changed: [1.1.1.1 -> 127.0.0.1]

PLAY RECAP ********************************************************************
1.1.1.1                  : ok=2    changed=1    unreachable=0    failed=0
$ ls -la
-rw-rw-r--  1 komei komei   689 Aug 24  23:55 sh_run_1.1.1.1.txt

1つイケてないのがインデントがなくすべて前詰めになってしまう点です。。copyコマンド入れてもプロンプトが出るし何かうまい方法ないかな。。 スイッチ側の設定を書いてないですが、Ansibleなので基本的にSSH開けておけばOKです。たた、個人的にはprivilegeレベルを下げたユーザでアクセスさせたいため、show runではなくwr mem & show confで動かすつもりです。↓みたいな感じ。

$ more show-conf.yml
---
- hosts: cisco
  gather_facts: no

  tasks:
  tasks:
  - name: wr mem
    raw : "wr mem"
  - name: sh conf
    raw : "show conf"
    register: show_conf
  - name: sh conf output
    local_action: shell /bin/echo "{{ show_conf.stdout }}" > /home/komei/ansible
-test/sh_conf_{{ inventory_hostname }}.txt

その他

エラーが出た時の対処

文言通りsshpassを入れてください

TASK: [sh run] **************************************************************** 
fatal: [1.1.1.1] => to use the 'ssh' connection type with passwords, you must install the sshpass program

$ sudo yum install sshpass

opensshのバージョンによってはparamikoを使ってしまってtty周りで苦戦するかもしれません。

http://docs.ansible.com/ansible/intro_getting_started.html

However, when using Enterprise Linux 6 operating systems as the control machine (Red Hat Enterprise Linux and derivatives such as CentOS), the version of OpenSSH may be too old to support ControlPersist. On these operating systems, Ansible will fallback into using a high-quality Python implementation of OpenSSH called ‘paramiko’.

使いどころ

全台のwr memくらいなら有りかなくらいです。バージョンとかはSNMPでGETすれば良いと思いますし。ただ、RAWコマンドがうまく通らないメーカーもあったので、うーんという感じです。もう少し頑張ればわかるかな。。バックアップの仕組みはインデントの件もあるので、copyコマンドで吐き出した方が良いと思います。


シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

入門Ansible

入門Ansible

Ansible: Up and Running

Ansible: Up and Running