Quantcast
Channel: Linux –俺的備忘録 〜なんかいろいろ〜
Viewing all 743 articles
Browse latest View live

パイプで繋いでコマンドの標準出力の内容をSlackに通知する『slackcat』

$
0
0

時折、Slackにコマンドから通知を出したいことがある。
面倒だし、標準出力から渡せたらなぁ…と思って調べたところ、まさにそれを行える『slackcat』というコマンドがあるようだ。
これは使えそうということで、早速試してみる。

1.インストール

インストールはかなり簡単なようで、以下のコマンドで実行できる。

●Linuxの場合

wget https://github.com/vektorlab/slackcat/releases/download/v1.1/slackcat-1.1-linux-amd64 -O slackcat
sudo mv slackcat /usr/local/bin/
sudo chmod +x /usr/local/bin/slackcat

 

●Mac OS Xの場合

brew install slackcat

2.設定

次に、通知するSlackの設定を行う。
以下のコマンドを実行し、URLを表示させる。

slackcat --configure
blacknon@BS-PUB-UBUNTU-01:~$ slackcat --configure
slackcat Creating token request for Slackcat
slackcat Use the below URL to authorize slackcat if browser fails to launch
slackcat http://slackcat.chat/configure

 

出力されたURLにアクセスすると、ブラウザからSlackとslackcatを連携するかどうか聞かれる。
許可をすると、以下のような画面が表示されるので、出力されているコマンドを実行してやる。

20160930_091149000000

 

これで設定は終わり。

 

3.コマンドを実行する

さて、それでは実際にコマンドを実行してみよう。

コマンド | slackcat --channel チャンネル名
コマンド | slackcat --tee --channel チャンネル名 # コンソール上にも表示させる場合

20160930_091532000000

blacknon@BS-PUB-UBUNTU-01:~$ echo ABC | slackcat --channel general
slackcat connected to blacknon as blacknon
slackcat file 1475194489 uploaded to general (0.395s)
blacknon@BS-PUB-UBUNTU-01:~$ echo AAA | slackcat --tee --channel general
slackcat connected to blacknon as blacknon
AAA
slackcat file 1475194500 uploaded to general (0.335s)

 

で、Slackの画面がこちら。

20160930_091622000000

 

確かに、標準出力で渡した内容がSlack側に通知されている。
手軽だし、設定も簡単なので良さそう。

ただ、サーバ側でcronで回すと行った使い方なら、ちゃんとWebHookを使ったスクリプト書いたほうが良いだろう。

はじめてみようSlack 使いこなすための31のヒント はじめてみようSlack 使いこなすための31のヒント

CentOS 7にワークフローをいじって設定できるPython製のジョブスケジューラー『Dagobah』をインストールする

$
0
0

ジョブスケジューラーを導入しようと色々調べていたところ、ワークフローとかが使えるPython製のジョブスケジューラー『Dagobah』というものを見かけたので、ちょっと触ってみる事にする。
なお、インストール先としてはCentOS 7を用いる。

1.インストール

『Dagobah』はpip経由でインストールできるようなので、以下のコマンドでインストールする。

yum -y install python-pip gcc libxml2-devel libxslt-devel python-devel
pip install dagobah
pip install pymongo

 

これでインストールが完了。
簡単だ。

 

2.『Dagobah』のサービス起動

次に、インストールした『Dagobah』のサービスを起動する。
とりあえず、まず設定ファイルを作成する。

mkdir -p ~/dagobah/daemon/
cd ~/dagobah/daemon/
wget https://raw.githubusercontent.com/thieman/dagobah/master/dagobah/daemon/dagobahd.yml
sed -i 's/127.0.0.1/0.0.0.0/g' dagobahd.yml
cd

 

ホームディレクトリに移動後、以下のコマンドを実行するとサービスが起動する。

dagobah
[root@BS-PUB-CENT7-01 ~]# dagobahd
Creating new config file in home directory
Defaulting missing config key Logging.enabled to False
WARNING:root:Defaulting missing config key Logging.enabled to False
WARNING:root:Email.auth_required is True but Email.user is None. Emailing of reports will be disabled.
WARNING:root:SSH config doesn't exist, no remote hosts will be listed
Starting app on 127.0.0.1:9000

 

以後は、~/.dagobahd.ymlというファイルが設定ファイルになる。

3.ブラウザからアクセスする

とりあえず、ブラウザからアクセスしてみよう。初期パスワードは「dagobah」になる。

20161001_222756000000

 

ログイン直後の画面。
新しいジョブを作れとの事。

20161001_223454000000

 

適当に「test」というジョブを作ってみた。

20161001_223626000000

 

[View]を開いたところ。まだ何もタスクを追加してないので、特に何も表示されてない。

20161001_223736000000

 

ページ下にある「Add New Task」から適当にタスクを作ってつなげて見たところ。
マウスで普通につなげる事ができる。

20161001_224124000000

 

[Start Job from Beginning]からジョブを開始した結果。
普通にジョブが正常終了したとのこと。

20161001_224324000000

 

最初のタスクを意図的に失敗するようにした結果。
2個めのタスクが実行されていない事がわかる。

20161001_224418000000

 

確かに、マウスでワークフローをいじってジョブを処理させることができるようだ。
結構お手軽かつわかりやすい感じ。

 

4.リモートサーバに対してタスクを実行させる

さて、今時点ではリモートサーバの設定をしてないので、ローカルサーバに対するタスクしか実行できていない。
じゃあ、リモートサーバに対しタスクを実行するにはどんな設定をすればいいのか。

どうやら、「.ssh/config」に接続先の情報を記述することでリモートサーバとして指定できるようになるみたいだ。
とりあえず、以下のようにファイルを作成する。

Host サーバ名
     HostName ホスト名orIPアドレス
     User ユーザ名
     IdentityFile ~/.ssh/id_rsa(鍵ファイルPATH)

 

ファイル作成後、サーバの再起動をしなくてもリモート先の選択肢に出てくるようになる。

20161001_225640000000

 

各タスクの返り値に応じて処理を分岐させたり、返り値を次のタスクに渡すような処理はできないみたいだけど、単純なジョブならこれで設定できそう。
小規模、かつ単純なタスクのみをジョブにするなら結構ありかも。トリガーとかが必要になる環境では使えないかな。。。

 

新しいLinuxの教科書 新しいLinuxの教科書

コンソールから利用できるネットワークモニタリングツール『Mylg』

$
0
0

別件の調べものをしてたところ、コンソールで利用できるネットワークモニタリングツール『Mylg』というものを見かけたので、少し触ってみることにした(Githubはこちら)。
とりあえず、イメージをつかむなら公式サイトの動画を見るとよさそう。で、見る限り結構便利そうな印象だ。専用コンソールに入って操作するようだけど、かなり扱いやすそうな感じ。

見ててなんとなく予想がついたかもしれないが、Golangで記述されたツールのようだ。
一応、Mac用のパッケージもCentOSなど用のrpmファイルも提供されているようなのだが、今回はUbuntu Server 16.04 LTSにこのツールをインストールして使ってみる。

1.インストール

まず、以下のコマンドでインストールする。

sudo apt-get install libpcap-dev golang
curl -O http://mylg.io/dl/linux/mylg.amd64.deb && sudo dpkg -i mylg.amd64.deb

 

これでインストールが完了した。

 

2.使ってみる

インストールが完了したので、さっそく使ってみよう。
ユーザガイドを見る限り、結構機能があるようなのでいくつか抜粋して使ってみる。

基本的には、まず以下のコマンドでmylgのコンソールに入り、その中でコマンドを実行していく使い方になるようだ。

mylg

20161012_213527000000

 

2-1.tracerouteをしてみる

コマンド「trace」を実行することで、対象のホストへのtracerouteを行うことができる。

local> trace orebibou.com
trace route to orebibou.com (157.112.152.17), 30 hops max
Get https://stat.ripe.net/data/prefix-overview/data.json?max_related=50&resource=172.28.0.1: net/http: TLS handshake timeout
1  XXX.XXX.XXX.1 0.664 ms 0.801 ms 0.784 ms
2  XXX.XXX.XXX.1 1.077 ms 1.026 ms 1.019 ms
3  r641.tokynt01.ap.so-net.ne.jp. (202.223.117.182) [ASN 2527/SO-NET] 5.503 ms 5.576 ms 6.062 ms
4  maru-02Gi2-9.net.so-net.ne.jp. (202.223.117.181) [ASN 2527/SO-NET] 4.690 ms 4.601 ms 5.344 ms
5  ote-gw7Ae7.net.so-net.ne.jp. (202.213.193.33) [ASN 2527/SO-NET] 5.199 ms 4.791 ms 5.692 ms
6  202.213.193.35 [ASN 2527/SO-NET] 11.180 ms 12.899 ms 13.514 ms
7  tkort2-as2527-10g.bb.sakura.ad.jp. (157.17.131.17) 13.757 ms 15.680 ms 16.418 ms
8  tkwrt1s-ort2.bb.sakura.ad.jp. (157.17.130.26) 8.959 ms 13.193 ms 12.924 ms
9  tkwrt3-wrt1s.bb.sakura.ad.jp. (59.106.247.118) 13.231 ms 9.872 ms 8.734 ms
10 157.17.131.246 16.936 ms 20.237 ms 16.301 ms
11 osnrt1s-nrt3-2.bb.sakura.ad.jp. (157.17.146.162) 14.881 ms 16.747 ms 18.039 ms
12 osnrt1b-nrt1s.bb.sakura.ad.jp. (157.17.146.138) 14.099 ms 17.479 ms 21.093 ms
13 osnrt3c-nrt1b.bb.sakura.ad.jp. (157.17.147.2) 26.285 ms 23.220 ms 20.478 ms
14 210.188.211.188 [ASN 9371/SAKURA-C] 13.934 ms 14.521 ms 13.187 ms
15 sv916.xserver.jp. (157.112.152.17) [ASN 9371/SAKURA-C] 12.231 ms 12.665 ms 12.197 ms

 

このとき、「-r」オプションを付与することでリアルタイムでの監視ができるようだ。
「1」「2」キーで表示を切り替えることができる。

20161012_213952000000

 

2-2.パケットキャプチャをしてみる

コマンド「dump」でパケットキャプチャを行える。
オプションはtcpdumpに似ているので、tcpdumpの使い方がわかってればすぐに使いこなせそうだ。

地味に便利な機能として、「-s」オプションで指定したキーワードを含むパケットのみを抽出できる。
以下は、「orebibou」というキーワードを持つパケットのみ監視した結果。

