忍者ブログ

ぢみへんプログラミング日誌

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

サーバー構築超入門メモ(1):ファイアウォールとSSHの用意

今回はサーバー構築の話です。

久々の更新ですが……みなさんいかがお過ごしでしょうか。
今回はサーバー構築の話です。
サーバー構築のネタは、Rails開発環境を作るという内容では過去数回やってきました。この2年ほど、いくつかRailsを使ったプロジェクトでWebアプリケーションを作る機会に恵まれた経験から言うと、やはり元々がLAMP型開発と言われていただけあって、ウェブアプリケーション開発者には仮想OSを用いた開発環境だけでなく本番稼働サーバーのことも視野に入れたノウハウが要求される機会が増えたと思います。昔はサーバー屋さんに任せていればよかったことも、ある程度のことは自分でできるか、頼むにしてもこちら側にある程度の知識がないと何をしてほしいのか説明するのも大変な時代になってきました。言い換えるならば、
「俺は開発者だからサーバーのセットアップなど関係ない」という時代はとっくの昔に終わっています。いや、終わっていた。(笑)
おそらく10年くらい前からそうなってきてたんでしょうが、個人的に経験しないと分からない性質なので最近になるまで分かりませんでした。例え本番サーバーでWebアプリケーションの環境を構築しなくても、これまでに見てきたようにWindows環境を使う開発者はVMWare等で仮想Linux環境を作らないことには仕事になりません。早急にVagrantPappet/Chef といったツール習得の必要性を感じずにはおれない、今日この頃であります。なので、今後はサーバー環境の方に重点を置いた構築の備忘録も書いていこうと思います。
もっとも筆者はいわゆるインフラ専門の技術屋さんではありませんので、そこはあくまでも「ちょっと時代に取り残されてる」アプリケーション開発者から見た学習録であることはご了承ください。何か内容に間違いなどありましたら、ご指摘お願いします。

ファイアウォール

さて、本題に入りましょう。
まず、お断りしておかなくてはいけないのは、筆者はノートPCを1台しか持っておらず、他にサーバーに使えるような機械を持っていないため、もっぱらサーバー環境構築の作業は「さくらVPS」を使うことを通じて経験しています。ですので、マシンハードウェアにディスクを設置して電源は何を使って、OSはどうやってインストールするのか……ということはここでは触れません。もっとも、当ブログにて過去にVMWareでゲストOSの構築をやっている話も書いてきているので、多少はそこが参考にできるかもしれません。

で、さくらVPSですが、「VPS」というのは「仮想プライベートサーバー」の略語らしいですね。へぇ~。仮想化技術はほぼ上っ面の概略程度しか知りませんが、いやはや時代の移り変わりが早いこと。まぁボヤキはそのくらいにして、さくらVPSで仮想サーバーを1台レンタルすると、すぐにさくらから必要な情報の連絡が来てサーバーが使えるようになります。ちなみにOSはCentOS(多分、バージョンは6)を指定。
サーバーを起動した後、最初はさくらVPS専用コンソールからしかアクセスができません。そして、何はともあれこのコンソールから最低限のセキュリティ設定を真っ先にしなければなりません。具体的にはパケットフィルタリング(ファイアウォール)とセキュアシェル(SSH)の設定ですね。

基本設定
ファイアウォールは、icmp, ループバック、確立済みの接続とセキュアシェル新規接続以外の送受信を無効にします。
[root@ap]# iptables -t filter -F                                       
[root@ap]# ip6tables -t filter -F
[root@ap]# iptables -P INPUT DROP
[root@ap]# iptables -P FORWARD DROP
[root@ap]# iptables -P OUTPUT DROP
[root@ap]# ip6tables -P INPUT DROP
[root@ap]# ip6tables -P FORWARD DROP
[root@ap]# ip6tables -P OUTPUT DROP

iptablesとip6tablesはそれぞれIPv4とIPv6に対応したパケットフィルタリングを制御するためのコマンドで、この設定内容をサーバー再起動後も保存したい場合は
[root@ap]#service iptables save
[root@ap]#service ip6tables save

