L I n u x T i p s
■Courier-IMAP ( IMAPサーバをVine Linuxで実現する--Vine Linux 2.6 apt & tarボールから(自分でコンパイル))

courier-ImapをVineLinuxのaptからインストールをすると、IMAPパスワードとユーザパスワードが同じになる上に、プレインパスワードでしかアクセスできないみたいです。ユーザーパスワードとIMAP認証分離して、かつ、そのパスワードを暗号化したかったので、じぶんでコンパイルしていれました。

Vine Linuxで、IMAPを設定します。
http://lunatic.xrea.jp/pukiwiki/index.php?courier-imap
http://www-noblab.ces.kyutech.ac.jp/~ichihara/postfix_auth_imap.html
http://www.kyo-ko.org/knowhow/vine/memo11.html
http://www.f-bell.net/FreeBSD/courier-imap.html
を参考にしました。 とりあえず、aptで入れましょう

apt-get remove  imap
apt-get update
apt-get install courier-imap
これでとりあえず、ソフトは準備がそろったので設定ファイルを書いていきましょ う。

Courier-IMAPは、MailDir形式を必要とするソフトです。以前、FreeBSDで運 用していたときは、qmailだったのでまったく問題なかったのですが、今回は、 Vine Linuxなので、こんかいつかうMTAはデフォルトでPostfixだったりします。もちろ んqmailをいれることもできるのですが、入れるためにVineseedを付け加えると変になっ てマンドウなできごとになってしまうので、できるだけpostfixでいける方法を さがすことにしました。Postfixで、Maildir形式を扱う方法はPostfixの項目を御覧下さい。

これで、ntsysvでimapを起動するようにすれば完成です。

IMAPパスワードとUNIXログインパスワード分離

このまま、Courier-imapを運用できるのですが、セキュリティ上の要求でUnixのログインパ スワードとIMAPでメールを取るパスワードは別にしたいことが多いと思います。 これらに関しては http://www.mm-labo.com/computer/linux/courier-imap-security1.html が説明が詳しくて参考になります

基本戦略としてUNIXのパスワードとIMAPのパスワードを別にするには/etc/passwd系の パスワードと別のファイルをつくらなければなりません。たとえばID pika でUID GID 500 のimap用パスワードファイルをつくりたけれ ば

# /usr/share/courier-imap/sbin/userdb pika set home=/home/pika mail=/home/pika/Maildir uid=500 gid=500

uidとgidにかんしては、/etc/passwdに書いてあります。/etc/passwdを覗くと pika:x:500:500::/home/pika:/bin/bash となっているので、この500がuidとgidになります。gidとuidは大体は一緒です。 コマンドを実行すると、/etc/userdbというファイルができます。

さらに、IMAPに、/etc/passwdのかわりに/etc/userdbをつかうことを、 /etc/courier-imap/imapdのAUTHMODULES="authuserdb"にかえて

#/usr/sbin/userdbpw | /usr/share/courier-imap/userdb pika set imappw
# /usr/share/courier-imap/makeuserdb

しかし、IMAPパスワードとログインパスワードをわけたとはいえ、IMAPパスワードは平 文で流れていってしまいます。さらにここから, MD5で暗号化して認証する方法になります

CRAM-MD5で認証する方法

Cram-MD5でIMAP認証するには、Vineのaptではなくて、tarボールからいれることになります。 http://www.inter7.com/courierimap/courierimap.htmlで適当なバージョンをダウンロードして ください。とりあえずインストールします。2004年5月時点では,imapserverのバージョンは3.0.3でした。 その後、コンパイルしていれると

/usr/lib/courier-imap/etc/authdaemonrcにおいて(バージョンがふるいとimapdを編集 するとauthedaemonを編集するように書いてありますが、こっちにうつったようです。)

authmodulelist="authcustom authcram authuserdb authpgsql authpam"

でデフォルトで、このようになっています。これで、cram-md5で認証することが可能です。

つぎに、userdbに

/usr/lib/courier-imap/sbin/userdbpw -hmac-md5 |/usr/lib/courier-imap/sbin/userdb pika set hmac-md5pw

とすると、パスワードをきかれ/etc/userdbでmd5パスワードが設定されます。



とやっていくと大問題発生。両方のばあいでも、プログラムがたりないことが判 明。

