A sample text widget

Etiam pulvinar consectetur dolor sed malesuada. Ut convallis euismod dolor nec pretium. Nunc ut tristique massa.

Nam sodales mi vitae dolor ullamcorper et vulputate enim accumsan. Morbi orci magna, tincidunt vitae molestie nec, molestie at mi. Nulla nulla lorem, suscipit in posuere in, interdum non magna.

いろいろめも

PerlでAPOP認証(2003/01/06)


 pop3サーバに接続が成功すると

+OK <云々>

 という応答が帰ってくる。この「云々」の部分+パスワードでMD5のメッセージダイジェストを作成し、「APOP user名 MD5メッセージダイジェスト」として送信送信すればAPOP認証が成功する。
変数に、

$res=サーバからの応答(+OK <云々>)
$user=ユーザ名
$passwd=パスワード

と入れてあるとすると、

use Digest::MD5;
# 云々の部分の切り出し
$res =~ s/(.+)<(.+)>/<$2>/i;
# その後ろにパスワードを付加
$res .= $passwd;
# メッセージダイジェストの作成(モジュール任せ)
$md5 = Digest::MD5->new;
$md5->add($res);
$res = $md5->hexdigest;

 あとは、「"APOP $user $res"」をサーバへ送り返せば認証成功となる。
 、、、というか、サーバ応答(+OK <云々>)から切り出す部分って「<」と「>」も含まなければならないってのに小一時間ハマッタ。

起動すべきデーモンと止めるべきデーモン(2003/10/04)


 RedHat系のLinuxは「chkconfig –list」でデーモンの起動の設定を確認することができます(出てこないデーモンもありますけど)。そして、不要なデーモンは「chkconfig nfs off」というようなコマンドで起動しなくすることが可能です。
 ここではchkconfigで出てくるデーモン群を説明します。ちなみに私自身知らないものも非常に多いので、かなり推測が入っています。
kudzu
新しく追加/取り外しされたハードウェア(マウスとかNICとか)を検知し、設定を行う。これがあると起動中10数秒待たされるが、あったらあったで便利。

syslog
ログを記録する。これが無いと普通は困る。

netfs
起動時にネットワーク系のファイルシステムをマウントする。samba(Windowsファイル共有)とかNFS(ネットワーク経由でファイルシステムをマウント)とかが関係あるらしい。使ってなければいらないっぽい。

network
その名のとおりネットワークの設定とか起動とかをしている。これがなければオフライン。

random
乱数を生成する。ゲームプログラマの命(謎)。基本的には残した方が無難。

rawdevices
rawデバイスをマウントする。残すか残さないかは微妙、、、っていうかどういうときに使われるのかがよくわからないので残してます。

pcmcia
PCMCIAカード(いわゆるノートパソコンとかに差すPCカード)を使う人は残した方がいいです。デスクトップなら普通いらないと思う。

saslauthd
RedHat9で始めて見た気がします。imapとかSMTP-AUTHとかのメール関係の認証で使うみたい。意図して使う人以外はOFFでいいと思う。

keytable
キーボードマップ(配列)を設定する。/etc/sysconfig/keyboardあたりの関係だと思う。ONじゃ無いとキーボード配列が狂うかも?

apmd
APM(Advancede Power Management)ユーティリティ。ノートパソコンのバッテリとかの監視がメイン。デスクトップでもUPSや電源OFF時のパワーOFFに関係するかも。

atd
crondと同じ指定時間にプログラムを走らせるもの。manを見るとcrondに統合されるべきだと書いてあるね。基本的に使われていない気がする。

gpm
コンソール用マウスドライバー。telnetなどでリモート接続して使うのが基本な人には不要。

autofs
NFSを使う人は使うようです。自動的にファイルシステムをマウントする。

iptables
パケットフィルタ。これはデーモンじゃない。電源を切ると設定が消えるので、それを起動時に読み込んでいるだけ。設定は「/etc/sysconfig/iptables」

