CentOSにはTCPWrapperというフィルタリング機構があります。
アプリケーションレベルでの実装なので、ApacheやPostfix等対応していないソフトもあるのですが、接続元のネットワークによって、サービスの利用の可否を定義し、よりセキュアな環境を構築することができます。
/etc/hosts.allow(接続許可用の定義)
/etc/hosts.deny(接続拒否用の定義)
のふたつのファイルを編集します。
例えば以下のような内容で作成したとします。
hosts.deny
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# # hosts.deny This file contains access rules which are used to # deny connections to network services that either use # the tcp_wrappers library or that have been # started through a tcp_wrappers-enabled xinetd. # # The rules in this file can also be set up in # /etc/hosts.allow with a 'deny' option instead. # # See 'man 5 hosts_options' and 'man 5 hosts_access' # for information on rule syntax. # See 'man tcpd' for information on tcp_wrappers # ALL: ALL |
hosts.allow
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# # hosts.allow This file contains access rules which are used to # allow or deny connections to network services that # either use the tcp_wrappers library or that have been # started through a tcp_wrappers-enabled xinetd. # # See 'man 5 hosts_options' and 'man 5 hosts_access' # for information on rule syntax. # See 'man tcpd' for information on tcp_wrappers # ALL: 127.0.0.1 sshd: .panda-world.ne.jp vsftpd: .panda-world.ne.jp |
どちらも、[サービス]:[対象のソース]という具合で定義していきます。
hosts.denyで拒否されていない場合はすべて許可される扱いになってしまうので、
hosts.denyでは、ALL: ALLして全接続を拒否
hosts.allowでは、許可するネットワークを個別に定義
というのが定石です。
この場合すべてのサービスを127.0.0.1を接続可能で、xxx.panda-world.ne.jpのネットワークからの接続に関してはsshdとvsftpdが利用可能。
それ以外の人間は接続できない。という内容になります。
こうしておけばpanda-world.ne.jp以外の名前のネットワークからsshやftpに接続されることはなくなるので、だいぶセキュアになりますね。
固定IPを持っている方は、自身のIPでカチカチに縛ってしまえばそのIPからしか接続できないので更にGood!なことになります。
繰り返しになりますがTCPWrapperはアプリケーションレベルでの実装です。
通信がアプリケーションまで通過してしまうので、より低いレイヤーでパケットを破棄できるfirewalldや物理的なFWで制御するほうがベターです。
そしてApacheやPostfixなどはそもそもTCPWrapperに対応していません。
よって設定の重要度としてはfirewalld > TCPWrapperとお考えください。
とはいえうっかりfirewalldの設定を誤ってしまう、なんてこともありますよね。
そんな時であってもsshdやvsftpdといった重要なサービスへの不正アクセスを絶対に許さないためにも、サーバを構築したら必ず設定しておいてください。