関連URL
Amazon Linux 2ではfirewalldは不要?
amazon linux + firewalld
でググると上位表示される記事の多くで『Amazon Linux 2には同等の機能を持つセキュリティグループやネットワークALCがある(しかもサーバの手前でブロックしてくれる)のでfirewalld
は使用しないでよい』と記載されています。
ただ「特定のIPアドレスの接続を拒否したい場合」に以下の問題があります。
- セキュリティグループ・・・ホワイトリスト方式(設定できるのは「許可」。拒否は指定不可)
- ネットワークACL・・・「拒否」設定可能。(許可も)。設定できる数に上限(20)がある。
- ALB・・・ブラックリスト方式。HTTP/HTTPS限定
したがって20を超えるIP制限をしたい場合はfirewalld
の出番です。
環境/前提
- 2020年10月20日現在/東京リージョンのEC2
- OSは
Amazon Linux
でyum update
済 - EC2に割り当てているセキュリティグループのインバウンドで利用するポートへのアクセス許可がされている
- 本記事の場合は
ssh(22)
,http(80)
,https(443)
- 本記事の場合は
導入
インストール
yum install firewalld
永続化(サーバ再起動時に自動起動)
systemctl enable firewalld.service
開始
systemctl start firewalld.service
ステータス確認 => ActiveになっていればOK
systemctl status firewalld.service
利用できるサービスを限定(ssh/http/https)
public{ゾーンに追加します。ホワイトリスト方式です。 最後にリロードを忘れずに。(
systemctl reload firewalld`は不要)
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --add-service=https --zone=public --permanent
firewall-cmd --add-service=ssh --zone=public --permanent
firewall-cmd --reload
※--permanent
:サーバ再起動しても有効
IPアドレス制限
drop
ゾーンにアドレスを指定します。ブラックリスト方式です。
firewall-cmd --zone=drop --permanent --add-source=<IPアドレス範囲/CIDR>
firewall-cmd --reload
動作確認
--get-active-zone
当方の環境だと--get-active-zone
を実行しても結果が返ってきませんでした。--reload
しても同じ。
不安になりますが、実はこの状態でもfirewalldは動作しています。(サーバ再起動(# reboot
)すると表示されるようになりました)
期待した結果 | 実際の結果 |
---|---|
# firewall-cmd --get-active-zone drop sources: <指定したIPアドレス範囲> public interfaces: eth0 |
# firewall-cmd --get-active-zone <空> |
--list-all
こちらもinterfaces
が空になっていて不安になりますが動作していました。(こちらもサーバ再起動で表示されるようになりました)
サーバ再起動前の(不安になる)表示
# firewall-cmd --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client https http
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
有効なサービス確認(firewall-cmd --list-services
)
これはサーバ再起動しないでも表示されてました。
# firewall-cmd --list-services
ssh dhcpv6-client https http
※dhcpv6-client
は最初から有効化されているサービスです
動作確認
publicゾーン、dropゾーンに追加、削除しながら意図した動作になっているか確認します。
ssh
をpublicから外した後に全部ログアウトしてしまうとまずい(ですよね?)ので、外さないように注意。