local> dump -i eth0 -x -s orebibou
Interface: eth0, capture size: 6144 bytes
21:43:39.396 IPv4/TCP BS-PUB-UBUNTU-01.BLACKNON.LOCAL.:47768 > sv916.xserver.jp.:80(http) [P.], win 229, len: 76
00000000 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a |GET / HTTP/1.1..|
00000010 48 6f 73 74 3a 20 6f 72 65 62 69 62 6f 75 2e 63 |Host: orebibou.c|
00000020 6f 6d 0d 0a 55 73 65 72 2d 41 67 65 6e 74 3a 20 |om..User-Agent: |
00000030 63 75 72 6c 2f 37 2e 34 37 2e 30 0d 0a 41 63 63 |curl/7.47.0..Acc|
00000040 65 70 74 3a 20 2a 2f 2a 0d 0a 0d 0a             |ept: */*....    |

21:43:39.422 IPv4/TCP sv916.xserver.jp.:80(http) > BS-PUB-UBUNTU-01.BLACKNON.LOCAL.:47768 [P.], win 46, len: 504
00000000 48 54 54 50 2f 31 2e 31 20 33 30 31 20 4d 6f 76 |HTTP/1.1 301 Mov|
00000010 65 64 20 50 65 72 6d 61 6e 65 6e 74 6c 79 0d 0a |ed Permanently..|
00000020 44 61 74 65 3a 20 57 65 64 2c 20 31 32 20 4f 63 |Date: Wed, 12 Oc|
00000030 74 20 32 30 31 36 20 31 32 3a 34 33 3a 33 39 20 |t 2016 12:43:39 |
00000040 47 4d 54 0d 0a 53 65 72 76 65 72 3a 20 41 70 61 |GMT..Server: Apa|
00000050 63 68 65 0d 0a 4c 6f 63 61 74 69 6f 6e 3a 20 68 |che..Location: h|
00000060 74 74 70 73 3a 2f 2f 6f 72 65 62 69 62 6f 75 2e |ttps://orebibou.|
00000070 63 6f 6d 2f 0d 0a 43 61 63 68 65 2d 43 6f 6e 74 |com/..Cache-Cont|
00000080 72 6f 6c 3a 20 6d 61 78 2d 61 67 65 3d 31 0d 0a |rol: max-age=1..|
00000090 45 78 70 69 72 65 73 3a 20 57 65 64 2c 20 31 32 |Expires: Wed, 12|
000000a0 20 4f 63 74 20 32 30 31 36 20 31 32 3a 34 33 3a | Oct 2016 12:43:|
000000b0 34 30 20 47 4d 54 0d 0a 56 61 72 79 3a 20 41 63 |40 GMT..Vary: Ac|
000000c0 63 65 70 74 2d 45 6e 63 6f 64 69 6e 67 0d 0a 43 |cept-Encoding..C|
000000d0 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 32 |ontent-Length: 2|
000000e0 32 39 0d 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 65 |29..Content-Type|
000000f0 3a 20 74 65 78 74 2f 68 74 6d 6c 3b 20 63 68 61 |: text/html; cha|
00000100 72 73 65 74 3d 69 73 6f 2d 38 38 35 39 2d 31 0d |rset=iso-8859-1.|
00000110 0a 0d 0a 3c 21 44 4f 43 54 59 50 45 20 48 54 4d |...<!DOCTYPE HTM|
00000120 4c 20 50 55 42 4c 49 43 20 22 2d 2f 2f 49 45 54 |L PUBLIC "-//IET|
00000130 46 2f 2f 44 54 44 20 48 54 4d 4c 20 32 2e 30 2f |F//DTD HTML 2.0/|
00000140 2f 45 4e 22 3e 0a 3c 68 74 6d 6c 3e 3c 68 65 61 |/EN">.<html><hea|
00000150 64 3e 0a 3c 74 69 74 6c 65 3e 33 30 31 20 4d 6f |d>.<title>301 Mo|
00000160 76 65 64 20 50 65 72 6d 61 6e 65 6e 74 6c 79 3c |ved Permanently<|
00000170 2f 74 69 74 6c 65 3e 0a 3c 2f 68 65 61 64 3e 3c |/title>.</head><|
00000180 62 6f 64 79 3e 0a 3c 68 31 3e 4d 6f 76 65 64 20 |body>.<h1>Moved |
00000190 50 65 72 6d 61 6e 65 6e 74 6c 79 3c 2f 68 31 3e |Permanently</h1>|
000001a0 0a 3c 70 3e 54 68 65 20 64 6f 63 75 6d 65 6e 74 |.<p>The document|
000001b0 20 68 61 73 20 6d 6f 76 65 64 20 3c 61 20 68 72 | has moved <a hr|
000001c0 65 66 3d 22 68 74 74 70 73 3a 2f 2f 6f 72 65 62 |ef="https://oreb|
000001d0 69 62 6f 75 2e 63 6f 6d 2f 22 3e 68 65 72 65 3c |ibou.com/">here<|
000001e0 2f 61 3e 2e 3c 2f 70 3e 0a 3c 2f 62 6f 64 79 3e |/a>.</p>.</body>|
000001f0 3c 2f 68 74 6d 6c 3e 0a                         |</html>.|

20161012_214738000000

 

このキーワードサーチだけでもかなり便利な気がする。

 

2-3.dig+traceをしてみる

digを行い、名前解決について確認する。
NSやMXレコードなど、デフォルトで一発出力してくれるらしい。

local> dig orebibou.com
Trying to query server: 172.28.0.1  your local dns server
;; opcode: QUERY, status: NOERROR, id: 41176
;; flags: qr rd ra;
orebibou.com.   21599   IN      NS      ns2.xserver.jp.
orebibou.com.   21599   IN      NS      ns1.xserver.jp.
orebibou.com.   21599   IN      SOA     ns1.xserver.jp. root.sv0.xserver.jp. 0 10800 3600 604800 3600
orebibou.com.   21599   IN      NS      ns3.xserver.jp.
orebibou.com.   21599   IN      A       157.112.152.17
orebibou.com.   21599   IN      NS      ns4.xserver.jp.
orebibou.com.   21599   IN      NS      ns5.xserver.jp.
orebibou.com.   21599   IN      MX      0 orebibou.com.
;; Query time: 112 ms

;; CHAOS CLASS BIND
version.bind.   0       CH      TXT     "dnsmasq-2.55"

ただ、それよりも注目したいのが「+trace」サブオプション。
どうも名前解決をtraceしてくれてるようだ。状況によっては地味に便利そうな機能だ。

local> dig orebibou.com +trace
.       6439    IN      NS      d.root-servers.net.
.       6439    IN      NS      m.root-servers.net.
.       6439    IN      NS      b.root-servers.net.
.       6439    IN      NS      e.root-servers.net.
.       6439    IN      NS      a.root-servers.net.
.       6439    IN      NS      f.root-servers.net.
.       6439    IN      NS      h.root-servers.net.
.       6439    IN      NS      j.root-servers.net.
.       6439    IN      NS      k.root-servers.net.
.       6439    IN      NS      g.root-servers.net.
.       6439    IN      NS      l.root-servers.net.
.       6439    IN      NS      c.root-servers.net.
.       6439    IN      NS      i.root-servers.net.
from: XXX.XXX.XXX.1#53 in 5 ms
com.    172800  IN      NS      a.gtld-servers.net.
com.    172800  IN      NS      j.gtld-servers.net.
com.    172800  IN      NS      g.gtld-servers.net.
com.    172800  IN      NS      k.gtld-servers.net.
com.    172800  IN      NS      f.gtld-servers.net.
com.    172800  IN      NS      c.gtld-servers.net.
com.    172800  IN      NS      i.gtld-servers.net.
com.    172800  IN      NS      d.gtld-servers.net.
com.    172800  IN      NS      l.gtld-servers.net.
com.    172800  IN      NS      m.gtld-servers.net.
com.    172800  IN      NS      e.gtld-servers.net.
com.    172800  IN      NS      b.gtld-servers.net.
com.    172800  IN      NS      h.gtld-servers.net.
from: d.root-servers.net.#53 in 85 ms
orebibou.com.   172800  IN      NS      ns1.xserver.jp.
orebibou.com.   172800  IN      NS      ns2.xserver.jp.
orebibou.com.   172800  IN      NS      ns3.xserver.jp.
orebibou.com.   172800  IN      NS      ns4.xserver.jp.
orebibou.com.   172800  IN      NS      ns5.xserver.jp.
from: a.gtld-servers.net.#53 in 114 ms
orebibou.com.   86400   IN      SOA     ns1.xserver.jp. root.sv0.xserver.jp. 0 10800 3600 604800 3600
orebibou.com.   86400   IN      MX      0 orebibou.com.
orebibou.com.   86400   IN      NS      ns1.xserver.jp.
orebibou.com.   86400   IN      NS      ns4.xserver.jp.
orebibou.com.   86400   IN      NS      ns3.xserver.jp.
orebibou.com.   86400   IN      A       157.112.152.17
orebibou.com.   86400   IN      NS      ns5.xserver.jp.
orebibou.com.   86400   IN      NS      ns2.xserver.jp.
from: ns1.xserver.jp.#53 in 13 ms

 

2-4.LAN内で使われているIPアドレスを調べる

前にこちらで、LAN内で利用されているIPアドレスの調査方法について記述したことがあるが、その機能も持っている。
コマンド「disc」で、使われているすべてのインターフェイスが接続しているネットワークのIPアドレスを抽出してくる。
こちらも、地味にキーワードサーチ機能がついているようだ(「disc キーワード」で検索できる)。

20161012_215804000000

 

2-5.ポートスキャン、IPアドレスの所有者確認を行う

「scan」コマンドで、対象ホストに対しポートスキャンを実施することができる。

local> scan BS-PUB-CENT7-01
+----------+------+--------+-------------+
| PROTOCOL | PORT | STATUS | DESCRIPTION |
+----------+------+--------+-------------+
| TCP      |   22 | Open   |             |
+----------+------+--------+-------------+
Scan done: 1 opened port(s) found in 2.051 seconds
local> scan google.co.jp
+----------+------+--------+-------------+
| PROTOCOL | PORT | STATUS | DESCRIPTION |
+----------+------+--------+-------------+
| TCP      |   80 | Open   |             |
| TCP      |  443 | Open   |             |
+----------+------+--------+-------------+
Scan done: 2 opened port(s) found in 2.039 seconds

 

IPアドレスの所有者を確認する場合は、「whois」コマンドを実行する。

local> whois 8.8.8.8
+------------+-------+--------------------------+
|   PREFIX   |  ASN  |          HOLDER          |
+------------+-------+--------------------------+
| 8.8.8.0/24 | 15169 | GOOGLE - Google Inc., US |
+------------+-------+--------------------------+

 

その他、hpingやnms、peeringなどいろいろなコマンドがそろっている。
これ一個で大体のことができると考えると、だいぶよさげなツールではなかろうか。
一応、「mylg」コマンドの後ろに内部コマンドを入れることでそのまま実行できるので、他のコマンドとパイプでつなげて実行するのにも困らない。

blacknon@BS-PUB-UBUNTU-01:~$ mylg dig orebibou.com
Trying to query server: 172.28.0.1  your local dns server
;; opcode: QUERY, status: NOERROR, id: 39603
;; flags: qr rd ra;
orebibou.com.   21599   IN      NS      ns3.xserver.jp.
orebibou.com.   21599   IN      SOA     ns1.xserver.jp. root.sv0.xserver.jp. 0 10800 3600 604800 3600
orebibou.com.   21599   IN      NS      ns5.xserver.jp.
orebibou.com.   21599   IN      MX      0 orebibou.com.
orebibou.com.   21599   IN      NS      ns4.xserver.jp.
orebibou.com.   21599   IN      A       157.112.152.17
orebibou.com.   21599   IN      NS      ns1.xserver.jp.
orebibou.com.   21599   IN      NS      ns2.xserver.jp.
;; Query time: 103 ms

;; CHAOS CLASS BIND
version.bind.   0       CH      TXT     "dnsmasq-2.55"

 

図解入門 よくわかる最新ネットワーク技術の基本と仕組み 図解入門 よくわかる最新ネットワーク技術の基本と仕組み

CentOS 7にいろいろなシステムと連携できるジョブスケジューラー『Rundeck』をインストールする

$
0
0

ジョブスケジューラーについていろいろと物色しているのだが、最近であればやはりRundeckは触っといたほうがいいだろうと思ったのでCentOS 7に入れていじってみることにする。
「Rundeck」は、Webベースのインターフェイスを持つ軽量なエージェントレス(ssh接続)のジョブスケジューラーだ。また、プラグインなどを用いて他のシステムと連携して、特定のログなどをトリガーにジョブをキックさせることもできる(この辺はStackStormのほうが対応数が多いっぽい。その他Apache NifiとかHugginとかのIFTTTに影響を受けたプロジェクトのほうが強いかも?)。
ジョブの記述もcronと同じように記述できるので手軽なようだ。一応、ジョブネットも作成可能らしい。

とりあえず、まずはインストールをしてみよう。
インストール先にはCentOS 7を用いる。なお、お試しなので冗長化はせず、FirewalldやSELinuxも無効化する。

1.インストール

RundeckはJavaで記述されているので、まずはJavaの実行環境から。
以下のコマンドでインストールする。

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u101-b13/jdk-8u101-linux-x64.rpm
rpm -ihv jdk-8u101-linux-x64.rpm

 

次に、Rundeckをインストールする。

rpm -Uvh http://repo.rundeck.org/latest.rpm
yum install -y rundeck
systemctl start rundeckd

 

これで、Rundeckのインストールおよびサービス起動ができた。

 

2.初期設定

次に、Rundeckの設定ファイル(/etc/rundeck/rundeck-config.properties)を編集してブラウザから管理コンソールにアクセスできるようにする。

sed -i '/^grails/c grails.serverURL=http://[RundeckのIPアドレスorホスト]:4440' /etc/rundeck/rundeck-config.properties
systemctl restart rundeckd

 

3.ブラウザからアクセスする

さて、初期設定が完了したらブラウザからアクセスしてみよう。
「http://[RundeckのIPアドレスorホスト]:4440」にアクセスするとログイン画面が表示される。
初期ID/PWは「admin/admin」となっている。

20161009_115006000000

20161009_115141000000

 

ログイン後のトップページを見るとわかるが、Rundeckではプロジェクトがないとジョブを登録できないので、まずはプロジェクトを作成する。
[New Project]をクリックして、プロジェクトを作成する。
とりあえず、「Project Name」と「SSH Key File path」だけ設定しておけばいいだろう。そのままプロジェクトを作成する。

20161009_115746000000

 

これで、ジョブが作成できるようになった。

20161009_120208000000

 

4.Rundeckサーバ自身でのジョブ実行

まずはRundeckサーバ自身でジョブを実行させる。
「Create a new Job …」をクリックし、ジョブ作成画面に遷移する。

20161009_120845000000

 

ジョブ名およびその説明文について記述する。
オプションについては、今回は設定しない。

20161009_155002000000_

 

次に、ジョブで実行するステップ(コマンドとかスクリプトの流れ)を設定する。
「If a step fails」はジョブ失敗時の挙動(「Stop at the failed step.」は失敗したステップでジョブを停止する、「Run remaining steps before failing.」は失敗したステップをスキップして残りのステップを実行させる)、「Strategy」はジョブの実行時の挙動(「Node-oriented」はノード単位での実行、「Step-oriented」はステップ単位での実行)となる。とりあえず、デフォルトでは「失敗したステップでジョブを停止する」「ノード単位での実行」となる。

「Add a Step」でスクリプトやコマンドなど、実行させるステップについて定義できる。
とりあえず、ここではCommandを選択する。

20161009_162352000000_

 

実行するコマンドの入力画面に切り替わるので、(今回はテストなので適当に)入力する。
コマンドの説明についてもわかるように記述する。

20161009_164552000000_

 

今回はローカルなので、「Execute locally」を選択。

20161009_164831000000_

 

「Send Notification?」の箇所で、ジョブの実行結果の通知設定を行うことができる。
メールの送信にはSMTPサーバなどの設定が必要になるので、今回は設定しない。

20161009_172559000000_

 

ジョブの実行スケジュール設定。
時間等をそのまま指定する方法と、crontabと同じフォーマットで指定する方法がある。

20161009_172853000000_

20161009_172857000000_

 

とりあえず、以上でジョブの作成を完了にする。
トップページから「Run Job Now」を実行してジョブを実行してみよう。

20161009_165146000000

 

実行した結果がこちら。
無事ジョブの実行がされたことが分かる。

20161009_165416000000

20161009_165426000000

20161009_165434000000

20161009_165438000000

 

5.リモートサーバでのジョブ実行

さて、ローカルだけジョブを実行しててもあまり意味がないので、次にリモートサーバに対しジョブを実行してみよう。
Rundeckでリモートサーバに対して処理を行う場合は、sshログインできるようにする必要がある。プロジェクト作成時に鍵ファイルのPATHを指定している(デフォルトでは「/var/lib/rundeck/.ssh/id_rsa」にある)ので、その鍵ファイルをリモートサーバにコピーしてやろう。
ここでは、事前にリモートサーバ側でユーザ「rundeck」を作成、パスワードを設定しているものとする(鍵のコピー後は「passwd -d rundeck」でパスワードを削除する)。

ssh-copy-id -i /var/lib/rundeck/.ssh/id_rsa.pub rundeck@[リモートサーバ IPorホスト名]

 

次に、Rundeckにリモートサーバの情報を登録する。
Web管理画面からは登録できないようなので、コンソールから設定ファイルを編集する。
ノードの追加は、「/var/rundeck/projects/プロジェクト名/etc/resources.xml」に記述することで行える。
(以下の例では、イメージしやすいようosVersionなどはとりあえず入れてあるのだが、実際の環境に合わせて書き換えてもらいたい。)

sed '/^<\/project>/i\
  <node name="サーバ名" description="説明" tags="タグ" hostname="IPアドレスorホスト名" osArch="amd64" osFamily="unix" osName="Linux" osVersion="3.10.0-327.el7.x86_64" username="rundeck"/>' \
   -i.bk /var/rundeck/projects/*/etc/resources.xml

 

