自宅サーバ構築MY HOME SERVER
セキュリティー設定 ファイアウオール(iptables) iptables編集 ルータポート開放について ポート開放テスト ウイルスソフト(Clam AntiVirus) |
- セキュリティー設定 -
自宅サーバを外部公開する場合、セキュリティに留意する必要があります。外部からの不正アクセス、乗っ取られて踏み台にされる、ウイルス感染、 データの改ざん等に対する対策を講じる必要があります。Linux系OSは普及率がWindowsに比べて断然低いことから、攻撃対象とされる可能性が低い です。しかし不特定多数を相手に公開する場合、やはりセキュリティ対策を講じて置かないと、自宅サーバばかりでなく外部ネットワークに対して も被害を及ぼすことになります。 不正進入対策としてパケットフィルタリング(iptables)、ウイルス対策としてアンチウイルスソフト(ClamAV)の導入方法について説明します。
- ファイアウオール(iptables) -
Vine Linux6をインストール完了した時点では、ルータのファイアウオール、Vine Linuxのファイアウオール(iptables)が有効になっています。Vine Linuxは
2重のファイアウオールで外部からの不正アクセスを遮断しもらっている状態です。
サーバ設定に際して、ルータ及びiptablesの両方のポートを開放する作業がどうしても必要になってきます。外部からのアクセスはさせないで、
内部(ローカルネットワーク)だけサーバにアクセスさせると言うのであれば、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のみポート開放。ルータ側は外部ドメインから操作する場合のみ。
設定前
[root@hoge123~]# cat /etc/sysconfig/iptables # Firewall configuration written by system-config-securitylevel # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p 50 -j ACCEPT -A RH-Firewall-1-INPUT -p 51 -j ACCEPT -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT |
設定後
Firewall configuration written by system-config-securitylevel # Manual customization of this file is not recommended. *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p 50 -j ACCEPT -A RH-Firewall-1-INPUT -p 51 -j ACCEPT -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 137 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 138 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 53 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 139 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 465 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10000 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT |
- iptables編集 -
iptablesの編集方法は二通りあります。コマンドラインから編集する方法と、毎度おなじみviエディタで編集する方法です。 コマンドラインは80番ポートを追加して、保存する例です。
[root@hoge123~]# iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT ← 80番ポート開放するためのコマンドです。 [root@hoge123~]# /etc/rc.d/init.d/iptables save ← コマンドの内容をiptablesに保存します。 iptables: ファイアウォールのルールを /etc/sysconfig/iptable[ OK ]中: [root@hoge123~]# vi /etc/sysconfig/iptables ← 直接編集する場合です。 |
iptablesを再起動させる方法です(設定内容を変更後、反映させるために必要です)
[root@hoge123~]# /etc/rc.d/init.d/iptables restart iptables: ファイアウォールルールを消去中: [ OK ] iptables: チェインをポリシー ACCEPT へ設定中filter [ OK ] iptables: モジュールを取り外し中: [ OK ] iptables: ファイアウォールルールを適用中: [ OK ] [root@hoge123~]# |
iptablesを無効・有効にする方法です。
[root@hoge123~]# /etc/rc.d/init.d/iptables stop ← 無効にします。 iptables: ファイアウォールルールを消去中: [ OK ] iptables: チェインをポリシー ACCEPT へ設定中filter [ OK ] iptables: モジュールを取り外し中: [ OK ] iptables: ファイアウォールルールを適用中: [ OK ] [root@hoge123~]# /etc/rc.d/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アドレスを調べます。
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」を押します。 不明な場合、ルータのマニュアルを参照してください。
左メニュから詳細設定を選択します。
「静的NAT設定」を選択します。
下図はTCPポート 80番を開け、アクセスを待ち受けているサーバのIPアドレスを入力した例です。入力後、 「設定」を押して保存します。80番が終わったら、ポート443を開ける設定をしますが、下図の例では 変換対象ポートを443にして変更を保存します。
これでルータのポート番号80、 443は開放されました。他のポート番号を開けるときも、まったく同じ方法で 開けます。
iptablesも同様にポート80 番と443 番を開ける設定をします。既存のiptablesの設定に下記内容を追記します。
[root@hoge123~]# iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT ← コマンドラインから80番ポートを開放します。 [root@hoge123~]# iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT ← コマンドラインから443番ポートを開放します。 [root@hoge123~]# /etc/rc.d/init.d/iptables save ← iptablesに追記内容を保存します。 [root@hoge123~]# /etc/init.d/iptables restart ← 変更を反映させるために再起動します。 |
- ポート開放テスト -
外部からサーバのポート開放の状態を確認します。 ここをクリックしてください。
サーバの「ドメイン名」、「確認ポート番号」を入力します。「制約事項」にチェックを入れ「ポートチェック実行」 を押します。下図のように応答があれば、80番ポートは開放されています。
今度は、443を入れて確認します。下図はポートは開放されているけれども、待ち受けるサーバのサービスが起動 していなか、サービスが別のポート番号を使用している事を示します。443はwwwでSSLを用いるときに使用される ポートです。今回は、まだSSLは利用されていないので下記結果が出てきました。ApacheでSSLを利用するには、 モジュールを組み込む必要があります。
ウエブページ暗号化(SSL) の設定が完了していれば、ポート443は「アクセスできました」 に変わります。
もし、下図のような文言が表示された場合、対象ポートがブロックされていることを示します。ルータ及びiptablesの 設定を見直す必要があります。
- ウイルスソフト(Clam AntiVirus) -
※メールサーバ導入予定の場合、最初にメールサーバを導入してからウイルスソフトをインストールしてください。
Linux系OSはウイルス感染しない、と思っている人がたくさんいます。実際に感染例がほとんどないことから、導入しないで
使用して良いかはサーバ管理者の判断になります。Windowsの場合ユーザが多いことから、セキュリティホールを突いた攻撃をよく受けますが
Linuxの場合、使用者が少ないことから攻撃されにくいと言うのは事実です。
しかしファイル共有やメールサーバ用途で運用している場合、Windowsで感染するウイルスが入ってくるかもしれません。その場合、Linuxでは
感染しなくても、Linuxサーバを経由して他のWindowsパソコンへの感染拡大の手伝いをするかもしれません。
その可能性を低くするためにサーバにはウイルスソフトが必要です。
[root@hoge123~]# apt-get -y install clamav [root@hoge123~]# vi /etc/freshclam.conf ## ## Example config file for freshclam ## Please read the freshclam.conf(5) manual before editing this file. ## # Comment or remove the line below. Example ↓ 8行目付近、先頭に#を付けて、コメントアウトします。 #Example |
ウイルス定義ファイルのアップデート、スキャンを実施します。
[root@hoge123~]# freshclam ← パターンファイルの更新をします。 [root@hoge123~]# clamscan --log=/var/log/clamav.log --infected --remove --recursive /home/ ----------- SCAN SUMMARY ----------- Known viruses: 1271402 Engine version: 0.97.5 Scanned directories: 21 Scanned files: 14 Infected files: 0 ← 感染ファイルが0であることを示しています。 Data scanned: 0.01 MB Data read: 0.00 MB (ratio 2.00:1) Time: 9.945 sec (0 m 9 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/ ----------- SCAN SUMMARY ----------- Known viruses: 1271402 Engine version: 0.97.5 Scanned directories: 21 Scanned files: 15 Infected files: 1 ← 感染ファイルが1個見つかったことを示しています。(削除されています) Data scanned: 0.01 MB Data read: 0.00 MB (ratio 2.00:1) Time: 9.912 sec (0 m 9 s) |
自動更新するように定義ファイルを作成し、毎日、ウイルススキャンする設定をします。
[root@hoge123:~# mkdir /var/log/clamav [root@hoge123:~# chmod -R 777 /var/log/clamav [root@hoge123~]# mkdir /var/tmp/infected ← 感染ファイルを保管するフォルダです。 [root@hoge123~]# chmod 771 /var/tmp/infected [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 -r -i --move=/var/tmp/infected --log=/var/log/clamav.log /home |