irda
赤外線デバイス関連。使ったことがないのでよく知らないけど、使わない人はOFFでいい。

isdn
ISDNカード用接続スクリプトサービスだそうです。ISDN関連デバイスを付けてる人には関係あるのかな?

sshd
セキュアシェルデーモン。リモートシェル接続するもの。基本的にはtelnetと同じだけど、通信が暗号化されてより安全。

portmap
RPC(リモートプロシージャコール)接続に使うものだそうです。分散システム関連で使うと思うけど、それらしき機能を使わない人はOFFにしましょう。

nfs
NFS(Network File System)を使う人はON。ネットワーク経由でマウントしたりとかいろいろできるらしいけど、素人が適当に設定するとそこから侵入されたりします。

nfslock
NFSでファイルをロックするためのものだそうです。詳しくは知りませんがNFSを使わないならいらない。

sendmail
超有名なSMTPデーモン。デフォルトでONになっている場合が多いけど、ちゃんと設定されていないので動かない場合も多い。ちゃんと設定してないならオフにしましょう。メールの送信だけしかしないサーバなら速攻OFF(送信は/etc/resolv.confさえ設定すればOK)。

rhnsd
RHL版の自動apt-getサービス。aptを使うと簡単にパッチをダウンロードして当てられたりできる。企業で使う場合は便利かも?

crond
定期的にプログラムを実行するためのスケジューラ。基本的にログのローテーションなどにも使われてるのでONのままがいい。

anacron
crondは電源が切れていると実行されないけど、anacronは電源が切れてても、電源を入れた後にその間のスケジュールを実行してくれるらしい。基本的にONでいいと思う。

winbind
WindowsNTのドメインに参加するためのものらしい。Sambaを使って、さらにWindows側をドメイン構成にしている場合はONにした方がいいのかな。

xfs
X Window用のフォントサーバーらしいです。私はX Windowを使わない人なのでOFFにしてます。

xinetd
スーパーサーバです。よく知らない人でもよく知ってる人でも基本的にはONですね。

cups
プリントスプーラー。redhat-config-printerとかで使うらしい。

ntpd
ネットワーク経由で時計を合わせるもの。自分がクライアントになるならntpdateコマンドをcronでスケジューリングした方が安全。

firstboot
初期システム設定ユーティリティ。これも最近のディストリビューションになって入ってきたものらしいがよくわかりません。ちなみにデフォルトでOFFになってたのでそのまま放置。

canna、FreeWnn
両方とも日本語入力用のサーバですね。ちなみに私はリモート接続が基本なので、サーバ側の日本語入力は使いません。そういう場合はOFF。

snmpd
MRTGとかRRDTOOLとかのサーバの状態を監視するのに便利なデーモン。メモリの使用状況とか詳しく取得できるものです。基本的に監視用なのでそういうのを使わない人はOFFでもいい。市販のサーバ管理ツールとかはつかってるかもしれないので注意。

snmptrapd
snmpdはそこから情報をもらうことに対し、snmp trapは異常があると情報を発信するという役目を持っています。なので、このプロセスはそれを受信するもの…でいいのかな。UDP162番をOPENするそうなので、使わない人はOFFにした方がいいです。使う人も、設定を絞ったり、特定のIPからのみ受信するように設定した方がいいでしょうね。

iptables(2001/12/15)


 ※iptablesはipchainsよりも厳しくて、大文字小文字を厳しく見るので注意。

書式



iptables -ADC チェイン ルール オプション
iptables -RI チェイン ルール番号 ルールオプション
iptables -D チェイン ルール番号 オプション
iptables -LFZ チェイン オプション
iptables -NX チェイン
iptables -P チェイン ターゲット オプション
iptables -E 既存のチェイン名 新規チェイン名

操作