設定ファイルに追記したら、もう管理画面上からもリモートサーバを指定できるようになる。
今回は、とりあえず先ほどローカル向けに作成したジョブにノードを追加する。

「Nodes」のとこで「Dispatch to Nodes」を選択し、先ほど追記したノード名で検索する(このとき、部分一致で検索する場合は「.*」でちゃんと正規表現を書いてあげる必要がある)。

20161009_174735000000_

 

filterでの検索結果にジョブの実行対象となるノードが出ている状態で保存し、ジョブを実行してみよう。

20161009_175324000000

 

無事、ジョブの実行ができた。
ノードの追加のとこがちょっと面倒な気はするが、悪くなさそうだ。

いろいろなプラグインもあるので、少しづつ使ってみよう。

 

【参考】

 

新人IT担当者のための ネットワーク管理&運用がわかる本 新人IT担当者のための ネットワーク管理&運用がわかる本

ネットワーク機器のコンフィグバックアップツール『Oxidized』でNW機器のコンフィグをGitlab連携する

$
0
0

ネットワーク機器のコンフィグバックアップを自動化するツールといえば、前に紹介したrancidrConfigらへんがあるのだが、rancidに影響を受けたツールで『Oxidized』というツールを見かけたので、ちょっと触ってみることにした。
サポートしているNW機器のOSは結構多くて、CiscoのIOSやJuniperのJunOS・ScreenOSはもちろんのこと、VyattaとかRouterOS、FortiOSとかもあるようだ(NetGearェ…)。
Webクライアントもあり、かつ履歴管理はGitで行えるようなので結構便利そう。

今回は、このツールをCentOS 7に入れてみる。

1.インストール

まず、前提パッケージのインストールを行う。

yum install -y cmake sqlite-devel openssl-devel libssh2-devel ruby gcc ruby-devel git

 

Rubyのインストールができたら、gemでOxidizedのインストールを行う。

gem install oxidized --source http://rubygems.org
gem install oxidized-script oxidized-web --source http://rubygems.org

 

これでインストール完了。

2.『Oxidized』の設定

さて、それでは設定を行っていこう。
まず、プロセス実行ユーザとして「oxidized」ユーザを作成、スイッチしよう。

useradd oxidized -d /opt/oxidized
su - oxidized

 

次に、oxidizedコマンドを実行してやる。
コマンドを実行すると、デフォルトの設定ファイルとして「~/.config/oxidized/config」というテンプレートファイルが作成される。

oxidized
[oxidized@BS-PUB-CENT7-01 ~]$ oxidized
edit ~/.config/oxidized/config
/usr/local/share/gems/gems/oxidized-0.18.0/lib/oxidized/config.rb:53:in `load': edit ~/.config/oxidized/config (Oxidized::NoConfig)
        from /usr/local/share/gems/gems/oxidized-0.18.0/lib/oxidized/cli.rb:24:in `initialize'
        from /usr/local/share/gems/gems/oxidized-0.18.0/bin/oxidized:9:in `new'
        from /usr/local/share/gems/gems/oxidized-0.18.0/bin/oxidized:9:in `'
        from /usr/local/bin/oxidized:23:in `load'
        from /usr/local/bin/oxidized:23:in `'
