読者です 読者をやめる 読者になる 読者になる

orz.conf

技術メモ✍

広告を非表示にする為にプロキシサーバ(squid)をたてる

広告を非表示にする為にプロキシサーバをたてました。

インストール

環境

CentOS release 6.8 (Final)

まずは既にインストールされていないかどうか確認します。

rpm -qa | grep squid

何も出なければOK。

続いてsquidをインストールします。

yum -y install squid

下記のものがインストールされました。

squid-3.1.23-16.el6_8.6.x86_64

iptablesの設定

今回はCentOS6なのでiptablesの設定を記載します。
25128というポートを使用したいと思います。

iptables -A INPUT -p TCP --dport 25128 -j ACCEPT

確認します

iptables -L
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:25128

コンフィグ設定

squid.confを編集します。
まずはバックアップ。

cp /etc/squid/squid.conf /etc/squid/squid.conf.org
ホスト名の設定

ホスト名を設定してやらないとwarningが出ます。

Stopping squid: 2016/XX/XX XX:XX:XX| WARNING: Could not determine this machines public hostname. Please configure one or set 'visible_hostname'.
2016/XX/XX XX:XX:XX| WARNING: Could not determine this machines public hostname. Please configure one or set 'visible_hostname'.

ホスト名を設定します。
visible_hostnameの行が無い場合、追加して下さい。

visible_hostname ホスト名
ポートの変更

デフォルトだと不安なのでポートを変更します。

# Squid normally listens to port 3128
http_port 25128
ダイジェスト認証

パスワードファイルを作成します。

htpasswd -bcp /etc/squid/passwd ユーザ名 パスワード

squid.confにダイジェスト認証をする為の設定をします。

###ダイジェスト認証用パスワードファイル
auth_param digest program /usr/lib64/squid/digest_pw_auth /etc/squid/passwd
###認証用のプロセス数を制限する
auth_param digest children 3
###プロキシサーバの名前
auth_param digest realm Proxy Web Server
###クライアントエージェントの有効性をチェックする時間
auth_param digest nonce_garbage_interval 5 minutes
###nonce(臨時・その場限り)の有効性のチェックする時間
auth_param digest nonce_max_duration 30 minutes
###nonceの使用できる回数
auth_param digest nonce_max_count 50
###ダイジェスト認証
acl password proxy_auth REQUIRED

### password
#以下2行をコメントアウト
#http_access allow localnet
#http_access allow localhost
#以下を追加
http_access allow password
blacklistの設定

下記のようなファイルを作成します。
blacklist.conf

XXXX.net
XXXX.info

squid.confにblacklistを使用する為の設定をします。

acl blacklist dstdomain "/etc/squid3/blacklist.conf"
http_access deny blacklist

dstdomainはデスティネーションドメインです。

blacklistの設定(正規表現を使用)

正規表現を使用する場合です。

下記のようなファイルを作成します。
blacklist_reg.conf

.*/ad/.*

squid.confにblacklist_regを使用する為の設定をします。

acl blacklist_reg url_regex "/etc/squid3/blacklist_reg.conf"
http_access deny blacklist_reg

dstdomainの代わりにurl_regexを使用します。

ログフォーマットの変更

デフォルトだとシリアル値が出力されてしまうので、日付けフォーマットに変更します。

logformat squid %tl %6tr %>a %Ss/%03>Hs %<st %rm %ru %un %Sh/%<A %mt
起動

最後に起動してやります。

service squid start
chkconfig squid on

blacklistはインターネットを検索してみると2016年でもいくつか見つかりました。
助かります。


まだblacklist_reg.conf周りがうまくいってないかも。
後日調査。

SSHポートフォワーディング

SSHのポートを通じてftpmysqlなどの通信を行うことが出来るSSHポートフォワーディングの設定です。

