Hatena::ブログ(Diary)

kinneko@転職先募集中の日記

検索エンジンから来た方へ: 申し訳ないですが、日記なので日々積み重なっています。
目的の情報にたどり着くには、右の検索窓から日記内を再検索してください。
北陸エリア内(もしくはエリア外でも)で転職先を探しています。
(マジです。ネタではありません。ホントですって...)
詳細履歴書をご希望の方はメールでご連絡下さいませ。(kinneko at gmail.com)
chromeで見ると、死ぬほど出るGoogleの広告がブロックできないので、
firefoxでABPを入れるとすっきり見られます。

2017-01-17

CentOS7でNICデバイス起動時にパラメータを変更する(ベストな方法不明)

ethtoolでのパラメータを起動時に渡す必要があったので調べる。

昔はrc.localとかでやってたみたいだけど、標準パラメータがないわけがない。


なんか、それっぽいものがあった。

/etc/sysconfig/network-scripts/network-functions

ethtool_set()
{
    oldifs=$IFS;
    IFS=';';
    [ -n "${ETHTOOL_DELAY}" ] && /bin/usleep ${ETHTOOL_DELAY}
    for opts in $ETHTOOL_OPTS ; do
        IFS=$oldifs;
        if [[ "${opts}" =~ [[:space:]]*- ]]; then
            /sbin/ethtool $opts
        else
            /sbin/ethtool -s ${REALDEVICE} $opts
        fi
        IFS=';';
    done
    IFS=$oldifs;
}

/etc/sysconfig/network-scripts/ifcfg-[interface name]の中にETHTOOL_OPTSを書いて渡すようだ。

インターフェイス名とデバイス名のペアは、NetworkManagerで調べる。

# nmcli d
DEVICE       TYPE      STATE      CONNECTION
eno16780032  ethernet  connected  eno0
eno33559296  ethernet  connected  eno1
lo           loopback  unmanaged  --

もしくはこれでも。

# nmcli c
NAME  UUID                                  TYPE            DEVICE
eno1  9204023d-29ba-4674-adcb-54b63ad6f8db  802-3-ethernet  eno33559296
eno0  39eaa74e-742a-480e-b441-79709d0ae6b3  802-3-ethernet  eno16780032

ハイフン付きでない場合は-sでETHTOOL_OPTSの中身を渡して、ハイフン付きのオプションが指定されている時には、そのまま渡している感じ。

"-G"とかを使いたい時には、インターフェイス名をどっかからか突っ込まないと渡らないな...

${REALDEVICE}とか埋めておいてもダメかな。

複数行渡したいとかいうのは考慮されていない感じ。

うーん。イマイチ。


NetworkManager的には、nmtuiとかnmcliで設定するのかな...

なんか、それっぽい機能が見つからない。


それとも、Systemdでワンショットのサービスファイル起動するほうがいい?

# vi /etc/systemd/system/ethtool_eno0.service
[Unit]
Description=network ring buffer to 512 for eno0
Requires=network.target
After=network.target

[Service]
ExecStart=/usr/sbin/ethtool -G eno0 rx 512
Type=oneshot

[Install]
WantedBy=multi-user.target

# systemctl daemon-reload

# systemctl start ethtool_eno0.service

# systemctl enable ethtool_eno0.service

なんか美しくない。

いい方法はないかな...

なんか決まった方法がありそうだけど見つけられない。


ubuntuとかは、interfacesのifaceにpost-up行を加えて、その後に直接書いておけばいいようだ。


お作法いろいろでめんどくさい。

LFSで決めてしまってほしい。


最近のディストリって、レイヤー増えすぎて、いろいろめんどくさい。

生で触ればいいのよ、生で。

2017-01-09

EPSON カラリオ EP-702Aが故障したので復旧してみる(失敗)

年賀状の試し刷り中に、シアンとマゼンダがかすれるようになり、とうとう出なくなった。

本番印刷前で、しょうがないので、すぐに近くのケーズまで走って、型落ちのEP-808AWを購入したのだけど、インクカートリッジのインク量が少ない。50枚ほど刷っているとインクがなくなる。

