wgetでslackにメッセージをポストする方法

slackがTLS1.0のサポートを廃止したため、TLS1.1以降に対応していないcurlでslackにメッセージを投稿できなくなった。

curlのバージョンを上げても良かったが、試しにwgetでポストしてみたのでその備忘録。

 

1. メッセージを投稿する場合のコマンド

これはそんなに差がなく、オプションの付け替えで投稿できた

$ curl -H 'Content-type: application/json' -H "Authorization: Bearer token" -XPOST https://slack.com/api/chat.postMessage -d "

  'text': 'hello', 'channel': 'general }

"

 

wget -O - --header 'Content-type: application/json' --header "Authorization: Bearer token" https://slack.com/api/chat.postMessage --post-data "

  'text': 'hello', 'channel': 'general' }

"

 

2. ファイルを投稿する場合のコマンド

これは差があり、curlがよろしくmultipart/form-dataのフォーマットを準備してくれるのに比べて、wgetでは自分でフォーマットを準備する必要があった

$ cat << _EOS_ > postdata.txt

aaa

bbb

ccc

_EOS_

curl -F file=@postdata.txt -F channels=channel -F token=token 'https://slack.com/api/files.upload'

 

$ cat << _EOS_ > postdata.txt

--boundary

Content-Disposition: form-data; name="file"; filename="file.txt"

Content-Type: text/plain

 

aaa

bbb

ccc

--boundary

Content-Disposition: form-data; name="channels"

 

channel

--boundary

Content-Disposition: form-data; name="token"

 

token

--boundary--

_EOS_

 

wget -O /dev/null --header "Content-Type: multipart/form-data; boundary=boundary" --post-file "postdata.txt" 'https://slack.com/api/files.upload'

 

 

 

 

一斉にnagiosのアラート通知を操作する

nagiosはWEB画面からアラートの操作ができることがメリットの1つですが、大量のサーバに一斉に操作をしたくなったときに大変です。

nagiosは外部コマンドを使ってCUI上でも操作ができるので、外部コマンドを使って一斉にアラートを止めるスクリプトを準備してみました。

アラート通知を無効にする

# vi disable_notice
#!/bin/bash

command_file='/usr/local/nagios/var/rw/nagios.cmd'
status_file='/usr/local/nagios/var/status.dat'

hosts=`awk -F'=' '/host_name/ {print $2}' $status_file | sort | uniq`

echo -e "${hosts}" | while read host; do
echo "Disable service check of ${host}"
echo "[$(date +%s)] DISABLE_HOST_SVC_NOTIFICATIONS;${host}" > $command_file
echo "[$(date +%s)] DISABLE_HOST_NOTIFICATIONS;${host}" > $command_file
done

アラート通知を有効にする

# vi enable_notice
#!/bin/bash

command_file='/usr/local/nagios/var/rw/nagios.cmd'
status_file='/usr/local/nagios/var/status.dat'

hosts=`awk -F'=' '/host_name/ {print $2}' $status_file | sort | uniq`

echo -e "${hosts}" | while read host; do
echo "Enable service check of ${host}"
echo "[$(date +%s)] ENABLE_HOST_SVC_NOTIFICATIONS;${host}" > $command_file
echo "[$(date +%s)] ENABLE_HOST_NOTIFICATIONS;${host}" > $command_file
done

nagios監視が止まっていることを監視する

下記サイトでnagiosのstatus.datをパースするライブラリを作っている人が居たので、それを使って監視が止まっていることを監視するスクリプトを作ってみた
http://heartbeats.jp/hbblog/2013/05/nagios-parser-python.html

# -*- coding:utf-8 -*-

import sys
import smtplib
from parseFile import parseFile
from email.header import Header
from email.mime.text import MIMEText

mail_subject = 'アラートが停止しています'
mail_from = 'from'
mail_to = 'to'
cset = 'utf-8'

# parse status
nagios = {}
if parseFile( "/usr/local/nagios/var/status.dat", nagios) != 0:
print "status get error"
sys.exit(1)

# check service
alert_host = []
for host in nagios["service"].items():
for service in host[1].items():
if service[1]["notifications_enabled"] == '0' or service[1]["active_checks_enabled"] == '0':
#alert_host = {host[0], service[0]}
alert_host.append( '%s: %s' % (host[0], service[0]) )

# send alert mail if disable check or notice for service
if len(alert_host) != 0:
msg = MIMEText( '下記のサービス監視が停止しています\n%s' % "\n".join(alert_host), 'plain', cset )
msg['Subject'] = Header(mail_subject, cset)
msg['From'] = mail_from
msg['To'] = mail_to
s = smtplib.SMTP()
s.connect()
s.sendmail(mail_from, mail_to, msg.as_string())
s.close()

sys.exit(0)

nagiosを4.0.2から4.0.7にアップグレードする