7VlRk5s2EP41frwbMIbDj8F3SR+SmetcZ9o+dWSQscYYMUKO7fz6rKQVCLCv7hW7SRo/eNAiraTvW+2ulkmw2B4+CFKtP/GMFpOplx0mweNkOo39GP6V4GgEvjeHppLkgmUoawUv7Au1HVG6YxmtOx0l54VkVVeY8rKkqezIiBB83+224kV31orkdsZW8JKSYij9nWVyjfuaRq38F8ryNc4cxjPzYknSTS74rsTpJtNgpX/m9ZZYVbjPg2ea0dy0j9i+m0bNVGVnSV8433YEgtYtfLhd1kWkJJ87sxas3HQBWnKRUeF0Cp6AXsE5KFJP28OCFopiy57R9P7M2wY+QUtcyt8MiGchndFsRmZp6i2jOzSXz6TY4d6MoJZHy9GKl3LBC26WHXheFC0WkyD5TIVkQOW7guUKO8krR/qRLGnxzGsmGVdvl1xKhWhS9F6ksHQFSUJQTyNYy20BbR8ec0EyBvJHJsAMzcCSC8VyUkvBN435AKRJvSaVWvz2AOOq9X1J5Z6LTX1fkMqsEnpkfA9dwA6SqiCsvIOuRwQDtkDxiJ1AWIsQ3g+Ub6kUMNDDAQ/IPZ7IO5AYwb61b9/DTmvXtkM8VmgxeaO65RMekNIL6Q3+V/SCK9vAMv+q0qtSHHjWi1iOA+TO4Xh2gmJrG6NSjB7xNYppmb1TzlqjWoLQxb6DkwG7Yw7qB29Ax3umVqX7mSloNvDul2LoD88JbsTBMDx1TF7BEGd75gwWccFUVkfNdyKlOMz1nj1NU3tuG01WYDVJInIqB5o0qQ0Ib+MZTey747l3VvwY1z0+z3GPnYb474pnzEccnleyGlAN3guAcvnV+QlZ6g6KOrKT4IV1xqJeW/db0JUaeNq71xVJWZn/phqP4FnAcaot6k2HySR8bEziXzlQP8ID2OA7GzrQ4IRR2MRqVAeK8dkBvK7XPxjgYT9i+cOs5GaA46XFAfzT8eXXjz845H40tPHoVpDjWi4MHmlB6pqpJOot8QPW+ofqdh9OQyv4Uwse4sgKnqlgsC19F9LDDkyaUfOHANtmkB4Crf6IM6HJ+PgzMPhIgXHfr+fMl1M9jXFIQ/UcTXz0GNdYTDNV/9pwaYwLbAmgjXE9TVeMcXbu29ojBJmOOfoPSs9JczxjXGPbDaptE1PUMb7dDKbqZzQX50bWtttQgoJb2A3uopccPQUTyCqTUD8Ek2SBD3Pc4zcRU8wV9Ag7BKsd4RIa9EO69QT/RXzxh3UklUT9JEYfNRQ4xNibyfWJGVaATLL1kxp9QxxeRi0A16fmgsrNt1CcW0E5wFnDQv9Oxdwojv1EJW+2nGffYTFipCrfCobvicI50V8AqAJYJwFuRpCrnAF3MILpQATtneoT6fypmp9vb1rj2s4F1aDx66vLHezhLez2zBg/1cD5dtIu9UlnCaqcVCyxMvxwBcfwmnXd5qtYm9qgwPXciPz13cOwEPSPc2Qn+Q1g4Z3sd3b+MvYqxFdOiofVWg/nuUFh+K1JMTjmaxUModl+HjTd20/BwdNX

TeratermSSHポートフォワーディング

クライアントはOSはWindowssshポートフォワーディングの為にTeratermを使用します。
サーバはLinuxです。

Teratermを開いて、設定メニューからSSH転送を選択します。
f:id:toshtone:20160214215801j:plain

追加をクリックします。
f:id:toshtone:20160214215824j:plain

このように設定します。
f:id:toshtone:20160214220449j:plain

ローカルのポートは何でも構いません。
リッスンは空で良いです。
リモート側ホストはリモートのホストアドレス(クライアントのhostsにのみ書かれたドメイン名は無効です)。
今回は192.168.10.5というサーバを想定しました。
ポートはMySQLを想定したので3306を指定しました。

これで192.168.10.5のサーバにSSH接続します。

DB接続ツールなどでローカルの13306に接続すると、192.168.10.5のDBに接続することが出来ます。
[まだ後日書き足す予定]

Youtube-dl

youtubeで見つけたお気に入りの動画をダウンロードする為に使うこのツール。
まずはubuntu15.04にインストールしてみました。

ubuntu15.04へのインストール方法

curl https://yt-dl.org/downloads/日付/youtube-dl -o /usr/local/bin/youtube-dl

日付の箇所は、最新のものを確認して記載します。

パーミッションは755

chmod 755 /usr/local/bin/youtube-dl

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

使い方

