トップページ > インフォメーション

自宅サーバ構築MY HOME SERVER

セキュリティー設定 ファイアウオール(iptables) iptables編集 ルータポート開放について ポート開放テスト SELinux ウイルスソフト(Clam AntiVirus)

- セキュリティー設定 -

自宅サーバを外部公開する場合、セキュリティに留意する必要があります。外部からの不正アクセス、乗っ取られて踏み台にされる、ウイルス感染、 データの改ざん等に対する対策を講じる必要があります。Linux系OSは普及率がWindowsに比べて断然低いことから、攻撃対象とされる可能性が低い です。しかし不特定多数を相手に公開する場合、やはりセキュリティ対策を講じて置かないと、自宅サーバばかりでなく外部ネットワークに対して も被害を及ぼすことになります。 不正進入対策としてパケットフィルタリング(iptables)、ウイルス対策としてアンチウイルスソフト(ClamAV)の導入方法について説明します。



- ファイアウオール(iptables) -

CentOSをインストール完了した時点では、ルータのファイアウオール、CentOSのファイアウオール(iptables)が有効になっています。CentOSは 2重のファイアウオールで外部からの不正アクセスを遮断しもらっている状態です。

サーバ設定に際して、ルータ及びiptablesの両方のポートを開放する作業がどうしても必要になってきます。外部からのアクセスはさせないで、 内部(ローカルネットワーク)だけサーバにアクセスさせると言うのであれば、iptablesのポート開放だけの作業になります。 本サイトで紹介しているサーバ機能追加の際、開放が必要なポート番号は以下のとおりです。

ポート番号 プロトコール 用途
21 ftp ファイル転送
22 ssh SSH(暗号化)
25 smtp メール送受信:SMTP
53 domain DNS
80 http WWW
110 pop3 メール受信(POP)
137 netbios 名前解決
138 netbios ブラウジング
139 netbios ファイル/プリンタ共有
143 imap メール(IMAP)
443 https WWW(暗号化)
465 smpts SMTP Over SSL
587 smtp smtp認証
993 imap SSL(暗号化)
995 pop SSL(暗号化)

外部からのアクセスを認める場合、ルータ側のポートも開放をしますが、ftpやsshに関しては 必要な場合のみ開けるようにしてください。

サーバとクライアント間のファイル転送はftpよりも、ssh接続のほうが暗号化通信できる点 から考えるとセキュリティーが強化されています。


WWW(ウエブページ)の外部公開はルータのポート開放をする必要があります。メールに関しても メールを外部ドメインとの間で、送受信するのであればルータのポート開放が必要です。

netbiosポート番号(137,138,139)はsamba(ファイル共有サーバ)導入時に、iptables側だけ開放します。
ルータ側は開放しません。






外部ドメインから自宅メールサーバにアクセスする場合、SSL(暗号化)通信が必須です。そのために に必要なボート番号をルータ側でも開放する必要があります。

ポート開放例

・ftp接続は必要な場合のみiptablesポート開放。ルータ側ポート開放はしない。
・SSH接続はiptablesのみポート開放。ルータ側ポート開放は外部ドメインから操作する必要がある場合のみ。
・ファイル共有(samba)はiptablesのみポート開放。
・ウエブサーバ(Aache)及びウエブメールは外部公開する場合、iptables及びルータのポート開放
・メールサーバはiptables及びルータのポート開放
・ウエブファイル共有(WebDAV)はiptablesのみポート開放。ルータ側は外部ドメインから操作する場合のみ。

iptablesの設定前と、設定後のサンプルです。catコマンドを使うと、設定の内容が表示されます。
設定前
[root@hoge123~]# cat /etc/sysconfig/iptables

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

設定後
# Generated by iptables-save v1.4.7 on Thu Jun 14 20:28:07 2012
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [5:1034]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A INPUT -p udp -m udp --dport 137 -j ACCEPT
-A INPUT -p udp -m udp --dport 138 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 139 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 587 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 995 -j ACCEPT
-A INPUT -j LOG --log-prefix "[iptables] " --log-level 6
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

設定後の内容は下記ポリシーに沿ってファイアウォールの設定を行っています(パケットフィルタリングはルータに任せると言う場合は、iptables を無効にします。)
・入力パケットは全て破棄
・転送パケットは全て破棄
・出力パケットは全て許可
・ポリシーにマッチしない通信は「/var/log/messages」に記録する

ローカルネットワーク内(192.168.0.0/24)からのアクセスは全て許可、外部からのアクセスは全て拒否とする場合は下記のとおりになります。 この場合、ウエブページも外部から閲覧できません。メールも外部に送信できても、受信は出来ません。ローカルネットワークのみ 送受信が出来ます。LAN(192.168.0.0/24)の箇所はご自分の環境に合わせます。例:ルータIPが192.168.1.1なら192.168.1.0/24になります。
# Generated by iptables-save v1.4.7 on Thu Jun 14 20:28:07 2012
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [5:1034]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -j ACCEPT
-A INPUT -j LOG --log-prefix "[iptables] " --log-level 6
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT



- iptables編集 -

