計算機管理者で作業したネタ

真面目な話、世界につなげて Global な IP 振るなら、 計算機の管理くらいまともにやれ、 という愚痴。
Firewall 無しで全ポートオープン、inetd もフルサービスで、 全ての daemon は何も考えず gid: 0, uid: 0 で動いている上に chroot のかけらも無しでしかも version 情報しゃべりまくり、 しかもその version がセキュリティホール付きだったり、 sendmail も第三者中継許可、syslog 取ってないわ、 ftpd 動かして SSH/SCP/SFTP や SSL は何処吹く風ぞ、 自宅からプロバイダ通して素の pop3 で平文パスワード通すわ、 telnet で入って su かけるわ、 なんつう、たわけた真似はしなさんな、と言うお話。
まー、本や web の資料あさりながら、首っ引きで カリカリ設定している私が言えた事ではないのですが。 備忘録として書いておこうかと。

雑多な話その1(XF86 回りの環境設定)
私物の GeForce4 MX 440SE (AGPx4, SDR-SDRAM 64MB) (with XF86-driver, with NVIDIA-driver) (いわゆる、地雷。 しかも買った1週間後に非地雷品が同じ値段に値下がりした) や mobioNX MB12C (NM2093 128ZV) とか、 ひとから借りていた VAIO PCG-F16 (NM2200 256AV) や VAIO XR9F (S3 Savage/IX-MV) とか、 職場の支給品(貸与)の DELL OptiPlex GX260 や DELL Latitude C400 や RADEON 9250 で使っている XF86Config for XF86-4.3.0/4.4.0。 まぁ、最近の XF86 は
X -configure
で、いきなり環境設定ファイルを自動生成してくれる上に、 チューニングも無しにいきなり使えるから、 公開する必要も無いのだけれど。
fonts.conf。 Xft-2 から、~/.fonts.conf に設定を書くのね……。 XftConfig とか XTT とか、探してしまったよ……。
Fixed フォントの確認用の文字列
xconsole にて、imwheel 無しでマウスホイールを使う設定。 "X mouse wheel scroll" の Athena Widget 汎用設定だと、何故か使えない。 適当に試した所、.Xdefaults に
XConsole.text.Scrollbar.translations:           #override\
	: StartScroll(Forward)\n\
	: StartScroll(Backward)\n\

XConsole.text.translations:             #override\
	Shift,:scroll-one-line-down()\n\
	Shift,:scroll-one-line-up()\n\
	None,: previous-page()\n\
	None,: next-page()\n\

を追加でホイールが使えた。 ワイルドカードで省略形にしたり、両方を同じ設定にすると、 起動時にウォーニング吐いて蹴られたり、 コア吐いて落ちたり、 スクロールバー上でしか使えなかったり、 よくわからん。
xinerama 環境向けの、 外見がとても fvwm 系には見えない.fvwm2rc

雑多な話その2
ついでなので、 姫野ベンチ、 glxgears、 xengine、 glclock-4.5、 xscreensaver、 HDBENCH、 の benchmark を採ってみた。 UNIX系の結果MS-Windows系の結果
さらにやけになって、 GeForce4MX440SE のクロックをいじって ベンチマークを採ってみた結果の図。
GPU クロックをいじっても、ほとんど変わらないけれど、 Memory クロックをいじると、直に結果に出るのね。 HD-Bench は CPU power で全部描いている、 と言われたとしても疑わないけれど、 3DMark なら GPU をこき使っていると思うのになあ。
結論。 2005年時点の FreeBSD 4系/5系で ATI系を使うと、 ハードウェアの性能を全く出せない場合が多い。

雑多な話その3(XF86 に追加フォント)
XF86 に MS-Windows 2000 のフォントを食わせてみた。 以下2つがこけた。
  • tahoma.ttf
  • tahomabd.ttf
XF86 に MS-Windows XP のフォントを食わせてみた。 以下3つがこけた。
  • arial.ttf
  • tahoma.ttf
  • tahomabd.ttf
