centos7(rhel7) firewalldについて
centos6.xからしか触ったことがないのでiptablesしか使ったことがなかったのですが
自分でvps(centos7)を使うことになったため設定についてメモします。
firewalldとは
動的ファイアウォールデーモンである firewalld は、動的に管理されるファイアウォールを提供し、信頼レベルをネットワークと関連する接続およびインターフェースに割り当てるネットワーク「ゾーン」をサポートします。これは、IPv4 および IPv6 のファイアウォール設定をサポートします。また、イーサネットブリッジをサポートし、実行時と永続的な設定オプションを別々にすることできます。
rhel7のドキュメント抜粋
上記はつまり、各インターフェイスに対して「ゾーン」というネットワーク接続の許容範囲を設定したファイルを適用できるため、NIC1は〇〇,NIC2には××というように適切なネットワークの接続の範囲を設定できる。また、動的なデーモンとのことで設定したら即座に反映される。(ファイアーウォールの再起動が不要となった)NICごとにfirewallの設定ができるのは嬉しですね。
ゾーンについて
以下の表に記載している通りの機能がデフォルトで設定されいます。
これを使用するNICに適用できます。
ゾーン | 説明 |
---|---|
drop | 着信ネットワークパケットはすべて遮断され、返信されない 送信ネットワーク接続のみが可能 |
block | すべての着信ネットワーク接続が拒否 システム内で開始されたネットワーク接続のみが可能 |
public | "ssh" "dhcpv6-client" のみ許可されている(デフォルト設定) |
external | "ssh" のみ許可されている ipマスカレードが有効となっている |
dmz | "ssh" のみ許可されている 内部へのアクセスは制限されている |
work | "ssh" "dhcpv6-client" のみ許可されている 作業エリア用 |
home | "ssh" "mdns" "samba-client" "dhcpv6-client" のみ許可されている |
internal | "ssh" "mdns" "samba-client" "dhcpv6-client" のみ許可されている |
trusted | 全てのネットワーク接続が許可されている |
現在設定されている設定を確認するには以下のコマンドで確認できます。
#firewall-cmd --get-active-zones
public
interfaces: enp0s3
私の環境ではenp0s3のNICにpublicのゾーンが設定されていることがわかりますね。
ゾーンの設定
ゾーンの設定は/etc/firewalld/zones/にあるファイルを記載していきます。
初期ではpublic.xmlとpublic.xml.oldというファイルがありました。
ls /etc/firewalld/zones/
public.xml public.xml.old
public.xmlの内容を書き換えると新しい設定が反映されます。
もし、NICにpublic以外のゾーンを設定したいときは/usr/lib/firewalld/zones配下にあるファイルをコピーして使います。
※注意 /usr/lib/firewalld/zones配下のファイルを削除しないようにしましょう。
#cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/
設定の変更は以下のコマンド
#firewall-cmd --set-default-zone=work
#firewall-cmd --get-active-zones
work
interfaces: enp0s3
ゾーンがworkに変わっていることがわかりますね。
ゾーンに定義を追加する
使用しているゾーンに新しく許可するサービスを追加したい場合は以下のコマンド実行する
#firewall-cmd --zone=work --add-service=smtp
#firewall-cmd --zone=work --list-all
work (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dhcpv6-client smtp ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
上記のservicesにsmtpが追記されたことが確認できます。
※※ただし注意しなければいけないことがこれだけだとサーバ再起動時にはこの設定が消えてしまうので --permanent を記載してやらないといけないので常時設定とする場合は気をつけていください。
常時設定としてサービスを追加してやる場合は以下
#firewall-cmd --zone=work --permanent --add-service=smtp
#firewall-cmd --zone=work --permanent --list-all
work
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client smtp ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
これで再起動しても設定が反映されている状態となります。
zoneの設定時には --permanent を入れるかどうかを念頭におく必要がありますね。
また、 --permanent コマンドのみ実行した場合は
#firewall-cmd --zone=work --list-all
には反映されないので
#firewall-cmd --reload
をしてあげる必要があります。
今回やりたいこと
今回firewallの設定を記載しているのはお名前.comのvpsレンサバを使用するためです。
2017/3にcentos6で使用していたvpsがDDoS攻撃にあってしまいvpsを止められてしまいos再インストールの対処しか対応してもらえなかったです。
(自分のiptableの制御が甘々だったため(1日1回ログをみてxx回不正アクセスがあったipを制御するという悲惨なものでした)なので仕方ないですが、今後は不正アクセスがあったら即時にip制御する必要がありますね。)
ここでやりたいことは
①不正アクセスを確認する
②xx回以上不正アクセスがあったipをブロックする
①不正アクセスを確認する方法
centos7からログはjounalctlが司っているためそちらからログを確認する必要があります。
memo
IPを破棄する
firewall-cmd --zone=drop --permanent --add-source=192.168.0.102
firewallの再起動で反映
firewall-cmd --reload
memo
(編集中)
参照サイト
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html
https://www.jdbc.tokyo/2014/10/centos7-firewalld-startup/
https://fedoraproject.org/wiki/FirewallD/jp