日本zoneの追加
以前、Firewallの設定を行いましたが、OSのバグでうまくいきませんでした。
今朝、CentOSをアップデートしてみると…
[root@ace zeke]# dnf info nftables
メタデータの期限切れの最終確認: 0:00:06 時間前の 2020年04月16日 07時28分13秒 に 実施しました。
インストール済みパッケージ
名前 : nftables
エポック : 1
バージョン : 0.9.0
リリース : 14.el8_1.1
Arch : x86_64
サイズ : 851 k
ソース : nftables-0.9.0-14.el8_1.1.src.rpm
リポジトリー : @System
repo から : BaseOS
概要 : Netfilter Tables userspace utillites
URL : http://netfilter.org/projects/nftables/
ライセンス : GPLv2
説明 : Netfilter Tables userspace utilities.
:
省略
:
[root@ace zeke]#
おっ、Firewall関係のパッケージがアップデートされていますよ。設定に再挑戦です。
[root@ace zeke]# firewall-cmd --list-all-zones
:
省略
:
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dns ftp irc
ports: 5500-5501/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
trusted (active)
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources: 192.168.1.0/24 2001:2c0:cd03:ca00::/64 fe80::/64
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
:
省略
:
[root@ace zeke]#
今の設定に、日本からのアクセスのゾーンを追加して、サービスを振り分けます。
[root@ace ~]# firewall-cmd --permanent --new-zone=japan
success
[root@ace ~]# firewall-cmd --permanent --zone=japan --add-service=dns
success
[root@ace ~]# firewall-cmd --permanent --zone=japan --add-service=ftp
success
[root@ace ~]# firewall-cmd --permanent --zone=japan --add-service=irc
success
[root@ace ~]# firewall-cmd --permanent --zone=japan --add-service=ssh
success
[root@ace ~]# firewall-cmd --permanent --zone=japan --add-port=5500-5501/tcp
success
[root@ace ~]# firewall-cmd --permanent --zone=japan --add-source=::/0
success
[root@ace ~]# wget -P /tmp https://ipv4.fetus.jp/jp.txt
--2020-04-16 06:59:42-- https://ipv4.fetus.jp/jp.txt
ipv4.fetus.jp (ipv4.fetus.jp) をDNSに問いあわせています... 2401:2500:102:3043:153:126:214:91, 153.126.214.91
ipv4.fetus.jp (ipv4.fetus.jp)|2401:2500:102:3043:153:126:214:91|:443 に接続して います... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 特定できません [text/plain]
`/tmp/jp.txt' に保存中
jp.txt [ <=> ] 43.70K --.-KB/s 時間 0.05s
2020-04-16 06:59:42 (810 KB/s) - `/tmp/jp.txt' へ保存終了 [44748]
[root@ace ~]# firewall-cmd --permanent --new-ipset=JAPAN --type=hash:net
success
[root@ace ~]# firewall-cmd --permanent --ipset=JAPAN --add-entries-from-file=/tmp/jp.txt
success
[root@ace ~]# firewall-cmd --permanent --info-ipset=JAPAN
JAPAN
type: hash:net
options:
entries: 1.0.16.0/20 1.0.64.0/18 1.1.64.0/18 1.5.0.0/16 1.21.0.0/16 1.33.0.0/16
:
省略
:
[root@ace ~]# firewall-cmd --permanent --zone=japan --add-source=ipset:JAPAN
success
[root@ace ~]# firewall-cmd --reload
success
[root@ace ~]#
[root@ace ~]# firewall-cmd --list-all-zones
:
省略
:
japan (active)
target: default
icmp-block-inversion: no
interfaces:
sources: ::/0 ipset:JAPAN
services: dns ftp irc ssh
ports: 5500-5501/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dns ftp irc
ports: 5500-5501/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
trusted (active)
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources: 192.168.1.0/24 2001:2c0:cd03:ca00::/64 fe80::/64
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
:
省略
:
[root@ace ~]#
- japanゾーンを作成
- 従来のサービス+sshサービスをjapanゾーンに追加
- ::0(IPv6のIPアドレスすべて)からの接続を許可
- https://ipv4.fetus.jp/jp.txtを取得
- JAPANという名前でipsetを作成
- ipsetにjp.txtの内容を登録
- ipsetからの接続を許可
- firewallを更新
という手順で、Firewallを設定しました。これで、日本以外からssh接続できなくなりました!
でも、IPリストが長いので、「firewall-cmd –reload」コマンドで時間がかかるようになりました。
日本のIPアドレスリストは、更新しなくてはいけませんが、IPv4アドレスはすでに枯渇しているので、割当の変更は殆どないと思います。困ったときに考えましょう。
今回は、sshを登録しましたが、他にもftp,pop3,imap,submissionなどの認証が必要なサービスについて制限をかけることを考えています。
しつこく辞書攻撃(パスワード破り)をされると、何百万回に一回は突破されることもあるかもしれないので。
今回はこちらのページを参考にさせていただきました。
Firewallの設定変更
firewalldでエラーが出るようになりました。
[root@ace zeke]# cat /var/log/firewalld
:
省略
:
2020-04-16 06:37:33 ERROR: Invalid option: 'AllowZoneDrifting=yes'
2020-04-16 06:37:36 WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now.
[root@ace zeke]#
メッセージに従って、設定を変更します。
[root@ace zeke]# cp -p /etc/firewalld/firewalld.conf /etc/firewalld/firewalld.conf.orig
[root@ace zeke]# vi /etc/firewalld/firewalld.conf
[root@ace zeke]# diff /etc/firewalld/firewalld.conf /etc/firewalld/firewalld.conf.orig
85c85
< AllowZoneDrifting=no
---
> AllowZoneDrifting=yes
[root@ace zeke]#
[root@ace zeke]# systemctl restart firewalld
[root@ace zeke]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor p>
Active: active (running) since Sun 2020-05-10 14:40:56 JST; 8s ago
Docs: man:firewalld(1)
Main PID: 10475 (firewalld)
Tasks: 3 (limit: 12535)
Memory: 22.3M
CGroup: /system.slice/firewalld.service
tq10475 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork>
mq12142 /usr/sbin/nft --echo --handle add element inet firewalld JAP>
5月 10 14:40:56 ace.lo.zeke.ne.jp systemd[1]: Starting firewalld - dynamic fir>
5月 10 14:40:56 ace.lo.zeke.ne.jp systemd[1]: Started firewalld - dynamic fire>
[root@ace zeke]#
オプションをAllowZoneDrifting=no
に変更して、再起動をかけてみました。
AllowZoneDriftingってなに?
firewalldのオプションのAllowZoneDriftingですが、以下のようなことのようです。
japan (active)
target: default
icmp-block-inversion: no
interfaces:
sources: ::/0 ipset:JAPAN
services: ssh
ports:
:
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dns ftp irc
ports: 5500-5501/tcp
:
このような2つのゾーンがあって、国内のIPアドレスからインターフェースenp0s3に対して、ssh接続した場合、japanゾーンに従って接続可能です。
同様に国内のIPアドレスからインターフェースenp0s3に対して、ftp接続した場合、japanゾーンには該当しませんが、publicゾーンには該当するので、それに従って接続可能となる、このことを、「AllowZoneDrifting」といっているようです。
逆に、AllowZoneDrifting=no
と設定すると、国内のIPアドレスからインターフェースenp0s3に対して、ssh接続しかできなくなります。
よって、AllowZoneDrifting=
yesのときと同じ動作にするためには、
japan (active)
target: default
icmp-block-inversion: no
interfaces:
sources: ::/0 ipset:JAPAN
services: dns ftp irc ssh
ports: 5500-5501/tcp
:
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dns ftp irc
ports: 5500-5501/tcp
:
このように、japanゾーンに許可するサービスをすべて書かなければいけません。
冗長だけど、わかりやすい記述になるのではないでしょうか?
お勧めのKindle本です!
コメント