CentOS7のfirewalldでネットワークゾーンにhttpとhttpsの許可、sshで特定のポート、IPアドレスを許可する設定
2015.09.28
WEBサイト制作

今まで通り「iptables」の設定を有効にすることも可能です。「iptables」を使用する際は「firewalld」を無効にしなければいけません。 今回は「firewalld」のネットワークゾーンにhttpとhttpsの許可、sshで特定のポート、IPアドレスを許可する設定を行っていきたいと思います。 ※/etc/ssh/sshd_configの22番ポートを2222番ポートに変更してあるものと想定して進めていきます。 ※SELinuxが有効になっている場合はssh の待ち受けポートとして、TCPの2222番を許可して下さい。
ネットワークゾーンの種類
ネットワークゾーンは9つあります。ネットワークゾーンに対して許可するサービスを定義していきます。 デフォルトのネットワークゾーンは「public」が選択されており、サービスは「dhcpv6-client」と「ssh」が有効になっています。 ネットワークゾーンの説明は下記のようになります。
・drop
着信ネットワークパケットはすべて遮断され、返信されません。送信ネットワーク接続のみが可能です。・block
IPv4 では icmp-host-prohibited メッセージで、IPv6 では icmp6-adm-prohibited メッセージですべての着信ネットワーク接続が拒否されます。システム内で開始されたネットワーク接続のみが可能です。・public
公開エリア用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターを信頼しません。選択された着信接続のみが許可されます。・external
マスカレードを特別にルーター用に有効にした外部ネットワーク上での使用向けです。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターを信頼しません。選択された着信接続のみが許可されます。・dmz
公開アクセスが可能ではあるものの、内部ネットワークへのアクセスには制限がある非武装地帯にあるコンピューター用。選択された着信接続のみが許可されます。・work
作業エリア用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターをほぼ信頼します。選択された着信接続のみが許可されます。・home
ホームエリア用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターをほぼ信頼します。選択された着信接続のみが許可されます。・internal
内部ネットワーク用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターをほぼ信頼します。選択された着信接続のみが許可されます。・trusted
すべてのネットワーク接続が許可されます。■引用
redhat 4.5.4. ネットワークゾーンについて
ネットワークゾーン「public」にhttpとhttpsを許可にする
ここより設定を行っていきますが、firewalldが有効になっている想定で行って行きます。
今回はネットワークゾーン「public」に設定していきたいと思います。
設定を永続的にするには、
––permanent オプションを追加します。
まずはhttpとhttpsを許可したいと思います。
・Webサーバー(http)のサービス(ポート)を永続的に許可
$ sudo firewall-cmd --permanent --add-service=http
※間違えて設定してしまった場合は「add」の箇所を「remove」にすると削除できます。
・httpsサーバーのサービス(ポート)を永続的に許可
$ sudo firewall-cmd --permanent --add-service=https
・firewalldを状態の情報を失わずにリロードする。
$ sudo firewall-cmd --reload
・現在有効な機能とゾーンを一覧表示します。
$ sudo firewall-cmd --list-all
public (default, active)
interfaces: eth0
sources:
services: dhcpv6-client ssh http https
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
これでhttpとhttpsは許可となりました。
リッチ言語コマンドを使い特定のポートに特定のネットワークから許可する
リッチ言語は複雑なファイアウォールルールが作成できます。 リッチ言語を使って特定のポートにIPアドレスを許可する設定を行っていきたいと思います。 次に行いたいことはsshで指定したポート2222番を特定のIP「192.168.1.1」のみ接続できるようにします。
・SSHサーバーのポートを永続的に閉じる。
$ sudo firewall-cmd --permanent --remove-service=ssh
・sshd_configで指定したポート2222番、特定のIP192.168.1.1を永続的に許可する。
$ sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="2222" accept"
・firewalldを状態の情報を失わずにリロードする。
$ sudo firewall-cmd --reload
・現在有効な機能とゾーンを一覧表示します。
$ sudo firewall-cmd --list-all
public (default, active)
interfaces: eth0
sources:
services: dhcpv6-client http https
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="192.168.1.1" port port="2222" protocol="tcp" accept
これでsshで指定したポート2222番を特定のIP「192.168.1.1」からのみ接続できるようになりました。
まとめ
以上今回の設定で、今回CentOS7のファイアウォールの設定が「iptables」から「firewalld」に変更となり色々調べながら設定を行って行きましたが、
ネット上のドキュメントがまだまだ少ないこともあり理解できていないこともまだまだあります。
もっと模索してセキュアな設定方法を実装し、また記事にできればと思っています。CentOS7ファイアウォールの設定で今回ご紹介したような設定をしたいと思っている方へ少しでも役に立てばと思います。