■Postfix (SMTPサーバをVine Linuxで実 現する)

https://www.stackasterisk.jp/tech/systemConstruction/postfix01_01.jsp にて、ブロック図が表示されています。 また、Courier-IMAPに必要なMailDirの実現には、 https://www.stackasterisk.jp/tech/systemConstruction/postfix01_06.jsp にある通り3つの形式を選択できるようです。

http://www.miloweb.net/mail.htmlにあるとおり、WebMinでも設定できるようで す。上記のURLにのってるとおりやっていきます。うまくいかないときは /var/log/maillogあたりをみてエラーを確認していきます。

Courier-imapをつかいたかったら、Maildir形式でなければならないので、 /etc/postfix/main.cfで、home_mailbox = Maildir/の部分コメントアウトを取 り除いておきましょう。

■IP MASQ(複数のマシンでインターネット)

とりあえず、カーネルがサポートしているかみる。make xconfigあたりでみればいいだろう。NIC(ネットワークのカード)を2枚刺ししてちゃんと認識されているか確認。dmesgでみれるのでよかろう。されていない場合は、がんばるかモシクワ、財力にものをいわせて対応してるカードをかってくる。ここで、eth0は外につながるネットワークカード、eth1は、内につながるカードとする。つぎは、/etc/sysconfig/networkをみる。

NETWORKING=yes
FORWARD_IPV4="yes"
HOSTNAME="tomoyo"
GATEWAY="210.*.*.*"
GATEWAYDEV="eth0"

にするGatewayには、CATVとかでわりあてられたGateWayアドレスを入れる。kernel2.2とかでは、ipchainsというコマンドがつかわてるらしい。IP masquerading を有効にするには

% /sbin/ipchains -P forward DENY
% /sbin/ipchains -A forward -s 192.168.128.0/24 -d 0.0.0.0/0 -j MASQ


これで、192.168.128.0ー192.168.128.255の内から外へのパケット書き換えが有効になります。起動毎にrootになって、こいつを実行しつづければいいんですが、そいつはめんどくさいってことで
/sbin/ipchains_save > /etc/ipchains.rules

コマンドによって/etc/ipchains.rulesに保存されます。起動時に行うには/etc/rc.d/rc.localに

if [ -f /etc/ipchains.rules];then
		/sbin/ipchain
if


/sbin/depmod -a
/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_raudio
/sbin/modprobe ip_masq_irc
/sbin/modprobe ip_masq_autofw
/sbin/modprobe ip_masq_mfw
/sbin/modprobe ip_masq_portfw
/sbin/modprobe ip_masq_user
/sbin/modprobe ip_masq_vdolive
/sbin/modprobe ip_masq_quake

とかくだけ

Scanner (SCSI編)(Vine Linux)

Wxgserver (日本語入力)(kondara Linux) rpm -ivh wxg-1.0b-1.i386.rpm
とやると、libstdc++2.8ねーよぼけっていわれるので、
rpm -ivh libstdc++-compat-2.95.2-4k10.i586.rpm
とやる、libstc++については根性でみつけてくる。
その後、/etc/rc.d/init.dに、起動ファイルをぶちこまないとだめなので
cp /var/lib/wxg/sample/wxg /etc/rc.d/init.d
あとは、ntsysあたりで、cannaのサービスとめて、wxgのサービスをはじめて、再起動もしくわ、再起動ができないましんなら、cannnaプロセスを抹殺してから、wxgをすくりぷとからたてるかする。

Free Bsd Tips

qmail(MTA-メールサーバー用ソフト)

とにかく、qmailを入れる。最初の人はportsなどから入れるよりも、ちゃんと、ソースからコンパイルして、qmailrやらなんやらのユーザー設定をやっておくと、苦労がわかっていいかもしれない。よくわからんひとは、とにかくportsで、ports前提での話です。

とりあえず、sendmailをとめる。/etc/rc.confに
sendmail_enable="NO"

ともかく/var/qmail/controlにうつる。そこにme,locals,defaulthost,locals,rcpthosts をつくる。各々には、
/var/qmail/control/me
/var/qmail/control/locals
/var/qmail/control/defaulthost
/var/qmail/control/defaultdomain
/var/qmail/control/rcpthosts

各々に関して、

me(自ホスト名)
ww.gaeru.com

