Amazon Linux 2にfirewalldを追加(IPアドレス制限)


関連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 Linuxyum 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から外した後に全部ログアウトしてしまうとまずい(ですよね?)ので、外さないように注意。