カスタム検索
このエントリーをはてなブックマークに追加
tomo.gif (1144 ツバツイツト)line.gif (927 ツバツイツト)line.gif (927 ツバツイツト)line.gif (927 ツバツイツト)To previous pageTo home pageMailing to me

基本設定のスクリプトを作成

Modified: 11 September 2005

ここでは、すべてのサーバーに共通に使う設定を説明します。以下の考え方(セキュリティポリシーという)での設定します。


前提となる考え方
スクリプトの設定
実行して動作確認


前提となる考え方

1.一旦全部禁止とし、必要なものから許可していきます。

2.ループバック(自サーバのサービス)はすべて許可します。

3.PINGは、メンテナンスPCだけ相互に許可します。

4.SSHは、メンテナンスPCのみ許可します。


スクリプトの設定

初期設定

まず、スクリプトの定義と設定の宣言をします。

#!/bin/sh

THIS_HOST='192.168.0.15'
CONSOLE_HOST='192.168.0.75'
ANY='0.0.0.0/0'


全面禁止に設定

一旦、全面禁止(通信不能)にします。

# すべての設定をクリアする
/sbin/iptables -F

# すべてのチェインをクリアする
/sbin/iptables -X

# すべてのパケットを拒否にする
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT DROP


自分から自分へ(ループバック)は全部許可する

# ループバックはすべて許可する
/sbin/iptables -A INPUT  -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -i lo -j ACCEPT

"-i lo" の "-i" は、インターフェースを指定することを意味します。"lo" は "127.0.0.1"で、いわゆる "localhost" を意味します。


PINGの設定

PING要求に対してどこからでも応答するのをやめ、メンテナンスPC(ネットワークの調査を行うときに用いるPC:$CONS_HOST)からの要求のみ許す。

# 特別なホストからのみpingを許可する
/sbin/iptables -A INPUT  -p icmp -s $CONSOLE_HOST --icmp-type 8 -d $THIS_HOST -j ACCEPT
/sbin/iptables -A OUTPUT -p icmp -s $THIS_HOST --icmp-type 0 -d $CONSOLE_HOST -j ACCEPT

逆に自分からメンテナンスPCへのPINGも、実用面から、許可しておきましょう。

# 特別なホストへのpingを許可する
/sbin/iptables -A OUTPUT -p icmp -s $THIS_HOST --icmp-type 8 -d $CONSOLE_HOST -j ACCEPT
/sbin/iptables -A INPUT  -p icmp -s $CONSOLE_HOST --icmp-type 0 -d $THIS_HOST -j ACCEPT

"--icmp-type 8" は、"Echo Request"(応答要求)のことです。
"--icmp-type 0" は、"Echo Reply"(返答)のことです。

icmpには、以下のようなタイプがあります。

0 Echo Reply
3 Destination Unreachable
4 Source Quench
5 Redirect
8 Echo Request
11 Time Exceeded
12 Parameter Problem
13 Timestamp Request
14 Timestamp Reply
15 Information Request
16 Information Reply
17 Address Mask Request
18 Address Mask Reply


TCPの基本設定

# SYNフラグのない新コネクションを拒否
/sbin/iptables -A INPUT  -p TCP ! --syn -m state --state NEW -j DROP

"-p TCP ! --syn -m state --state NEW" は、"TCP"に"SYN"フラグのない通信の開始("NEW")を意味します。当然これは、"DROP"です。


SSHの設定

メンテナンスにPC($CONS_HOST)からの要求のみ許す。 

# メンテナンス用ホストから22/TCP(ssh)を許可
/sbin/iptables -A INPUT  -p TCP -s $CONSOLE_HOST -d $THIS_HOST --dport 22 -i eth0 -j ACCEPT
/sbin/iptables -A OUTPUT -p TCP -s $THIS_HOST --sport 22 -d $CONSOLE_HOST -o eth0 -j ACCEPT

実行して動作確認

上記設定のまとめ

以下のように、起動時に実行されるわけではありませんが、起動時に実行されるように記述します。

利用するサーバによって、最初の定義部分(赤文字青文字)は変更が必要です。

"iptables.sh"という名前で保存しました。

#!/bin/sh

THIS_HOST='192.168.0.5'
CONSOLE_HOST='192.168.0.75'
ANY='0.0.0.0'

# すべての設定をクリアする
/sbin/iptables -F

# すべてのチェインをクリアする
/sbin/iptables -X

# すべてのパケットを拒否にする
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT DROP

# ループバックはすべて許可する
/sbin/iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
/sbin/iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

# 特別なホストからのみpingを許可する
/sbin/iptables -A INPUT -p icmp -s $CONSOLE_HOST --icmp-type 8 -d $THIS_HOST -j ACCEPT
/sbin/iptables -A OUTPUT -p icmp -s $THIS_HOST --icmp-type 0 -d $CONSOLE_HOST -j ACCEPT

# 特別なホストへのpingを許可する
/sbin/iptables -A OUTPUT -p icmp -s $THIS_HOST --icmp-type 8 -d $CONSOLE_HOST -j ACCEPT
/sbin/iptables -A INPUT -p icmp -s $CONSOLE_HOST --icmp-type 0 -d $THIS_HOST -j ACCEPT

# SYNフラグのない新コネクションを拒否
/sbin/iptables -A INPUT  -p TCP ! --syn -m state --state NEW -j DROP

# メンテナンス用ホストから22/TCP(ssh)を許可
/sbin/iptables -A INPUT -p TCP -s $CONSOLE_HOST -d $THIS_HOST --dport 22 -i eth0 -j ACCEPT
/sbin/iptables -A OUTPUT -p TCP -s $THIS_HOST --sport 22 -d $CONSOLE_HOST -o eth0 -j ACCEPT


設定の実行

上記のスクリプトを以下のコマンドで実行します。

# sh iptables.sh

理屈上当たり前ですが、リモート(SSH)で設定している場合、SSH関連の設定を間違えると、実行した瞬間に接続が切れて、ハングアップしたようになります。
この場合は、直接つながっているコンソールから再設定するか、再起動が必要になります。



To previous pageTo home pageMailing to meJump to Top of pageline.gif (927 ツバツイツト)line.gif (927 ツバツイツト)tomo.gif (1144 ツバツイツト)
カスタム検索



このエントリーをはてなブックマークに追加