MIRACLE

メールサービス申込 ユーザー登録&ログイン パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

テクノロジー情報


Linux技術トレーニング 基本管理コース II

第4章 セキュリティ対策とファイアウォール


3.ファイアウォールの使用
3-1.ファイアウォールの概要
  • Linuxに標準搭載されているネットワーク機能の1つ
  • 異なるネットワーク間のアクセス制御(パケットフィルタ)のために使用
  • IPテーブルと呼ばれる機構を利用

ファイアーウォールの概要

ファイアーウォールは、Linuxに標準搭載されているネットワーク機能の1つです。異なるネットワーク間のアクセス制御(パケットフィルタ)のために使用されます。また、自ホストへのアクセス制御にも使用できます。

バージョン2.4 のLinux カーネルでは、ネットワークのファイアウォール(パケットフィルタリング)のマッチングルールを管理する際にIP テーブルと呼ばれる機構を利用できます。

xinetd の設定ファイルでは、only_from やno_accessを使用することで、xinetd 経由で提供されるサービスに対してアクセス制限を行うことができましたが、「IPテーブル」を利用するとさらにカーネルレベルでの強力なアクセス制限ができます。


3-2.ファイアウォールの起動と停止
  • ファイアーウォールの起動
    # /sbin/service iptables start
    
  • ファイアーウォールの停止
    # /sbin/service iptables stop
    
  • ファイアーウォールの再起動
    # /sbin/service iptables restart
    

ファイアーウォールの起動と停止

ファイアーウォール(iptables)の起動/停止スクリプトは、/etc/rc.d/init.d/iptablesとなっています。起動スクリプトのオプションでは、起動(start)、停止(stop)、再起動(restart)、現在の状況を確認(status)を指定できます。

ファイアーウォールの状態を確認するには、次のコマンドを実行します。

# /sbin/service iptables status

実行結果は、下記のように表示されます。

テーブル: filter
Chain INPUT (policy DROP)
target    prot opt  source	 destination
ACCEPT    tcp  --  anywhere	anywhere 	tcp dpt:http
ACCEPT    tcp  --  anywhere	anywhere 	tcp spt:http
ACCEPT    tcp  --  anywhere	anywhere 	tcp dpt:ssh
ACCEPT    tcp  --  anywhere	anywhere 	tcp spt:ssh

Chain FORWARD (policy DROP)
target    prot opt  source 	 destination

Chain OUTPUT (policy ACCEPT)
target    prot opt  source 	 destination

一時的に外部からの接続をすべて遮断するには、次のコマンドを実行します。すべてのホストからのアクセスが拒否されることになるので、実行後に何らかの操作を行うためには、ホストに対して物理的にアクセスできる状況を用意する必要があります。

# /sbin/service iptables panic

iptables コマンドを直接実行して変更を加えたIP テーブルの状態を、再起動を行った後にも反映させるには、次のコマンドを実行して、現在の状態を設定ファイルに保存する必要があります。

# /sbin/service iptables save

設定ファイルに記述したIP テーブルの設定を、システム起動時に反映させるためには、次のコマンドを実行します。

# /sbin/chkconfig iptables on

逆に、設定ファイルに記述したIP テーブルの設定を、システム起動時に反映させないようにするには、次のコマンドを実行します。

# /sbin/chkconfig iptables off

3-3.ファイアウォールの設定
(1) アクセス制限
  • 特定のホストまたはネットワークからのアクセスを制限
    -A INPUT -s host1.specific.domain.name -j REJECT
    
  • 特定のホストまたはネットワークへのアクセスを制限
    -A OUTPUT -d host2.specific.domain.name -j REJECT
    
    上記エントリを設定ファイル/etc/sysconfig/iptablesに記述された状態でIPテーブル設定用スクリプトを実行

特定のホストまたはネットワークからのアクセス制限
-A INPUT -s host1.specific.domain.name -j REJECT

上記エントリが設定ファイル/etc/sysconfig/iptables に記述された状態でIP テーブル設定用スクリプトが実行されると、ホストhost1.specific.domain.name からのあらゆるアクセスは拒絶されます。-Aオプションがルールの追加を、INPUTが外部からのアクセスに対する設定であることを、-sオプションが対象となるソースアドレス(発信元のIPアドレスまたはホスト名)を、-jがジャンプの対象となるターゲット(上記の例ではREJECT)を意味します。

