Linuxを極める4
自宅で立てているLinuxサーバのS/W側の話である。前はWindows+VirtualPCで専用サーバを立てていたのだが、HDDのクラッシュとともになくなってしまった。最近はメインで使っているマシンにVirtualPCだったが、VMware Playerが出たのでそれを試してみた。
LinuxではSSHでリモート管理、DNSキャッシュサーバ、ルータのSYSLOGを受け、外からhttptunnelで秘密のポートでSSH接続できてホストのWindows側へリモートデスクトップ接続を行え、もちろんSCPでファイル転送も可能、SambaでWindowsからファイル共有でき、WINSサーバを動かして、VSNTPでWindows側と時刻の強制補正を行っている。
- VMware Player
Player自体はここからダウンロードしてインストール。
そこに適当な仮想マシンで起動してLinuxをインストールしていく。
ここからRAC.zipと適当なサイズのディスクを入手する。
vmxをエディタで開いて適当に編集する。
最低限ethernet1.とscsi1:の行を消して、vmdk(仮想ディスク)のパスを変更すればよい。
うちではネットワークはブリッジにしている。
- Redhat9インストール
LinuxブートCDをホストマシンにセットして、vmxを起動するとCDブートしてくれる。(BIOSでCDROMのブートを先にしないといけなかったかも)
あとは普通にインストールすれば終了。
今回はXは使わないのでGUI関係は一切インストールしない。LANはあらかじめアドレスなどを設定しておく。
- LAN設定
自動的に認識され、アドレスも振られている。
/etc/sysconfig/network 自分のホスト名
/etc/sysconfig/network-scripts/ifcfg-eth0 IPアドレスなど
/etc/hosts 自分を含めて名前を書く。
/etc/resolve.conf デフォルトゲートウェイを書く
- ユーザー追加
useradd user名
passwd user名
- SSH
インストール時にチェックを入れていれば、インストールされ、設定もなく使用可能。
設定は/etc/ssh/sshd_config。
Protocol 2
PermRootLogin no
AllowUsers user名 ...
クライアント側はTera Term + TTSSHを使っている。PuTTYとかWinSCPも使える。
- SSHバージョンアップ
openssh3.9にする。しかし正直よくわからん。面倒が嫌ならばちゃんとしたサポートのあるLinuxにしろってことか。RedHatではrpmを使ってないと後ではまりそうだが。
zlibコンパイル&インストール
tar zxvf zlib....tar.gz
./configure
make
make install
opensslコンパイル&インストール
tar zxvf openssl...tar.gz
./config
make
make install
opensshコンパイル&インストール
tar zxvf openssh...tar.gz
./configure --with-zlib=/usr/local/lib --with-ssl-dir=/usr/local/ssl
make
make install
/etc/init.d/sshd変更
/usr/bin->/usr/local/bin
/usr/sbin->/usr/local/sbin
- DNSキャッシュ
/etc/named.confのoptionsに次のものを追加。
forwarders{xx.xx.xx.xx; xx.xx.xx.xx}; ISPのプライマリ/セカンダリDNSサーバ
allow-query {xx.xx.xx.0/24;127.0.0.1/32;}; 問い合わせを許すサーバ
rndc dumpdbでキャッシュの内容をファイルに出力
ファイルは/var/named/chroot/var/named/data/cache_dump.db
- ルータのSYSLOGを受ける
/etc/sysconfig/syslog
-r -m 0追加
/etc/syslog.conf
user.* /var/log/router.log
/etc/logrotate.d/syslog
/var/log/router.log追加
/sbin/chkconfig named on
- SAMBA
/etc/samba/smb.confを編集する。私はWINSサーバ機能も入れている。
[global]
netbios name = XXXX
workgroup = XXXX
hosts allow = x.x.x. 127.
max log size = 100
localmaster = no
wins support = yes
;client code page = 932
;coding system = euc
passdb backend=tdbsam
パスワード設定
pdbedit -a username
自動起動設定
/sbin/chkconfig smb on
- 外からのSSH
- 外からのRDC
httptunnelをインストール。
展開
gzip -dc http....tar.gz|tar -xvf -
コンパイル&インストール
./configure
make
make install
/etc/rc.d/lに次の起動コマンドを追加。ポート8888に来たバケットをlocalhostのportに送る。
/usr/local/bin/hts -F localhost:port 8888
クライアント側
portに来た要求をproxy経由でserverの8888ポートに送る。serverはFQDNで指定。
htc -F port -P proxy:proxy_port server:8888
使いたいツールでlocalhost:portに接続する。
ちなみにSSHはポート22、RDCはポート3389である。
- 不要なサービスを止める
/sbin/chkconfig --list
/sbin/chkconfig xxxx off
netfs
autofs
portmap
nfslock
xfs
pcmcia
isdn
sendmail
rhnsd
canna
FreeWnn
gpm
atd
sgi_fam
apmd
random
rawdevices
- ダイナミックDNSの更新(ddo)
更新するスクリプトを作成する。
/usr/bin/wget -O $HOME/http/dds.html 'https://free.ddo.jp/dnsupdate.php?dn=name&pw=password'
これをcrondで定刻に起動する。
crontab -e
03 * * * * /home/user/bin/ddns.up
- ダイナミックDNSの更新(mydns)
更新するスクリプトを作成する。
/usr/bin/wget -O $HOME/http/mydns.html --http-user=name --http-password=password 'http://www.mydns.jp/login.html'
これをcrondで定刻に起動する。
crontab -e
33 * * * * /home/user/bin/mydns.up
- SCP
WinSCPというWindows用のSCPクライアントGUIツール。SSHDの設定をしてあれば、それ以上のサーバ側での設定は必要ない。WinSCP3ではSFTPが使えてバックグランドで転送できて日本語表示が可能になった。SFTPではレジュ−ム転送(切れても続きから転送してくれる)が行える。
また右クリックメニューにWinSCP3に送るがあり、SentToのショートカットでWinSCP3.exe session /uploadのように保存したセッションの名前を追加しておくと、ファイル指定→右クリック→送るでファイルを送信することが可能になる。
- RDC on SSH
基本的にはサーバ側には設定変更は不要。
Windowsクライアント側ではPUTTYを使う。ホスト名を入れ、プロトコルをSSHにし、Connection-SSHでSSH2を選択し、TunnelsでL3389 フォワード先ホスト:3389に設定して、Openする。ユーザ名、パスワードを入れると普通にシェルが立ち上がる。だが裏では3389ポートでLISTENしている。リモートデスクトップ接続でlocalhost:3389につなぐと、そのまま接続できる。WindowsXP Proではlocalhostには接続できないが、mstsc*を別ディレクトリにコピーして、互換モードでWindows98/Meにして起動すると回避できる。
またputtyはstored sessionとして設定を保存でき、PUTTY.EXE @labelで自動的にロード・接続ができるのだが、@の関係でショートカットに入れてもうまくいかない。バッチファイルに記述するとこれはうまくいく。
- 時刻合わせ(1)
dateで出てくる時刻(いわゆるシステム時刻)がどんどん遅れる。1時間で数十分とか。hwclockは合っている。シャットダウン時のスクリプトでhwclock --systohcが実行されて上書きされるので再起動しても累積されていく。ホストのクロック変動の影響で間隔が一定でないとか期待するだけの割り込み頻度で割り込みを上げられないためにシステム時刻がおかしくなる...らしい。
これはVMwaretoolsをインストールしてやれば解決する。x64版も用意されている。(※進む場合は解決しない)
tar -xvzf VMwateTools-....tar.gz
./vmware-install.pl
デフォルトのままインストールする。
時刻を合わせる。date 12042210
rm /etc/adjtime
シャットダウン。(ダウンスクリプトでhwclock -systohcが実行される)
vmwareの設定ファイル〜.vmxの中に次の行を追加or変更してブートする。
tools.syncTime = "TRUE"
数分程度の頻度でシステム時刻をhwclockに合わせてくれるようだが、秒単位の正確性は無理。多いときには1分くらい遅れている。
それでもだめなら/boot/grub/grub.confでkernel行に起動オプションを追加。
divider=10 clocksource=apci_pmとかpmtmrとか
私はvmware-toolsを入れ、cron.hourlyでhwclock --hctosysを実行することにした。(その直後にDynamic DNSの更新を行うことでDDNSのログの時刻が合う)更に/etc/init.d/haltのhwclockを行う行をコメントに。
- 時刻合わせ(2)
早くなるとき。VMwaretoolsでは時計を戻す方向へは修正してくれない。
まず上の変更は元に戻しておく。
C:\ProgramData\VMware\VMware Server\config.iniを編集して以下の行を追加する。CPUクロックはその環境での最大クロックを指定する。
host.cpukHz = 3600000
host.noTSC = TRUE
ptsc.noTSC = TRUE
- 時刻合わせ(3)
その1
adjtimex --compareを使ってシステムクロックのカウントを調整する。
adjtimex --compare=10 --interval 60
を実行。
suggested に出た値をtick/freq値として、
adjtimex -t tick値 -f freq値
でカウントを補正する。
これを何度か繰り返してみる。
更にrc.local辺りに同じものを書き、起動時に入るようにする。
その2
adjtimex --reviewを使ってシステムクロックのカウントを調整する。
/var/log/clock.logを消す
adjtimex --log --host ntp.nict.jp; sleep 100;adjtimex --log --host ntp.nict.jp
adjtimex --review
を実行。
--reviewでsuggested に出た値をtick/freq値として、
adjtimex -t tick値 -f freq値
でカウントを補正する。
これを何度か繰り返してみる。
更にrc.local辺りに同じものを書き、起動時に入るようにする。
vmware server上ではクロックが安定しないようで、がんばってみてもあまり効果がみられない。
- 時刻合わせ(4)
ntpdで合わせる。
/etc/ntp.conf を編集する
適当なntpサーバーを指定(-4はIPv4強制)
server -4 ntp.nict.jp
server ntp.jst.mfeed.ad.jp
server ISPの提供するntpサーバ
# server 127.127.1.0
# fudge 127.127.1.0 stratum 10
後ろにminpoll 6 maxpoll 10とか書くことができる。サーバに問い合わせる間隔を2^6=64秒〜2^17=36時間くらいまでの可変になる。(デフォルトは6と10)
ここで時刻を手で合わせる
ntpdate -4 ntp.nict.jp
CMOSクロックにセット
rm /etc/adjtime
hwclock --systohc
/etc/ntp/step-tickers にntpサーバ名を書いておくと、サービス起動時に時刻を強制変更してくれる。
サービス起動
chkconfig ntpd on
service ntpd start
状況確認
ntpq -p
→しかしあまりうまくいかない。クロックの変動が大きいので補正しきれずに強制変更されることが度々起こる。
adjtimexで時計を遅れ気味に設定し、vmware-toolsの時刻同期で合わせるのがよさそう。
- 時刻合わせ(5)
最終的には adjtimexで時計を遅れ気味に設定し、vmware-toolsの時刻同期で合わせ、ntpdで仮想H/Wクロック(=ホストOS時計)に合わせるようにしている。
ホストWindows側ではntpd.exeを使ってタイムサーバーの時刻に同期させる。設定は上記と同様。
ゲスト側は/etc/ntp.confで
server 127.127.1.0
のみにしてntpd起動。
これでほぼ正確になる。
- UTF8
RHEL4では漢字はUFT-8になっている。端末(TeraTerm)設定でUTF-8に変更してやればよい。
- 電源
まあsuspendにしておけば問題はないだろう。
- proxy
インストール
rpm -ihv squid....
設定
/etc/squid/squid.conf
http_port 8080
acl allowsrc src 192.168.1.0/255.255.255.0
http_access allow allowsrc (deny allの前)
visible_hostname hostname
起動
service squid start
起動ログ確認
/var/log/squid/squid.out
自動起動
chkconfig squid on
- stone
実行モジュールの作成
tar zxvf stone-2.3d-...tar.gz
make linux-ssl
サーバ側の起動 - sportでの接続をhost:portに転送
stone host:port sport
クライアント側起動 - portへの接続をproxy経由でserver:sportに転送
stone proxy:8080/http port "CONNECT server:sport HTTP/1.0"
- stoneのSSL暗号化
秘密キーと証明書の作成
#openssl req -new -outform pem -out stone.cert -newkey rsa:1024 -keyout stone.key -nodes -rand ./rand.pat -x509 -batch -days 356
#cat stone.cert stone.key > /usr/share/ssl/certs/stone.pem
サーバ側起動
#stone host:22 443/ssl
クライアント側起動 - 10022への接続をssl暗号化して10443に出し、10443で受けたものをproxy経由でserver:443に転送する
#stone localhost:10443/ssl 10022 -- proxy:8080/http 10443 "CONNECT server:443 HTTP/1.0"
Windowsの場合もオプションは同様だが、デフォルトのキーファイルがないと言われる。c:\usr\local\ssl\certs\stone.pemとそれっぽい場所を作って置くか、次のようにオプションでファイルを指定する。
C:\> stone -z key=c:\stone\stone.key -z cert=c:\stone\stone.cert localhost:10443/ssl 11022 -- proxy:8080/http 10443 "CONNECT server:443 HTTP/1.0"
- iptables
フィルタリングにはiptablesを使う。これまたbind並に難しいので触りだけ。
今の設定を見る
#iptables -L
設定(ルール)をクリアする
#iptables -F
デフォルトをすべて破棄にする
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -P FORWARD DROP
入力フィルタを追加する
#iptables -A INPUT -i eth0 -p tcp --dport 53 -j ACCEPT
#iptables -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT
#iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
...
出力フィルタを追加する
#iptables -A OUTPUT -o eth0 -p tcp --syn -j ACCEPT
#iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
...
ルールをセーブする
#service iptables save
再起動してみる
#service iptables restart
注意事項:
iptablesの起動時には/etc/sysconfig/iptablesファイルを読んでくれる。service iptables saveを行うとこのファイルを作る。saveせずにrestartすると設定を更新せずに再起動するので、設定した内容がなくなってしまう。
上記-m stateのものはTCPコネクションが張れたパケットを通すことを示す。
- crondの出すメッセージが/var/log/messageを埋め尽くしてうっとうしい
/etc/syslog.conf
*.info;mail.none;authpriv.none;cron.none /var/log/messages
の行を
*.info;mail.none;authpriv.none;cron.none;auth.!=info /var/log/messages
に変更、
auth.info /var/log/authinfo
を追加。
※crondの出すメッセージはauth.infoのため、最初の方でauth.infoはmessagesに出さないように、後の行でauth.infoはauthinfoファイルに出すように変更する。
更にこのauthinfoファイルをログローテートに加える。
/etc/logrotate.d/syslog
の最初の行に/var/log/authinfoも入れる。
・2005年11月2日
-
VMware Player
今までVirtual PCを使っていたのだが、VMware Playerが無料で使用できるようになったので、試しに使ってみた。本当ならばVirtual PCの仮想マシンVMCを読み込めることになっているのだが、うまくいかなかった。
そこで適当な仮想マシンと空のディスクを探し出してダウンロードし、vmxを編集した。isoからの読ませ方がよくわからない(切り替え方がわからない)ので、CDブートしてLinuxをインストールした。
サスペンドは使えるしVirtualPCよりちょっと速いしでいいのだが、isoイメージの使い勝手とか微妙に使いにくい部分も見られる。まあフリーなんだから仕方ないのだろうが。せめてイメージの入れ替えくらい簡単になってもらいたい。私はサーバーとして使うだけなので関係ないけど。
まあViertulPCから切り替える必然性はないが、無料で使用できるってのは大きいだろう。
・2006年9月4日
-
VMware Server
無料になったということでServerに切り替え。ログインする前に起動してくれるしウインドウも取らずに裏で動いてくれるので非常にありがたい。
・2007年2月21日
-
RHEL4 x64
ホストが32ビットでも、ゲストでx64版が動くようなので、試しにインストール。以後使い続ける。
・2007年12月2日
-
Proxy & iptables
某所でFreeBSDのサーバが死んだため、復旧はRedHatで行うことに。Proxyとiptablesが必要となり、導入や設定を調べるためにこのサーバにも入れてみた。あとstoneも。
・2008年10月10日
-
x86に変更
今すぐに変更する必要はなかったのだが、ゲスト上のx64 Linuxをやめてx86版でインストールしなおした。今はホストマシンのCPUがCore2Duo E6600でVTが使えるのでゲストがx64でも動いているが、そのうちE7200にしてVTがなくなるのでx64版が使えなくなるのに備えての変更。
→その後CPUをE7200(VT非対応)に換えたところ、ゲストOSの時刻が極端に遅れる現象が発生。3〜10倍くらい遅れるくらいの遅れ。1分ごとにhctosysしてみても、分指定のcronが実行されないことがよくあるくらいにずれる。未だに解決できていない。
http://www10.plala.or.jp/p205tb16/linux4.html
坂井瑞穂