-A(Append)新しいルールの追加
-D(Delete)ルール削除
-R(Replace)ルールの置き換え
-I(Insert)ルールの追加
-L(List)一覧表示
-F(Flush)ルールを全て削除
-Z(Zero)カウンターリセット
-N(New Chain)ユーザ定義チェインの作成
-X(Delete Chain)指定したチェインにルールが無ければ削除。
-P(Policy)ポリシー設定
-E(Rename Chain)チェイン名変更
-s(source)パケット送信元IP
-d(destination)パケット送信先IP
-i(In Interface)パケットが入ってくるインターフェース
-o(out nterface)パケットが出てくインターフェース
-p(Protocol)プロトコルtcp、udp、icmp
-f(fragment)フラグメントする
-j(jump)ターゲット指定

INPUT、OUTPUT、FORWARD


 インターフェース(eth0など)から入ってきたパケットはINPUTチェインを通過し、内部プロセスで処理されます。内部プロセスから出力されるとOUTPUTプロセスを通過してインターフェースから出て行きます。内部プロセスを通らずに出て行く(ルーティングなど)場合はFORWARDです。

記述例)
iptables -P INPUT DROP(とりあえず入力パケットを破棄)
iptables -P OUTPUT ACCEPT(とりあえず入力パケットを許可)

※DROPはipchainsの時で言うDENYです(たぶん)。ここではREJECT(破棄ではなく拒否)は使えないみたい。
※「とりあえず」というのは、後ほどのルールで例外を指定できるからです。

設定確認



全部見る)iptables -L -n -v
部分的に見る)iptables -L INPUT