youtube-dl URL

URLはhttp(s)を含んでも含まなくてもどちらでも良いです。

mp3ファイルとしてダウンロードしたい時はこのように指定します。

youtube-dl -x --audio-format mp3 URL

ffmpegをインストールしていないと下記のエラーが出ます。

ERROR: ffprobe or avprobe not found. Please install one.

そうなったらインストールしましょう。

apt-get install ffmpeg

CentOS7ではNux Dextop repositoryからインストールするのが簡単そうでした。
依存関係の為先にepel-releaseをインストール

CentOS7へのインストール方法

yum -y install epel-release

続いてNux Desktopリポジトリをインストール

rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm

ffmpegをインストール

yum -y install ffmpeg ffmpeg-devel

追加したリポジトリを必要の時にのみ使用したい場合は
/etc/yum.repos.d/配下のrepoファイルのenableを0にして下さい。
その際は下記のようなコマンドでインストールを行います。

yum --enablerepo=epel install ~~
yum --enablerepo=nux-dextop install ~~

文字コードと改行コードの変換

Linux環境ならすぐ変換することが出来ますね。
よく、sjis+crlfというWindowsのファイルをutf8+lfにすることがあります。

Linux環境があってしかもnkfが入っているようならlinuxに移して変換してやると
とても楽です。

入っていないようならインストール。

yum install -y nkf

続いて変換するファイルをscp等でLinux環境に移動。
そして変換をかけてやる。

nkf -wLu --overwrite *.txt

確認はnkf -g ファイル名

英字だけのファイルは何回変換してもasciiと表示されるだけです。
だって英字だけのファイルなんでね。

Ajax 初めの一歩

非常にいまさらなんですが、Ajaxの基礎の基礎について書きたいと思います。

使用言語はPHPにします。

値を入力して送信、サーバで計算してローカルに値を戻します。
必要なファイルはtest.htmlとtest.phpです。
test.htmlにアクセスして送信ボタンを押すとtest.phpにデータが送信され
結果をtest.htmlに戻して値を表示します。

f:id:toshtone:20150913234014p:plain

f:id:toshtone:20150913234439p:plain

htmlはこんな感じ

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
function func() {
    $.ajax({ type: "POST", url: "./test.php",
        data: {
            num1 : $(val1).val(),
            num2 : $(val2).val()
        },
        dataType: 'json',
        success: function(data) {
            target = document.getElementById("output");
            target.innerHTML = data.msg;
        }
    });
}
</script>
</head>

<body>
    <center>
    <label>値1<input type="text" name="val1" id="val1" size="3" maxlength="3"> X </label>
    <label>値2<input type="text" name="val2" id="val2" size="3" maxlength="3"></label>
    <input type="button" value="送信" onclick="func();" />
    <div style="text-align:center" id="output"></div>
    </center>
</body>

</html>

続いてphp

<?PHP
$num1 = (int)$_POST['num1'];
$num2 = (int)$_POST['num2'];
$rtnVal = $num1 * $num2;
header("Content-Type: application/json; charset=utf-8");
echo json_encode( array( 'msg' => $rtnVal ) );
?>

シンプルな例ということで。

エクセルで各値の個数の集計

エクセルでこういったデータの個数の集計をしたい時
どうやるんだったかよく忘れてしまうので、手順をまとめます。

こういったデータを・・・
f:id:toshtone:20150905204107p:plain

こんな感じに集計したい
f:id:toshtone:20150905204122p:plain

まずはソートします。
f:id:toshtone:20150905204110p:plain

そのままね
f:id:toshtone:20150905204112p:plain

ソートされました。
f:id:toshtone:20150905204115p:plain

次に集計
f:id:toshtone:20150905204117p:plain

ここで個数の集計
f:id:toshtone:20150905204120p:plain

そうすると完成
f:id:toshtone:20150905204122p:plain

Linuxサーバに公開鍵認証でsshログイン

クライアントからLinuxサーバにSSHアクセスする方法の一つに鍵認証を用いる方法があります。