[oxidized@BS-PUB-CENT7-01 ~]$ ls -la ~/.config/oxidized/config
-rw-rw-r--. 1 oxidized oxidized 418 10月 15 15:56 /opt/oxidized/.config/oxidized/config

 

設定ファイルのテンプレートができたら、一応バックアップだけ取って以下のように編集してしまおう。
今回は、各ノードのコンフィグはすべてgitで差分を管理し、かつその情報をローカルネットワーク内にいるGitlabに連携させるようにする。
なお、以下の例ではインターバル(コンフィグの確認間隔(interval:))を30秒にしているが、これは環境に合わせて適切な値を模索してもらいたい。
※事前にGitlabにはユーザの鍵設定をしておくこと。プロジェクトの鍵だとPUTできないので注意。

●/opt/oxidized/.config/oxidized/config

---
username: oxidized
password: oxidized
model: junos
interval: 30
use_syslog: false
log: "/opt/oxidized/.config/oxidized/logs/oxidized.log"
debug: true
threads: 30
timeout: 20
retries: 3
prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/
rest: Webインターフェイス用IPアドレスorホスト名:8888
vars: {}
groups: {}
input:
  default: ssh, telnet
  debug: false
  ssh:
    secure: false
output:
  default: git
  git:
    user: blacknon
    email: blacknon@XXX.com
    single_repo: true
    repo: /opt/oxidized/git/oxidized.git
hooks:
  push_to_remote:
    type: githubrepo
    events: [post_store]
    remote_repo: "git@GitLabサーバのIPアドレス:blacknon/NetworkConfiguration.git"
    publickey: /opt/oxidized/.ssh/id_rsa.pub
    privatekey: /opt/oxidized/.ssh/id_rsa
source:
  default: csv
  csv:
    file: "/opt/oxidized/router.db"
    delimiter: !ruby/regexp /:/
    map:
      name: 0
      model: 1
      username: 2
      password: 3
    vars_map:
      enable: 4
model_map:
  cisco: ios
  juniper: junos
  F5: tmos
  fortigate: fortios
  screenos: screenos
  vyos: vyatta

 

これで設定ファイルはOK。
次に、コンフィグを持ってくるノードのリストを作成する。
今回は、sourceのvar_mapでenableパスワードがある場合のみ、5列目に記述するように指定している。

●/opt/oxidized/router.db

対象ホスト名:ios:ユーザ名:パスワード:Enableパスワード
対象ホスト名:vyatta:ユーザ名:パスワード:Enableパスワード

 

設定ファイルを無事作成したら、最後に「oxidized」コマンドでプロセスを起動する。
(できれば、起動スクリプトを作ってやったほうがいいだろう)

oxidized
[oxidized@BS-PUB-CENT7-01 ~]$ oxidized
Puma 2.16.0 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://172.20.100.118:8888

 

起動したWeb管理画面がこちら。
今回はVyOSと手元にあったCatalystに対して実行している。

20161015_180608000000

 

最新のコンフィグの内容は各ノードの右端列の一番左のボタンで見れる。

20161015_180817000000

 

差分についてもdiffで確認することが可能だ。

20161015_180934000000

 

今回はHookでGitlabにもデータを連携しているので、そちらでも確認ができる。

20161015_181220000000

 

GitlabではなくGithubにもデータを連携できるし、インターバルに指定した間隔で自動的にコンフィグを確認、差分があったらちゃんと管理してGitlabやGithubに連携してくれるのでかなり便利だ。
対応しているNW機器が多いのも良い(個人的にVyattaとかpfSenseが対応しているのがポイント高い)。

家の環境のコンフィグバックアップにはこれを使おうかな。

 

図解入門 よくわかる最新ネットワーク技術の基本と仕組み 図解入門 よくわかる最新ネットワーク技術の基本と仕組み

CurlのWebサーバ応答時間の統計情報をわかりやすく表示してくれる『httpstat』

$
0
0

CurlコマンドではWebページアクセス時のレスポンスタイムを測定することができるのだが、それをより見やすくすることができる『httpstat』というものを見かけたので触ってみることにする。

1.インストール

Pythonで書かれており、pipを使えば簡単にインストールできる。

pip install httpstat

2.コマンド実行

インストールができたら、以下のようにコマンドを実行する。

httpstat http://対象のURL [Curlのオプション]

20161203_164405000000

 

Webページがうまく表示されないときの調査に便利そうだ。

 

Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう

CentOS 7でPostfix+DovecotによるIMAPサーバをActiveDirectory連携させる(LDAP認証)

$
0
0

今回は、Postfix+Dovecotで構築されたメールサーバで、ActiveDirectory連携についてを行う。
なお、当たり前だがメールサーバ側からADサーバと通信できる必要があるので、DMZ領域にいる場合でもそこの通信を開けないといけなかったり、クラウド上にメールサーバが建ってる場合はVPNで接続したりする必要がある。ネットワーク周りから考えないとならず、諸々面倒くさいことこの上ない。
小規模なグループで用いるメールサーバであれば、少人数なので普通にpamでローカルユーザで管理してID統合は行わないか、おとなしくGSuiteやOffice 365を使ったほうがいいだろう(これらにはローカルADと同期するツールが公式で提供されているので)。

前提として、すでにADおよびメールサーバ(Postfix+Dovecot)は構築済みであり、AD接続用のユーザなども作成済みとする(今回の例では「ldap」というユーザを使用)。
また、ユーザの認証情報についてはメールサーバ側で持たないものとし、メールデータはメールサーバ側に作成。ADユーザのディレクトリは自動的に作成するようにする。

 

1.Postfixの設定ファイルを編集する

もうすでにメールサーバ自体は構築済なので、Postfixの設定ファイル末尾に以下の内容を追記する。

●/etc/postfix/main.cf

virtual_transport = virtual
virtual_mailbox_domains = $mydomain

virtual_mailbox_base = /var/spool/virtual
virtual_alias_maps = ldap:/etc/postfix/ldap-alias.cf
virtual_mailbox_maps = ldap:/etc/postfix/ldap-mailbox.cf
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
local_recipient_maps = proxy:unix:passwd.byname $alias_maps $virtual_mailbox_maps

 

また、「/etc/postfix/main.cf」内で「mydestination」を定義している場合は、そのままだとエラーになるので以下のように空にする。

●/etc/postfix/main.cf

mydestination =

 

追記した内容にある「/etc/postfix/ldap-alias.cf」「/etc/postfix/ldap-mailbox.cf」ファイルをそれぞれ新規で作成する。

●/etc/postfix/ldap-alias.cf

server_host = ActiveDirectoryサーバのホスト名orIPアドレス(複数ある場合はカンマ区切り)
search_base = cn=Users,dc=adtest,dc=local
bind = yes
bind_dn = ldap@adtest.local
bind_pw = パスワード
scope = one
query_filter = (mail=%s)
result_attribute = mail

 

●/etc/postfix/ldap-mailbox.cf

server_host = ActiveDirectoryサーバのホスト名orIPアドレス(複数ある場合はカンマ区切り)
search_base = cn=Users,dc=adtest,dc=local
bind = yes
bind_dn = ldap@adtest.local
bind_pw = パスワード
scope = one
query_filter = (mail=%s)
result_attribute = mail
result_format = /home/%u/Maildir/

 

以下のコマンドを実行して無事AD認証が行えることを確認する。

postalias -q adtest@adtest.local ldap:/etc/postfix/ldap-mailbox.cf
postalias -q adtest@adtest.local ldap:/etc/postfix/ldap-alias.cf
[root@BS-PUB-POSTFIX-01 ~]# postalias -q adtest@adtest.local ldap:/etc/postfix/ldap-mailbox.cf
/home/adtest/Maildir/
[root@BS-PUB-POSTFIX-01 ~]# postalias -q adtest@adtest.local ldap:/etc/postfix/ldap-alias.cf
adtest@adtest.local

 

上記テストコマンドを実行して問題がなければ、Postfixを再起動し(設定ファイル中で定義した)ディレクトリを作成する。

systemctl restart postfix
mkdir -p /var/spool/virtual
chown 10000.10000 /var/spool/virtual/

 

この状態で、mailxコマンドでコンソールからActiveDirectoryユーザにメールを送信して、無事所定のディレクトリ(この場合、「/var/spool/virtual/」配下)に置かれることを確認する。

[root@BS-PUB-POSTFIX-01 ~]# mailx adtest2@adtest.local
Subject: test
test
.
EOT
[root@BS-PUB-POSTFIX-01 ~]# ls -al /var/spool/virtual/home/adtest2/Maildir/new/
合計 8
drwx------ 2 10000 10000   62 12月  4 23:28 .
drwx------ 5 10000 10000 4096 12月  4 23:26 ..
-rw------- 1 10000 10000  592 12月  4 23:28 1480861684.Vfd00Ic0b3568M934659.BS-PUB-POSTFIX-01

2.Dovecotの設定ファイルを編集する

次に、Dovecotの設定ファイルを編集する。
まず、「/etc/dovecot/conf.d/10-auth.conf」に以下のコマンドを実行し、「/etc/dovecot/conf.d/auth-ldap.conf.ext」ファイルの読み込みを行わせるようにする。

sed -i '/auth-ldap.conf.ext/s/^#//' /etc/dovecot/conf.d/10-auth.conf

 

「/etc/dovecot/conf.d/auth-ldap.conf.ext」ファイルで読み込まれている「/etc/dovecot/dovecot-ldap.conf.ext」ファイルを新規作成し、そこにActiveDirectoryへの接続情報を記載する。

●/etc/dovecot/dovecot-ldap.conf.ext

hosts = ActiveDirectoryサーバのホスト名orIPアドレス
base = cn=Users,dc=adtest,dc=local
ldap_version = 3
auth_bind = yes
auth_bind_userdn = adtest\%u
pass_filter = (&(objectclass=person)(uid=%u))

 

以下のコマンドで、IMAPサーバにログインできることを確認する。

[root@BS-PUB-POSTFIX-01 ~]# telnet localhost imap
Trying ::1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
. login adtest2 P@ssw0rd
. OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS SPECIAL-USE BINARY MOVE] Logged in

 

ひとまずこれで、IMAPサーバとしてAD連携して動作するようになった。
SMTPサーバとしてもAD連携する場合はSMTP-Authについてsaslauthの設定を変えてやる必要があるのだが、今回はそこまでは行わないことにする。

 