交換カートリッジも高い。

インク増量のカートリッジもあるけど、量は倍しか入ってない。コスパもあまり変わらない。

交換で発生するクリーニング時のロスを考えると増量のほうがお得か。

自転車操業の貧乏人はソンをする仕組みだ。

かなり残念な日本の家庭用プリンタ事情になっていた。

これは、今後は互換インクメインの運用にならざるをえない。

EPSONは、自分で自分の首を締めているとしか思えない。


EP-702Aは、だいぶ長いこと活躍してくれたので、言うことはないのだけど、まだ交換用のカートリッジが残ってしまっている。高価なのでもったいない気もする。

2009年の秋モデル。たしか、これも型落ちで買ったような。なので、購入は2010年か。

分解してサーボ取りでもいいかなと思ったのだけど、クリーニングをしてみることにした。


AmazonでEPSON用プリンタヘッドクリーニング液を調達してクリーニングしてみた。

パッケージ。

https://lh3.googleusercontent.com/oG58k_zhRNLf3Ts3-o9j3oxSssmxy_76I8vXZsHK2kivImmCClIRAY9SWfY84cvPLSXzcYL8HaiMhkx985AKXi4EXpUhh7mS=w640-h400-no?.jpeg


箱の中身。

https://lh3.googleusercontent.com/KCZo_4fXIXvR5ciOwjzPx9egwbyWhUBWVmIPoXXs80MFYpsDFUvowWcbBNFZMqBmXfBj_RJxMwF1qk-rYd2_znzNFk4h3k6Q=w640-h400-no?.jpeg


カートリッジ交換モードにして、ヘッドを移動。電源を抜く。

https://lh3.googleusercontent.com/MS3P6QXXBkxDLAc6aYykGztTtxSbjOw4tGytvD8YLBqGHbUIivVRigd5uZtxPsEU3v6aiiQMFjpD-aXoGM3l44sZ9knw4EF2=w640-h400-no?.jpeg


カートリッジをはずす。

https://lh3.googleusercontent.com/mmc7OvhHcxYQEwRl-EhGYn3FsfcqBeqX_hkNHfHRNK8g1E0gg_CWhfmYqY6Ucl1dGXPhi9-H6B8EvVkuAS2JbiOziJKt_Vs5=w640-h400-no?.jpeg


注射器をつなげる。

https://lh3.googleusercontent.com/MTSUwh06EWBwxZ1DCabaSrfUDWDDxJKn7AuESNWktHtuCT94W50Dbf_N7YKzTkvV22YNGA5t_GQVyTJodNNiB9C2fM5nPQcW=w640-h400-no?.jpeg


一度少し吸い上げて、ゆっくり押しこむ。

https://lh3.googleusercontent.com/rcP0vpNP8bltLmbDXa0G-5b3-EY6ZCyHjk_AH7MfGe-C9k6rRPtWaVTdC_YWgbgB_G2llDZvsj8Eknwbukaq73qFnQhcR9FN=w640-h400-no?.jpeg


シリンダーに気泡を入れるのはよくないかなと思ったのだけど、インクを吸い上げる時点で、どんなにゆっくりやっても、インク内で気泡が発生する。減圧で化学変化でも起きるのだろうか?


クリーニング液はたくさんあって、残しておいてもアレなので、すべての色をクリーニング。

色によって、なんか押しこむときの抵抗に違いがあるような気がするが、詰まりとは関係ない感じ。


20-30分放置して、インクカートリッジを取り付けて試し刷り。

ヘッドクリーニングを行うと、大量にインクを消費することになるので、普通に使っていた場合には、なんかベタっとしたものを安定するまで数枚印刷したほうがいいかもしれない。


しかし、復活せず。


黒は快調に出るので、インク廃液タンクがいっぱいになって使えなくなるまでは、黒印刷マシンとして使うかな。

2017-01-06

LinuxコマンドラインからHDDのsetmaxを解除する

だいぶ前に試せずに終わったので、リトライする。


HDDのsetmaxを解除する

http://d.hatena.ne.jp/kinneko/20151201/p76


