読者です 読者をやめる 読者になる 読者になる

ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

Re:サーバー構築標準教科書のツッコミ

サーバー構築標準教科書についてツッコミが入った模様です。
実はこの教科書の執筆の時に、全部disableにするのはないんじゃないかという議論がありました(主に私が言いました)。
議論の結果、章末に「SELinuxファイアウォールは有効化すべきですが、本書ではLinuxでのサーバー構築の仕組みの理解を重点に置くため、これらを無効化したうえでの環境構築について述べます。」と言った記述を入れました(おぼろげなのでちょっと違うかもしれません)。

もし、ファイアウォールSELinuxについて有効化した上で環境構築したい場合は、次の点に注目して環境を構築してください。
ちなみに手順まで載せてしまうと謎を解く楽しさを奪ってしまいますので、そこまで詳細には書いていません。あらかじめご了承ください。


ファイアウォールの設定
ファイアウォールの設定は基本的にiptablesコマンドを使ってポートを解放します。通常、デフォルトの状態ではTCP/22番ポートだけ空いている場合がほとんどです。SSHサーバーが入っていない場合はそれすら閉じている場合もあります。

LPIC的には、iptablesコマンドを使ってポート解放します。TCP/80ポートを開ける場合はこんな感じですね。

# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

CentOS 6で恒久的にポートを開けたい場合は/etc/sysconfig/iptablesファイルに書きます。
設定を書き込んだ後は通常のサーバー構築後はサービスを再起動しますが、それをiptablesにしてしまうと設定が消えてしまうので、「service iptables save」コマンドを実行したあと、「service iptables restart」します。

ちなみに、ファイアウォールの設定は次のようなツールを使って設定することもできます(こっちのほうが簡単)。

CentOS 5

GUI:
system-config-securitylevel
CUI:
system-config-securitylevel-tui

CentOS 6

GUI:
system-config-firewall
CUI:
system-config-firewall-tui

Fedora/CentOS 7など

GUI = firewall-config
CUI = firewall-cmd
# firewall-cmd --add-port=80/tcp
(一時的に解放)
# firewall-cmd --permanent --add-port=80/tcp
(恒久的に解放)

ちなみにDebianUbuntuはすべてのポートは閉じた状態で、サーバーが導入された段階で必要なポートが開きます。


■Network Managerについて
CentOS 5の時はあまり良くなかった。そのため、NetworkManagerを使わずnetworkサービスを使う流れにしました。
CentOS 6化するときにこれを使った流れにしたかったがすっかり忘れました。
ごめんなさい。

ちなみに概ね問題ないですが、Linux KVMのブリッジを作るときはNM_BOND_BRIDGE_VLAN_ENABLED=yesを記述する必要があるので注意が必要です。

# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=centos
NTPSERVERARGS=iburst
NM_BOND_BRIDGE_VLAN_ENABLED=yes ←これを追加

もしくは、ifcfg-ethXに「NM_CONTROLLED="no"」と記述すると、NetworkManagerのコントロール配下から外れるのでその方法も有効です。


SELinux
SELinuxについては以下の文献が役に立ちます。

  • 流れ

SELinux有効化環境におけるサーバー構築は次の通りです。

    • パッケージを入れる

# yum install policycoreutils-python

    • コマンドを実行

# setenforce 1

    • サーバーを構築
    • サーバーの起動
    • サーバーのログとSELinuxのログを確認
    • コマンドを実行してエラーがSELinuxによるものかそうでないかを判断する

# setenforce 0

戻す

# setenforce 1

CentOS 6の場合は
/var/log/audit/audit.log

    • 対処する


事前定義されたSELinuxのセキュリティ制御の可否は次の二つのコマンドを使うことで設定可能です。

getsebool
setsebool

設定例は次の通りです。例えばApacheを起動して、DBと接続するのを許可したい場合は次のように設定します。

# getsebool -a | grep httpd
httpd_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_connect_ftp --> off
httpd_can_connect_ldap --> off
httpd_can_connect_mythtv --> off
httpd_can_connect_zabbix --> off
...
(目的の設定を探す)

#setsebool -P httpd_can_network_connect_db on
(目的の設定を変更)

出てくる設定項目はググれば出てくるでしょう。