2006年01月30日

自宅サーバを作ろう!

唐突に『自宅にサーバがあったらな…』などと思い始めた今日この頃。
思い立ったが吉日ってことで、自宅サーバを作り始める事にしました。
目標は自宅の資源を外出先から使う事。
一般的な自宅サーバの用途である『Webサーバを作る』とかではないので念のため。

まずは入れ物を用意しないとな〜と思い、何気なくヤフオクを眺めていたらちょうど良いものがありました。
・Mobile Celeron 450MHz
・128MB SDRAM / 6GB HDD
・13.3inch SVGA

サーバにするにはもってこいです。これだけのものが(中古とはいえ)6千円ちょっとで買えるんだからいい世の中になったもんです。

では最初の一歩。使用するディストリビューションの選定。
いろいろ考えてVine Linuxを使う事にしました。

Vine Linux Home Page
http://www.vinelinux.org/

まぁ色々と言ったって、あとCentOSくらいしか候補なかったんですけどね。(汗)
Linuxはとにかく初心者なので…。

初めはCentOSを入れてみたのですが、コンソールメインで使う(サーバですからね)には日本語処理がちょっとやっかいでした。それに、元がエンタープライズな方だけにちょっと遊び心にも欠けているように思えましたし。最近流行のUbuntuとかMandrivaなども興味はあったのですが、全く触った事がないものだけにやめておきました。

で、インストール。
今日日のlinuxは非常に良くできたインストーラを搭載しているので何も迷う事はありません。必要なものはあとから追加すればいいや!と言う事で、最小構成で導入しました。

導入が終わったらお約束のアップデート。
apt-get update
apt-get upgrade

それから何はなくとも!と言うものたちをインストール。
iptables
w3m ← CentOSを挫折させた張本人
sl ← 好きなんです r(^^;

そしたらiptablesの設定。参考にさせていただいたのはこちら。

習うより慣れろ! iptablesテンプレート集
http://www.atmarkit.co.jp/flinux/index/indexfiles/index-linux.html#iptables

iptables の ipt_recent で ssh の brute force attack 対策
http://www2s.biglobe.ne.jp/~nuts/labo/inti/ipt_recent.html

でもって完成したものがこちら。
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:SSH - [0:0]
:SSH-evil - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -i tap0 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j SSH
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A SSH -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m recent --rcheck --seconds 600 --name badSSH --rsource -j REJECT --reject-with icmp-port-unreachable
-A SSH -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m recent --rcheck --seconds 60 --hitcount 3 --name sshconn --rsource -j SSH-evil
-A SSH -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m recent --set --name sshconn --rsource
-A SSH -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j ACCEPT
-A SSH-evil -m recent --set --name badSSH --rsource -j LOG --log-prefix "evil SSH user: " --log-level 7
-A SSH-evil -j REJECT --reject-with icmp-port-unreachable
COMMIT

sshOpenVPNを使う事しか考えてないのでとりあえずこんな感じです。実際はsshOpenVPN用のポートは外部からの攻撃に備えて違う番号にずらしてあります。
これを/etc/syscofig/iptablesとして保存して、iptablesを開始します。
service iptables start

そうしたらsshdの設定変更。対象ファイルは/etc/ssh/sshd_configです。
使用するポート番号の変更、rootのログイン禁止、空パスワードログインの禁止、X11転送の禁止、ログイン可能ユーザの設定をしています。
とりあえず変更点だけ書いておきます。
Port xxxxx
PermitRootLogin no
PermitEmptyPasswords no
X11Forwarding no
AllowUsers xxxxx

xxxxxの部分は内緒にしないと意味がないので伏せ字でご勘弁を。

そしたら設定を有効にすべくsshdの再起動。
service sshd restart

これでとりあえず外に公開する準備は完了。あとは外に繋がってるルータ(プロバイダから貸し出されるアレです)でNATの穴開けをすれば外部との経路作成は完成です。

…が、このままだと接続先のアドレスがよく分からないので、ダイナミックDNSサービスを使用してURLでのアクセスを可能にします。
私がお世話になっているサービスはこちら。

私的DynamicDNS(MyDNS.JP)
http://www.mydns.jp/

登録を済ませたあと、Let's TRY!の手順に従ってメールチェッカーを…と思ったら基本的なパッケージがぜんぜん足りてないではないですか!
あわてて以下のパッケージをインストール。
wget
gcc
openssl-devel

あとは手順どおり。

あとは外からアクセスできることを確認して、とりあえずおしまいです。
(これを自宅から試せないという事に気づくのにけっこうかかりました…。orz)

でもこの状態で本当にインターネット上に公開しておいて大丈夫なもんかちょっと心配だったりします。まぁルータレベルでポート2つしか穴開けしてないですし、iptablesもきちんと設定しているので平気だとは思うのですが…。

お詳しい方、『この辺設定しとかないと危ないよ〜』というものがあったら是非ともご教示ください。m(_ _)m


posted by 月水和尚 (とも) at 17:20 | Comment(0) | TrackBack(0) | Linux(ディストリビューション固有)
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。