2011年8月11日木曜日

SSHサーバーの構築

踏み台用SSHサーバーを作る
例によって,ScientificLinuxです.
I.構成
イメージとしては,
SSHサーバーに,su可能なユーザー(house-gate)を一人追加し,そいつにログインする.

LAN内のマシンは全て公開鍵認証だが,house-gateには鍵を持たせない.

LAN内のマシンにアクセスするには,ポート転送を行う必用がある.

SSHのデフォルトのポートを変更する.

一定回数アクセスに失敗すると,/etc/hosts.denyに追加され,アクセス不可になる.

SSH意外のLAN外からのアクセスは全て遮断.


と言ったところだろうか.
II.実行
1.ユーザの追加.
いつもどおり,useraddコマンドとpasswdコマンドで.今回は特に設定を変更しない.
ただし,このユーザにログインする方法も公開鍵認証限定とするので,クライアント候補のマシンは鍵の交換を行う必要がある.

2.SSHDの設定変更
Port Port番号

Protocol 2

PermitRootLogin no

RSAAuthentication yes
PubketAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

PasswordAuthentication no
PermitEmptyPasswords no

AllowGroups wheel


iptables_setting.sh
#!/bin/bash

service iptables stop

iptables -F

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT

iptables -A INPUT -p tcp --dport PORT -j ACCEPT

iptables -A INPUT -p tcp --syn -j DROP

service iptables save

service iptables start

この状態でアクセスが可能なことを確認.
III.セキュリティ
次に,ログイン失敗回数制限の設定
1.リポジトリの追加
/etc/yum.repos.d/sl-riken.repo

[riken]
name=Scientific Linux $releasever - $basearch
baseurl=http://ftp.riken.jp/Linux/dag/redhat/el6/en/$basearch/dag
gpgcheck=1
enabled=0
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt

# yum -y install rpmforge-release
# yum -y install epel-release
# yum -y install atrpms-repo

2.パッケージの追加
#yum -y install python python-devel
#yum -y install deneyhosts

3.設定の変更
#vi /etc/denyhosts.conf
PURGE_DENY =   
#拒否する時間.空欄なので,永久に拒否.
DENY_THRESHOLD_INVALID = 1
#存在しないユーザへのログイン拒否するまでの回数.1回で拒否.
DENY_THRESHOLD_VALID = 3
#存在するユーザへのログイン拒否するまでの回数.3回で拒否.
DENY_THERSHOLD_ROOT = 1
#ROOTログインを拒否するまでの回数.1回で拒否.

4.デーモンの起動
/etc/rc.d/init.d/denyhosts start
chkconfig denyhosts on



2011年8月9日火曜日

WEBサーバーの公開まで:iptablesとSELinux

カーネルパラーメタの設定を行う

#vi /etc/sysctr
#pingのブロードキャストに反応しない.
net.ipv4.icmp_echo_ignore_broadcasts = 1

#不正なICMPエラーの無視
net.ipv4.icmp_ignore_bogus_error_responses = 1

#SYN Cookiesの有効化
net.ipv4.tcp_syncookies = 1

#ICMPリダイレクトの無視
net.ipv4.conf.all.accept_redirects = 0

#パケット転送を行わない
net.ipv4.ip_forward = 0

#ソースルーティングパケットの破棄
net.ipv4.conf.default.accept_source_route = 0

上記の設定の有効化.
#sysctl -p

iptablesの設定を考える.
1.pingはローカルエリア内の物のみを受け付ける
2.SSHも同様
3.ローカル外のネットワークからの接続は,HTTP意外は全てDrop
#!/bin/bash

#
#stop iptables
#
service iptables stop


#
#filter reset
#
iptables -F

#
#allow local loop back
#
iptables -A INPUT -i lo -j ACCEPT

#
#1. allow 'ping' command from local net wark
#
iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT

#
#2. allow 'secure shell' from local net word
#
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT

#
#3. allow 'http' from word wide web
#
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

#
#drop another tcp packets
#
iptables -A INPUT -p tcp --syn -j DROP

#
#save setting
#
service iptables save

#
#start iptables
#
service iptables start


SELinuxの設定
ユーザーを追加して,Apache入れて,CGI許可して,ユーザーディレクトリを許可する

