Linuxユーザの立場から、役立つ情報や困ったときの解決方法を分かりやすく、かつ簡潔に記事にまとめています。主に、Ubuntu 8.04(→9.04)やCentOS 5.2(→5.3)で確認したことですが、他のディストリビューションでも応用できると思います。内容は(1)設定ファイルの書き方(2)役立つソフトウェア紹介やインストール方法(3)便利なコマンドの使い方や活用例(4)困ったときの解決方法です。このページの末尾にキーワード別で記事を分類してあります。また、真上の「ブログ検索」フォームからブログ内の記事を検索できます。

2009年6月18日木曜日

ISPのメールサーバにリレーする方法 このエントリーを含むはてなブックマーク

本記事では、自分で構築したメールサーバから、ISPのメールサーバに、メールをリレーする方法をまとめる。

試した環境は、構築したメールサーバ(postfix on centos 5.3)、ISPはeo光(メールサーバはSASL認証が必要、サブミッションポート使用)。以下のパッケージをインストールして、基本的な設定が済んでいることが前提(詳しくは、メールサーバ構築参照)。

cyrus-sasl-2.1.22-4
cyrus-sasl-lib-2.1.22-4
cyrus-sasl-plain-2.1.22-4
postfix-2.3.3-2.1.el5_2

用語説明

SASL認証、OP25B、サブミッションポートなどの情報は以下を参照のこと

概要

メールサーバを自前で立てる場合、配送するメールは、他のメールサーバに中継してもらい、宛先に届けられる。近年は、メールスパム対策のため、メール転送に利用される25番ポートを制限されるようになった。その代替ポートとして587番が使われ、他のサーバに中継してもらうには認証が必要になるというもの。

注意点

今回は、自前で立てたメールサーバはクライアントとして、他のメールサーバにメールを中継してもらう場合を扱う。他のメールサーバやメールクライアントからのメールを中継する機能を持たせることもできるが、扱わない。後者の場合は、自前で立てたメールサーバは、SASL認証のメールサーバということになるが、今回は扱わない。あくまで、今回は(ISPの提供する)SASL認証のメールサーバに、メール中継を依頼するメールサーバの設定についてである。

設定方法

まず、認証に必要になるアカウント、パスワードの設定ファイル(/etc/postfix/sasl_passwd)を作成する。次のような書式にする。

saslauth.xxx.jp:587   foo.baa:hoge

saslauth.xxx.jpはISPのSMTPサーバで、587はそのポートである。foo.baaはアカウント名で、hogeはパスワードである。eo光では、saslauth.eonet.ne.jpの587ポートである。アカウント名は、POP IDにする(@の前の部分かと勘違いしていたが、そうではなくても、POP ID=受信メールアカウントなるものが存在して、xxxx%yyy.eonet.ne.jpというフォーマットであるので、要注意!)。パスワードは、POPパスワードである。

生パスワードを書き込んでいるので、パーミッションと所有権を変更しておく。そして、これをデータベースに登録する。

# chmod 600 /etc/postfix/sasl_passwd
# chown root. /etc/postfix/sasl_passwd
# ls -l  /etc/postfix/sasl_passwd
-rw------- 1 root root 60 Jun 18 00:00 /etc/postfix/sasl_passwd
# postmap  /etc/postfix/sasl_passwd

次に、postfixの設定ファイル(/etc/postfix/main.cf)を編集して、saslauthの設定を書き込む。ここで、上の「注意点」で触れたことに注意。sasl認証メールサーバを構築の場合はsmtpd_sasl....(dが付いている)というパラメタを設定する必要があるが、ここではsmtp_sasl...(dが付いていない)であることに注意!また、relayhostの部分は、自分が利用しているISPで指定されているメールサーバにすること。

relayhost=smtpauth.eonet.ne.jp:587

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = plain, login, cram-md5

smtp_sasl_mechanizm_filterの部分は、OP25B対策で説明されているように、telnetでrelayhostに接続して確認するという良い。

# telnet smtpauth.eonet.ne.jp 587
Trying xxx.xxx.xxx.xxx...
Connected to smtpauth.eonet.ne.jp (xxx.xxx.xxx.xxx).
Escape character is '^]'.
EHLO smtpauth.eonet.ne.jp <---入力
250-PIPELINING
250-SIZE 20000000
250-ETRN
250-AUTH CRAM-MD5 LOGIN PLAIN
250-AUTH=CRAM-MD5 LOGIN PLAIN  <---確認
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
QUIT

次に、設定ファイル/etc/postfix/master.cfで、次の部分をコメントアウトする。

submission inet n       -       n       -       -       smtpd
  -o smtpd_enforce_tls=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

動作テスト

後は、postfixをリロードして、どこかにメールを送ってみて、届くかどうか確認する。

# /etc/rc.d/init.d/postfix reload
Reloading postfix:                                         [  OK  ]
# mail xxx@gmail.com
Subject: test
test
.
Cc: 
# tail /var/log/maillog
....