テスト環境は、不本意ながら、CentOS7。


見た目は、1TBのドライブ。

# fdisk -l /dev/sda

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes, 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048      419839      208896   83  Linux
/dev/sda2          419840     1241087      410624   83  Linux
/dev/sda3         1241088     3338239     1048576   82  Linux swap / Solaris
/dev/sda4         3338240  1953523711   975092736    5  Extended
/dev/sda5         3340288     4401151      530432   83  Linux
/dev/sda6         4403200  1953523711   974560256   83  Linux

実際は2TBのドライブがsetmaxされて1GBに見えている。

中身の構成は、某NASのドライブの1つのようだね。

# hdparm -N /dev/sda

/dev/sda:
 max sectors   = 1953525168/3907029168, HPA is enabled
# hdparm -N -p3907029168 /dev/sda

/dev/sda:
 attempting to set PIO mode to -387938128
 HDIO_SET_PIO_MODE failed: Inappropriate ioctl for device
 max sectors   = 1953525168/3907029168, HPA is enabled

ん? -pだとPIO強制モード指定だから、オプション間違ってる?

コマンドのヘルプには詳しいことは書いてないな。

-N Get/set max visible number of sectors (HPA) (VERY DANGEROUS)

直接数字指定して出来そうな感じ。

# hdparm -N 3907029168 /dev/sda

/dev/sda:
 setting max visible sectors to 3907029168 (temporary)
 max sectors   = 3907029168/3907029168, HPA is disabled
# hdparm -N /dev/sda

/dev/sda:
 max sectors   = 3907029168/3907029168, HPA is disabled

直後はfdiskの中身は変わっていない。

# fdisk -l /dev/sda

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes, 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x00000000
(snip)

SATAでの再認識が面倒なので、rebootするのが楽だけど、今回はコマンドで取り外し。

# cat /sys/class/scsi_device/2\:0\:0\:0/device/model
WDC WD20EARX-00P
# echo 1 > /sys/class/scsi_device/2\:0\:0\:0/device/delete

ドライブを挿し直す。

dmesgで認識を確認。

[ 6018.835467] ata3.00: HPA detected: current 1953525168, native 3907029168
[ 6018.835570] ata3.00: ATA-8: WDC WD20EARX-00PASB0, 51.0AB51, max UDMA/133
[ 6018.835580] ata3.00: 1953525168 sectors, multi 0: LBA48 NCQ (depth 31/32), AA
[ 6018.843671] ata3.00: configured for UDMA/133
[ 6018.843691] ata3: EH complete
[ 6018.843932] scsi 2:0:0:0: Direct-Access     ATA      WDC WD20EARX-00P AB51 PQ: 0 ANSI: 5
[ 6018.846720] sd 2:0:0:0: [sda] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB)
[ 6018.846734] sd 2:0:0:0: [sda] 4096-byte physical blocks
[ 6018.846926] sd 2:0:0:0: Attached scsi generic sg0 type 0
[ 6018.847441] sd 2:0:0:0: [sda] Write Protect is off
[ 6018.847459] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 6018.847591] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 6018.894591]  sda: sda1 sda2 sda3 sda4 < sda5 sda6 >
[ 6018.896531] sd 2:0:0:0: [sda] Attached SCSI disk

書き換わってないな。

# fdisk -l /dev/sda

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes, 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x00000000
# hdparm -N /dev/sda

/dev/sda:
 max sectors   = 1953525168/3907029168, HPA is enabled

戻ってるし。

なんか書き込みコマンドがあるのかな?

# hdparm -N 3907029168 /dev/sda

/dev/sda:
 setting max visible sectors to 3907029168 (temporary)
 max sectors   = 3907029168/3907029168, HPA is disabled
# hdparm -V
hdparm v9.43

しょうがないのでmanを見る。

-N Get/set max visible number of sectors, also known as the Host

Protected Area setting. Without a parameter, -N displays the

current setting, which is reported as two values: the first

gives the current max sectors setting, and the second shows the

native (real) hardware limit for the disk. The difference

between these two values indicates how many sectors of the disk