【参考】

 

PostfixとMySQLで作るメールサーバ構築ガイド PostfixとMySQLで作るメールサーバ構築ガイド

CentOS 7でfail2banを用いてApacheへのDDoSなどのアタックを検知・対象のIPアドレスをブロックする

$
0
0

インターネット上にサーバを公開していると、sshやhttpdへDDoS攻撃やディレクトリトラサーバル攻撃を公開しているページすべてに行うようになツールを投げられたり、乗っ取りしようとして来たりといろいろと攻撃されることが多い。DDoSやらツールでの攻撃を受けると大量のパケットやリクエストが飛んできてサーバへの負荷が重く、サービスの継続にも支障が出たりする。そんな時は、攻撃してきているグローバルIPからの接続をファイアウォールなどでしばらく拒否してやるといった対応が必要になる。

そういったことをするためのツールがこのfail2banだ。結構有名なツールだし、LPIC(303かな?201と202でも出てくるかも…)でもよく出てくるので名前を聞いたことのある人も多いと思う。
各種ログを元に、定義されたフィルターに適合したアクセス元の接続を拒否するようiptables(firewalld)で設定をするツールだ。

今回は、このfail2banをCentOS 7にインストール・設定しログを監視、問題のあるアクセス元のIPアドレスをbanさせる。iptablesではなくfirewalldからファイアウォールの設定を行う必要があるので、iptablesを用いた方法と少し変える必要がある。また、当たり前ながらfirewalldを起動させる必要があるので注意。前提条件として、httpdおよびfirewalldはサービスとして起動済みで、80番ポートも解放されているものとする。

 

1.インストール

fail2banのインストールは簡単で、以下のようにepelリポジトリ経由でyumからインストールできる。

yum install -y epel-release
yum install fail2ban fail2ban-systemd

 

これでインストールは完了。

 

2.fail2banの設定

次に、fail2banの設定を行う。
fail2banは、主にそのアクセスが攻撃かどうかを判別するためのログについて記述したFilterと、Filter条件のログから攻撃者として検知する回数・さらに検知した後のBANの対処方法を定めるJailを設定、定義する。

2-1.fail2banのFilterを定義する

まずは、アクセスが攻撃かどうかを判別するFilterの定義ファイルを作成する。
すでにデフォルトの定義ファイルが「/etc/fail2ban/filter.d/」フォルダ以下にあるので、対象のサービス名のファイルを随時編集するか、新規でファイルを作成してやればよい。
今回は、DDoS(apache-ddos.conf)とディレクトリトラサーバル(apache-dirtra.conf)に対応した定義ファイルを作成する。

●/etc/fail2ban/filter.d/apache-ddos.conf

[Definition]
failregex = ^<HOST> -.*"(GET|POST).*
ignoreregex = \.(?i)(jpe?g|gif|png|bmp|pdf|js|css|woff|eot|ttf|ico|txt|xml|swf|xlsx?|docx?|pptx?)

 

●/etc/fail2ban/filter.d/apache-dirtra.conf

[Definition]
failregex = <HOST>.*] "GET /.*\.\./\.\./\.\./
ignoreregex =

 

上で設定している項目がだが、それぞれ

  • failregex … BAN対象とするログの正規表現
  • ignoreregex … failregexの中で除外するログの正規表現

 

2-2.fail2banのJailを定義する

次に、Jailの定義ファイルを設定する。
この設定でBANする基準やBAN後の挙動についてを定義する。

「/etc/fail2ban/jail.conf」というファイルがあるが、アップデートで変更される可能性もあるので「/etc/fail2ban/jail.d/jail.local」というファイルをコピーして新規に作成する。
DDoS(apache-ddos)、ディレクトリトラサーバル(apache-dirtra)の2つのルールを追記する。

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.d/jail.local

 

●/etc/fail2ban/jail.d/jail.local

[apache-ddos]
enabled = true
port = http,https
filter = apache-ddos
logpath = %(apache_access_log)s
maxretry = 10
findtime = 5
bantime = 86400
action = %(action_mwl)s
destemail = user@domain.com


[apache-dirtra]
enabled = true
port = http,https
filter = apache-dirtra
logpath = %(apache_access_log)s
maxretry = 10
findtime = 5
bantime = 86400
action = %(action_mwl)s
destemail = user@domain.com

 

それぞれの設定項目だが、

  • enabled … Jailルールの有効/無効
  • port … Jailルールを適用するポート
  • filter … Jailルールで利用するフィルター名(/etc/fail2ban/filter.d/(フィルター名).conf)
  • logpath … 監視対象とするログのPATH(変数での指定可)
  • maxretry … 攻撃として認識する回数(findtimeで指定された秒数基準)
  • findtime … アクセス回数(maxretry)を攻撃としてカウントする時間
  • bantime … BANしたIPアドレスのブロック時間(秒)
  • action … BANしたIPアドレスに対して行うアクション。「%(action_mwl)s」はログの内容やWHOIS情報についてアラートメールに記述してくれる。
  • destemail … アラートメールの送信先アドレス

 

2-3.サービス起動

諸々の設定が終わったら、fail2banのサービス起動を行う。

systemctl start fail2ban
systemctl enable fail2ban

3.アクセス・攻撃を行ってみる

さて、インストールが完了したら実際にブラウザからアクセスや攻撃を行ってみよう。
今回の場合は、DDoSで普通にF5アタックをすればいいだろう。

何度かアタックすると、「/var/log/fail2ban.log」にBanしたというログが出力されるはずだ。

2016-12-11 11:14:15,553 fail2ban.filter         [31812]: INFO    [apache-ddos] Found 172.XXX.XXX.XXX
2016-12-11 11:14:15,553 fail2ban.filter         [31812]: INFO    [apache-ddos] Found 172.XXX.XXX.XXX
2016-12-11 11:14:15,885 fail2ban.filter         [31812]: INFO    [apache-dirtra] Found 172.XXX.XXX.XXX
2016-12-11 11:14:15,885 fail2ban.filter         [31812]: INFO    [apache-dirtra] Found 172.XXX.XXX.XXX
2016-12-11 11:14:16,556 fail2ban.filter         [31812]: INFO    [apache-ddos] Found 172.XXX.XXX.XXX
2016-12-11 11:14:16,556 fail2ban.filter         [31812]: INFO    [apache-ddos] Found 172.XXX.XXX.XXX
2016-12-11 11:14:16,828 fail2ban.actions        [31812]: NOTICE  [apache-ddos] Ban 172.XXX.XXX.XXX

 

これで、あとは解除の時間がくるまで対象のIPアドレスはアクセスができないようになった。

 

3-1.現在BANされているIPアドレスを調べる

現在アクセス制限をしているIPアドレス(BANされたIPアドレス)を調べるには、以下のコマンドを実行する。

