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/bashcommand_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/bashcommand_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 MIMETextmail_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のバックアップ
最新のソースコードを取得する
# 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
問題なければバックアップを削除
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
nat
- POSTROUTING ACCEPT [0
- 0]
- A POSTROUTING -s 192.168.164.0/24 -j MASQUERADE
COMMIT
CentOSにL2TP/IPSECサーバを構築する
CentOSにL2TP/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-noNATconn 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