are currently hidden from the operating system, in the form of a

Host Protected Area (HPA). This area is often used by computer

makers to hold diagnostic software, and/or a copy of the

originally provided operating system for recovery purposes.

Another possible use is to hide the true capacity of a very

large disk from a BIOS/system that cannot normally cope with

drives of that size (eg. most current {2010} BIOSs cannot deal

with drives larger than 2TB, so an HPA could be used to cause a

3TB drive to report itself as a 2TB drive). To change the

current max (VERY DANGEROUS, DATA LOSS IS EXTREMELY LIKELY), a

new value should be provided (in base10) immediately following

the -N option. This value is specified as a count of sectors,

rather than the "max sector address" of the drive. Drives have

the concept of a temporary (volatile) setting which is lost on

the next hardware reset, as well as a more permanent (non-

volatile) value which survives resets and power cycles. By

default, -N affects only the temporary (volatile) setting. To

change the permanent (non-volatile) value, prepend a leading p

character immediately before the first digit of the value.

Drives are supposed to allow only a single permanent change per

session. A hardware reset (or power cycle) is required before

another permanent -N operation can succeed. Note that any

attempt to set this value may fail if the disk is being accessed

by other software at the same time. This is because setting the

value requires a pair of back-to-back drive commands, but there

is no way to prevent some other command from being inserted

between them by the kernel. So if it fails initially, just try

again. Kernel support for -N is buggy for many adapter types

across many kernel versions, in that an incorrect (too small)

max size value is sometimes reported. As of the 2.6.27 kernel,

this does finally seem to be working on most hardware.

p付けないと、一時的な変更になるって書いてあるわ。

# hdparm -N p3907029168 /dev/sda

/dev/sda:
 setting max visible sectors to 3907029168 (permanent)
 max sectors   = 3907029168/3907029168, HPA is disabled

外して挿し直し。

# echo 1 > /sys/class/scsi_device/2\:0\:0\:0/device/delete
(挿し直し)
# cat /sys/class/scsi_device/2\:0\:0\:0/device/model
WDC WD20EARX-00P
# hdparm -N /dev/sda

/dev/sda:
 max sectors   = 3907029168/3907029168, HPA is disabled
# fdisk -l /dev/sda

Disk /dev/sda: 2000.4 GB, 2000398934016 bytes, 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x00000000

書き換わっている。

2016-12-31

イベント備忘録:

12/06-07: 合宿(延期)

12/15: 技術書典2 出展募集

12/24: mbed祭り 2016@クリスマスイブの金沢 https://mbed.doorkeeper.jp/events/53242

02/12: OSC2017 Hamanako http://www.ospn.jp/osc2017-hamanako/ ?

02/25: 金沢ITフェスティバル

03/09-10: (木/金) DroidKaigi 2017 https://droidkaigi.github.io/2017/ エントリはした->落選

04/09: 技術書典2 @アキバスクエア

08/05-06: Maker Faire Tokyo 2017


【済】

01/06: レーザーカッター届く

01/07: Rift予約開始!買えないけどなー

01/23: 熊本支部 Unityを使ったVR(バーチャルリアリティー)アプリ作成入門 https://sites.google.com/site/jagkumamoto/huo-dong-ji-lu/2016-01-23

02/20: Ocufes Final http://www.ocufes.jp/2016/01/2373/

02/21: 上モノラボ http://uemonolab.hanalab.co/

02/27-28: よこはま大さん橋フェスタ http://pierfes.com/

03/12: ABC2016S 青山学院大学(青山キャンパス)

03/13: HTC Viveで遊ぼうぜ!@meleap https://atnd.org/events/75637

03/14: クラウド合同セミナー in 金沢 http://connpass.com/event/25569/

03/18-19: 40周年記念 (あえの風)

04/09-10: フラッシュモブ型NT金沢花見

04/15-: NT金沢2016/MFT2016ワークショップ - C60バッキーボール・キットを作りたい - https://motion-gallery.net/projects/c60hanson 開始

05/14: UNREAL FEST 2016 OSAKA https://atnd.org/events/76761 行けず

