対象OS | :Red hat Linux v7.2 |
ドメイン名 | :取り合えず mydomain.gr.jp と仮定。 |
サーバ名 | :取り合えず server.mydomain.gr.jp と仮定。 |
サーバ機の構成 | 最初の確認事項 | 方針 | XINETD |
SAMBA | APACHE | BIND | SENDMAIL |
DRAC | QPOPPER | Netfilterの設定(iptables) | CVS |
PostgreSQL | ZLIB | OpenSSL | OpenSSH |
<インターネット> + +-------- Linux BOX ---------+ | (eth0:123.345.567.789) | | + (FORWARD) | | (eth1:192.168.0.1) | +----------------------------+ + <ローカルネットワーク>NICは2枚使用。一枚(eth0)はインターネット(外側)、もう一枚(eth1)は ローカル(内部:192.168.x.x)ネットワーク用。 eth0 <-> eth1 間はIPマスカレード。
net.ipv4.ip_foward=1直ちに有効にするには
echo 1 > /proc/sys/net/ipv4/ip_forward
rpm -qa | grep -i sendmail
というようにして確認する。また、削除は
rpm -e sendmail
のようにする。
# # Simple configuration file for xinetd # # Some defaults, and include /etc/xinetd.d/ defaults { instances = 60 log_type = SYSLOG authpriv log_on_success = HOST PID log_on_failure = HOST only_from = localhost 192.168.0.0/24 } includedir /etc/xinetd.d
./configure make make installインストール先: /usr/local/samba 下
cd /usr/local/samba/private /usr/local/samba/bin/smbpasswd -a user_name
........... [global] create mask = 644 # workgroup = NT-Domain-Name or Workgroup-Name workgroup = Workgroup netbios name = server ........... hosts allow = 192.168.0. 127. ........... encrypt passwords = yes smb passwd file = /usr/local/samba/private/smbpasswd ........... interfaces = 192.168.0.1/24 ...........
# Options to smbd SMBDOPTIONS="-D" # Options to nmbd NMBDOPTIONS="-D"
./configure make make installインストール先: /usr/local/apache 下
ln -s /usr/local/apache/logs /var/log/httpd
./configure make make installインストール先: /usr/local/sbin
cd /var/named mkdir etc mkdir run chown named.named /var/named/*次に/var/named/etc に named.conf を作成する。 さらに、named.conf の中のルートディレクトリを以下のように 設定する。
............ options { directory = "/" <== このように変更 }そして、/var/named にドメインのデータベースファイルを置く。
search mydomain.gr.jp nameserver 192.168.0.1 nameserver 123.345.567.789
sh Build sh Build installここで、sendmail が/usr/sbin にコピーされない場合(要調査)は手動でコピーする。
# From here(dynamic relay authorization control map) Kdrac btree /etc/mail/dracd # to hereを入れる。さらに
SLocal_check_rcpt # From here (allow recent POP/IMAP mail clients to relay) R$* $: $&{client_addr} R$+ $: $(drac $1 $: ? $) R? $@ ? R$+ $@ $#OK # to this lineも入れる(最初のスペースはタブであることに注意)。
# by default we allow relaying from localhost... server.maydomain.gr.jp RELAY localhost.localdomain RELAY localhost RELAY 127.0.0.1 RELAY 123.345.567.789 RELAY 192.168.0.1 RELAYを入れる。
# local-host-names - include all aliases for your machine here. server mydomain.gr.jp
./configure --enable-specialauth --enable-apop=/etc/pop.auth --enable-log-login --with-drac=/usr/local/src/drac make make installインストール先: /usr/local/sbin 下(popper、popauth)
service pop3 { flags = REUSE socket_type = stream wait = no user = root server = /usr/local/sbin/popper server_args = -s -p 0 only_from += .mydomain.co.jp .otherdomain.co.jp log_on_failure += USERID disable = no }
make make installインストール先: /usr/local/sbin 下(rpc.dracd)
ln -s /etc/init.d/dracd /etc/rcd/r3.d/S99dracdportmap が dracd より前に起動されることを確認する。
255.255.255.255 127.0.0.1 255.255.255.255 192.168.0.1 255.255.255.255 123.345.567.789
./configure make make installインストール先: /usr/bin
cvs :pserver:user@server.mydomain.gr.jp:/var/cvs/cvsroot init次にcvsadmin、cvsguest、cvsuser 等、用途に従ったCVSに関係するユーザ とcvsグループをシステムに登録する。 次に/var/cvs/cvsroot/CVSROOT/passwdファイルにCVSユーザを 以下のように登録する。
user1:xxxxxxxx:cvsadmin user2:yyyyyyyy:cvsadmin user3:zzzzzzzz:cvsguest .....................ここで、user1、user2等はCVSにログインするときに必要な ユーザ名。xxxxxxxxやyyyyyyyyは、passwd コマンドで作成される ものと同じエンコード化されたCVSにログインためのパスワード。 例ではuser1とuser2は実際のシステムユーザcvsadminの権限で ログインされる。user3はcvsguest権限になる。従って、システム 権限をcvsadminとcvsguestで分けておけば、書き込み制限などが 可能になる。その他に/var/cvs/cvsroot/CVSROOT/writersファイルに 書き込み可能なCVSユーザを登録して、明示的に書き込み可能者を 設定する方法もある。
#!/bin/sh # ####### actual setting(only needs to be set) ######### internet_dev=eth0 localnet_dev=eth1 local_IPs=192.168.0.0/24 ###################################################### MODPROBE=/sbin/modprobe IPTABLES=/sbin/iptables #--------------------------------------- ## Insert modules fot FTP connection(not necessary if included in the kernel) #--------------------------------------- $MODPROBE ip_nat_ftp $MODPROBE ip_conntrack_ftp # Enable forwarding echo 1 > /proc/sys/net/ipv4/ip_forward # Flush first $IPTABLES -F INPUT $IPTABLES -F OUTPUT $IPTABLES -F FORWARD #--------------------------------------- # Policy definition for INPUT/FORWARD chain: DROP #--------------------------------------- $IPTABLES -P INPUT DROP --modprobe=$MODPROBE $IPTABLES -P OUTPUT ACCEPT $IPTABLES -P FORWARD DROP #--------------------------------------- ## IP MASQUERADE setting. #--------------------------------------- $IPTABLES -t nat -A POSTROUTING -o $internet_dev -j MASQUERADE --modprobe=$MODPROBE #--------------------------------------- # Setting for DROP with LOG #--------------------------------------- $IPTABLES -N log_drop # $IPTABLES -A log_drop -j LOG --log-level warning -m limit --modprobe=$MODPROBE$IPTABLES -A log_drop -j DROP #------------------------------------------------- ## Rules for connection to server from outer world #------------------------------------------------- $IPTABLES -N from_internet $IPTABLES -A from_internet -p tcp --dport http -j ACCEPT $IPTABLES -A from_internet -p tcp --dport https -j ACCEPT $IPTABLES -A from_internet -p icmp -j ACCEPT $IPTABLES -A from_internet -p tcp --dport domain -j ACCEPT $IPTABLES -A from_internet -p udp --dport domain -j ACCEPT $IPTABLES -A from_internet -p tcp --dport smtp -j ACCEPT $IPTABLES -A from_internet -p tcp --dport pop3 -j ACCEPT $IPTABLES -A from_internet -p tcp --dport cvspserver -j ACCEPT $IPTABLES -A from_internet -p udp --dport cvspserver -j ACCEPT # Drops for NETBIOS & Local IP connection $IPTABLES -A from_internet -p udp --dport 137:139 -j DROP $IPTABLES -A from_internet -p tcp --dport 137:139 -j DROP $IPTABLES -A from_internet -d 10.0.0.0/8 -j log_drop $IPTABLES -A from_internet -d 172.16.0.0/12 -j log_drop $IPTABLES -A from_internet -d 192.168.0.0/16 -j log_drop $IPTABLES -A from_internet -s 10.0.0.0/8 -j log_drop $IPTABLES -A from_internet -s 172.16.0.0/12 -j log_drop $IPTABLES -A from_internet -s 192.168.0.0/16 -j log_drop # Accept from outer but initiated by local side. $IPTABLES -A from_internet -m state --state ESTABLISHED,RELATED -j ACCEPT --modprobe=$MODPROBE # DROP other than above. $IPTABLES -A from_internet -j DROP #--------------------------------------- # FORWARD rules from internet to local #--------------------------------------- $IPTABLES -N forward_from_internet_to_local $IPTABLES -A forward_from_internet_to_local -d ! $local_IPs -j log_drop $IPTABLES -A forward_from_internet_to_local -p udp --dport 137:139 -j DROP $IPTABLES -A forward_from_internet_to_local -p tcp --dport 137:139 -j DROP $IPTABLES -A forward_from_internet_to_local -s 10.0.0.0/8 -j log_drop $IPTABLES -A forward_from_internet_to_local -s 172.16.0.0/12 -j log_drop $IPTABLES -A forward_from_internet_to_local -s 192.168.0.0/16 -j log_drop $IPTABLES -A forward_from_internet_to_local -m state --state ESTABLISHED,RELATED -j ACCEPT --modprobe=$MODPROBE # DROP other than above. $IPTABLES -A forward_from_internet_to_local -j DROP #------------------------------------------- # Rules for outgoing to internet from server #------------------------------------------- $IPTABLES -N to_internet $IPTABLES -A to_internet -p udp --dport 137:139 -j DROP $IPTABLES -A to_internet -p tcp --dport 137:139 -j DROP $IPTABLES -A to_internet -d 10.0.0.0/8 -j log_drop $IPTABLES -A to_internet -d 172.16.0.0/12 -j log_drop $IPTABLES -A to_internet -d 192.168.0.0/16 -j log_drop $IPTABLES -A to_internet -j ACCEPT #--------------------------------------- # Rules for lo and local device #--------------------------------------- $IPTABLES -A INPUT -i lo -j ACCEPT $IPTABLES -A INPUT -i $localnet_dev -j ACCEPT $IPTABLES -A FORWARD -i $localnet_dev -j ACCEPT #------------------------------------------------------- ## Connect to default chain connected to internet device #------------------------------------------------------- $IPTABLES -I INPUT -i $internet_dev -j from_internet $IPTABLES -I FORWARD -i $internet_dev -j forward_from_internet_to_local $IPTABLES -I OUTPUT -o $internet_dev -j to_internet $IPTABLES -I FORWARD -o $internet_dev -j to_internetiptablesの終了スクリプト(iptables.off)。
#!/bin/sh # ####### actual setting(only needs to be set) ######### internet_dev=eth0 localnet_dev=eth1 ###################################################### MODPROBE=/sbin/modprobe IPTABLES=/sbin/iptables # Flush POSTROUTING chain in nat table $IPTABLES -t nat -F POSTROUTING # Flush newly created chains in filter table $IPTABLES -F from_internet $IPTABLES -F to_internet $IPTABLES -F forward_from_internet_to_local $IPTABLES -F log_drop # Flush default chains in filter table $IPTABLES -F INPUT $IPTABLES -F OUTPUT $IPTABLES -F FORWARD ## Delete newly created chains in filter table. $IPTABLES -X from_internet $IPTABLES -X to_internet $IPTABLES -X forward_from_internet_to_local $IPTABLES -X log_drop # Reset policies in filter table. $IPTABLES -P INPUT ACCEPT $IPTABLES -P OUTPUT ACCEPT $IPTABLES -P FORWARD ACCEPT
./configure --enable-multibyte=UNICODE --enable-syslogPostgreSQL 7.3 以降では
./configureインストール前に既にデータベースが存在する場合、
$ pg_dump -b -F c admindb > admindb.dumpのようにしてバックアップしておく。
インストール先: /usr/local/pgsql 下
ユーザ postgres を追加して、 postgres ユーザで make all と
make install を実行する。ただし、最上位の /usr/local/pgsql
ディレクトリは root で作成してから chown postgres.postgres pgsql
とする。
データベースの作成(PostgreSQL 7.3 以降)は
$ initdb --encoding=UNICODE --no-locale -D /usr/local/pgsql/datapostmaster を起動したら
$ createdb --encoding=UNICODE admindb $ createuser ... ... $ pg_restore -d admindb admindb.dump ...とデータベースやユーザを作成。
; 以下を追加 pg_char_to_encoding @88 pg_encoding_to_char @89 pg_encoding_mblen @90 pg_mule_mblen @91 pg_mic_mblen @92 pg_encoding_max_length @93 pg_valid_client_encoding @94 pg_valid_server_encoding @95 pg_utf_mblen @96次に....\postgresql-7.2.1\src で
nmake /f win32.mak MULTIBYTE=MULTIBYTEと入力して psql.exe と libpq.dll をビルドする。 psql.exe と libpq.dll を適当な所にコピーして、以下のように 実行すれば日本語を操作できる。
C:\psql>psql -h 192.168.0.100 -U postgres -d test Welcome to psql, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit test=# \encoding EUC_JP test=# \encoding SJIS test=# \encoding SJIS test=# insert into tbl1 values('東京',123.0); INSERT 16559 1 test=# insert into tbl1 values('京都',-123.0); INSERT 16560 1 test=# select * from tbl1; name | val ------+------ 東京 | 123 京都 | -123 (2 rows) test=#
./configure && make make installインストール先: /usr/local 下
/usr/local/include/zlib.h /usr/local/include/zconf.h /usr/local/lib/libz.a /usr/local/lib/libz.so
./config make make test make installインストール先: /usr/local/ssl 下
mkdir /var/empty chmod 755 /var/empty groupadd sshd useradd -g sshd -c 'sshd chroot' -d /var/empty -s /bin/false sshd以下のようにインストール。
./configure --with-pam --with-tcp-wrappers --with-ipv4-default make make installインストール先:
sshd ... /usr/local/sbin
ssh ... /usr/local/bin
設定ファイルは /usr/local/etc
cp contrib/redhat/sshd.pam /etc/pam.d/sshd
ssh-keygen -t rsa1 -f /usr/local/etc/ssh_host_key -N "" ssh-keygen -t rsa -f /usr/local/etc/ssh_host_rsa_key -N "" ssh-keygen -t dsa -f /usr/local/etc/ssh_host_dsa_key -N ""結果として -f オプションで指定したファイルに秘密鍵が、 <ファイル名>.pub に公開鍵が作成される。
ALL:ALLのような設定。ただし、xinetd 等を同時稼動させている場合は、 何も書き込ない。
hosts.allow は
..... sshd:192.168.0. ALL:127.0.0.1というようにする。
PermitRootLogin no PasswordAuthentication no基本的にコメント部分の設定がデフォルトであるので、そのままにした。
/usr/local/sbin/sshd -d -f /usr/local/etc/sshd_configクライアントがうまく接続できたら、以下のように起動する。
/usr/local/sbin/sshd -f /usr/local/etc/sshd_config
IdentityFile ~/.ssh/id_rsa IdentityFile ~/.ssh/id_dsa Host sshserver User user1 HostここではSSHサーバ(sshserver)に接続する場合は、 sshserver のユーザ(user1)としてログインする。
client-$ ssh-keygen -t rsaパスフレーズを入力すれば、~/.ssh/id_rsa に秘密鍵、 ~/.ssh/id_rsa.pub に公開鍵が作成される。
client-$ ssh sshserver