rurihabachi
Last update: 2013/11/25  
    仮 想 マ シ ン で Fedora サ ー バ       ◇◇◇  お金をかけずに簡単簡潔  ◇◇◇  サーバ構築公開手順 覚書き  ◇◇◇
 
 
サーバ構築メニュー  
     1. はじめに
     2. 構築前の準備
     3. サーバの役割り
  » 4. サーバの計画
  » 5. 仮想マシンの準備
  » 6. Fedoraの準備
  » 7. サーバの基本設定
  » 8. ファイアウォール
  » 9. ウェブサーバ
  » 10. Apache Wicket
  » 11. メールサーバ
  « 12. セキュリティ
       iptables監視
       Clam AntiVirus
       ModSecurity
       AWStats
       その他の設定
     13. サーバの公開


  サーバ構築Top  > 12.各種セキュリティ設定  > (1)iptablesによる監視
    12. 安全性をより高めるための各種セキュリティ設定
前章までの設定でウェブサーバとメールサーバのひととおりの機能が構築されました。 次はいよいよサーバの公開に向けて準備をするところですが、ここまでの状態でサーバを実際に公開するのはセキュリティ面から見るとまだ不安な面があります。

本章では改めて各サーバのセキュリティ関連の設定を見直し、安全性を高めるための各種ソフトウェアを導入していきます。


    (1) iptablesによる監視

まずはじめにiptablesによるセキュリティ強化を再検討します。

iptablesの基本的な設定については 8.ファイアウォールサーバの構築 などで行いました。 このページでは、不正アクセスに対する監視やサーバへのアクセス制限をより厳しくする方法について記載していきます。

 ◇     ◇     ◇

<各種不正アクセスへの対応>

外部ネットワークからの不正アクセスに対応するためには、下記の各設定やルールの追加が考えられます。 (以下の各種不正アクセス対応はファイアウォールサーバ上で設定することを想定しています。)


SYN Flood攻撃、Smurf攻撃、Ping of Death等のDoSへの対策

DoS(Denial of Service)とは、ターゲットとなるネットワークに故意に大きな負荷をかけることなどにより、サーバが提供するサービスをダウンさせる攻撃です。

DoSのひとつであるSYN Flood攻撃は、外部から大量のSYNパケット(TCP接続開始要求)をサーバに送信することでサーバの機能を停止させます。 Smurf攻撃は、ブロードキャストアドレス宛に不正なPingコマンドを送りつけ、ネットワークに負荷をかけます。 また、Ping of Death攻撃もPingを利用して、不正な手段でサービスを妨害します。

これらの攻撃を防ぐために、下記のような設定を行います。

rootユーザでログインしたあと、下記のコマンドを打ちます。

[root@testserver ~]# echo 1 > /proc/sys/net/ipv4/tcp_syncookies
[root@testserver ~]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

さらに、/etc/sysctl.confファイルを編集します。

[root@testserver ~]# vi /etc/sysctl.conf

下記の行を追加します。

  net.ipv4.tcp_syncookies = 1
  net.ipv4.icmp_echo_ignore_broadcasts = 1

変更内容を保存してviを終了します。

次にiptablesのルールに下記を追加します。

  #ユーザ定義のチェインを作成
  iptables -N SYNFLOOD
  iptables -A SYNFLOOD -m limit --limit 1/s --limit-burst 10 -j ACCEPT
  iptables -A SYNFLOOD -j LOG --log-level warning --log-prefix "SYNFLOOD:"
  iptables -A SYNFLOOD -j DROP

  #各サーバへの転送を受けいれるルールに、ACCEPTの代りにSYNFLOODを指定
  iptables -A FORWARD -p tcp --syn -j SYNFLOOD

上記はサーバへのアクセス連続10回までは許可(limit-burst 10)、その後は1秒に1回(limit 1/s)まで許可、の場合の例です。 1秒以上パケットが来なければ段階的に連続回数限度が10まで復帰します。
設定値は環境にあわせて調整します。 (limit 6/m →1分間に6回まで許可、など)

上記-m limitを使用したアクセス制限では接続元のIPアドレスによらず、全ての接続をカウントしてしまいますが、例えばこれををIPアドレスごとの回数制限にする場合には、limitの代わりにhashlimitを使用します。 その場合、上記の例の上から2行目は、

  iptables -A SYNFLOOD -m hashlimit --hashlimit-name synflood --hashlimit 1/m --hashlimit-
  burst 3 --hashlimit-htable-expire 120000 -j ACCEPT

となります。 hashlimit-nameには任意の名前を、hashlimitには接続を許可する頻度を、hashlimit-burstには制限前の連続接続許可回数をそれぞれ指定します。 hashlimit-htable-expireにはリセットされる時間(ミリ秒)を指定します。 上記の例では、同じIPアドレスからの接続に対して、はじめの3回は無条件に許可、その後は1分に1回のみ許可します。


ファイアウォールサーバへのPingを許可している場合は、下記のルールも検討します。

  #ユーザ定義のチェインを作成
  iptables -N PINGOFDEATH
  iptables -A PINGOFDEATH -m limit --limit 1/m --limit-burst 4 -j ACCEPT
  iptables -A PINGOFDEATH -j LOG --log-level warning --log-prefix "PINGOFDEATH:"
  iptables -A PINGOFDEATH -j DROP

  #ファイアウォールサーバへのPingを制限
  iptables -A INPUT -p icmp --icmp-type 8 -j PINGOFDEATH

    (注)icmp-type 8:Echo Request


ポートスキャン対策