locals(localに配送すべきメールアドレス)
mail.gaeru.com
ww.gaeru.com

rcpthosts(配送を許可するホスト)
mail.gaeru.com ww.gaeru.com

ここで一番重要なのが、rcpthosts(ほかも重要だけど)。こいつを書いてないと、他のサーバーに迷惑をかけてしまう。書いてなくても、とどくので、安心してしまうが、それでは駄目。ちゃんと書くこと。転送を許可するホストって意味だけど。つまり、それを受け取れるってこと。 ついでに、tcpWrapperを設定しなければだめで、/etc/hosts.allow に、
tcp-env: ALL :allow


を加えておく。

つぎにメールをリレーするときの設定。 hosts.allowの中を書き換える。 たとえば、192.168.1.の中からリレーメールしたい場合は、/etc/hosts.allowに

tcp-env: 192.168.1. : setenv = RELAYCLIENT

と加える。setenv= RELAYCLIENT をつけくわえると、リレーが許可される。まちがって も、tcp-env:ALL : setenv = RELEAYCLIENTなんてしないように。すべてのホストからリレーを許すと、あけるとあっというまにやられるので注意。AirH等で、外から家のサー バ経由でメールを出したい。AirHでもらったIPアドレスが210.1.1.2だとすると

tcp-env: 210.1.1.2 : setenv = RELAYCLIENT

と加えてみるのがよい。IMAPと組み合わせると便利この上なし。いま欲しいのはマックアドレスによるフィルタリング。だれか知らない?

fml(メーリングソフト用ソフト)


NAT(複数のマシンでインターネットするために)4.3-Release

Natで、複数のマシンで、ネットを共有する。IPMASQの方が、パケットの中を判断するので、Natよりはレイヤーが一つ上になるのか?(なぞ)

まずNatdを動かすには、カーネルのコンパイルが必要。

options IPFIREWALL
options IPDIVERT

以上の行をくわえて、コンパイルする。その後、/etc/rc.conf

firewall_enable="YES"          
firewall_type="OPEN"           
firewall_quiet="NO"            
natd_enable="YES"              
natd_interface="pika0"            # ここには、インターネット側につながってるデバイスいわゆる、外側のNICを指定してやる
natd_flags="-dynamic yes"      

これでNatはできあがりのはず。

参考にすべきページ

■Daichi Goto Information Station -FreeBSD-