MS としては、MS-Windows 付属フォントの使用ライセンスは、 MS-Windows と一緒に使う場合のみ与えられるもの、 と主張しているらしい。知らなかった。 なので、X で使ってはいけません。 と言う事らしい。
MS-Windows の 2000 と XP でフォントを細かく比べてみたら、 大きさや字体が異なっていた。 プレゼンテーションやら絵描きやらで、 MS-Windows 2000 で文字の大きさや位置を合わせて完成させて、 MS-Windows XP で閲覧したら文字の位置や大きさが派手にずれて、 一部がぐちゃぐちゃになった。 しかも、それがプレゼンテーションの本番で発症して、 もう泣きたくなる状況。
しばらくの間、モトヤフォントを試してみたが、 綺麗だけれど好みに合わなかったので、やめた。
IPA のフォントを使ってみたが、 これが好みにぴったり合った。
結局、プレゼンテーション/絵描き/印刷用は、 IPA のフォントに乗り換えた。 画面表示用は、漣と東雲。

Firewall な話(FreeBSD で ipf とか OpenBSD で pf とか NAPT とか)
危ない事は、水際で食い止めるのだだだ。
と、言う訳で、隠密行動かつ突貫工事で、 サーバだけは IP-Filter(IPF) で防火壁を組んだ。
案の定、MS-Windows RPC 狙いのアタックが、毎日釣れる。 でも、計算機管理責任者が 首を縦に振らないので、 gateway はそのまんま。
その後、部屋内 LAN から敷地内 LAN へ ワームが這い出していると連絡が。 しかも計算機管理責任者が ゴルフで不在。 仕方が無いので、勝手に gateway に ipchains を突っ込んだ。
で、さらにその後、 計算機管理責任者の 腰の重さ加減に嫌気がさして、横車押して、 gateway とフロア内 LAN の総入れ換えをして、 Packet-Filter(PF) で防火壁を組んだ。 その際、 派閥がらみの危ない橋を渡ってまで手伝って頂いた皆様方、 有難う御座います。
で、さらにさらにその後。 web の絨毯爆撃とか、年賀メールとか、 いらん物で回線容量を喰い潰されるのを防ごう、と考え、 pf に altq/queue の cbq で通信量の制御を入れて運用中。 bandwidth, borrow の効果はてきめんで、 体感ですぐに違いが判った。 priority と qlimit の効果は、体感では判らなかった。 ただ、borrow で回線容量を増やす前しばらくは、 bandwidth の天井に張り付いたままになる感じがするし、 天井に張り付いている期間と borrow が入る前後は latency がどかんと増えてしまう感じがするので、 人間が叩いている回線(ssh とか telnet 辺り)は borrow 入れないで済むくらい bandwidth を増やさないと、 ストレスが溜る……、 ゲートウェイのマシンスペックとメモリ不足なのかも知れない。 hfsc を使った方が良いのかな?、 日本語マニュアルが未整備だけれども。
    セキュリティ上、 現用サーバ/ゲートウェイの設定を ほいほい見せるわけにもいかないので
  • OpenBSD系 pf の cbq のサンプル。
    ほぼ同じ内容で、常用して確認済み。
    NetBSD系は文法が違う……。 FreeBSD系は、 「OpenBSD系からの移植」とソースの頭に書いてあったので、 多分、同じ文法(未確認)。
    altq on $dmz_if cbq bandwidth 1Gb \
           queue { std_ret_dmz, std_ext_dmz, std_int_dmz, \
                   domain_dmz, ssh_dmz, www_dmz }
    queue std_ret_dmz bandwidth 10% priority 2 qlimit 100 cbq(default borrow ecn)
    queue std_ext_dmz bandwidth 10% priority 1 qlimit 100
    queue std_int_dmz bandwidth 10% priority 2 qlimit 100 cbq(ecn)
    queue domain_dmz bandwidth 10% priority 7 cbq(borrow)
    queue ssh_dmz bandwidth 10% cbq(borrow ecn) { ssh_dmz_bulk, ssh_dmz_prio }
     queue ssh_dmz_bulk priority 4 cbq(borrow ecn)
     queue ssh_dmz_prio priority 6 cbq(borrow ecn)
    queue www_dmz bandwidth 500Kb priority 0 qlimit 32 cbq(red)
    

  • OpenBSD系 pf の hfsc のサンプル。
    似た内容で、常用して確認済み。
    NetBSD系は文法が違う……。 FreeBSD系は、 「OpenBSD系からの移植」とソースの頭に書いてあったので、 多分、同じ文法(未確認)。
    どうも、red や ecn を付けると、 upperlimit が無視される様に感じられる……、 体感では。
    port ssh に対して queue(ssh_dmz_bulk,ssh_dmz_prio) と指定すると、 ssh 回線オープン時や scp や sftp は ssh_dmz_bulk を通り、 ssh で回線が通じた後と scp や sftp の ACK は ssh_dmz_prio に行くそうだ (OpenBSD 総本山 faq の pf の項目)。 ただ、これは簡単に偽造できるので、 pass と block を分ける様なフィルタリングには使ってはいけない。
    bandwidth は、 取り敢えず確保する回線容量らしい?。 realtime + linkshare の容量になるらしい?。 でも、bandwidth = realtime + linkshare になっていなくても、 エラーは出なかった。
    realtime は、 常時確保し、絶対に貸し出さない、回線容量。
    linkshare は、 確保するけれども、 使っていない時は sibling queue (兄弟姉妹キュー)に貸し出しを許可する、 回線容量。 linkshare を省略したり 0b や 0% にすると、 100% として処理される (ソース pfctl_altq.c:eval_pfqueue_hfsc() より)。 親の linkshare を越えてはいけない (ソース pfctl_altq.c:eval_pfqueue_hfsc() より)、 ……、親の容量を越えてはいけない、の読み間違い?。
    upperlimit は、 最大許容回線容量。 realtime + linkshare + 他から借りた容量 = upperlimit。 realtime の bandwidth 以上、 IF の bandwidth 以下、 でないといけない (ソース pfctl_altq.c:eval_pfqueue_hfsc() より)、 ……、linkshare はどうでもいいのか?。
    realtime と linkshare の分配割合は、 sibling queue での総合計が 80% を越えてはならず、 20% は天使の取り分らしい (ソース pfctl_altq.c:eval_pfqueue_hfsc() より)。 でも最上位キューは最大 200% にできてしまうバグがあるらしい (治したかな?)。 upperlimit は、 自 queue の realtime と linkshare と、 sibling queue から借りた linkshare の総合計なので、 単体で 100% 以下なら問題無し。
    sc の ( m1 d m2 ) 指定。 m1 > 0 かつ m2 = 0 は、エラー (ソース pfctl_altq.c:eval_pfqueue_hfsc() より)。 realtime では m1 < m2 かつ m1 != 0 も、エラー (ソース pfctl_altq.c:eval_pfqueue_hfsc() より)。
    altq on $dmz_if hfsc bandwidth 80Mb \
            queue { std_ret_dmz, std_dmz_dmz, \
                    std_ext_dmz, std_extlan_dmz, std_int_dmz, \
                    domain_dmz, ssh_dmz, www_dmz }
    queue std_ext_dmz bandwidth 10% priority 1 \
            hfsc(realtime 1% linkshare 9% upperlimit 50%)
    queue std_extlan_dmz bandwidth 15% qlimit 100 priority 2 \
            hfsc(realtime 5% linkshare 10% upperlimit 70%)
    queue std_int_dmz bandwidth 15% qlimit 100 priority 2 \
            hfsc(realtime 5% linkshare 10% upperlimit 70%)
    queue std_dmz_dmz bandwidth 5% qlimit 100 priority 2 \
            hfsc(realtime 0b linkshare 5% upperlimit 70%)
    queue std_ret_dmz bandwidth 15% qlimit 100 priority 2 \
            hfsc(default realtime 5% linkshare 10% upperlimit 70%)
    queue domain_dmz bandwidth 15% priority 7 \
            hfsc(realtime 5% linkshare 10% upperlimit 50%)
    queue ssh_dmz bandwidth 15% hfsc(realtime 5% linkshare 10% upperlimit 70%) \
            { ssh_dmz_a_bulk,ssh_dmz_a_prio, ssh_dmz_b_bulk,ssh_dmz_b_prio }
      queue ssh_dmz_a_bulk bandwidth 20% priority 4 hfsc(realtime 5% linkshare 15%)
      queue ssh_dmz_a_prio bandwidth 20% priority 6 hfsc(realtime 5% linkshare 15%)
      queue ssh_dmz_b_bulk bandwidth 20% priority 3 hfsc(realtime 5% linkshare 15%)
      queue ssh_dmz_b_prio bandwidth 20% priority 5 hfsc(realtime 5% linkshare 15%)
    queue www_dmz bandwidth 1Mb qlimit 32 priority 0 \
            hfsc(realtime 0b linkshare 1Mb upperlimit (100Kb 1000 1000Kb))
    