とやる。
その後、icmpとループバックプロトコル、一旦接続済みとなった通信を許可に変更。
[root@ap]# iptables -A INPUT -p icmp -j ACCEPT
[root@ap]# iptables -A FORWARD -p icmp -j ACCEPT
[root@ap]# iptables -A OUTPUT -p icmp -j ACCEPT
[root@ap]# ip6tables -A INPUT -p icmp -j ACCEPT
[root@ap]# ip6tables -A FORWARD -p icmp -j ACCEPT
[root@ap]# ip6tables -A OUTPUT -p icmp -j ACCEPT
[root@ap]# iptables -A INPUT -i lo -j ACCEPT
[root@ap]# iptables -A OUTPUT -o lo -j ACCEPT
[root@ap]# ip6tables -A INPUT -i lo -j ACCEPT
[root@ap]# ip6tables -A OUTPUT -o lo -j ACCEPT
[root@www6419up ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j AC
CEPT
[root@ap]# iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j
ACCEPT
[root@ap]# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j A
CCEPT
[root@ap]# ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j A
CCEPT
[root@ap]# ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j
ACCEPT
[root@ap]# ip6tables -A OUTPUT -m state --state ESTABLISHED,RELATED -j
ACCEPT

それからSSHの受信ポートを開ける必要があるので、
[root@ap]# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 1234 -j ACCEPT

とする。ポート番号は標準の22番ではなく1234とする。(この値はSSHの設定と同期がとれていれば、ポート番号の許容する範囲で何を使っても良い)
最後に、フィルタで処理を拒否したパケットのログが取れると通信が上手く行かないときに便利なのでその設定を入れる。
[root@ap]# iptables -A INPUT -j LOG --log-prefix "[input rejected]"
[root@ap]# iptables -A OUTPUT -j LOG --log-prefix "[output rejected]"
[root@ap]# ip6tables -A INPUT -j LOG --log-prefix "[input rejected]"
[root@ap]# ip6tables -A OUTPUT -j LOG --log-prefix "[output rejected]"
[root@ap]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
[root@ap]# service ip6tables save
ip6tables: Saving firewall rules to /etc/sysconfig/ip6tables: [ OK ]

ちなみservice iptables save(IPv6の方はip6tablesに置き換える)で設定内容を保存すると、/etc/sysconfig/iptables(/etc/sysconfig/ip6tables)の内容はこんな感じになる。
# Generated by iptables-save v1.4.7 on Wed Jun  4 00:05:53 2014                 
*filter
:INPUT DROP [3:96]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1234 -j ACCEPT
-A INPUT -j LOG --log-prefix "[input rejected]"
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -j LOG --log-prefix "[output rejected]"
COMMIT
# Completed on Wed Jun 4 00:05:53 2014

ぶっちゃけ、このファイルができたらその後はこれを直接いじって、iptables(ip6tables)を再起動させても良い感じではある。(再起動は service iptables restart)

セキュアシェルの基本設定

つぎにSSHサーバの設定をば。
デフォルトでは22番ポートを受信に使うところを、いかにもクラッカーに狙われそうなので先ほどパケットフィルタリングで接続許可した1234番に変更。ルートユーザーの直接ログインは不許可。それから公開鍵認証の設定を後で行うため、認証方式を一旦ユーザーアカウントパスワード認証に変更しておく。
[root@ap] #vi /etc/ssh/sshd_config           
(中略)
PasswordAuthentication yes # <= これを追加
PermitRootLogin no # <= これを追加
Port 1234 # &lt:= これを追加

ここでSSHを再起動し、このサーバーに対してteraterm等のコンソールからSSHアクセスをテストすると、とりあえず通常のパスワード認証ではあるがログインできるようになるだろう。
ちなみに、ここには書いていないが、既にルートユーザーログインを遮断しているので、別途アカウントを作っておく必要はある。(コマンドはuseradd, passwdを使う)

(つづく)

参考文献・URL:
CentOS6で作るネットワークサーバ構築ガイド 秀和システム刊
Linuxサーバーセキュリティ オライリー刊
PR

COMMENT

NAME
TITLE
MAIL (非公開)
URL
EMOJI
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
COMMENT
PASS (コメント編集に必須です)
SECRET
管理人のみ閲覧できます
 
  

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

フリーエリア

最新CM

バーコード

ブログ内検索

Copyright ©  -- ぢみへんプログラミング日誌 --  All Rights Reserved

Design by CriCri / Material by petit sozai emi / powered by NINJA TOOLS / 忍者ブログ / [PR]