(http://www.ongs.net/daichi/freebsd/index.shtml)


DHCP Serverの設定 3.X 4.X共通(かな?)

まずはdhcpサーバー用のソフトがはいってることを確認すべし、(/var/db/pkgあたりみる)はいってなければ、portsかパッケージでインストール。wide-dhcpを入れないと、DNSやらを自動でとってこない。(はず)

すると、/etc/dhcpdb.pool/etc/dhcpdb.relayてのができる。(なければ、touchでつくってね)/etc/dhcpdb.relayは何もかかなくていいが、/etc/dhcpdb.poolには

 global:!snmk=255.255.255.0:tmof=32400:
 #
 #       "global"というエントリで全体的な設定
 #               tmofってのが多分、英国との時間差
 #
 internal:tblc=global:rout=192.168.1.1:\
         :brda=192.168.1.255:\
         :dnsv=211.0.138.67
 #
 #       "internal"というエントリをつくる
 #               全体的な設定globalを参照する
 #               ルーターは192.168.1.1に
 #               brda は、クライアント側のブロードキャストアドレス
 #               dnsv は、ネームサーバーアドレス
 #
 # 下にDHCPで使うアドレスをかいておく。
 #
 200: :ipad=192.168.1.200:dfll=3600:maxl=7200:tblc=internal:
 201: :ipad=192.168.1.201:dfll=3600:maxl=7200:tblc=internal:
 202: :ipad=192.168.1.202:dfll=3600:maxl=7200:tblc=internal:
 203: :ipad=192.168.1.203:dfll=3600:clid="0x0120312301ab"maxl=7200:tblc=internal:
 # ipad はIPアドレス dfllは有効期限(秒)maxlは最大の有効期限:clidはMACアドレスを指定できる
 #MACアドレスが合わないと、IPアドレスをわたさない。ただしMACアドレスは16進数

まだまだで、カーネルのコンパイルが必要、

pseudo-device bpf 4 #Berkeley packet filter

を、加えてコンパイル。その後、/devで、

./MAKEDEV bpf0 bpf1 bpf2 bpf3

にする。あとは、/usr/local/etc/rc.d/dhcpd.sh.sampleを/usr/local/etc/rc.d/dhcpd.shに変えて、中を編集。その中の

[interface]→fe1###自分の使ってる内部側のNIC、つまり、クライアントとつながるNIC######

とか、自分のNICをいれて、実行権あたえてめでたく完了。

参考にすべきページ

■Daichi Goto Information Station -FreeBSD-

(http://www.ongs.net/daichi/freebsd/index.shtml)


KDE上でsylpheedの文字化けを直すには

原因としては、.gtkrcのなかのFontset設定不良。つーわけで、/usr/X11R6/share/themes/Default/gtk/gtkrc.jaより、自分のホームにコピーその後、kdeコントロールセンターで、非KDEアプリにもフォントとかを適用の部分のチェックをはずして、X再起動。


rs-232cを使う

rs-232cとはすでに絶滅寸前だが非常にべんりな、シリアル通信の手段。ほかのデバイスを操作するさいに良く使われる。 現在はUSBにおきかわりつつあり、USBはメンドウッポ。
ともかく、もっとも簡単なプログラムを以下に示す。

#include 

#define COM  "/dev/cuaa0"

//Linuxでは/dev/cua0

main(int argc, char* argv[])
{
  int fd_out;
  char buffer;
  struct termios targ;   
  if ((fd_out = open(COM, O_RDWR)) < 0) {
   perror(COM);
   exit(1);
   }
   
   
 tcgetattr(fd_out ,&targ);
 memset(&targ,0,sizeof(targ));
      
 targ.c_cflag = B9600|CS8|CLOCAL|CREAD; //9600 8bit 
 targ.c_iflag = IGNPAR;
 targ.c_oflag = 0;
 targ.c_lflag = 0;
 targ.c_cc[VTIME] = 0;
 targ.c_cc[VMIN] = 1;
 tcsetattr(fd,TCSANOW,&targ);
 write(fd_put,"aho",3);
 
 while(1)
 {
 read(fd_out,&buffer,1);
 putchar(buffer);
 }

}

上記は、FreeBSDでCOMポートからAHOと言うも文字を出力するプログラム。これは送 信だけするもの。受信は別にかいてやらなければ成らない。反対にいえば、受信と送信はべつべつに扱えるというわけである。 また、受信待ちをする場合などは、一番簡単な方法としては、while()でむすんでやる ことだが、この方法はcomポートになんらかのデータが流れてくるまでまってしまうの でお薦めできない。本来はselectを使うべき。

たとえば、USBにシリアルを増設するものをかってこれば、/dev/cua0の部分を /dev/ttyUSB0とかにおきかえればOK。ついでにLinuxでの注意点だが、/dev/cuaa0の部 分を、/dev/cua0にするか、あたらしいバージョンならきっと/dev/ttyS0にしろゴルァ と怒られる。その点だけの違い。もちろん、細かい設定をつめていって、ボーレート等 をあげることもできるが、そんな用途ではRs-232cをつかことは今はないだろうから割愛。

追記

変更点があります。RS-232cのドライバICをつかわずに、適当に74シリーズで、TTLから RSー232Cにレベルコンバートした場合この指定をしないとうまくうごきませんでした。

tcgetattr(fd_out ,&targ);
memset(&targ,0,sizeof(targ));
  
targ.c_cflag = B9600|CS8|CLOCAL|CREAD;
targ.c_iflag = IGNPAR;
targ.c_oflag = 0;
targ.c_lflag = 0;
targ.c_cc[VTIME] = 0;
targ.c_cc[VMIN] = 1;
tcsetattr(fd,TCSANOW,&targ);

適当なことばかりやってると、あとで痛い目をみるので、ちょっとしらべるといいサイ トがゴロゴロでてきました。

http://members9.tsukaeru.net/yono/paso/serial/serial01.htm
http://www.linux.or.jp/JF/JFdocs/Serial-HOWTO.html

The Linux (http://www.linux.or.jp/JF/JFdocs/Serial-Programming-HOWTO.html)
Windows Tips
Windows2000でMS-DOSな起動フロッピーをつくる。
gaeru@yahoo.co.jp