さらにオプションを追加することで、より詳細なルールを設定できます。下記の例は10.1.1.1 〜 254からns.your.domain.name のTelnet ポートへの接続を禁じる設定の例です。-dが接続先のホストを、-pがプロトコルを、--dportが宛先ポート番号を意味します。

-A INPUT -p tcp -s 10.1.1.0/24 -d ns.your.domain.name --dport 23 -j REJECT

複数のルールを組み合わせることで、特定のホストまたはネットワークからの接続のみを許可することも可能です。下記の例では、最初のエントリで10.1.2.1 〜 254からのns.your.domain.name へのTelnet ポートへの接続を許可して、次のエントリですべてのネットワークからのTelnet ポートへの接続を禁止しています。この場合、先に設定された接続許可は、続いて設定されたすべてのネットワークからの接続禁止に優先します。

-A INPUT -p tcp -s 10.1.2.0/24 -d ns.your.domain.name --dport 23 -j ACCEPT
-A INPUT -p tcp -s  0.0.0.0/24 -d ns.your.domain.name --dport 23 -j REJECT

特定のホストまたはネットワークへのアクセスを制限
-A OUTPUT -d host2.specific.domain.name -j REJECT

上記のエントリが設定ファイル/etc/sysconfig/iptablesに記述された状態でIP テーブル設定用スクリプトが実行されると、ホストhost2.specific.domain.name へのアクセスを禁止することになります。他のオプションについては、INPUT と同様に指定できます。


(2) パケットの転送
  • パケットの転送を有効にする(標準のシステム設定では無効)
    • 設定ファイルを編集して再起動する方法
    • コマンドでパケット転送を可能にする方法
      # /bin/echo 1 > /proc/sys/net/ipv4/ip_forward
      
    • コマンドでパケット転送を可能にした場合
      ホスト再起動後設定が無効となるため、/etc/sysctl.confファイルを変更して、恒久的に可能とする

パケット転送の有効

パケット転送を行うにはまずパケット転送を可能にしなくてはいけません。標準のシステム設定ではパケットの転送が無効となっているので、事前に次のコマンドを実行するか、設定ファイルを編集して再起動しておく必要があります。
コマンドでパケットの転送を可能とするには、次のようにします。

# /bin/echo 1 > /proc/sys/net/ipv4/ip_forward

コマンドで設定した場合には、ホストを再起動した際に設定が無効となってしまうので、恒久的に可能とするためにはネットワークの基本設定ファイルである/etc/sysctl.confファイルを変更してください。ただし、設定ファイルに変更を加えただけでは実際の設定に変更が加えられないので、上記のコマンドを実行して同様の効果を一時的に実現するか、ホストを再起動する必要があります。

  • 変更前―― net.ipv4.ip_forward = 0
  • 変更後―― net.ipv4.ip_forward = 1

(3) IPマスカレードの設定
  • パケットの転送に関するルールの設定を行う際にはFORWARDチェインを指定
  • IPマスカレードを行う際には、-jパラメータにMASQUERADEを指定
  • IPマスカレードを行う際には、必要に応じてモジュールをロードする

IPマスカレードの設定

パケットの転送を可能としてから、IP マスカレードを実現するためのルールを設定します。パケットの転送に関するルールの設定を行う際には、FORWARD チェインを指定します。またIP マスカレードを行う際にはジャンプするターゲットとしてMASQUERADE を指定します。
下記の例は、パケットを受信するインターフェイスのeth0に対して、ウェブへのアクセスを可能にするエントリです。

-t nat -A POSTROUTING -o eth0 -j MASQUERADE
-A FORWARD -i eth0 -p tcp -dport 80 -j ACCEPT

IP マスカレードを行う際には、実現したい機能に応じて必要となるモジュールをロードする必要があります。システム起動時にロードさせる場合には/etc/rc.d/rc.local へ下記のような記述を追加してください。なおシステムに不要なモジュールをロードする必要はありません。

/sbin/modprobe ip_nat_ftp	← ftpの転送を許可する場合
/sbin/modprobe ip_nat_tftp	← tftpの転送を許可する場合
/sbin/modprobe ip_nat_irc	← IRCの転送を許可する場合

次に示す/etc/sysconfig/iptables 例ではeth0 が内部ネットワーク(192.168.1.0/24)との、eth1が外部ネットワークとの接続に使用しているインターフェイスとして、設定しているホスト(IPアドレスを仮にaaa.bbb.ccc.ddd とします)でメールとウェブのサービスを行うことを仮定しています。いずれも例なので、実際には使用される条件に合わせて適切な値を設定するようにしてください。