nagiosの最新版が出ていたので、最新版にアップグレードする

nagiosのバックアップ

# cp -ipr /usr/local/nagios /tmp/nagios-backup

最新のソースコードを取得する

# wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.7.tar.gz
# wget http://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz

# tar xf nagios-4.0.7.tar.gz
# tar xf nagios-plugins-2.0.3.tar.gz

# chown nagios:nagios -R nagios-4.0.7/ nagios-plugins-2.0.3/

nagiosユーザになってインストールする

# sudo su nagios
$ cd nagios-4.0.7/
$ ./configure --with-command-group=nagios && make all && make install

$ cd ../nagios-plugins-2.0.3/
$ ./configure --enable-perl-modules && make && make install
$ exit

nagiosの再起動

# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
# /etc/init.d/nagios restart

問題なければバックアップを削除

# rm -rf /tmp/nagios-backup

filter

INPUT ACCEPT [0
0]
FORWARD ACCEPT [0
0]
OUTPUT ACCEPT [0
0]
  • A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • A INPUT -p icmp -j ACCEPT
  • A INPUT -i lo -j ACCEPT
  • A INPUT -p udp --dport 500 -j ACCEPT
  • A INPUT -p tcp --dport 500 -j ACCEPT
  • A INPUT -p tcp --dport 4500 -j ACCEPT
  • A INPUT -p udp --dport 4500 -j ACCEPT
  • A INPUT -p esp -j ACCEPT
  • A FORWARD -s 192.168.163.0/24 -d 192.168.164.0/24 -j ACCEPT
  • A FORWARD -s 192.168.164.0/24 -d 192.168.163.0/24 -j ACCEPT
  • A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
  • A INPUT -j REJECT --reject-with icmp-host-prohibited
  • A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

CentOSにL2TP/IPSECサーバを構築する

CentOSL2TP/IPSECサーバを立てて、PCやスマートフォンを接続する

IPSECにはOpenswan(https://www.openswan.org)を使う
L2TPにはxl2tpd(https://www.xelerance.com/services/software/xl2tpd/)を使う

Openswanインストール

# yum install gcc.x86_64 nss.x86_64 nss-devel.x86_64 nss-tools.x86_64 ppp.x86_64 gmp-devel.x86_64 flex.x86_64 bison.x86_64 libpcap-devel.x86_64
# wget --no-check-certificate https://download.openswan.org/openswan/openswan-2.6.38.tar.gz
# tar xf openswan-2.6.38.tar.gz
# cd openswan-2.6.38/
# cp -ip Makefile.inc Makefile.inc.org
# vi Makefile.inc
# diff Makefile.inc.org Makefile.inc
372c372< USE_LIBNSS?=false

    • -

> USE_LIBNSS?=true
# make programs
# make install

ipsecの設定

# vi /etc/ipsec.secrets
include /etc/ipsec.d/*.secrets
: PSK "xxxxxxxxxxxxxxxx"

# vi /etc/ipsec.conf
version 2.0
config setup
dumpdir=/var/run/pluto/
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10
oe=off
protostack=auto
include /etc/ipsec.d/*.conf

# vi /etc/ipsec.d/l2tp.conf
conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
# ↓ iOS機器用の設定
dpddelay=10
dpdtimeout=20
dpdaction=clear
# 終わり
also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
ikelifetime=8h
keylife=h
type=transport
left=#ここに鯖のIP.各自置換すること#
leftprotoport=17/1701
right=%any
rightprotoport=17/%any

xl2tpdインストール

# wget --no-check-certificate https://download.openswan.org/xl2tpd/xl2tpd-1.3.1.tar.gz
# tar xf xl2tpd-1.3.1.tar.gz
# cd xl2tpd-1.3.1
# make
# make install
# cp packaging/fedora/xl2tpd.init /etc/init.d/xl2tpd
# chmod +x /etc/init.d/xl2tpd
# ln -s /usr/local/sbin/xl2tpd /usr/sbin/xl2tpd

l2tpの設定

# /etc/xl2tpd/xl2tpd.conf

[global]
listen-addr #鯖のIP.#

[lns default]
ip range = 192.168.100.2-192.168.100.254
local ip = 192.168.100.1
require authentication = yes
refuse pap = yes
name = linux-vpn
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tp.lns
length bit = yes

# vi /etc/ppp/options.l2tp.lns

name linux-vpn
ipcp-accept-local
ipcp-accept-remote
ms-dns 8.8.8.8
ms-dns 8.8.4.4
noccp
auth
crtscts
idel 1800
mtu 1454
mru 1454
nodefaultroute
debug
lock
proxyarp
connect-delay 5000
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
logfile /var/log/xl2tpd.log

# vi /etc/ppp/chap-secret

# name server-name password(secret) IP address
hoge * huga *

iptables設定

# vi iptables