Fedora 42 をTOSHIBA dynabook Satellite B754/98LBに入れた。FreeBSD 14.2 で運用していたのだが当面サーバー類をこのPCでは使わないのでリプレース。でもって、インストールは通常のインストーラを使って問題なく完了。各デバイスとドライバも全く問題なし。快適に使える。15年前の機種だっけか。
元々、SE Linuxが標準で動いているが、ついでにFirewalldを起動して(元から入っている)一応セキュリティー対策をしたのでメモ。
1. firewalld を起動・有効化
sudo systemctl enable --now firewalld
2. firewalld の設定
以下、シェルスクリプトを作成して(実行権限を与えて)、root(sudo suして)で実行
※ Wireguard VPN 用
スクリプト(init_firewalld.sh)
#!/bin/bash
ZONE="FedoraWorkstation"
echo "🧹 既存の設定を初期化中(rich rules・ports・protocols)..."
firewall-cmd --permanent --zone=$ZONE --remove-port=53/udp
firewall-cmd --permanent --zone=$ZONE --remove-port=51820/udp
firewall-cmd --permanent --zone=$ZONE --remove-protocol=icmp
firewall-cmd --permanent --zone=$ZONE --remove-protocol=ipv6-icmp
# 既存の rich rules を一括削除(繰り返し)
for i in {1..50}; do
firewall-cmd --permanent --zone=$ZONE --remove-rich-rule="rule family='ipv4' source address='0.0.0.0/0' drop" 2>/dev/null
done
# デフォルトポリシーを DROP に設定
echo "🔒 デフォルトポリシーを DROP に設定..."
firewall-cmd --permanent --zone=$ZONE --set-target=DROP
# ポート開放(IN):UDP 53, 51820
echo "📥 必要な INポート(UDP)を許可..."
firewall-cmd --permanent --zone=$ZONE --add-port=53/udp
firewall-cmd --permanent --zone=$ZONE --add-port=51820/udp
# ICMP の不要なタイプをブロック(DoS対策等)
echo "🚫 不要な ICMP タイプをブロック中..."
for icmp in \
echo-reply \
destination-unreachable \
time-exceeded \
parameter-problem \
redirect \
source-quench \
router-solicitation; do
firewall-cmd --permanent --zone=$ZONE --add-icmp-block=$icmp
done
# ICMPv4/v6 で ping/RA/近隣探索などを許可
echo "✅ 必要な ICMP タイプ(ping/RA/近隣探索)を許可..."
for icmp in \
echo-request \
neighbor-solicitation \
router-advertisement; do
firewall-cmd --permanent --zone=$ZONE --remove-icmp-block=$icmp
done
# rich rules で OUT向け TCP/UDP ポートをホワイトリスト形式で許可
echo "📤 OUT向け TCP/UDP ポートを rich rule で許可..."
for port in 80 139 443 445 465 515 993; do
firewall-cmd --permanent --zone=$ZONE \
--add-rich-rule="rule family='ipv4' destination address='0.0.0.0/0' port port=$port protocol=tcp accept"
firewall-cmd --permanent --zone=$ZONE \
--add-rich-rule="rule family='ipv6' destination address='::/0' port port=$port protocol=tcp accept"
done
for port in 53 51820; do
firewall-cmd --permanent --zone=$ZONE \
--add-rich-rule="rule family='ipv4' destination address='0.0.0.0/0' port port=$port protocol=udp accept"
firewall-cmd --permanent --zone=$ZONE \
--add-rich-rule="rule family='ipv6' destination address='::/0' port port=$port protocol=udp accept"
done
# samba と ssh をサービスとして許可
echo "🔧 Samba・SSH サービスを許可..."
firewall-cmd --permanent --zone=$ZONE --add-service=samba
firewall-cmd --permanent --zone=$ZONE --add-service=ssh
# 設定を反映
echo "🔁 firewalld をリロード..."
firewall-cmd --reload
echo "✅ firewalld 初期化と設定が完了しました。"
※ 外部からのpingに反応したかったら
ZONE="FedoraWorkstation"
echo "🧹 既存の設定を初期化中(rich rules・ports・protocols)..."
firewall-cmd --permanent --zone=$ZONE --remove-port=53/udp
firewall-cmd --permanent --zone=$ZONE --remove-port=51820/udp
firewall-cmd --permanent --zone=$ZONE --remove-protocol=icmp
firewall-cmd --permanent --zone=$ZONE --remove-protocol=ipv6-icmp
# 既存の rich rules を一括削除(繰り返し)
for i in {1..50}; do
firewall-cmd --permanent --zone=$ZONE --remove-rich-rule="rule family='ipv4' source address='0.0.0.0/0' drop" 2>/dev/null
done
# デフォルトポリシーを DROP に設定
echo "🔒 デフォルトポリシーを DROP に設定..."
firewall-cmd --permanent --zone=$ZONE --set-target=DROP
# ポート開放(IN):UDP 53, 51820
echo "📥 必要な INポート(UDP)を許可..."
firewall-cmd --permanent --zone=$ZONE --add-port=53/udp
firewall-cmd --permanent --zone=$ZONE --add-port=51820/udp
# ICMP の不要なタイプをブロック(DoS対策等)
echo "🚫 不要な ICMP タイプをブロック中..."
for icmp in \
echo-reply \
destination-unreachable \
time-exceeded \
parameter-problem \
redirect \
source-quench \
router-solicitation; do
firewall-cmd --permanent --zone=$ZONE --add-icmp-block=$icmp
done
# ICMPv4/v6 で ping/RA/近隣探索などを許可
echo "✅ 必要な ICMP タイプ(ping/RA/近隣探索)を許可..."
for icmp in \
echo-request \
neighbor-solicitation \
router-advertisement; do
firewall-cmd --permanent --zone=$ZONE --remove-icmp-block=$icmp
done
# rich rules で OUT向け TCP/UDP ポートをホワイトリスト形式で許可
echo "📤 OUT向け TCP/UDP ポートを rich rule で許可..."
for port in 80 139 443 445 465 515 993; do
firewall-cmd --permanent --zone=$ZONE \
--add-rich-rule="rule family='ipv4' destination address='0.0.0.0/0' port port=$port protocol=tcp accept"
firewall-cmd --permanent --zone=$ZONE \
--add-rich-rule="rule family='ipv6' destination address='::/0' port port=$port protocol=tcp accept"
done
for port in 53 51820; do
firewall-cmd --permanent --zone=$ZONE \
--add-rich-rule="rule family='ipv4' destination address='0.0.0.0/0' port port=$port protocol=udp accept"
firewall-cmd --permanent --zone=$ZONE \
--add-rich-rule="rule family='ipv6' destination address='::/0' port port=$port protocol=udp accept"
done
# samba と ssh をサービスとして許可
echo "🔧 Samba・SSH サービスを許可..."
firewall-cmd --permanent --zone=$ZONE --add-service=samba
firewall-cmd --permanent --zone=$ZONE --add-service=ssh
# 設定を反映
echo "🔁 firewalld をリロード..."
firewall-cmd --reload
echo "✅ firewalld 初期化と設定が完了しました。"
※ 外部からのpingに反応したかったら
sudo firewall-cmd --permanent --zone=FedoraWorkstation \
--add-rich-rule="rule protocol value='icmp' accept"
sudo firewall-cmd --reload
--add-rich-rule="rule protocol value='icmp' accept"
sudo firewall-cmd --reload
2. ロギング の設定
setup_firewall_logging.sh
#!/bin/bash
echo "🔧 Firewalld + Iptables ログ設定を開始します..."
#=======================
# 1. firewalld rich-rule による DROP ログ
#=======================
echo "🚧 firewalld に DROP ログルールを追加..."
firewall-cmd --permanent --zone=FedoraWorkstation \
--add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" log prefix="FIREWALL DROP: " level="info" drop'
firewall-cmd --permanent --zone=FedoraWorkstation \
--add-rich-rule='rule family="ipv6" source address="::/0" log prefix="FIREWALL DROP: " level="info" drop'
#=======================
# 2. iptables / ip6tables ログ用チェイン
#=======================
echo "🚧 iptables に LOG チェインを追加..."
iptables -N LOGGING 2>/dev/null
iptables -C INPUT -j LOGGING 2>/dev/null || iptables -A INPUT -j LOGGING
iptables -C OUTPUT -j LOGGING 2>/dev/null || iptables -A OUTPUT -j LOGGING
iptables -C FORWARD -j LOGGING 2>/dev/null || iptables -A FORWARD -j LOGGING
iptables -C LOGGING -j LOG --log-prefix "IPTABLES LOG: " --log-level 4 2>/dev/null || iptables -A LOGGING -j LOG --log-prefix "IPTABLES LOG: " --log-level 4
iptables -C LOGGING -j RETURN 2>/dev/null || iptables -A LOGGING -j RETURN
echo "🚧 ip6tables に LOG チェインを追加..."
ip6tables -N LOGGING 2>/dev/null
ip6tables -C INPUT -j LOGGING 2>/dev/null || ip6tables -A INPUT -j LOGGING
ip6tables -C OUTPUT -j LOGGING 2>/dev/null || ip6tables -A OUTPUT -j LOGGING
ip6tables -C FORWARD -j LOGGING 2>/dev/null || ip6tables -A FORWARD -j LOGGING
ip6tables -C LOGGING -j LOG --log-prefix "IP6TABLES LOG: " --log-level 4 2>/dev/null || ip6tables -A LOGGING -j LOG --log-prefix "IP6TABLES LOG: " --log-level 4
ip6tables -C LOGGING -j RETURN 2>/dev/null || ip6tables -A LOGGING -j RETURN
#=======================
# 3. rsyslog設定の追加(ログファイル分け)
#=======================
echo "📄 /etc/rsyslog.d に設定ファイル作成..."
cat <<EOF > /etc/rsyslog.d/firewall-logging.conf
:msg, contains, "FIREWALL DROP: " -/var/log/firewalld.log
:msg, contains, "IPTABLES LOG: " -/var/log/iptables.log
:msg, contains, "IP6TABLES LOG: " -/var/log/iptables.log
& stop
EOF
#=======================
# 4. logrotate設定
#=======================
echo "📄 /etc/logrotate.d にログローテーション設定..."
cat <<EOF > /etc/logrotate.d/firewall-logs
/var/log/firewalld.log /var/log/iptables.log {
weekly
rotate 8
compress
missingok
notifempty
create 0600 root root
}
EOF
#=======================
# 5. rsyslog 再起動と firewalld リロード
#=======================
echo "🔁 firewalld / rsyslog を再起動..."
firewall-cmd --reload
systemctl restart rsyslog
echo "✅ 完了しました!ログは以下に出力されます:"
echo " ・/var/log/firewalld.log"
echo " ・/var/log/iptables.log"
echo "🔧 Firewalld + Iptables ログ設定を開始します..."
#=======================
# 1. firewalld rich-rule による DROP ログ
#=======================
echo "🚧 firewalld に DROP ログルールを追加..."
firewall-cmd --permanent --zone=FedoraWorkstation \
--add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" log prefix="FIREWALL DROP: " level="info" drop'
firewall-cmd --permanent --zone=FedoraWorkstation \
--add-rich-rule='rule family="ipv6" source address="::/0" log prefix="FIREWALL DROP: " level="info" drop'
#=======================
# 2. iptables / ip6tables ログ用チェイン
#=======================
echo "🚧 iptables に LOG チェインを追加..."
iptables -N LOGGING 2>/dev/null
iptables -C INPUT -j LOGGING 2>/dev/null || iptables -A INPUT -j LOGGING
iptables -C OUTPUT -j LOGGING 2>/dev/null || iptables -A OUTPUT -j LOGGING
iptables -C FORWARD -j LOGGING 2>/dev/null || iptables -A FORWARD -j LOGGING
iptables -C LOGGING -j LOG --log-prefix "IPTABLES LOG: " --log-level 4 2>/dev/null || iptables -A LOGGING -j LOG --log-prefix "IPTABLES LOG: " --log-level 4
iptables -C LOGGING -j RETURN 2>/dev/null || iptables -A LOGGING -j RETURN
echo "🚧 ip6tables に LOG チェインを追加..."
ip6tables -N LOGGING 2>/dev/null
ip6tables -C INPUT -j LOGGING 2>/dev/null || ip6tables -A INPUT -j LOGGING
ip6tables -C OUTPUT -j LOGGING 2>/dev/null || ip6tables -A OUTPUT -j LOGGING
ip6tables -C FORWARD -j LOGGING 2>/dev/null || ip6tables -A FORWARD -j LOGGING
ip6tables -C LOGGING -j LOG --log-prefix "IP6TABLES LOG: " --log-level 4 2>/dev/null || ip6tables -A LOGGING -j LOG --log-prefix "IP6TABLES LOG: " --log-level 4
ip6tables -C LOGGING -j RETURN 2>/dev/null || ip6tables -A LOGGING -j RETURN
#=======================
# 3. rsyslog設定の追加(ログファイル分け)
#=======================
echo "📄 /etc/rsyslog.d に設定ファイル作成..."
cat <<EOF > /etc/rsyslog.d/firewall-logging.conf
:msg, contains, "FIREWALL DROP: " -/var/log/firewalld.log
:msg, contains, "IPTABLES LOG: " -/var/log/iptables.log
:msg, contains, "IP6TABLES LOG: " -/var/log/iptables.log
& stop
EOF
#=======================
# 4. logrotate設定
#=======================
echo "📄 /etc/logrotate.d にログローテーション設定..."
cat <<EOF > /etc/logrotate.d/firewall-logs
/var/log/firewalld.log /var/log/iptables.log {
weekly
rotate 8
compress
missingok
notifempty
create 0600 root root
}
EOF
#=======================
# 5. rsyslog 再起動と firewalld リロード
#=======================
echo "🔁 firewalld / rsyslog を再起動..."
firewall-cmd --reload
systemctl restart rsyslog
echo "✅ 完了しました!ログは以下に出力されます:"
echo " ・/var/log/firewalld.log"
echo " ・/var/log/iptables.log"