05/16: NT金沢2016/MFT2016ワークショップ - C60バッキーボール・キットを作りたい - https://motion-gallery.net/projects/c60hanson 終了

05/18-20: OPIE'2016 http://www.opie.jp/le/index.php パシフィコ横浜

05/18-19: 深夜? JAG5月定例会?ボツ

05/21-22: JAG運営委員会総会@幕張

05/25-27: Wireless Japan 2015 http://www8.ric.co.jp/expo/wj/ 展示・講演

05/26: VR Tech Tokyo #1 http://vrtokyo.connpass.com/event/30849/ LT登壇予定

06/08-10: Interop Tokyo (Apps Japan) http://www.interop.jp/

06/15: JAG I/O報告会。daydreamの話をせよとのこと。

06/25: 技術書典 A-08 https://techbookfest.github.io/

07/16-18: NT金沢2016 http://wiki.nicotech.jp/nico_tech/index.php?NT%E9%87%91%E6%B2%A22016

08/06-07: MFT2016 http://makezine.jp/event/mft2016/

08/24-26: CEDEC 2016 http://cedec.cesa.or.jp/2016/

09/11: Elastic勉強会 in Kanazawa http://connpass.com/event/38656/

10/01: UNREAL FEST 2016 YOKOHAMA https://atnd.org/events/81132 行けず

10/09: DevFest Tokyo 2016 http://gdg-tokyo.connpass.com/event/38927 講演は学生部になったので行かず

10/29: JapanVR Fest開発者会 皆の10分を繋げてVRの未来を作る

https://atnd.org/events/81446 http://jvr-fest.com/2016/09/2882/

11/27: DevFest Kansai 2016 - connpass http://devfestkansai.connpass.com/event/40556/ 公募枠エントリ http://devfestkansai.connpass.com/event/40623/

11/30: 人間ドック

11/19: ABC2016 (柏の葉キャンパス)10/21から延期 http://abc.android-group.jp/2016a/ 行かず

2016-12-26

普通のhttp proxyサーバーを用意する

なんか、テストにオープンproxy使うとかアホなこと言っているので、「んなの中間者攻撃でいろいろ抜かれたらどうするのさ」って注意して、使えるものを立てることに。

http proxyなんて、だいぶ長いこと立てたことないな。お作法とか変わっているのかな?

最近は、nginxで立てるのが普通なのかな。

今回はリバースじゃないから、Poundじゃない感じ。

とりあえず、伝統的なsquidでさくらクラウド上のubuntuにて立ててみる。


インストール

squidのパッケージは、squidとsquid3があるけど、後者はダミーパッケージ。

$ sudo apt-get install squid
(snip)
The following NEW packages will be installed:
  libecap3 libltdl7 squid squid-common squid-langpack ssl-cert
(snip)

インストール直後で動いている。

$ sudo systemctl status squid.service
● squid.service - LSB: Squid HTTP Proxy version 3.x
   Loaded: loaded (/etc/init.d/squid; bad; vendor preset: enabled)
   Active: active (running) since Mon 2016-12-26 09:31:43 JST; 30min ago
     Docs: man:systemd-sysv-generator(8)
   CGroup: /system.slice/squid.service
           ├─5023 /usr/sbin/squid -YC -f /etc/squid/squid.conf
           ├─5027 (squid-1) -YC -f /etc/squid/squid.conf
           ├─5033 (logfile-daemon) /var/log/squid/access.log
           └─5048 (pinger)

Dec 26 09:31:43 DNSP systemd[1]: Starting LSB: Squid HTTP Proxy version 3.x...
Dec 26 09:31:43 DNSP squid[4981]:  * Starting Squid HTTP Proxy squid
Dec 26 09:31:43 DNSP squid[4981]:    ...done.
Dec 26 09:31:43 DNSP systemd[1]: Started LSB: Squid HTTP Proxy version 3.x.
Dec 26 09:31:43 DNSP squid[5023]: Squid Parent: will start 1 kids
Dec 26 09:31:43 DNSP squid[5023]: Squid Parent: (squid-1) process 5027 started

デフォルト設定