ポートスキャンとは、コンピュータ上のポートをチェックして、開いているポートを調べる処理を言います。 外部から不正侵入する場合はまずこのポートスキャンを試みることが多いので、これに対して対策が必要な場合は下記のようなルールを検討します。

  #ユーザ定義のチェインを作成
  iptables -N PORTSCAN
  iptables -A PORTSCAN -m hashlimit --hashlimit-name portscan --hashlimit 1/s --hashlimit-
  burst 10 --hashlimit-htable-expire 60000 -j RETURN
  iptables -A PORTSCAN -j LOG --log-level warning --log-prefix "PORTSCAN:"
  iptables -A PORTSCAN -j DROP

  #ポートスキャンを制限
  iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j PORTSCAN
  iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j PORTSCAN

上記の例では、PORTSCANチェックを行った後、問題ない場合はRETURNして、その他のルールの参照に戻るようにしています。


IP Spoofing対策

IP Spoofing(なりすまし)は、送信元のIPアドレスを別のIPアドレス(内部ネットワーク内のIPアドレスなど)に偽装した上で、ターゲットを攻撃したり不正侵入を試みたりするものです。 これを防ぐためには下記のルールを追加します。

  #ユーザ定義のチェインを作成
  iptables -N IPSPOOFING
  iptables -A IPSPOOFING -j LOG --log-level warning --log-prefix "IPSPOOFING:"
  iptables -A IPSPOOFING -j DROP

  #IP Spoofingを検出(外部から入ってくるパケットで送信元が内部IPアドレスのものははじく)
  iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j IPSPOOFING
  iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j IPSPOOFING
  iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j IPSPOOFING
  iptables -A INPUT -i eth0 -s 127.0.0.0/8 -j IPSPOOFING
  iptables -A FORWARD -i eth0 -s 10.0.0.0/8 -j IPSPOOFING
  iptables -A FORWARD -i eth0 -s 172.16.0.0/12 -j IPSPOOFING
  iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -j IPSPOOFING
  iptables -A FORWARD -i eth0 -s 127.0.0.0/8 -j IPSPOOFING


ブラックリストによるアクセス制限

特定のIPアドレスからの不正アクセスが頻繁にある場合には、そのIPアドレスからの接続を一切受け付けないように設定することができます。

  #ユーザ定義のチェインを作成(ログを取ってからDROP)
  iptables -N BLACKLIST_DROP
  iptables -A BLACKLIST_DROP -j LOG --log-level warning --log-prefix "BLACKLIST: "
  iptables -A BLACKLIST_DROP -j DROP

  #ユーザ定義のチェインを作成(ブラックリスト)
  iptables -N BLACKLIST
  iptables -A BLACKLIST -s xxx.xxx.xxx.xxx -j BLACKLIST_DROP
  iptables -A BLACKLIST -s xxx.xxx.xxx.xxx/xx -j BLACKLIST_DROP

  #ブラックリストをチェック
  iptables -A INPUT -j BLACKLIST
  iptables -A FORWARD -j BLACKLIST

xxx.xxx.xxx.xxxの部分には特定のIPアドレスを指定します。 ブラックリストには、xxx.xxx.xxx.xxxのように単一のIPアドレスを指定する以外に、xxx.xxx.xxx.xxx/xxの形式でIPアドレスの範囲を指定することもできます。 (例:xxx.xxx.xxx.xxx/29など)

 ◇     ◇     ◇

<ログの監視>

続いてiptablesのログの管理についても検討します。 iptablesのログは通常/var/log/messagesに出力されますが、iptablesから出力したログは別ファイルに保存されるように設定してみます。

まずiptables用のログファイルを用意します。

[root@testserver ~]# touch /var/log/iptables.log

次に、/etc/rsyslog.confを編集します。

[root@testserver ~]# vi /etc/rsyslog.conf

rsyslog.confの編集の仕方には以下の2パターンがありますので、どちらかの設定を行います。


(方法1)ログを/var/log/messagesと/var/log/iptables.logの双方に出力する場合

iptablesからのログのlog-levelを"warning"に設定している場合は下記の行を追加します。

  kern.=warning /var/log/iptables.log

(注)または、iptablesから出力するログのlog-prefix先頭に"IPTABLES:"をつけた上で、下記の行を追加する方法もあります。

  :msg,contains,"IPTABLES" /var/log/iptables.log


(方法2)ログを/var/log/messagesには出力せず、/var/log/iptables.logのみに出力する場合

log-levelが"debug"のログはデフォルトでどこにも出力されないので、iptablesから出力されるログのlog-levelを全て"debug"に設定した上で、これを/var/log/iptables.logへ出力します。

この場合はrsyslog.confに下記の行を追加します。

  kern.=debug /var/log/iptables.log


(方法1)または(方法2)でrsyslog.confを編集しましたら、保存して閉じたあと、rsyslogサービスを再起動します。

[root@testserver ~]# service rsyslog restart

以上でiptablesのログが専用のファイルに出力されるようになります。


ログがあまり頻繁に出力されるとログの量が多くなり、管理も大変になります。 ログの出力回数を制限する場合は、下記の例のように、ログ出力のルールにhashlimit等を使用して調整します。

  iptables -A SYNFLOOD -m hashlimit --hashlimit-name synfloodlog --hashlimit 1/m --hashli
  mit-burst 1 --hashlimit-htable-expire 120000 -j LOG --log-level warning --log-prefix "SY
  NFLOOD:"


(注)iptablesのルールを変更した場合はルールのsaveとiptablesサービスの再起動を行います。

 ◇     ◇     ◇

続いて次ページでは、アンチウィルスソフトを各サーバに導入します。



前のページへ <    メニューへ戻る    > 次のページへ 

12.安全性をより高めるための各種セキュリティ設定:
 
  ›(1)iptablesによる監視
   (2)アンチウィルスの導入
   (3)ModSecurity
   (4)ログ解析ツール
   (5)その他のセキュリティ設定
 
Copyright (C) 2011-2019 rurihabachi. All rights reserved.