|
||||||||||||||||||||||||||||||||||||||||||||||||||
Linux技術トレーニング 基本管理コース II第4章 セキュリティ対策とファイアウォール
3.ファイアウォールの使用3-1.ファイアウォールの概要
ファイアーウォールの概要
ファイアーウォールは、Linuxに標準搭載されているネットワーク機能の1つです。異なるネットワーク間のアクセス制御(パケットフィルタ)のために使用されます。また、自ホストへのアクセス制御にも使用できます。 バージョン2.4 のLinux カーネルでは、ネットワークのファイアウォール(パケットフィルタリング)のマッチングルールを管理する際にIP テーブルと呼ばれる機構を利用できます。 xinetd の設定ファイルでは、only_from やno_accessを使用することで、xinetd 経由で提供されるサービスに対してアクセス制限を行うことができましたが、「IPテーブル」を利用するとさらにカーネルレベルでの強力なアクセス制限ができます。 3-2.ファイアウォールの起動と停止
ファイアーウォールの起動と停止
ファイアーウォール(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 上記エントリが設定ファイル/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ファイルを変更してください。ただし、設定ファイルに変更を加えただけでは実際の設定に変更が加えられないので、上記のコマンドを実行して同様の効果を一時的に実現するか、ホストを再起動する必要があります。
(3) IPマスカレードの設定
IPマスカレードの設定
パケットの転送を可能としてから、IP マスカレードを実現するためのルールを設定します。パケットの転送に関するルールの設定を行う際には、FORWARD チェインを指定します。またIP マスカレードを行う際にはジャンプするターゲットとしてMASQUERADE を指定します。 -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(Access Control List)の設定
ACLはカーネル2.6から標準で採用された機能であり、基本的なパーミッションでは実現が困難なきめ細かなアクセスコントロールが可能となります。その例としてはあるグループに対して読込み・書込み・実行を拒否するが、その中の特定のユーザにだけ読込み・書込みの権限を与えたい場合などにACLを利用することで実現できます。 以下の例ではmiracleユーザ(miracleグループ)が所有しているtest.data ファイルに対して、miracleユーザとそのグループであるmiracleグループのみ読込み・書込みの許可をパーミッション(-rw-rw----)で与えています。そのため他グループであるgroup1グループに所属しているユーザ(user1,user2,user3)からはtest.dataにアクセスできません。ACLを利用することでgroup1グループのuser3ユーザに対してのみ読込み・書込みを許可することが可能になります。
(A) ACLの使用条件
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の設定
ACLを設定するにはsetfaclコマンド、表示するにはgetfaclコマンドを使用します。ACLの設定方法について説明します。 $ /bin/ls -l test.data -rw-rw---- 1 miracle miracle 0 8月 15 13:38 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の起動と停止
(2) syslogの設定
サーバーの運用状況や、サーバーへのアクセス状況はシステムのログに記録されます。ほとんどのサービスにおいて、ログの記録はsyslogdによって行われます。 syslogサーバーを使用するには、syslogdを起動する必要があります。syslogdの起動/停止スクリプトは、/etc/rc.d/init.d/syslogとなっています。起動スクリプトのオプションでは、起動(start)、停止(stop)、再起動(restart)、現在の状況を確認(status)を指定できます。
syslog設定ファイルのファシリティ項目
syslog設定ファイルのプライオリティ項目
|