デフォルトで有効なのは、こういう設定。

$ sudo cat /etc/squid/squid.conf | grep -v "^#" | grep -v "^$"
acl SSL_ports port 443
acl Safe_ports port 80		# http
acl Safe_ports port 21		# ftp
acl Safe_ports port 443		# https
acl Safe_ports port 70		# gopher
acl Safe_ports port 210		# wais
acl Safe_ports port 1025-65535	# unregistered ports
acl Safe_ports port 280		# http-mgmt
acl Safe_ports port 488		# gss-http
acl Safe_ports port 591		# filemaker
acl Safe_ports port 777		# multiling http
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access deny all
http_port 3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern -i (/cgi-bin/|\?) 0	0%	0
refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern .		0	20%	4320

なんかACL対応とか増えている感じ?

このへんか。

http://wiki.squid-cache.org/SquidFaq/SquidAcl

http_portは、3128とかになっているけど、デフォルトでいいか。


デフォルト設定での接続テスト

テスト。

手元の端末でテストしてみる。

普通にアクセス。

$ curl http://google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.co.jp/?gfe_rd=cr&amp;ei=7GxgWLiCNfD98we2xbOABQ">here</A>.
</BODY></HTML>

proxyでアクセス。

$ curl --proxy http://XXX.XXX.XXX.XXX:3128 http://google.com
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<meta type="copyright" content="Copyright (C) 1996-2015 The Squid Software Foundation and contributors">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>ERROR: The requested URL could not be retrieved</title>
<style type="text/css"><!--
 /*
 * Copyright (C) 1996-2015 The Squid Software Foundation and contributors
 *
 * Squid software is distributed under GPLv2+ license and includes
 * contributions from numerous individuals and organizations.
 * Please see the COPYING and CONTRIBUTORS files for details.
 */

/*
 Stylesheet for Squid Error pages
 Adapted from design by Free CSS Templates
 http://www.freecsstemplates.org
 Released for free under a Creative Commons Attribution 2.5 License
*/

/* Page basics */
* {
	font-family: verdana, sans-serif;
}

html body {
	margin: 0;
	padding: 0;
	background: #efefef;
	font-size: 12px;
	color: #1e1e1e;
}

/* Page displayed title area */
#titles {
	margin-left: 15px;
	padding: 10px;
	padding-left: 100px;
	background: url('/squid-internal-static/icons/SN.png') no-repeat left;
}

/* initial title */
#titles h1 {
	color: #000000;
}
#titles h2 {
	color: #000000;
}

/* special event: FTP success page titles */
#titles ftpsuccess {
	background-color:#00ff00;
	width:100%;
}

/* Page displayed body content area */
#content {
	padding: 10px;
	background: #ffffff;
}

/* General text */
p {
}

/* error brief description */
#error p {
}

/* some data which may have caused the problem */
#data {
}

/* the error message received from the system or other software */
#sysmsg {
}

pre {
    font-family:sans-serif;
}

/* special event: FTP / Gopher directory listing */
#dirmsg {
    font-family: courier;
    color: black;
    font-size: 10pt;
}
#dirlisting {
    margin-left: 2%;
    margin-right: 2%;
}
#dirlisting tr.entry td.icon,td.filename,td.size,td.date {
    border-bottom: groove;
}
#dirlisting td.size {
    width: 50px;
    text-align: right;
    padding-right: 5px;
}

/* horizontal lines */
hr {
	margin: 0;
}

/* page displayed footer area */
#footer {
	font-size: 9px;
	padding-left: 10px;
}


body
:lang(fa) { direction: rtl; font-size: 100%; font-family: Tahoma, Roya, sans-serif; float: right; }
:lang(he) { direction: rtl; }
 --></style>
</head><body id=ERR_ACCESS_DENIED>
<div id="titles">
<h1>ERROR</h1>
<h2>The requested URL could not be retrieved</h2>
</div>
<hr>

<div id="content">
<p>The following error was encountered while trying to retrieve the URL: <a href="http://google.com/">http://google.com/</a></p>

<blockquote id="error">
<p><b>Access Denied.</b></p>
</blockquote>