-vは詳細表示です。
※何故かNATとかマスカレードが見れません(T_T

とりあえずルールを全部削除



iptables -F

※多分ポリシーの方は消えません。ipchainsの時はそうだった。

ルールの追加


たとえば、192.168.1.1から192.168.1.2のssh(tcp22番)を許可する場合

iptables -A INPUT -s 192.168.1.1 -d 192.168.1.2 -p tcp –dport 1025:65535 –sport 22 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.1 -s 192.168.1.2 -p tcp –sport 1025:65535 –dport 22 -j ACCEPT

※1行目は上りのパケット、2行目はくだりのパケット。
※ちなみにTCP/IPは往復のセッションを貼らないと通信できない。一般的には往路(sshの場合は22番)のポートしか指定しないけど、復路のポート(1025〜65535から自動的に選定)の通信制御も必要になる。
 なお、iptablesは記述しなかった個所はanywhere(何でもOK)になる。「192.168.1.2のssh(tcp22番)を許可」という条件だけなら以下のような記述でもいける。

iptables -A INPUT -d 192.168.1.2 -p tcp –sport 22 -j ACCEPT
iptables -A OUTPUT -s 192.168.1.2 -p tcp –dport 22 -j ACCEPT

 ちなみにポートの指定(–dport、–sport)は必ず「-p プロトコル名」の後に指定する。

ロギング


 「-j LOG」を指定するとsyslog(/var/log/messages)に記録される。たとえばping等のICMPパケットを記録する場合。

iptables -A INPUT -p icmp -j LOG

なんでもかんでも記録する場合は以下でもいい。でも、ログに埋もれるので注意。

iptables -A INPUT -j LOG
iptables -A OUTPUT -j LOG
iptables -A FORWARDPUT -j LOG

マスカレード


 NAT、マスカレードのような機能を使用する場合は以下の設定をする。
/etc/sysconfig/networkに「FORWARD_IPV4=yes」
※「echo 1>/proc/sys/net/ipv4/ip_forward」でも可。
※最近のRedHatは記述方法が変わってた気がするけど忘れた。
 eth0がWAN、eth1がLAN、eth2がDMZとかの時、eth1とeth2からインターネットへアクセスしたいときは、eth0から抜けられるようにしなければならない。そのときは以下のように書く。

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

※「POSTROUTING」はパケットの出口の指定なので、インターフェースの指定は必ず「-o」になる(「-i」だとエラーになる)。

IP転送


 グローバルIP「123.123.123.123」に来たパケットを内部IP「192.168.1.1」にNAT変換する場合は以下のとおり。
※外部I/Fをeth0、内部I/Fをeth1とした場合。

iptables -t nat -A PREROUTING -i eth0 -s 123.123.123.123 -d 192.168.1.1 -j MASQUERADE

※なお、このときに外部から「123.123.123.123」というIPが見えなければならない。eth0のIPと異なる場合は、eth0に対してエイリアスを設定しなければならない。
※通常、eth0のエイリアスはeth0:0というI/Fになり、そこにIPが設定される。

注意


 iptablesの設定はOSを再起動すると消えてしまう。スクリプトを組むなりして、再起動後も有効になるようにしなければ意味が無い。
※最近のディストリビューションはこの辺の仕組みを組み込まれているので、マニュアルを読むといいかも。

TraceRoute(2002/02/22)


 クライアントからサーバまでの経路を調べる為のtraceroute(Windowsはtracert)というツールは以下の2つのパケットを利用しているらしい。
UNIX版
UDP(1025版以降?)

Windows版
ICMPエコーリクエスト(pingと同じ)。

ProFTPdの制限とか(2002/10/08)


帯域制限
RateReadBPS

接続制限
MaxClientsPerHost

繋がるけど遅い


 DNSの問題(ローカルIPの名前解決が出来ないとか)。
 113ポートが塞がれてる(サーバ→クライアント方向にTCP113:authへのセッションがある。iptablesなどでDROP設定だと遅い)。

繋がるけどダウンロードできない。


 サーバ→クライアントへの20番ポートが閉じてる。TCP/UDP両方必要?

nmapのOS推測(2002/10/18)


 ポートスキャンで有名なnmapにはOS推測という機能がついてるのは最近よく知られてると思います(nmap -O )。
 何故OSを推測できるかというのは、かなり複雑なんですが(興味がある人はinsecure.org読んでください)、その中で重要なのがTCPヘッダのウインドウサイズです。
 ってところまでは知ってたんですけど、今一ピンと来なかったけど最近よくわかった。
 TCP/IPは通信のセッションを開始する時に3wayハンドシェイクをします。これは、セッションを開始する為の要求(syn)と応答(ack)が以下のとおり3回の通信で行われてるからです。

  1. クライアント→syn(クライアントの要求)→サーバ

  2. クライアント←ack+syn(サーバの応答+要求)←サーバ

  3. クライアント→ack(クライアントの応答)→サーバ


 で、本題のウインドウサイズだけど、「2」のサーバからの応答(ack)の際にサーバのウインドウサイズがクライアントに対して送信されます。ウインドウサイズとは、サーバが受け取れるパケットのサイズです。ここでウインドウサイズを通知しないとクライアントは何バイトのパケットを送っていいのかわからないので必須のデータです。
 何故このウインドウサイズでOSがわかるかと言うと、ウインドウサイズはOSの種類によって異なるからです。
 これはかなり重要なことで、Linuxのカーネルのバージョンがある程度上がるだけでも変わるし、WindowsもNT系/9x系とでは違います。
 だから、nmapでスキャンをステルススキャン(-sS)して、IDSで検知されるような下手な小細工をするより、nmapのスキャン前のpingを殺して(-P0)、ポート番号を一箇所(たとえばHTTPなら-p 80)などとすると、ほとんど検知されずに対象サーバのOSが検知できるかもしれないかもね。

nmap -P0 xxx.xxx.xxx.xxx -p 80

 ただし、他人のサーバにスキャンする時は事前に許可を取りましょう。

ImageMagick/PerlMagickのインストール


 perlで画像処理を行う場合に便利なPerlMagickだが、FedoraCoreにインストールする場合ソースからだとかなり大変なので、yumでインストールしてみる。

# yum install ImageMagick
# yum install ImageMagick-devel
# yum install ImageMagick-perl

これだけ。

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>