vZdtj6o6EMc/TV+u4UEQXoK69yT3ITfxJvflpkKBxkJJqU/76XcKUwVds3tzj8dEHP6t0zq/maESf1mfflO0rf6UORPEc/IT8VfE81wnXMCHUc6DsvDiQSgVz3HSVdjwd2a/ieqe56ybTNRSCs3bqZjJpmGZnmiFFNMlWlpa91dhk1Fxr/7Lc12hGuFejP6D8bLCZTwHBzp9ti5yVtC90C+9BGNmuKbWFc4/OeggHO7P9v6yUDOZ/y5lPREU6y6RQqng0x/f0MNkfCtVztREErzZjaPor4GkkhIcGas+LZkwNC2oIMpz381zGlPHmRfey+Dn9bvTL+FVrMHN/l+XGOEDFXsMB1n7JPJI8tobPkliq8ytMczxSeqjEUV3HHnd50pa6VqA4oKJ0orXJexQ8C1cM8HbN6q0MWXd7jVTHdh/Mb2VcvfmetEJ3rO2KY0vqfi7bDS1HgXdMvG37Ljm0hDPIC6GUXpgSnPIyz9uJmjZwigVvPx0eoIDW6m1yZgUowPDzFbkNxhckwHKmsmaaXU2WYtJihWNBT3HZDpeCyZGqRrVitUoJlx58XvFDQYS/yZ9/xH9NLCIl2jY9X8a4g1TENcbwk8H2rU04035j/naCrqGFVKcsAqeRd29wR7cYXdtz346d9zKhHtAooAkgDsmcUii1BjRymTCLfeuoq0x61NpnlmzjHeZnNVwne3YGfaZTpMip13FzFZMvAsuxFIKOXRS3/HDKF4YDlrJHRuNFP3rMmKfJxDih8lwoXyLf8iSAlrHeOn+9SzcAfpA3K5zz3uOzXeMO3wGbuzOE9wLkixIHBnu0Oqj8Gvcn5T753H+Ek/vKena4bxhENi+UWltziWJ+a3QLvLGn3E4mRS8gWfvDNoHqDnVFD6MbvpIve90RQ8MTOgjcP2dnbGb/Ergtp4tb1vLI97B/J538AzeLv6cEfDN5gdZQ1mvSQKtfUHSkMQQ5Qeoc7nfCpYoJY8QrmPFNdtAnzRDRyj5aRKYKOO50zXVue0Xve+0D3vyz2r6vxK3e9POQ6yxcTu3p9sxb5sm/4E33F7PlP3Y6K+Cv/4A

この図のように、クライアントに秘密鍵を配布しサーバに公開鍵を配置します。

秘密鍵と公開鍵を作成します。
作成するサーバはどのサーバでも構いません。
(teratermの機能を用いても同様のことが出来ますが今回は割愛します。)

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx root@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|     NYAN        |
|*_*     :o       |
|        . + =    |
|      :)S= = o   |
|      o.+ .^o^   |
|     +.+ + . .   |
|    . o.= = .    |
|      .+.+ .     |
+-----------------+

Enter passphrase (empty for no passphrase):の箇所で入力するパスワードを
空にすると、ログイン時にパスワードを入力する必要がなくなります。
今回は空にしました。

ここまで終わるとid_rsaとid_rsa.pubの2つのファイルが作成されます。

リナックスサーバに公開鍵を設定します。

# mv id_rsa.pub authorized_keys
# chmod 600 authorized_keys
# rm rsa.pub

既にauthorized_keysが存在するようならcatします。

# cat rsa.pub >> authorized_keys

続いて秘密鍵をクライアントに渡してやります。
一度権限をrw-r--r--くらいにしてやります。

# chmod 644 id_rsa

これでファイルをクライアントに渡してください。
(2017/03/26 追記 権限設定700だったような。。。ちょっと確認が必要)

そのファイルをTeraTermでこのように設定すれば、ログイン出来るかと思います。

f:id:toshtone:20150808132140p:plain

クライアントがCentOSなどのLinuxの場合は、
~/.ssh/の下にid_rsaを配置。

複数id_rsaがある場合は任意の名前に変更する。
その場合~/.ssh/configファイルを作成し

IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/任意の名前

↑のように列挙していく。

Host test
  HostName サーバの名前あるいはアドレス
  User ユーザ名

とするとssh testで接続出来ます。

もしログイン出来ないようなら、サーバの/etc/ssh/sshd_configの
設定を見直します。
下記3行のコメントブロックが外れているかどうか確認してください。

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys

下記のようにしたい場合について
rootユーザのパスワード認証でのログインは拒否
rootユーザの鍵認証でのログインを許可

PermitRootLogin without-password

普段はNoにしているかと思いますがwithout-passwordを指定することで
パスワード以外での認証を許可します。