踏み台用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月11日木曜日
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をお引越し
#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 新規ユーザーの追加
しかし,一つのサーバーに複数のユーザーがいて,またその数だけホームディレクトリが存在するのは,管理の面でも非常に面倒くさいと思う.
そこで,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の実態調査も)
-ルーター --- サーバー1(WEB,SSH,VPN,Samba)
|
--サーバー2(SSH)
|
--クライアント群
サーバー1のWEBページ関連の内容を,サーバー2に毎週バックアップを取って運用している.
しかし,管理の面からサーバーで提供するサービスをサーバー毎に分割し,ログを一括でまとめたほうが
・セキュリティ
・ログ監視
・冗長性
などの点で良いのでは? と妄想。
まずは,WEBサーバーを分離から実行。
ホームディレクトリを、統括用のサーバーに作ってWEBサーバーと同期.
LDAPサーバーの導入も検討(LDAPの実態調査も)
登録:
投稿 (Atom)