fail2ban-client status <Jailルール名>
[root@BS-PUB-WEBTOOL-TEST01 ~]# fail2ban-client status apache-ddos
Status for the jail: apache-ddos
|- Filter
|  |- Currently failed: 1
|  |- Total failed:     90
|  `- File list:        /var/log/httpd/access_log
`- Actions
   |- Currently banned: 2
   |- Total banned:     2
   `- Banned IP list:   172.XXX.XXX.XXX 172.XXX.XXX.XXX

 

3-2.BANされたIPアドレスを解除する

BANされてしまったIPアドレスを手動で解除する場合は、以下のコマンドで解除を行う。

fail2ban-client set <Jail名> unbanip IPアドレス

 

これで、無事攻撃を受けた際にfail2banで対象のIPアドレスをBANできるようになった。
少々リソースを食うのが難点だが、インストールや設定も簡単なので外部公開しているサービスでは導入しておくといいだろう。

 

【参考】

 

サイバーセキュリティテスト完全ガイド Kali Linuxによるペネトレーションテスト サイバーセキュリティテスト完全ガイド Kali Linuxによるペネトレーションテスト

CentOS 7でApacheのWAF(Web Application Firewall)としてmod_securityを用いる

$
0
0

Webサイトを運営するうえで、Firewallはどこも利用していると思う。しかし、iptablesやfirewalldのようなFirewallの場合、防御してくれるのはされたポートやIPアドレスレベルでのフィルタリングであり、Webアプリケーションの脆弱性に対する攻撃を防御してくれるわけではない。
そういった攻撃を防ぐには、Webアプリケーションファイアウォール(WAF)が必要になるのだが、そんな時にApacheのモジュールとして動作するオープンソースなプロダクトが、今回導入するmod_securityだ。

今回は、このmod_securityをCentOS 7にインストールして不正アクセスを防御する。なお、すでにApacheはインストール済みとする。

1.mod_securityのインストール

mod_security自体のインストールは簡単で、以下のようにyumからインストールが可能だ。
今回はよく利用されている攻撃のルールファイルも取得するので、「mod_security_crs」も取得する。

yum install -y epel-release
yum --enablerepo=epel install -y mod_security mod_security_crs

 

これで、mod_securityのインストールは完了した。
この時点では、まだmod_securityを有効にしないためhttpdの再起動は行わない。

2.mod_securityの設定

次に、mod_securityの設定を行う。
最初に「mod_security_crs」を取得したことで一般的に行われる攻撃に関してはすでに対応しているが、テストのために簡単なセキュリティルールを追加する。

●/etc/httpd/modsecurity.d/activated_rules/modsecurity_01_orgrules.conf

SecDefaultAction "phase:2,deny,log,status:406"
SecRule REQUEST_URI "etc/passwd" "id:'500001'"
SecRule REQUEST_URI "\.\./" "id:'500002'"
SecRule ARGS "<[Ss][Cc][Rr][Ii][Pp][Tt]" "id:'500003'"
SecRule ARGS "[Ss][Ee][Ll][Ee][Cc][Tt][[:space:]]+[Ff][Rr][Oo][Mm]" "id:'500004'"

 

設定後、httpdの再起動を行う。

systemctl restart httpd

 

3.攻撃テストを行う

それでは、実際に攻撃テストしてみよう。
curlから、ルールに沿ったリクエストを投げてみよう。406エラーになるはずだ。

blacknon@BS-PUB-UBUNTU-01:~$ curl http://BS-PUB-WEBTOOL-TEST01/index.html?+select
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>406 Not Acceptable</title>
</head><body>
<h1>Not Acceptable</h1>
<p>An appropriate representation of the requested resource /index.html could not be found on this server.</p>
</body></html>
blacknon@BS-PUB-UBUNTU-01:~$ curl http://BS-PUB-WEBTOOL-TEST01/../../etc/passwd
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>406 Not Acceptable</title>
</head><body>
<h1>Not Acceptable</h1>
<p>An appropriate representation of the requested resource /etc/passwd could not be found on this server.</p>
</body></html>

 

これで、無事問題のあるリクエストは防御できるようになった。
もちろん、場合によっては正常なリクエストもエラーになる可能性があるので、ちゃんとチューニングは必要。
環境に合わせて設定をしてやろう。

 

【参考】

 

Hadoop Security Hadoop Security

『csvkit』のin2csvコマンドでLinux上でExcelファイル(xls・xlsx)からcsvに変換してやる

$
0
0

ちょっと調べものをしてたところ、『csvkit』というCSVに関する処理を行えるコマンドツールパッケージを見かけた。
で、その中にin2csvコマンドなるものがあるのだが、これを使うことでxlsやxlsxといったExcel形式のファイルをcsvフォーマットに変換して出力してくれるようだ。

まず、以下のコマンドで『csvkit』をインストールする。

pip install csvkit

 

インストールができたら、in2csvを使ってみよう。
普通にExcelファイルを指定すると、標準出力でCSV形式に出力してくれる。

[root@BS-PUB-CENT7-01 ~]# in2csv Book2.xlsx
,,
,test,1234
,,
,tertete,gdgrhg

 

これは使えそうだ。
そのほか、sqlでcsvを扱ったりするようなツールがあったり、かなり便利そう。
今度本格的に触ってみよう。

 

シェルスクリプトマガジン vol.43 シェルスクリプトマガジン vol.43

Linuxで特定のフォルダ配下で中身が重複したファイルを確認・削除する

$
0
0

複数人でファイルサーバなどを利用していると、時折同じファイルなのだけど名前変えて違うフォルダにファイルをコピーしたり、ISOファイルなどを気づかずに同じファイルを別名でおいてしまったりといった、中身が同じファイルを複数置いてしまうことがある。
ディスクサイズは有限なので、容量がいっぱいになってきたら当然重複したファイルや容量の大きいファイルは削除する必要がある。
そんな時、重複して中身がおなじファイルを見つけるときに便利なのがfdupesコマンドだ。

1.インストール

fdupesコマンドのインストール方法は以下。

yum install -y --enablerepo=epel fdupes
apt install fdupes

 

これでfdupesコマンドがインストールできる。

2.使い方

fdupesは、以下のように対象のPATHを指定してやることでそのPATH配下で重複したファイルをリストアップしてくれる。
このとき、「-r」オプションを付与しないと再帰的に検索してくれないので注意。

fdupes -r 対象PATH

 

コマンドを実行すると、以下のようにプログレスを表示させて検索してくれる。
ファイル数が多いとその分時間がかかるので注意。

[root@BS-PUB-CENT7-01 ~]# fdupes -r /tmp/
Progress [1/15] 6% -

 

実行後、重複ファイルが見つかったら以下のように改行区切りで重複ファイルを表示してくれる。

[root@BS-PUB-CENT7-01 ~]# fdupes -r /tmp/
/tmp/aaa/clonezilla-live-1.2.12-67-i686-pae.iso
/tmp/clonezilla-live-1.2.12-67-i686-pae.iso
/tmp/bbb

/tmp/test1.txt
/tmp/test2.txt
/tmp/test3.txt
/tmp/test4.txt
/tmp/test5.txt
/tmp/test6.txt
/tmp/test7.txt
/tmp/aaa/test2.txt
/tmp/aaa/test11.txt
/tmp/aaa/test133.txt

 

2-1.統計情報を表示させる

「-m」オプションを付与することで、統計情報を得ることができる。

fdupes -mr PATH
[root@BS-PUB-CENT7-01 ~]# fdupes -mr /tmp/
11 duplicate files (in 2 sets), occupying 234.9 megabytes

 

2-2.重複ファイルを削除する

重複したファイルを削除する場合は、「-r」オプションで対話形式での削除が行える。
1個のファイルを残して問答無用で削除する場合は、「-f」オプション(最初に検索されたファイルは除外する)と「-N」(対話形式のプロンプトを表示させずすべて削除する)オプションを組み合わせることで、それ以外の重複ファイルを削除してくれる。

fdupes -rd PATH #対話形式での削除
fdupes -frdN PATH # 1個目に検索されたファイル以外をすべて削除

 

まぁ、実際に業務などで使うにはちょっと危険なので、一度リストをファイルに書き出してから人の判断を挟んだほうがいいだろう。

 

 

 

Excelファイル(~.xls/~.xlsx)をLinuxコンソール上でCSV方式に変換する方法

$
0
0

よくある、利用される問題だからなのか、LinuxやMac OS XでExcelファイル(.xlsや.xlsxファイル)をコンソール上でCSV方式に変換するためのコマンドは数多く用意されている。
で、今回はその中でも使えそうなものを2つほど抜粋してみようと思う(エクシェル芸な勉強会近いし)。

1.xlsx2csv

こういった用途では一番多く使われているだろう、xlsx2csvコマンドを用いての変換。
xlsx2csvコマンド自体は以下でインストールができる。

pip install xlsx2csv

 

CSV形式への変換は以下のコマンドで行える。
オプションでどのシートを変換するかについても選べるので、複数シートがある場合でも問題ないだろう。

xlsx2csv ExcelファイルPATH [CSVファイルPATH]
[root@BS-PUB-CENT7-01 ~]# xlsx2csv Book2.xlsx
,test,1234,2222,3456,
,tertete,gdgrhg,3333,gdgrhg3333,

2.in2csv(csvkit)

こちらでも触れたのだが、『csvkit』というツールの変換コマンドである「in2csv」を使うことで変換する。
『csvkit』のインストール方法は以下。

pip install csvkit

 

ExcelからCSV形式に変換する「in2csv」の実行方法は以下。

in2csv ExcelファイルPATH
[root@BS-PUB-CENT7-01 ~]# in2csv Book2.xlsx
,,,,
,test,1234,2222,3456
,,,,
,tertete,gdgrhg,3333,gdgrhg3333

 

実行結果をxlsx2csvと見比べると、どうも数式が入ってると余計な行を挟んでくるようだ。
とりあえず、CSVに変換するだけであればxlsx2csvがあればどうにかなりそうだ。

Microsoft Excel 2016 (最新)|オンラインコード版 Microsoft Excel 2016 (最新)|オンラインコード版

複数台のホストにパラレルでコマンドを実行させる『orgalorg』

$
0
0

複数台のホストに対し、同時にコマンドを実行させるGolang製のツール『orgalorg』なるものを見かけたので、Ubuntu Server 16.04に入れてみることにした。Golangについては面倒なのでaptからインストールしている。このツールはGolangで書かれているので、インストールも簡単に行える(事前にGOを入れてちゃんとGOPATHとか設定してる必要はあるが)。

go get github.com/reconquest/orgalorg

 

で、インストールできたら以下のように「-o」オプションで複数ホストを指定してコマンドを実行する。
「-p」でパスワード認証に対応しているので、鍵認証じゃなくても安心だ(同じパスワードを指定してる必要はあるようだが)。

orgalorg -o ホスト1 -o ホスト2 ... -p -C コマンド
blacknon@BS-PUB-UBUNTU-01:~$ orgalorg -o root@BS-PUB-CENT7-01 -o root@BS-PUB-CENT7-02 -p -C uptime
Password:
BS-PUB-CENT7-02  16:53:18 up 20 days, 22:26,  1 user,  load average: 0.00, 0.01, 0.05
BS-PUB-CENT7-01  16:13:45 up 22 days, 12:32,  1 user,  load average: 0.08, 0.04, 0.05

 

その他いろいろとオプションがあるようだが、いろいろと役に立ちそうなツールだ。

みんなのGo言語【現場で使える実践テクニック】 みんなのGo言語【現場で使える実践テクニック】

Linuxでmanを少しカラフルで見やすくする

$
0
0

UbuntuやCentOSなどでmanを見る際、「most」をPagerにすることで少し見やすくすることができる。
まず、以下のコマンドでmostをインストールしておく。

sudo apt install most # Debian/Ubuntuの場合
sudo yum install ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/utilities/CentOS_6/x86_64/most-5.0.0a-3.1.x86_64.rpm # RHEL系の場合

 

次に、以下のコマンドを実行しデフォルトのPagerをmostコマンドにする。

echo 'export PAGER="most"' >> .bash_profile
source .bash_profile

これで、man実行時にmostが使われるようになった。
実際にmanの出力を見てみよう。わかりやすく、文字色を白地にしている。

●デフォルト

 

●mostコマンドでの表示

 

オプションにも色がついたので、少し見やすくなった気がする。

入門者のLinux 素朴な疑問を解消しながら学ぶ (ブルーバックス) 入門者のLinux 素朴な疑問を解消しながら学ぶ (ブルーバックス)

Webベースのオンラインパスワードマネージャ「CLIPPERZ」

$
0
0

パスワードマネージャについて調べてたところ、OSSのWebベースパスワードマネージャの『CLIPPERZ』というものがあるようだったので、試しに入れてみることにした。
今までにグループでのパスワードマネージャは触れていたのだが、今回の『CLIPPERZ』は個人向けのデータを扱う。とりあえずインストール先にはCentOS 7を用いる。

1.前提パッケージの導入

LAMP環境が必要になるので、こちらを参考に導入しておく。

yum install -y httpd mariadb-server mariadb mariadb-devel php php-devel php-pdo php-mysql git python-pip php-bcmath
pip install gitpython

 

自動起動設定をする。

systemctl enable httpd mariadb
systemctl start httpd mariadb

 

「mysql_secure_installation」の実行。

mysql_secure_installation

 

最後に、firewalldでポート開放を行う。

firewall-cmd --permanent --add-service={http,https}
firewall-cmd --reload

2.CLIPPERZのインストール・設定

前提となるパッケージの導入が完了したら、CLIPPERZのインストールを行う。
まず、以下のコマンドを実行してソースのダウンロード等を行う。

git clone git://github.com/clipperz/password-manager.git
cd password-manager
./scripts/build install --backends php --frontends beta

 

次に、httpdで公開するディレクトリにソースのコピーを行う。

cp -R target/php/* /var/www/html/
chown -R apache. /var/www/html/

 

DB・接続ユーザの作成を行う。

mysql -p -e 'create database clipperz;
             grant all privileges on clipperz.* to "clipperz"@"localhost" identified by "clipperz";
             flush privileges;'

 

最後に、DBの接続情報について設定ファイル(/var/www/html/configuration.php)に記述する。
(今回はデフォルトの設定値を使ったので変更は不要ではあるが)。

●/var/www/html/configuration.php

$configuration['db'] = 'clipperz'; // database name
$configuration['host'] = 'localhost'; // database host
$configuration['user'] = 'clipperz'; // database user
$configuration['pass'] = 'clipperz'; // database password
$configuration['port'] = '3306'; // database port

 

DB接続設定までできたら、ブラウザからアクセスしてテーブル作成などを行わせる。
「http://IPアドレスorホスト名/setup/index.php」にアクセスし、「POG me up!」をクリックする。

 

特にエラー等出てなければ、「Proceed」をクリック。

 

「Manage Plugins」タブを開き、「INSTALL」をクリック。

 

インストールが無事完了した。

 

上記画面まで行ったら、以下のコマンドで設定ファイル(/var/www/html/configuration.php)を編集する。

sed -i "/'db_encoding'/s/0/1/g" /var/www/html/configuration.php

 

最後に、「/var/www/html/beta」をRootDirectory直下にコピーしてそのまま利用できるようにする。

cp -Rp /var/www/html{/beta/*,}

 

これでインストールは完了。

 

3.ブラウザからアクセスする

インストールが完了したので、ブラウザからアクセスしてみよう。
「http://IPアドレスorホスト名」で接続できるようになっている。

 

とりあえず、これでインストールは完了。
あとは実際に使ってみるだけだ。

うーん…
ちょいと古臭い感じがするんだが…一応、2015ってなってるから、メンテナンスは続いてるのかな?
実運用ではSSLは必須なので、そこは環境に合わせてhttpdの設定を直していこう。

 

サイバーセキュリティテスト完全ガイド Kali Linuxによるペネトレーションテスト サイバーセキュリティテスト完全ガイド Kali Linuxによるペネトレーションテスト

Linuxでssh接続ユーザが実行できるコマンドを制限する

$
0
0

Linuxをサーバとして複数人で利用する際、ssh接続するアカウント事に使用できるコマンドを制限したいことがある。
そのような場合には、以下のような手法が用意されている。

1.ログインシェルをrbashにする

前にここでも触れているのだが、rbashというbashのシンボリックリンクを作成して、それをログインシェルにすることで、特定のコマンドのみを実行可能なユーザを作成できる。
bashのシンボリックリンクなので、別にコマンドのバイナリを用意したりとかしなくてもいい。また、PATHを直接指定してのコマンド実行も行えないようになっているのもよい。

おそらく、一番手軽な設定方法ではないだろうか。

 

2.chrootでルートディレクトリを変更する

chrootでルートディレクトリを変更することで、コマンドのPATHなどを参照できなくさせて実現する方法。
この方法であれば、そもそもchrootで設定・定義したディレクトリより上は見ることもできない。

ただ、厄介なのが”そもそも見れない”せいで、chrootより上を参照するシンボリックリンクは機能しないという点。
このため、コマンドのバイナリなどを別にコピーして配置したり、ディレクトリをマウントさせてやったりする必要がある。その後のメンテナンスを考えるとちょっと面倒くさい。

3.authorized_keysで制限する

実行させたいコマンドが1個しかないならば、sshのauthorized_keysにコマンドを指定することでssh接続と同時にコマンドを実行させることが可能だ。
接続と同時にコマンドが実行され、コマンド実行後(コマンドの失敗・キャンセル含む)はリモートシェルには接続できずそのままssh接続も切れる。authorized_keysで公開鍵ごとにコマンドを指定できるので、別途特定のユーザを作成しなくても実現できるのもポイントだろうか。

ただ、ssh接続と同時にコマンドが実行されてしまう、基本的に1個しかコマンドが実行できない(ラッパースクリプトを用意して実行できるコマンドを選択させるとかすれば別だが)ので、使いどころが難しい気がする。

 

【番外】(sudo実行コマンドを)/etc/sudoersで制限する

一般的な内容だし、ここに書かんでもいいかな感はあるのだが、実行可能コマンドつながりで残しておく。
sudoの実行コマンドを制限する場合は、「/etc/sudoers」でカンマ区切りで指定してやればよい。

ユーザ名    ALL=(ALL)       コマンド1,コマンド2...

 

コマンドで覚えるLinux コマンドで覚えるLinux

CentOS 7にファイル改ざん検知を行う『AIDE』をインストールする

$
0
0

今回は、CentOS 7にファイルの改ざん検知を行う『AIDE』を導入する。
改ざん検知というと、『Tripwire』あたりが一番よく使われている(かなり頑張ってやればInotifyも使えなくはないのだが…応用効くし)のだが、yumでインストールする場合はEPELリポジトリが必要になる。AIDEの方はデフォルトのリポジトリでそのままインストールできて、かつ設定も簡単に行えるようだ。

1.インストール

先ほど記述したように、インストールはデフォルトのリポジトリからそのままインストールできる。

yum install -y aide

 

これでOK。

 

2.設定

次に、AIDEの設定を行う。
設定ファイルは「/etc/aide.conf」というファイルになり、デフォルトのままでも一般的なファイル・ディレクトリについて設定されているので、そのままでも問題なく利用可能になっている。設定を追加する場合は、このファイルに以下のように監視対象とするファイルやディレクトリのPATHを追記してやればよい。

●/etc/aide.conf

/PATH CONTENT_EX # 監視対象とする
!/PATH # 監視対象から除外する

 

細かい設定方法については、こちらのマニュアルを参照。
「/var/log」のように頻繁に追記がされるディレクトリや、「/proc」とかのシステムで動的に変化するディレクトリについては除外してやるといいだろう(いちいちログの変更までは見てられないので)。
設定ファイルの編集が完了したら、以下のコマンドで現在のディレクトリやファイルの状態を保持するDBファイルを生成、参照先のPATHに移動させる。

aide -i
mv  /var/lib/aide/aide.db{.new,}.gz
[root@BS-PUB-CENT7-01 ~]# aide -i

AIDE, version 0.15.1

### AIDE database at /var/lib/aide/aide.db.new.gz initialized.

[root@BS-PUB-CENT7-01 ~]# mv /var/lib/aide/aide.db{.new,}.gz

 

これで、改ざん検知が行えるようになった。

3.改ざん検知をする

AIDEでは、都度コマンドを実行して改ざん検知を行う。
以下のコマンドで、DBの内容に変更を加えずにファイル内容の変更確認をする。

aide -C
[root@BS-PUB-CENT7-01 ~]# # 何も変更がない場合
[root@BS-PUB-CENT7-01 ~]# aide -C
/root/Book2.xlsx mtime in future

AIDE, version 0.15.1

### All files match AIDE database. Looks okay!

[root@BS-PUB-CENT7-01 ~]# # ちょっと変更した場合
[root@BS-PUB-CENT7-01 ~]# rm /root/Book2.xlsx
rm: 通常ファイル `/root/Book2.xlsx' を削除しますか? y
[root@BS-PUB-CENT7-01 ~]# touch /root/test{1..20}
[root@BS-PUB-CENT7-01 ~]# aide -C
AIDE 0.15.1 found differences between database and filesystem!!
Start timestamp: 2016-12-08 08:07:22