iptablesの編集方法は二通りあります。コマンドラインから編集する方法と、毎度おなじみviエディタで編集する方法です。 コマンドラインは80番ポートを追加して、保存する例です。
[root@hoge123~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
[root@hoge123~]# /etc/rc.d/init.d/iptables save
iptables: ファイアウォールのルールを /etc/sysconfig/iptable[  OK  ]中:

[root@hoge123~]# vi /etc/sysconfig/iptables ← 直接編集する場合です。

iptablesを再起動させる方法です(設定内容を変更後、反映させるために必要です)
[root@hoge123~]# /etc/init.d/iptables restart
iptables: ファイアウォールルールを消去中:                        [ OK ]
iptables: チェインをポリシー ACCEPT へ設定中filter            [ OK ]
iptables: モジュールを取り外し中:                                 [ OK ]
iptables: ファイアウォールルールを適用中:                        [ OK ]
[root@hoge123~]#

iptablesを無効・有効にする方法です。
[root@hoge123~]# /etc/init.d/iptables stop ← 無効にします。
iptables: ファイアウォールルールを消去中:                        [ OK ]
iptables: チェインをポリシー ACCEPT へ設定中filter            [ OK ]
iptables: モジュールを取り外し中:                                 [ OK ]
iptables: ファイアウォールルールを適用中:                        [ OK ]

[root@hoge123~]# /etc/init.d/iptables start ← 有効にします。
iptables: ファイアウォールルールを適用中:                        [ OK ]

iptablesをサーバ再起動・シャットダウン後も有効あるいは無効にする方法です。
[root@hoge123~]# chkconfig iptables on
[root@hoge123~]# chkconfig --list iptables
iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off

[root@hoge123~]# chkconfig iptables off
[root@hoge123~]# chkconfig --list iptables
iptables        0:off   1:off   2:off   3:off   4:off   5:off   6:off



- ルータポート開放について -

ルータのポート開放はメーカーなどによって違いますが、静的NATやIPマスカレード等のメニュー表示を選択して開放するポート番号 を入れて設定を保存します。詳細はネット上で、「ポート開放」等の項目で検索してください。

既にウエブサーバ(Apache)の設定済みと仮定して、80番と443番ポートを開放する例で説明します。設定するルータはNTT PR-S300SE です。ルータにアクセスするため、ルータのIPアドレスを調べます。

ウインドウズの「スタート」、「ファイル名を指定して実行」を選択します。「ファイル名を指定して実行」のWindow が出てきたら、cmd と入力します。後は、コマンドプロンプトで確認します。 Win7の場合、検索Windowに cmd と入力します。
C:\Documents and Settings\hogehoge>ipconfig ← ipconfig と入力します。


Windows IP Configuration


Ethernet adapter ローカル エリア接続:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : 192.168.0.13
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 192.168.0.1 ← ルータのIPアドレスです  

C:\Documents and Settings\hogehoge>exit


IEを開きアドレスに192.168.0.1 を入力します。ルータに既に設定してあるユーザ名、パスワードを入力して「OK」を押します。 不明な場合、ルータのマニュアルを参照してください。

18.jpg(26137 byte)


左メニュから詳細設定を選択します。 19.jpg(70571 byte)

「静的NAT設定」を選択します。 20.jpg(66337 byte)

下図はTCPポート 80番を開け、アクセスを待ち受けているサーバのIPアドレスを入力した例です。入力後、 「設定」を押して保存します。80番が終わったら、ポート443を開ける設定をしますが、下図の例では 変換対象ポートを443にして変更を保存します。
これでルータのポート番号80、 443は開放されました。他のポート番号を開けるときも、まったく同じ方法で 開けます。 21.jpg(64802 byte)

iptablesも同様にポート80 番と443 番を開ける設定をします。既存のiptablesの設定に下記内容を追記します。
         
[root@hoge123~]# vi /etc/sysconfig/iptables

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT 

-A INPUT -j LOG --log-level info --log-prefix "[iptables] "
-A INPUT -j REJECT --reject-with icmp-host-prohibited

[root@hoge123~]# /etc/init.d/iptables restart ← 変更を反映させるために再起動します。




- ポート開放テスト -

外部からサーバのポート開放の状態を確認します。 ここをクリックしてください。 22.jpg(76350 byte)

サーバの「ドメイン名」、「確認ポート番号」を入力します。「制約事項」にチェックを入れ「ポートチェック実行」 を押します。下図のように応答があれば、80番ポートは開放されています。 23.jpg(89061 byte)

今度は、443を入れて確認します。下図はポートは開放されているけれども、待ち受けるサーバのサービスが起動 していなか、サービスが別のポート番号を使用している事を示します。443はwwwでSSLを用いるときに使用される ポートです。今回は、まだSSLは利用されていないので下記結果が出てきました。ApacheでSSLを利用するには、 モジュールを組み込む必要があります。
ウエブページ暗号化(SSL) の設定が完了していれば、ポート443は「アクセスできました」 に変わります。 24.jpg(90145 byte)

もし、下図のような文言が表示された場合、対象ポートがブロックされていることを示します。ルータ及びiptablesの 設定を見直す必要があります。 25.jpg(86270 byte)



- SELinux -

SELinuxはデフォルトで有効になっています。無効・有効にする方法は以下のとおりです。
[root@hoge123~]# getenforce ← 現在のSELinuxの状態を確認します。
Enforcing ← Enforcingは有効になっていることを意味します。

[root@hoge123~]# setenforce 0 ← 無効にします。「1」だと有効になります。
[root@hoge123~]# getenforce ← 現在のSELinuxの状態を確認します。
Permissive  ← SELinuxが無効の状態になっています。

SELinuxは無効にしてもサーバ再起動・シャットダウンすると、起動時有効になります。有効になら ないよう設定します。
サーバ側設定が完了した後、SELinuxを有効にするとDovecot(POP/IMPAPサーバ)やSambaがうまく動作し なくなります。その場合、SELinuxを無効設定にして、サーバーを再起動します。その後、うまく動作しなかったサービス(dovecot、smb) もrestartさせて下さい。SELinuxを無効にしただけでは、正常に動作しません。

          
[root@hoge123~]# vi /etc/sysconfig/selinux

- disabled に変更します -
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted



- ウイルスソフト(Clam AntiVirus) -

※メールサーバ導入予定の場合、最初にメールサーバを導入してからウイルスソフトをインストールしてください。
Linux系OSはウイルス感染しない、と思っている人がたくさんいます。実際に感染例がほとんどないことから、導入しないで 使用して良いかはサーバ管理者の判断になります。Windowsの場合ユーザが多いことから、セキュリティホールを突いた攻撃をよく受けますが Linuxの場合、使用者が少ないことから攻撃されにくいと言うのは事実です。

しかしファイル共有やメールサーバ用途で運用している場合、Windowsで感染するウイルスが入ってくるかもしれません。その場合、Linuxでは 感染しなくても、Linuxサーバを経由して他のWindowsパソコンへの感染拡大の手伝いをするかもしれません。 その可能性を低くするためにサーバにはウイルスソフトが必要です。

今回は無償提供されているClam AntiVirus をインストールして、定期的に自動更新する設定をします。 dagリボジトリ作成済みであることを前提にします。
Clamav をダウンロード・インストールします。
[root@hoge123~]# yum --enablerepo=rpmforge -y install clamav

[root@hoge123~]# freshclam ← ウイルス定義ファイルを更新します。

- 定義ファイル更新したときに、以下のようなエラーが出た場合、設定ファイルを変更します。 -

ERROR: Clamd was NOT notified: Can't find or parse configuration file /etc/clamd.conf

[root@hoge123~]# vi /etc/freshclam.conf
#NotifyClamd /etc/clamd.conf ← # を入力して、エラーメッセージが出ないようにします。

試しにhomeフォルダー内を手動チェックしてみます。
[root@hoge123~]# clamscan --log=/var/log/clamav.log --infected --remove --recursive /home/

----------- SCAN SUMMARY -----------
Known viruses: 1245256
Engine version: 0.97.4
Scanned directories: 5
Scanned files: 9
Infected files: 0 ← 感染0 を表示しています。
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 6.692 sec (0 m 6 s)

- 無害の試験用ウィルスをダウンロードします。 -
[root@hoge123~]# wget -P /home/ http://www.eicar.org/download/eicar.com
[root@hoge123~]# clamscan --log=/var/log/clamav.log --infected --remove --recursive /home/
↑ homeフォルダをチェックします。

/home/eicar.com: Eicar-Test-Signature FOUND
/home/eicar.com: Removed. ← 感染ファイルが削除されました。

----------- SCAN SUMMARY -----------
Known viruses: 1245256
Engine version: 0.97.4
Scanned directories: 5
Scanned files: 10
Infected files: 1
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 6.680 sec (0 m 6 s)

デフォルトで入っている自動更新プログラム cronie-anacron を削除して cronie-noanacron をインストールします。
(既にシステムアップデートで実施している場合は不要です)
[root@hoge123~]# yum -y install cronie-noanacron
[root@hoge123~]# yum -y remove cronie-anacron

Clamavのログを作成します。viエディタを起動し、clamav.logを新規作成します。 新規作成なので、中は空です。wqコマンドで保存します。
[root@hoge123~]# vi /var/log/clamav.log


自動更新するように定義ファイルを作成し、毎日、ウイルススキャンする設定をします。
[root@hoge123~]# crontab -e

下記内容を貼り付け・保存します。3時間毎にウイルス定義ファイルの自動更新が行われ、 毎日03:00にウイルススキャンを行います。スキャンするフォルダはhomeディレクトリの中だけにします。結果は freshclam.log、clamav.logに記録されます。

00 0-23/3 * * * /usr/bin/freshclam --quiet -l /var/log/clamav/freshclam.log
00 03 * * * /usr/bin/clamscan --log=/var/log/clamav.log --infected --remove --recursive /home



自宅サーバ構築(CentOS6.3)に戻る

Copyright(C) PCDEMAGIC All Rights Reserved.