<p>Access control configuration prevents your request from being allowed at this time. Please contact your service provider if you feel this is incorrect.</p>

<p>Your cache administrator is <a href="mailto:webmaster?subject=CacheErrorInfo%20-%20ERR_ACCESS_DENIED&amp;body=CacheHost%3A%20DNSP%0D%0AErrPage%3A%20ERR_ACCESS_DENIED%0D%0AErr%3A%20%5Bnone%5D%0D%0ATimeStamp%3A%20Mon,%2026%20Dec%202016%2001%3A06%3A21%20GMT%0D%0A%0D%0AClientIP%3A%20XXX.XXX.XXX.XXX%0D%0A%0D%0AHTTP%20Request%3A%0D%0AGET%20%2F%20HTTP%2F1.1%0AUser-Agent%3A%20curl%2F7.24.0%20(x86_64-apple-darwin12.0)%20libcurl%2F7.24.0%20OpenSSL%2F0.9.8%7D%20zlib%2F1.2.5%0D%0AAccept%3A%20*%2F*%0D%0AProxy-Connection%3A%20Keep-Alive%0D%0AHost%3A%20google.com%0D%0A%0D%0A%0D%0A">webmaster</a>.</p>
<br>
</div>

<hr>
<div id="footer">
<p>Generated Mon, 26 Dec 2016 01:06:21 GMT by DNSP (squid/3.5.12)</p>
<!-- ERR_ACCESS_DENIED -->
</div>
</body></html>

外から使うとエラーになる。

デフォルト設定では、オープンproxyにはならないようにしてあるということか。


設定変更

認証はダサいけど、接続元が特定できない環境なので、パスワード認証に。

認証には外部プログラムを使うようだ。

これはいっしょにインストールされている。

basic認証だけなので、basic_ncsa_authを使う。

$ sudo vi /etc/squid/squid.conf
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/.passwd
auth_param basic children 5 startup=5 idle=1
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl password proxy_auth REQUIRED
http_access allow password

認証用のパスワードファイルを作るのに、htpasswdが必要。

$ sudo apt-get install apache2-utils

myproxyとmypassでパスワードファイルを作成。

$ sudo htpasswd -c /etc/squid/.passwd myproxy
New password:
Re-type new password:
Adding password for user myproxy
$ sudo cat /etc/squid/.passwd
myproxy:$apr1$1h7QyKbH$CWtkYCcDikL/oXbm0FxVz.

サービスを再起動。

$ sudo systemctl restart squid.service

接続テスト。

$ curl --proxy http://myproxy:mypass@XXX.XXX.XXX.XXX:3128 http://google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.co.jp/?gfe_rd=cr&amp;ei=CnNgWMTeAe398we21bH4DA">here</A>.
</BODY></HTML>

通るようになった。


認証なしだと拒否になる。

$ curl --proxy http://XXX.XXX.XXX.XXX:3128 http://google.com
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<meta type="copyright" content="Copyright (C) 1996-2015 The Squid Software Foundation and contributors">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>ERROR: Cache Access Denied</title>
<style type="text/css"><!--
 /*
 * Copyright (C) 1996-2015 The Squid Software Foundation and contributors
 *
 * Squid software is distributed under GPLv2+ license and includes
 * contributions from numerous individuals and organizations.
 * Please see the COPYING and CONTRIBUTORS files for details.
 */

/*
 Stylesheet for Squid Error pages
 Adapted from design by Free CSS Templates
 http://www.freecsstemplates.org
 Released for free under a Creative Commons Attribution 2.5 License
*/

/* Page basics */
* {
	font-family: verdana, sans-serif;
}

html body {
	margin: 0;
	padding: 0;
	background: #efefef;
	font-size: 12px;
	color: #1e1e1e;
}

/* Page displayed title area */
#titles {
	margin-left: 15px;
	padding: 10px;
	padding-left: 100px;
	background: url('/squid-internal-static/icons/SN.png') no-repeat left;
}

/* initial title */
#titles h1 {
	color: #000000;
}
#titles h2 {
	color: #000000;
}