Summary:
  Total number of files:        89477
  Added files:                  20
  Removed files:                1
  Changed files:                0


---------------------------------------------------
Added files:
---------------------------------------------------

added: /root/test1
added: /root/test10
added: /root/test11
added: /root/test12
added: /root/test13
added: /root/test14
added: /root/test15
added: /root/test16
added: /root/test17
added: /root/test18
added: /root/test19
added: /root/test2
added: /root/test20
added: /root/test3
added: /root/test4
added: /root/test5
added: /root/test6
added: /root/test7
added: /root/test8
added: /root/test9

---------------------------------------------------
Removed files:
---------------------------------------------------

removed: /root/Book2.xlsx

 

改ざんを検知しつつ、DBの更新も行う場合は以下のコマンドになる。
AIDEでは、更新DBのPATHと参照DBのPATHは別々に記述する必要がある(参照先は「database」、更新・作成先は「database_out」で定義されている)。このため、更新後にファイルを移動する処理が必要になる。

aide -u;mv -f /var/lib/aide/aide.db{.new,}.gz
[root@BS-PUB-CENT7-01 ~]# aide -u ; mv -f /var/lib/aide/aide.db{.new,}.gz
AIDE 0.15.1 found differences between database and filesystem!!
Start timestamp: 2016-12-08 08:44:27

Summary:
  Total number of files:        89496
  Added files:                  20
  Removed files:                0
  Changed files:                0


---------------------------------------------------
Added files:
---------------------------------------------------

added: /root/test101
added: /root/test102
added: /root/test103
added: /root/test104
added: /root/test105
added: /root/test106
added: /root/test107
added: /root/test108
added: /root/test109
added: /root/test110
added: /root/test111
added: /root/test112
added: /root/test113
added: /root/test114
added: /root/test115
added: /root/test116
added: /root/test117
added: /root/test118
added: /root/test119
added: /root/test120
[root@BS-PUB-CENT7-01 ~]# aide -u ; mv -f /var/lib/aide/aide.db{.new,}.gz

AIDE, version 0.15.1

### All files match AIDE database. Looks okay!

### New AIDE database written to /var/lib/aide/aide.db.new.gz

 

チェック結果は「/var/log/aide/aide.log」というファイルに記述されるのだが、都度上書きされる。
cronなどで定期実行させてその都度の結果を残したい場合は、実行の都度どこかに退避させるか、メールなどで通知させるといいだろう。

aide -u | mailx -s 'AIDE Check' root;mv -f /var/lib/aide/aide.db{.new,}.gz

 

【参考】

 

改訂新版 情報セキュリティ内部監査の教科書 (NextPublishing) 改訂新版 情報セキュリティ内部監査の教科書 (NextPublishing)

CentOS 7にClam AntiVirusをデーモンでインストールする(EPELリポジトリ使用Ver)

$
0
0

前にClam AntiVirus(以下、ClamAV)をCentOS 7へインストールしたことがあったが、Repoforgeが利用できなくなったので、Epelからインストールしてデーモンとして動かすようにする。
まず、以下のコマンドでEpelとClamAVをインストールする。

yum install -y epel-release
yum install -y clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd

 

次に、ClamAVの設定を書き換える。

cp /etc/clamd.d/scan.conf{,$(date +%Y%m%d)}
cp /etc/freshclam.conf{,$(date +%Y%m%d)}
sed -e 's/^Example/#Example/g' \
    -e '/^#LogFile /s/^#//g' \
    -e '/^#LogFileMaxSize /s/^#//g' \
    -e '/^#LogTime /s/^#//g' \
    -e '/^#LogRotate /s/^#//g' \
    -e '/^#LocalSocket /s/^#//g' \
    -e '/^#PidFile /s/^#//g' \
    -e '/^#FixStaleSocket /s/^#//g' \
    -e 's/^User clamscan/User root/g' \
    -i  /etc/clamd.d/scan.conf