SPAM 撃墜の話
PROCMAIL より複雑なルール判別を入れたかったので、 取り合えず SpamAssassin を入れてみた。
私は fenix では一般ユーザなので、以下の設定ファイルは、 一般ユーザとして fenix.ne.jp で使っている物。 同じ SpamAssassin の環境設定を、 root で Solaris + sendmail + milter + SPAM-Assassin でも利用して……いたのだけれど、 Solaris の perl は妙に不安定なので、 現在は一般ユーザ権限でのみ使用。
問題は、Online-Magazine や Mailling-List を 例外条件に入れておかないと、SPAM と誤認識する事が多く (Online-Magazine で9割以上、Mailling-List で数割)、 迂闊に root の強権で Subject 書き換えするわけにはいかない事。 fenix ならともかく、あっちでやったらユーザから苦情が来かねない。 いちいちユーザに、参加している Online-Magazine や ML を 聞いて設定して回るのなんて、御免被る。
で、せっかく Filter かけて Header に X-Spam-Status が 書かれているのに、あっちで Header 判別での受信振り分けを やっている人がほとんどいない(私だけ?)ので、 あっちでは Filter の用を成していなかったり。 そのくせ「1日で SPAM が100通来るから何とかして。」とか 言ってくるし、しかも計算機管理責任者が
  • sendmail/qpopper 初期設定手順
  • sendmail 用フィルタその0 sendmail.cf の処理途中の途中結果をファイルに書き出します。 試験用なので、意味無いです。 ちうか、実運用に使ってはいけません。
  • sendmail 用フィルタその1 mail header to ( To: ) の書き方によって受信拒否。 但しこれを有効にすると、 sendmail の To: の処理バッファが 255 byte に縮小されてしまい、 553 Unbalanced で REJECT されてしまう場合がある問題が有る為、 使えません。 なお、mail envelope to ( Rcpt To: ) にフィルタかけたいなら、 access / access.db に書けばオッケーです。
  • sendmail 用フィルタその2……は、adfilter 使ってます。
  • sendmail 用フィルタその3 Message-Id が不正な場合に REJECT 出します。 副作用が強いです。 ろくな設定をしていない Outlook 系だと、間違いなく、はねます。 後日談:試験運用中に外部から、 「おたくのメールサーバの設定がおかしいから直せ」 って直電来たらしい……。
  • sendmail 用フィルタその4 envelope from が偽造だった時に蹴り飛ばすフィルタを書いてみた。
  • PROCMAIL + SPAM-Assassin 用 .forward
  • Thu,14 Sep,2017 追記: 本サンプルは RBL.JP に依存しており、 RBL.JP 運用終了に伴い本サンプルは正常稼働しなくなります。 PROCMAIL + SPAM-Assassin 用 .procmailrc
  • Thu,14 Sep,2017 追記: 本サンプルは RBL.JP に依存しており、 RBL.JP 運用終了に伴い本サンプルは正常稼働しなくなります。 SPAM-Assasin 環境設定
で、SPAM 業者が何処からメールアドレスを入手するかと言うと、 web から拾うのが、一番安上がりで確実なわけですな。
なので、web でメールアドレスを書く時に、 ロボットに収拾できない形式にする必要があり(画像にしちゃうとか)、 また、SPAM 業者のメールアドレス収拾ロボットが巡回してきた時に、 弾き飛ばす必要があるでしょう。

その他、とりとめのない話
DNS を動かす時。
dig @hoge.poge.moge version.bind chaos txt
一般ユーザー権限で rsync を入れて、 ssh の port-forwarding のトンネルを通す場合。
rsync -e "ssh -p *****" -avzb --delete . ****@127.0.0.1:~/******/
scp だと、ポート指定は "-P" だけれど、 ssh でポート指定は "-p" になる。
pdnsd を使う時。
	min_ttl=60;
とかやって min_ttl を指定しておかないと、死ねる。

計算機関連の雑多なメモ

Last modified on Sun,07 Jan,2007
This contents was founded in Sat,30 Aug,2003.
FENIX HomePage
G-HAL HomePage
Mail to, メールはこちらへ
Suggestion Box, 投書箱
BBS, 掲示板 UserName:BBS、Password:BBS
(C) 2003 G-HAL