Monthly Archives: 10月 2013

SSH HTTPS OpenVPNを全て443ポートで通信させる sslh CentOS5

SSLHとはHTTP, HTTPS, SSH, OpenVPN, tinc, XMPP等のプロトコルを全て443番ポートで公開するプログラムです。
ネットワークの制限された環境だと80番と443番ポートでしか通信を許可されていなかったりします。
このプログラムを使用するとそれらの制限を回避する事ができます。

日本語で解説されたサイトが少ないので簡単に導入方法をメモしておきたいと思います。

Repoforgeリポジトリの追加
# rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm

SSLHのインストール
# yum install sslh

SSLHの設定
# vi /etc/rc.d/init.d/sslh

#!/bin/bash
#
#       /etc/rc.d/init.d/sslh
# sslh          This shell script takes care of starting and stopping
#               sslh - a daemon switching incoming connection between SSH and SSL/HTTPS servers
#
# Author: Andre Krajnik akrajnik@gmail.com
# 2010-03-20
#
#
# chkconfig: 2345 13 87
#
# description: sslh - a daemon switching incoming connection between SSH and SSL/HTTPS servers

# Source function library.
. /etc/init.d/functions

# ./sslh -p  0.0.0.0:8443 -l 127.0.0.1:443 -s 127.0.0.1:22

SSLH="/usr/sbin/sslh" # sslhコマンドまでのパスを書き換えて合わせる
PIDFILE="/var/run/sslh"

# SSLHのポートを8443から443に変更し、HTTPSを8443に変更する(HTTPSサーバの設定を8443にしておく)
# さらに追加したいプロトコルがあれば各自で追加する
# なお、OpenVPNを指定する場合はUDPではなくTCPである必要があると思われます
OPTIONS="--user nobody --pidfile $PIDFILE -p  0.0.0.0:443 --ssl 127.0.0.1:8443 --ssh 127.0.0.1:22 --openvpn 127.0.0.1:1194"

if [ -f /etc/sysconfig/sslh ]; then
        . /etc/sysconfig/sslh
fi

start() {
        echo -n "Starting SSL-SSH-Switch: "
        if [ -f $PIDFILE ]; then
                PID=`cat $PIDFILE`
                echo sslh already running: $PID
                exit 2;
        else
                daemon  $SSLH $OPTIONS
                RETVAL=$?
                echo
                [ $RETVAL -eq 0 ] && touch $PIDFILE
                return $RETVAL
        fi

}

stop() {
        echo -n "Shutting down SSL-SSH-Switch: "
        echo
        killproc sslh
        echo
        rm -f $PIDFILE
        return 0
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status sslh
        ;;
    restart)
        stop
        start
        ;;
    *)
        echo "Usage:  {start|stop|status|restart}"
        exit 1
        ;;
esac
exit $?

SSLHの起動
# service sslh start

SSLHの自動起動
# chkconfig sslh on

参考サイト
SSLH: A SSL/SSH Multiplexer for Linux | Unixmen

Kali Linux システムモニタ(conky) インストール

Kali LinuxのデスクトップにCPU使用率やメモリ使用率などのシステム情報をクールに表示できるシステムモニタツール(conky)のインストールについてメモしておきます。

インストール
# apt-get install conky lm-sensors hddtemp

自動起動させる

# bash -c "echo '[Desktop Entry]'$'\n''Type=Application'$'\n''Exec=conky -p 5'$'\n''Hidden=false'$'\n''NoDisplay=false'$'\n''X-GNOME-Autostart-enabled=true'$'\n''Name=Conky' > ~/.config/autostart/conky.desktop"

設定
# vi ~/.conkyrc

use_xft yes
override_utf8_locale yes
xftfont MeiryoKe_Gothic:size=10
default_color d0d0d0
default_shade_color 003E3F
update_interval 2
own_window yes
own_window_type override
own_window_transparent yes
double_buffer yes
maximum_width 300
alignment top_right

TEXT
${font Bitstream Vera Sans:style=Bold:pixelsize=14}SYSTEM${font} ${hr 1}
Kernel: $alignr$kernel
Architecture: $alignr$machine
File system type: $alignr$fs_type

CPU ${alignr}${freq} MHz
${cpugraph 20,250 a0a0a0 ffffff -t}
RAM ${alignr}$mem / $memmax ($memperc%)
${membar 4}
Swap ${alignr}$swap / $swapmax ($swapperc%)
${swapbar}
Ether ${alignr}${addr eth0} 
Traffic $alignr up ${upspeed eth0} down ${downspeed eth0}
${upspeedgraph eth0 20,120 a0a0a0 ffffff -t} ${downspeedgraph eth0 20,120 a0a0a0 ffffff -t}
Wi-Fi ${alignr}${addr wlan0}
Traffic $alignr up ${upspeed wlan0} down ${downspeed wlan0}
${upspeedgraph wlan0 20,120 a0a0a0 ffffff -t} ${downspeedgraph wlan0 20,120 a0a0a0 ffffff -t}
DiskIO $alignr wrt ${diskio_write} read ${diskio_read}
${diskiograph_write 20,120 a0a0a0 ffffff -t} ${diskiograph_read 20,120 a0a0a0 ffffff -t}