sed -e 's/^Example/#Example/g' \
    -e '/^#UpdateLogFile /s/^#//g' \
    -e '/^#LogFileMaxSize /s/^#//g' \
    -e '/^#LogTime /s/^#//g' \
    -e '/^#LogRotate /s/^#//g' \
    -e '/^#DatabaseMirror /s/^#//g' \
    -e '/^#NotifyClamd /cNotifyClamd /etc/clamd.d/scan.conf' \
    -i /etc/freshclam.conf
ln -s /etc/clamd.d/scan.conf /etc/clamd.conf

設定ファイル編集後、デーモンを起動させる。

systemctl start clamd@scan
systemctl enable clamd@scan
[root@BS-PUB-CENT7-01 ~]# systemctl status clamd@scan
● clamd@scan.service - Generic clamav scanner daemon
   Loaded: loaded (/usr/lib/systemd/system/clamd@scan.service; enabled; vendor preset: disabled)
   Active: active (running) since 土 2016-12-10 13:53:37 JST; 10s ago
 Main PID: 22494 (clamd)
   CGroup: /system.slice/system-clamd.slice/clamd@scan.service
           mq22494 /usr/sbin/clamd -c /etc/clamd.d/scan.conf --foreground=yes

12月 10 13:53:37 BS-PUB-CENT7-01.blacknon.local clamd[22494]: clamd daemon 0.99.2 (OS: linux-gnu, ARCH: x86_64, CPU: x86_64)
12月 10 13:53:37 BS-PUB-CENT7-01.blacknon.local clamd[22494]: Running as user root (UID 0, GID 0)
12月 10 13:53:37 BS-PUB-CENT7-01.blacknon.local clamd[22494]: Log file size limited to 2097152 bytes.
12月 10 13:53:37 BS-PUB-CENT7-01.blacknon.local clamd[22494]: Reading databases from /var/lib/clamav
12月 10 13:53:37 BS-PUB-CENT7-01.blacknon.local clamd[22494]: Not loading PUA signatures.
12月 10 13:53:37 BS-PUB-CENT7-01.blacknon.local clamd[22494]: Bytecode: Security mode set to "TrustSigned".
12月 10 13:53:38 BS-PUB-CENT7-01.blacknon.local clamd[22494]: LibClamAV Warning: **************************************************
12月 10 13:53:38 BS-PUB-CENT7-01.blacknon.local clamd[22494]: LibClamAV Warning: ***  The virus database is older than 7 days!  ***
12月 10 13:53:38 BS-PUB-CENT7-01.blacknon.local clamd[22494]: LibClamAV Warning: ***   Please update it as soon as possible.    ***
12月 10 13:53:38 BS-PUB-CENT7-01.blacknon.local clamd[22494]: LibClamAV Warning: **************************************************

 

無事起動ができたら、Virusの定義ファイルを更新して新しくする。

freshclam
[root@BS-PUB-CENT7-01 ~]# freshclam
ClamAV update process started at Sat Dec 10 13:55:04 2016
main.cvd is up to date (version: 57, sigs: 4218790, f-level: 60, builder: amishhammer)
WARNING: getfile: daily-21724.cdiff not found on database.clamav.net (IP: 198.148.78.4)
WARNING: getpatch: Can't download daily-21724.cdiff from database.clamav.net
Trying host database.clamav.net (172.110.204.67)...
nonblock_recv: recv timing out (30 secs)
WARNING: getfile: Error while reading database from database.clamav.net (IP: 172.110.204.67): Operation now in progress
WARNING: getpatch: Can't download daily-21724.cdiff from database.clamav.net
nonblock_recv: recv timing out (30 secs)
WARNING: getfile: Error while reading database from database.clamav.net (IP: 172.110.204.67): Operation now in progress
WARNING: getpatch: Can't download daily-21724.cdiff from database.clamav.net
WARNING: Incremental update failed, trying to download daily.cvd
Downloading daily.cvd [100%]
daily.cvd updated (version: 22760, sigs: 1139889, f-level: 63, builder: neo)
Downloading bytecode-279.cdiff [100%]
Downloading bytecode-280.cdiff [100%]
Downloading bytecode-281.cdiff [100%]
Downloading bytecode-282.cdiff [100%]
Downloading bytecode-283.cdiff [100%]
Downloading bytecode-284.cdiff [100%]
Downloading bytecode-285.cdiff [100%]
bytecode.cld updated (version: 285, sigs: 57, f-level: 63, builder: bbaker)
[LibClamAV] ******************************************************
[LibClamAV] ***      Virus database timestamp in the future!   ***
[LibClamAV] ***  Please check the timezone and clock settings  ***
[LibClamAV] ******************************************************
Database updated (5358736 signatures) from database.clamav.net (IP: 130.59.113.36)

 

上記コマンドについては、定期的に実行してやるようにcronなどに記述してやるといいだろう。
最後に、ウィルスチェックを実際に行って動作テストをする。

cd /opt
wget https://www.eicar.org/download/eicar.com
clamdscan /opt # --removeオプションを付与してないので削除はされない
[root@BS-PUB-CENT7-01 tmp]# cd /opt/
[root@BS-PUB-CENT7-01 opt]# wget https://www.eicar.org/download/eicar.com
--2016-12-10 14:21:02--  https://www.eicar.org/download/eicar.com
www.eicar.org (www.eicar.org) をDNSに問いあわせています... 213.211.198.62
www.eicar.org (www.eicar.org)|213.211.198.62|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 68 [application/octet-stream]
`eicar.com' に保存中

100%[===================================================================================================================================================================================================>] 68          --.-K/s 時間 0s

2016-12-10 14:21:03 (2.49 MB/s) - `eicar.com' へ保存完了 [68/68]

[root@BS-PUB-CENT7-01 opt]# clamdscan /opt
/opt/eicar.com: Eicar-Test-Signature FOUND

----------- SCAN SUMMARY -----------
Infected files: 1
Time: 0.003 sec (0 m 0 s)
[root@BS-PUB-CENT7-01 opt]# ls -la /opt/
合計 8
drwxr-xr-x.  2 root root   22 12月 10 14:21 .
dr-xr-xr-x. 18 root root 4096 12月  6 04:43 ..
-rw-r--r--.  1 root root   68 12月 10 14:21 eicar.com

 

これで、無事ClamAVのインストールができた。
あとは、スクリプトなりを作ってcronなどで定期実行してやるといいだろう。

 

【参考】

 

コンピュータウイルス製造入門 コンピュータウイルス製造入門

CentOS 7でClamAVのリアルタイムスキャン(オンアクセススキャン)の設定をする

$
0
0

Linuxでよく利用されるOSSのウィルスチェックソフトであるClamAVでは、他のウィルスチェックソフトと同様にリアルタイムスキャン(オンアクセススキャン)を行うように設定できる。
設定方法は簡単で、ClamAVの設定ファイルである「/etc/clamd.d/scan.conf(/etc/clamd.conf)」にて、以下の内容を追記するだけだ。
(前提として、すでにClamAVのデーモンでのインストール・設定ができているものとする)

●/etc/clamd.d/scan.conf

ScanOnAccess yes
OnAccessIncludePath /オンアクセススキャンをするPATH1
OnAccessIncludePath /オンアクセススキャンをするPATH2
...

デフォルトではDDDが有効になっているはずなので、再帰的にスキャンを行ってくれるはずだ(ただ、「/」を指定するのはできない様子)。
上記設定追記後、ClamAVのサービスを再起動してやる(と同時に、SELinuxのポリシーも定義しておく)。

setsebool -P antivirus_can_scan_system 1
systemctl restart clamd@scan

 

あとは、ウィルス発見後は都度ログを出力してくれるようになる。
(削除はしてくれない様子)

Fri Dec 23 16:05:18 2016 -> ScanOnAccess: /opt/eicar.com: Eicar-Test-Signature FOUND
Fri Dec 23 16:05:18 2016 -> ScanOnAccess: /opt/test/eicar.com: Eicar-Test-Signature FOUND

 

SyslogサーバとしてGraylogなどを導入していれば、とりあえずログからSlackにアラートを発報させることもできるので、まぁ削除されなくても問題ないだろう。

 

サイバーセキュリティテスト完全ガイド ~Kali Linuxによるペネトレーションテスト~ サイバーセキュリティテスト完全ガイド ~Kali Linuxによるペネトレーションテスト~

『googler』でコンソール上からGoogle検索を行う

$
0
0

LinuxやMacのコンソール上からGoogle検索を行える『googler』というコマンドを見かけたので、少し入れてみることにする。
前にもコンソール上から利用できるWebブラウザについて記述したことがあったが、これはそのままGoogle検索を行ってくれるようだ。

今回は、とりあえずUbuntu Server 16.04 LTSにこのツールを導入して触ってみることにする。

1.インストール

ソースからインストールする場合は、以下のコマンドでインストール可能だ。

git clone https://github.com/jarun/googler/
cd googler
sudo make install

 

aptからインストールする場合は、以下のコマンドでインストールできる。

sudo add-apt-repository ppa:twodopeshaggy/jarun
sudo apt-get update
sudo apt-get install googler

2.使ってみる

インストールが終わったら、実際に検索をしてみよう。
単純な検索であれば、以下のコマンドで行える。

googler '検索キーワード'

 

検索画面のページを進む場合はn、戻る場合はpキーで移動できるようだ。
そのほか、コマンド実行時に以下のようなオプションが指定できるようだ。

  • -n N … 検索結果の件数をN個に変更する(デフォルトでは10個)
  • -N … ニュースセクションから検索を行う
  • -l LANG … 検索言語を指定する(jpで日本語、enで英語)
  • -t dN … 検索する期間を指定する(hNでN時間前、dNでN日前、mNでNか月前、yNでN年前といった指定が可能)
  • -x … もしかして検索を無効化する
  • -w SITE … サイト内検索を行う
  • –json … JSON形式で出力する

 

…あれ?これってもしかして被リンク調査に使えるんじゃ…?
JSONで返ってくるし、期間も限定できるし…あまり頻繁にやりすぎるとreCAPTCHA出されちゃうかもだけど。

 

[改訂新版]プロのためのLinuxシステム構築・運用技術 (Software Design plus) [改訂新版]プロのためのLinuxシステム構築・運用技術 (Software Design plus)
Viewing all 743 articles
Browse latest View live