/* special event: FTP success page titles */
#titles ftpsuccess {
	background-color:#00ff00;
	width:100%;
}

/* Page displayed body content area */
#content {
	padding: 10px;
	background: #ffffff;
}

/* General text */
p {
}

/* error brief description */
#error p {
}

/* some data which may have caused the problem */
#data {
}

/* the error message received from the system or other software */
#sysmsg {
}

pre {
    font-family:sans-serif;
}

/* special event: FTP / Gopher directory listing */
#dirmsg {
    font-family: courier;
    color: black;
    font-size: 10pt;
}
#dirlisting {
    margin-left: 2%;
    margin-right: 2%;
}
#dirlisting tr.entry td.icon,td.filename,td.size,td.date {
    border-bottom: groove;
}
#dirlisting td.size {
    width: 50px;
    text-align: right;
    padding-right: 5px;
}

/* horizontal lines */
hr {
	margin: 0;
}

/* page displayed footer area */
#footer {
	font-size: 9px;
	padding-left: 10px;
}


body
:lang(fa) { direction: rtl; font-size: 100%; font-family: Tahoma, Roya, sans-serif; float: right; }
:lang(he) { direction: rtl; }
 --></style>
</head><body id=ERR_CACHE_ACCESS_DENIED>
<div id="titles">
<h1>ERROR</h1>
<h2>Cache Access Denied.</h2>
</div>
<hr>

<div id="content">
<p>The following error was encountered while trying to retrieve the URL: <a href="http://google.com/">http://google.com/</a></p>

<blockquote id="error">
<p><b>Cache Access Denied.</b></p>
</blockquote>

<p>Sorry, you are not currently allowed to request http://google.com/ from this cache until you have authenticated yourself.</p>

<p>Please contact the <a href="mailto:webmaster?subject=CacheErrorInfo%20-%20ERR_CACHE_ACCESS_DENIED&amp;body=CacheHost%3A%20DNSP%0D%0AErrPage%3A%20ERR_CACHE_ACCESS_DENIED%0D%0AErr%3A%20%5Bnone%5D%0D%0ATimeStamp%3A%20Mon,%2026%20Dec%202016%2001%3A32%3A40%20GMT%0D%0A%0D%0AClientIP%3A%20XXX.XXX.XXX.XXX%0D%0A%0D%0AHTTP%20Request%3A%0D%0AGET%20%2F%20HTTP%2F1.1%0AUser-Agent%3A%20curl%2F7.24.0%20(x86_64-apple-darwin12.0)%20libcurl%2F7.24.0%20OpenSSL%2F0.9.8%7D%20zlib%2F1.2.5%0D%0AAccept%3A%20*%2F*%0D%0AProxy-Connection%3A%20Keep-Alive%0D%0AHost%3A%20google.com%0D%0A%0D%0A%0D%0A">cache administrator</a> if you have difficulties authenticating yourself.</p>

<br>
</div>

<hr>
<div id="footer">
<p>Generated Mon, 26 Dec 2016 01:32:40 GMT by DNSP (squid/3.5.12)</p>
<!-- ERR_CACHE_ACCESS_DENIED -->
</div>
</body></html>

httpsのサーバーに対してもゲイトウエイとして機能している。

$ curl --proxy http://myproxy:mypass@XXX.XXX.XXX.XXX:3128 https://google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="https://www.google.co.jp/?gfe_rd=cr&amp;ei=K4pgWN7ZEafU8AeApYigCg">here</A>.
</BODY></HTML>

その他テストしてないけど設定メモ

proxyの情報出力を抑止。今回はあんまり関係ないのでパス。

request_header_access X-Forwarded-For deny all

request_header_access Via deny all

request_header_access Cache-Control deny all

reply_header_access X-Forwarded-For deny all

reply_header_access Via deny all

reply_header_access Cache-Control deny all

キャッシュに保管する容量制限。

デフォルトではメモリ内のみにキャッシュ。

最低限では、こんな感じか。

maximum_object_size 4096 KB

maximum_object_size_in_memory 8 KB

cache_mem 8 MB