DROPターゲットは、パケットを無視して発信元に対して何も反応を示さないことを意味します。

:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

# 外部からの偽装IPを無視
-A INPUT -s 10.0.0.0/8 -j DROP -i eth1
-A INPUT -s 172.16.0.0/12 -j DROP -i eth1
-A INPUT -s 192.168.0.0/16 -j DROP -i eth1
-A INPUT -s 127.0.0.0/8 -j DROP -i ! lo

# プライベートアドレスの外部流出を防止
-A OUTPUT -s 0.0.0.0/0 -d 10.0.0.0/8 -j REJECT -i eth1
-A OUTPUT -s 0.0.0.0/0 -d 172.16.0.0/12 -j REJECT -i eth1
-A OUTPUT -s 0.0.0.0/0 -d 192.168.0.0/16 -j REJECT -i eth1

# NetBIOS over TCP/IPの接続を禁止
-A INPUT -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 137:139 -j DROP -i eth1
-A INPUT -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 445 -j DROP -i eth1

# Web Serverへのアクセスを許可
-A INPUT -s 0.0.0.0/0 --sport 1024:65535 -d aaa.bbb.ccc.ddd --dport 80 -i eth1 -p tcp -j ACCEPT
-A INPUT -s 0.0.0.0/0 --sport 1024:65535 -d aaa.bbb.ccc.ddd --dport 443 -i eth1 -p tcp -j ACCEPT

# SMTPの接続を許可
-A INPUT -s 0.0.0.0/0 --sport 1024:65535 -d aaa.bbb.ccc.ddde --dport 25 -i eth1 -p tcp -j ACCEPT

# 上記以外のeth1に対するSYNを落とす
-A INPUT -s 0.0.0.0/0 -d aaa.bbb.ccc.ddd -i eth1 -p tcp -j REJECT

# 上記以外のeth1に対するudp接続を禁止
-A INPUT -s 0.0.0.0/0 -d aaa.bbb.ccc.ddd -i eth1 -p udp -j REJECT

# 内部からの外部向けFORWARDを許可
-t nat -A POSTROUTING -o eth1 -j MASQUERADE
-A FORWARD -d 192.168.1.0/24 -j ACCEPT

(4) ACL(Access Control List)
  • ACLはカーネル2.6から標準で採用された機能
  • システムセキュリティ対策のひとつとして使用できる
  • 基本的なパーミッションでは実現が困難なきめ細かなアクセスコントロールが可能
    (例)グループ内の特定ユーザーに対して権限を付与

ACL(Access Control List)の設定

ACLはカーネル2.6から標準で採用された機能であり、基本的なパーミッションでは実現が困難なきめ細かなアクセスコントロールが可能となります。その例としてはあるグループに対して読込み・書込み・実行を拒否するが、その中の特定のユーザにだけ読込み・書込みの権限を与えたい場合などにACLを利用することで実現できます。

以下の例ではmiracleユーザ(miracleグループ)が所有しているtest.data ファイルに対して、miracleユーザとそのグループであるmiracleグループのみ読込み・書込みの許可をパーミッション(-rw-rw----)で与えています。そのため他グループであるgroup1グループに所属しているユーザ(user1,user2,user3)からはtest.dataにアクセスできません。ACLを利用することでgroup1グループのuser3ユーザに対してのみ読込み・書込みを許可することが可能になります。

ACL(Access Control List)の設定概要図

(A) ACLの使用条件
  • ACLを使用するために、利用しているファイルシステムで以下の設定を行う
    • ext3 ― mountのオプションにaclを指定
    • Reiser ― mountのオプションにaclを指定
    • xfs ― 設定不要

ACLの使用条件

ACLを使用するためには利用しているファイルシステムによって以下の設定を行う必要があります。

acl指定のマウントコマンド

# /bin/mount -t ext3 -o acl /dev/sdb1 /home

/etc/fstabでの設定方法

/dev/hdb1 	/acl	 ext3   acl   	 0     	0

マウント状態(ACL利用可能)の確認

# /bin/mount
/dev/hda3 on / type ext3 (rw)
省略
/dev/sdb1 on /home type ext3 (rw,acl)

(B) ACLの設定
  • ACLの設定
    • setfacl ― 設定コマンド
    • getfacl ― 表示コマンド