参考サイト

2009年6月17日水曜日

socksサーバ経由でSSH接続する方法 このエントリーを含むはてなブックマーク

本記事では、socksプロキシ経由で、リモートホストにSSH接続する方法をまとめる。

試した環境の詳細は、以下の図のように、LAN内にあるクライアント(Ubuntu 9.04 on ThinkPad X31)で、Socksサーバ(Socks5プロトコル、認証なし)を経由して(LANを出て)、リモートホスト(centOS 5.3 on ThinkCentre S50)にSSH接続した。

使用したsshは、以下の通り。

$ ssh -v
OpenSSH_5.1p1 Debian-5ubuntu1, OpenSSL 0.9.8g 19 Oct 2007

まず、以下のファイルを作成して、~/.sshにconfigという名前で配置する(無ければ、.sshディレクトリを作成する)。リモートホスト(foo.bar.net)のhogeというアカウントに、SOCKSサーバ(socks-proxy.xxx.jpの1080ポート、認証なし)を経由して、SSH接続することを意味している。foo.bar.net.socksは、このプロファイルのための名称なので、この通りでなくても良い。

Host foo.bar.net.socks
 HostName foo.bar.net
 User hoge
 Port 22
 ProxyCommand /usr/bin/connect -a none -S socks-proxy.xxx.jp:1080 %h %p

ちなみに、connectがなければインストールする。connectは、SOCKS4あるいは5、httpトンネルを使って、TCP接続を確立するためのツールである。

$ sudo apt-get install connect-proxy

Ubuntu 9.04では、デフォルトで/usr/binに実行ファイルが配置されるので、上のconfigファイルにはそのように書いてある(そうでないならば変更すること)。

$ which connect
/usr/bin/connect

connectコマンドの詳細は、SSH Proxy Command -- connect.cを参照のこと。

当然、リモートホストには、hogeというアカウントが存在し、かつ、sshによる接続が許可されていなければならない。うまくいかないときは、iptables、tcp wrapperなどでアクセス制限がされていないか確認すること。また、sshdが動いていることも大前提。また、クライアントはSSH接続するとき、デフォルトで~/.ssh/configを読み込むが、システムによってはそうでないかもしれない(/etc/ssh/ssh_configを参照のこと。sshd_configと間違えないように!)。

今回は、RSA認証でリモートホストにSSH接続するので、その設定もできていること(詳細は、SSHサーバの設定を参照のこと)。

以上の準備の下で、次のコマンドを実行し、SSH接続を確立する。

$ ssh foo.bar.net.socks

以下に参照サイトを列挙する。

2009年5月22日金曜日

ssh接続エラーの原因 このエントリーを含むはてなブックマーク

ssh接続を試みたときに、以下のようなエラーが出て接続できないことがあったので、その原因を書いておく。

#  ssh hoge@foo.bar.net
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:25
RSA host key for xxxxxxx has changed and you have requested strict checking.
Host key verification failed.

接続先ホストは以前、ssh接続をして作業していたマシン。このマシンのOSを再インストールして、再びssh接続してみようと試みていた。以前の情報が接続元ホストの~/.ssh/known_hostsに残っていて、今回、同一の接続先ホストなのに情報が異なる!といってエラーが出ていた模様。したがって、接続元ホストの~/.ssh/known_hostsを削除して、接続を試みると問題が解決された。

yum updateでエラー このエントリーを含むはてなブックマーク

本記事では、centOSでyum updateをするとiterable argument requiredなどというエラーの解決策をまとめる。

ネットで調べてみると、yum clean allやrpm --rebuilddbなどをすると良いとか、yum関連のパッケージを削除して、再インストールしてみると良いなどといった情報があった。これらを試してみたがダメだった。

ところが、Fedora JP BBSに載っていた情報に従うと解決した。それに依れば、http_proxyの環境変数の設定を適切に直すと良いというものだった。

http_proxy="proxy.xxx.net:8080"などと.bashrcで登録していたが、http_proxy="http://proxy.xxx.net:8080"に直すとうまくyum updateできた!

2009年4月15日水曜日

ポート番号からプロセスを調べる。 このエントリーを含むはてなブックマーク

ポート番号から、そのポートを使用しているプロセスを調べる方法をまとめる。

lsofコマンドで、iオプションにポート番号を指定すればよい。22番ポートを調べると、sshが使用していることが分かる。

$ lsof -i:22
COMMAND   PID     USER   FD   TYPE DEVICE SIZE NODE NAME
ssh       10359   foo    3u   IPv4 27461       TCP foo.net:35715->baa.net:ssh (ESTABLISHED)

複数のポートを調べたいときは、コンマで区切る。

$ lsof -i:22,25

参考にしたサイト:特定のポートをオープンしているプロセスを調べるには

キーワード

キーワード別に記事を分類してあります。クリックすると各キーワードに該当する記事たちが表示されます。

過去の記事

筆者について

自分の写真
趣味はコンピュータ、音楽、写真などです。