今回は,NFSを使ってディレクトリの共有は行わず,以前の環境のファイル類をrsyncを使って転送した

$rsync -avz -e ssh ~/ server:~/

まあ,こんなことをやったので,.ssh以下もコピーされたりしてちょっと焦ったけどorz

httpdを立ち上げても,403が出て接続不可能.原因はおそらくSELinux,と言うことで一旦無効にしてみる
#setenforce permissive

エラーが解消されることを確認.

# getsebool -a | grep httpd | grep home
httpd_enable_homedirs --> off
# setsebool -P httpd_enable_homedirs 1
# getsebool -a | grep httpd | grep home
httpd_enable_homedirs --> on

最後に,ラベルの張替えを行う
$restorecon -R ~/

これで,接続完了.

SELinuxに関しては(も?)知識が全く足りていない.半分以上「何だかよく分からないけど,動いている」状態.

非常に危険.

今宵は,ここまで.
参考サイト
2done.org Apacheのmod_userdirを使う



----追記----

Wikiのパーミッションの変更に関してちょっと詰まった.

ホームディレクトリのパーミッションを変更しなかったのが原因.

あとは,参考サイトの通りの設定と
/plugin/code
のパーミッションを
755
に,所有者,グループをrootに.

参考サイト
PukiWikiをお引越し


2011年8月8日月曜日

NFSでホームディレクトリの共有設定

ネットワークの再構築計画で,サーバーの分割を行うことになった.

しかし,一つのサーバーに複数のユーザーがいて,またその数だけホームディレクトリが存在するのは,管理の面でも非常に面倒くさいと思う.

そこで,NFSを利用してホームディレクトリの共有を行う。

サーバーは,
CentOS5.6 final

クライアントは
ScientifcLinus 6.1

ちなみに,今後導入するOSは,基本的にScientificLinuxとなっていく予定だ.

以下,手順.

nfsの設定
サーバー
1:パッケージのインストール
#yum -y install nfs-utils portmap

2:サービスの起動
#/etc/rc.d/init.d/portmap start
#/etc/rc.d/init.d/nfslock start
#/etc/rc.d/init.d/nfs start

3:アクセス制御
#vi /etc/hosts.allow
portmap : 192.168.1.0/255.255.255.0

4:共有設定
#vi /etc/exports
/home/---- *.ドメイン(rw)


◎オプション
--参考サイトを参考のこと

5:設定の更新
#exportfs -ra

6:確認
#showmount -e

クライアント
1:パッケージインストール
#yum -y install nfs-utils

2:デーモン起動
#/etc/rc.d/init.d/rpcbind start
#/etc/rc.d/init.d/nfslock start

3:マウント
#mount -t nfs ホスト名:/home/---- /home/----

後は、ユーザーIDを指定してユーザーの追加を行う.

クライアントで
mount.nfs が無かったため詰まり,
rpcbindの起動が必用なことを知らなかったため,詰まった.

これで,ホームディレクトリの共有ができた.

ちなみに,今回追加設定を行ったユーザーは,管理用のユーザー.

WEBサーバーの機能移行のためには
1:WEBサーバー用のユーザー
2:SFTP用のユーザー

が必用(たぶん、うちの環境だけ)

また,nfsクライアント側でfstabの設定や,ランレベルの設定,そして、起動順の設定を変更しなければならない.

参考にしたサイト
NFSの設定/Server Config
NFSサーバの設定Linux
Linux 新規ユーザーの追加

2011年8月5日金曜日

ネットワークの構成について考える

現状

-ルーター --- サーバー1(WEB,SSH,VPN,Samba)
                |
                --サーバー2(SSH)
                |
                --クライアント群

サーバー1のWEBページ関連の内容を,サーバー2に毎週バックアップを取って運用している.

しかし,管理の面からサーバーで提供するサービスをサーバー毎に分割し,ログを一括でまとめたほうが

・セキュリティ
・ログ監視
・冗長性

などの点で良いのでは? と妄想。

まずは,WEBサーバーを分離から実行。

ホームディレクトリを、統括用のサーバーに作ってWEBサーバーと同期.

LDAPサーバーの導入も検討(LDAPの実態調査も)