ACLの設定

ACLを設定するにはsetfaclコマンド、表示するにはgetfaclコマンドを使用します。ACLの設定方法について説明します。
現状のパーミッションを確認します。

$ /bin/ls -l test.data
-rw-rw---- 1 miracle miracle 0 8月 15 13:38 test.data

所有ユーザ、グループに対して読込み・書込みを許可している。
user1からuser3ユーザで/home/miracle/test.dataをアクセスすると、「許可がありません」となりアクセスできません。

$ /bin/cat /home/miracle/test.data
cat: /home/miracle/test.data: 許可がありません

次にACLを利用し、user3ユーザに対して読込み・書込みを許可します。

$ /usr/bin/setfacl -m u:user3:rw /home/miracle/test.data

ACLの設定が正しいか確認します。

$ /bin/ls -l test.data
-rw-rw----+ 1 miracle miracle 5 8月 15 14:08 /home/miracle/test.data
     ↑
   ACLが設定されるとパーミッションの表示の後ろに"+"が付きます
$ /usr/bin/getfacl /home/miracle/test.data
# file: home/miracle/test.data
# owner: miracle
# group: miracle
user::rwuser:
user3:rw- −> user3に対して読込み・書込みを許可
group::rwmask::
rwother::---

user3ユーザで/home/miracle/test.dataへのアクセス確認を行います。

$ /bin/cat /home/miracle/test.data
test

ACLを利用したグループに対するアクセス権限付与方法

$ /usr/bin/setfacl -m g:group1:r /home/miracle/test.data
$ /usr/bin/getfacl test.data
# file: home/miracle/test.data
# owner: miracle
# group: miracle
user::rwuser:
user3:rwgroup::
rwgroup:
group1:r-- −> group1に対して読込みを許可
mask::rw
other::---

以上のようにACLを利用することで、今までのパーミッション設定だけではできなかった、ユーザ、グループ単位でのきめ細かなファイルへのアクセス制御が可能になりますので、不用意な情報漏洩を阻止することが可能になりシステム全体のセキュリティを高めることができます。


3-4.syslogについて
(1) syslogの起動と停止
  • サーバーの運用状況や、サーバーへのアクセス状況はsyslogを用いてログに記録される
  • syslogサーバーの起動
    # /sbin/service syslog start
    
  • syslogサーバーの停止
    # /sbin/service syslog stop
    

syslogの起動と停止

サーバーの運用状況や、サーバーへのアクセス状況はシステムのログに記録されます。ほとんどのサービスにおいて、ログの記録はsyslogdによって行われます。 syslogサーバーを使用するには、syslogdを起動する必要があります。syslogdの起動/停止スクリプトは、/etc/rc.d/init.d/syslogとなっています。起動スクリプトのオプションでは、起動(start)、停止(stop)、再起動(restart)、現在の状況を確認(status)を指定できます。

(2) syslogの設定
  • /etc/syslog.confで、それぞれのレベルに応じた記録を設定できる
  • syslog.confファイルの書式
    [ファシリティ].[プライオリティ] [出力先]
    
  • s/var/log/secureにユーザー認証の情報が記録
    不正なログインを確認できる(デフォルトの設定)

syslog設定ファイルのファシリティ項目

ファシリティ 説明
auth 認証
authpriv ローカル認証
cron cron
daemon デーモン
kern カーネル
lpr 印刷
mail メール
news ニュース
syslog syslog
user user
uucp uucp
local0〜local7 ローカルなファシリティ

syslog設定ファイルのプライオリティ項目

プライオリティ 説明
none メッセージを無視
debug デバックメッセージ
info 一般的なメッセージ
notice 注意を要するメッセージ
warning 警告メッセージ
err 一般的な障害メッセージ
crit 危機的な状況
alert 即時に対処を要するメッセージ
emerg システムパニック

第4章 2へ 第5章 1へ

■この資料の評価をお願いします。
とても参考になった
参考になった
どちらでもない
あまり参考にならなかった
まったく参考にならなかった

コメントがある場合は以下に記述してください。技術資料として取り上げてほしいテーマも受け付けています。

以下は任意です。

お名前(フルネーム) :
会社名 :
メールアドレス :
 

会社情報 採用情報 個人情報保護方針 情報セキュリティ基本方針 商標等取り扱い事項 English
Copyright(c)2000-2015 MIRACLE LINUX CORPORATION. All Rights Reserved.