Highest CPU $alignr CPU% MEM%
${top name 1}$alignr${top cpu 1} ${top mem 1}
${top name 2}$alignr${top cpu 2} ${top mem 2}
${top name 3}$alignr${top cpu 3} ${top mem 3}

Highest MEM $alignr CPU% MEM%
${top_mem name 1}$alignr${top_mem cpu 1} ${top_mem mem 1}
${top_mem name 2}$alignr${top_mem cpu 2} ${top_mem mem 2}
${top_mem name 3}$alignr${top_mem cpu 3} ${top_mem mem 3}

CPU temperature ${alignr}${hwmon 1 temp 1}℃
CPU fan speed ${alignr}${hwmon fan 1}rpm

※ 設定例なので各自自分に合った設定に換えてください。

実はこれ、デスクトップカスタム例としてよく写っていたりするのですが名称が分からなくて苦労しましたScreenshot_from_2013-10-07 17:00:53

Kali Linux Gnome Fallback (クラシック) モードからモダンモードに切り替える方法

調べ物をするため海外のフォーラムを見ていたらKali LinuxのFallbackモードからモダンモードに切り替える方法が載っていたのでメモしておく。
※ モダンモードにするとツールのジャンル分けなどがめちゃくちゃな状態になるのであまりお進めしない。。。

現在のモードの確認
# gsettings get org.gnome.desktop.session session-name

モダンモードへの切り替え
# dbus-launch gsettings set org.gnome.desktop.session session-name ‘gnome’

モダンモードはGnome拡張機能などを使いたい場合とかにはいいかもしれません

Screenshot_from_2013-10-07 10:35:39

参考サイト
Enable full gnome instead of gnome fallback

Twitter フォロワー同期(フォロー専用)Bot Perl 新API対応(改)

アカウントがプライベート設定のフォロワーがいると403 forbiddenになって処理が止まるようなので一応対策しました
手動で実行することで対象のID(数字)を確認出来ます

#!/usr/bin/perl
use utf8;
use strict;
use warnings;

# モジュール使用宣言
use Array::Diff;
use Net::Twitter::Lite::WithAPIv1_1;
use YAML::Tiny;
use Encode;
use FindBin;

# 現在のパスから見て設定ファイルを読み込み
my $config = (YAML::Tiny->read($FindBin::Bin . '/config.yml'))->[0];
# OAuth認証
my $twitter = Net::Twitter::Lite::WithAPIv1_1->new(
        traits => ['API::REST', 'OAuth'],
        consumer_key => $config->{'consumer_key'},
        consumer_secret => $config->{'consumer_secret'}
);
$twitter->access_token($config->{'access_token'});
$twitter->access_token_secret($config->{'access_token_secret'});

# 認証失敗時の処理
die('Auth failed:'.$config->{'username'}) unless ( $twitter->authorized ) ;

# ユーザー名を含むユーザー情報を取得
my $own_id = $twitter->verify_credentials->{id};

my $nextc = -1; # paging default.
my @following_id_list; # outgo

# APIの仕様?から一度に100人までしか取得できないから0が返ってくるまでdoブロックをループ
do{
        # パラメータcursorは前回取得したフォローイングまでの番号が入っている
        my $following_list = $twitter->friends_ids({ id=>$own_id, cursor => $nextc });
        $nextc = $following_list->{next_cursor};
        # 配列からフォローイングのidを取得
        foreach my $id (@{ $following_list->{ids} }){
                push(@following_id_list, $id); # 後で比較するためにフォローイングを配列に保管
        }
}while($nextc!=0);
# 文字昇順でソート
@following_id_list = sort @following_id_list;

$nextc = -1;
my @followers_id_list; # income

# APIの仕様?から一度に100人までしか取得できないから0が返ってくるまでdoブロックをループ
do{
        # パラメータcursorは前回取得したフォロワーまでの番号が入っている
        my $followers_list = $twitter->followers_ids({ id=>$own_id, cursor => $nextc });
        $nextc = $followers_list->{next_cursor};
        # 配列からフォロワーのidを取得
        foreach my $id (@{ $followers_list->{ids} }){
                push(@followers_id_list, $id); # 後で比較するためにフォロワーを配列に保管
        }
}while($nextc!=0);
# 文字昇順でソート
@followers_id_list = sort @followers_id_list;

# 差分を取得(フォローイング)
my $diff_following = Array::Diff->diff(\@following_id_list, \@followers_id_list);

# 差分を取得(フォロワー)
my $diff_followers = Array::Diff->diff(\@followers_id_list, \@following_id_list);

# リムった人をリム返し
foreach my $delid_following (@{ $diff_following->{deleted} }){
        eval{$twitter->destroy_friend({user_id => $delid_following})};
        # プライベートだとエラーになる人がいるので確認用
        print $delid_following . "\n" if($@);
}

# フォローした人をフォロー返し
foreach my $delid_followers (@{ $diff_followers->{deleted} }){
        eval{$twitter->create_friend({user_id => $delid_followers})};
        # プライベートだとエラーになる人がいるので確認用
        print $delid_followers . "\n" if($@);
}