CentOS7、firewalldを止めてiptablesにする際のドハマり解決

CentOS7ではいわゆるファイアウォールとしてfirewalldが実装されていますが、よく解らないので、昔から使い慣れたiptablesを使うといった方が数多く見受けられます。
「なんちゃって管理者」の私もその一人、そもそもiptablesは全く理解出来てない知見・力量レベルですが、他人様が作られたスクリプトなどを転用して使わせていただいてます。
しかし、丸コピーでは動かない(これは当然)だけでなく、サーバと外部ネットワークの通信が遮断される(全くできなくなってしまう)といったドハマりポイントもあり、1wほど悩んでました。

結果として、少しずつトライアンドエラーで試していく事でハマリポイントからは脱出できたようなので、その内容を備忘録として残しておきます。
他の方々の環境で正しく動くか、また、この内容が妥当かどうかは不明・無保証なのでご注意下さい。

参考にしたルートコンテンツはこちら
「俺史上最強のiptablesをさらす」
https://qiita.com/suin/items/5c4e21fa284497782f71
(2021年時点ではメンテナンスされていない模様)

----以下、当家自鯖用にアレンジしたシェルスクリプト。

#!bin/bash


# パス
PATH=/sbin:/usr/sbin:/bin:/usr/bin

###########################################################
# IPの定義
# 必要に応じて定義する。定義しなくても動作する。
###########################################################

# 内部ネットワークとして許可する範囲
# LOCAL_NET="xxx.xxx.xxx.xxx/xx"
LOCAL_NET="192.168.0.0/24"

# 内部ネットワークとして一部制限付きで許可する範囲
# LIMITED_LOCAL_NET="xxx.xxx.xxx.xxx/xx"

# ZabbixサーバーIP
# ZABBIX_IP="xxx.xxx.xxx.xxx"
ZABBIX_IP="192.168.0.5"

# 全てのIPを表す設定を定義
ANY="0.0.0.0/0"

# 信頼可能ホスト(配列)
# ALLOW_HOSTS=(
# 	"xxx.xxx.xxx.xxx"
# 	"xxx.xxx.xxx.xxx"
# 	"xxx.xxx.xxx.xxx"
# )

#2nd DNS
ALLOW_HOSTS=(
#SELF
        "127.0.0.1"
        "192.168.0.5"
#       win10pc
        "192.168.0.51"
#       /* 2nd name server 1/3 */
        "(2nd name server 1/3のip)"

#       /* 2nd name server 2/3 */
        "(2nd name server 2/3のip)"

#       /* 2nd name server 3/3 */
        "(2nd name server 3/3のip)"
)


# 無条件破棄するリスト(配列)
# DENY_HOSTS=(
# 	"xxx.xxx.xxx.xxx"
# 	"xxx.xxx.xxx.xxx"
# 	"xxx.xxx.xxx.xxx"
# )

###########################################################
# ポート定義
###########################################################

SSH=20022
FTP=20,21
DNS=53
SMTP=25,465,587
POP3=110,995
IMAP=143,993

#http2812はmonit、10000はwebmin、10024,10026はamavis用
HTTP=80,443,2812,10000,10024,10026
IDENT=113
NTP=123
MYSQL=3306
NET_BIOS=135,137,138,139,445
DHCP=67,68

###########################################################
# 関数
###########################################################

# iptablesの初期化, すべてのルールを削除
initialize() 
{

##Assertion failed on job for iptables.service.エラー対策
iptables -S
service iptables save
##

# テーブル初期化
	iptables -F

# チェーンを削除
	iptables -X

# パケットカウンタ・バイトカウンタをクリア
	iptables -Z

	iptables -P INPUT   ACCEPT
	iptables -P OUTPUT  ACCEPT
	iptables -P FORWARD ACCEPT
}

# ルール適用後の処理
finailize()
{
# 設定の保存
# 保存したもので再起動してみる
	return 0
	/usr/libexec/iptables/iptables.init save&&
#	iptables-save &&
	systemctl restart iptables &&
	return 1
}

# 開発用
if [ "$1" == "dev" ]
then
	iptables() { echo "iptables $@"; }
	finailize() { echo "finailize"; }
fi

###########################################################
# iptablesの初期化
###########################################################
initialize


###########################################################
# ポリシーの決定
###########################################################

# すべてDROP。すべての穴をふさいでから必要なポートを空けていくのが良い。
iptables -P INPUT   DROP

iptables -P OUTPUT  ACCEPT
iptables -P FORWARD DROP

###########################################################
# 信頼可能なホストは許可
###########################################################

# ローカルホスト
# lo はローカルループバックのことで自分自身のホストを指す

# SELF -> SELF
iptables -A INPUT -i lo -j ACCEPT

# ローカルネットワーク
# $LOCAL_NET が設定されていれば LAN上の他のサーバとのやり取りを許可する
if [ "$LOCAL_NET" ]
then

# LOCAL_NET -> SELF
	iptables -A INPUT -p tcp -s $LOCAL_NET -j ACCEPT

fi

# 信頼可能ホスト
# $ALLOW_HOSTS が設定されていれば そのホストとのやり取りを許可する
if [ "${ALLOW_HOSTS}" ]
then
	for allow_host in ${ALLOW_HOSTS[@]}
	do

# allow_host -> SELF
		iptables -A INPUT -p tcp -s $allow_host -j ACCEPT
	done
fi

###########################################################
# $DENY_HOSTSからのアクセスは破棄
###########################################################
if [ "${DENY_HOSTS}" ]
then
	for deny_host in ${DENY_HOSTS[@]}
	do
		iptables -A INPUT -s $deny_host -m limit --limit 1/s -j LOG --log-prefix "deny_host: "
		iptables -A INPUT -s $deny_host -j DROP
	done
fi

###########################################################
# セッション確立後のパケット疎通は許可
###########################################################
iptables -A INPUT  -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

###########################################################
# 攻撃対策: Stealth Scan
###########################################################

# "STEALTH_SCAN" という名前でチェーンを作る
iptables -N STEALTH_SCAN
iptables -A STEALTH_SCAN -j LOG --log-prefix "stealth_scan_attack: "
iptables -A STEALTH_SCAN -j DROP

# ステルススキャンらしきパケットは "STEALTH_SCAN" チェーンへジャンプする
iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j STEALTH_SCAN
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j STEALTH_SCAN

iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN         -j STEALTH_SCAN
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST         -j STEALTH_SCAN
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j STEALTH_SCAN

iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j STEALTH_SCAN
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN     -j STEALTH_SCAN
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH     -j STEALTH_SCAN
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG     -j STEALTH_SCAN

###########################################################
# 攻撃対策: フラグメントパケットによるポートスキャン,DOS攻撃
# namap -v -sF などの対策
###########################################################
iptables -A INPUT -f -j LOG --log-prefix 'fragment_packet:'
iptables -A INPUT -f -j DROP
 


###########################################################
# 攻撃対策: Ping of Death
###########################################################
# 毎秒1回を超えるpingが10回続いたら破棄

# "PING_OF_DEATH" という名前でチェーンを作る
iptables -N PING_OF_DEATH
iptables -A PING_OF_DEATH -p icmp --icmp-type echo-request \
         -m hashlimit \
         --hashlimit 1/s \
         --hashlimit-burst 10 \
         --hashlimit-htable-expire 300000 \
         --hashlimit-mode srcip \
         --hashlimit-name t_PING_OF_DEATH \
         -j RETURN

# 制限を超えたICMPを破棄
iptables -A PING_OF_DEATH -j LOG --log-prefix "ping_of_death_attack: "
iptables -A PING_OF_DEATH -j DROP

# ICMP は "PING_OF_DEATH" チェーンへジャンプ
iptables -A INPUT -p icmp --icmp-type echo-request -j PING_OF_DEATH



###########################################################
# 攻撃対策: SYN Flood Attack
# この対策に加えて Syn Cookie を有効にすべし。
###########################################################

# "SYN_FLOOD" という名前でチェーンを作る
iptables -N SYN_FLOOD
iptables -A SYN_FLOOD -p tcp --syn \
         -m hashlimit \
         --hashlimit 200/s \
         --hashlimit-burst 3 \
         --hashlimit-htable-expire 300000 \
         --hashlimit-mode srcip \
         --hashlimit-name t_SYN_FLOOD \
         -j RETURN

# 解説
# -m hashlimit                       ホストごとに制限するため limit ではなく hashlimit を利用する
# --hashlimit 200/s                  秒間に200接続を上限にする
# --hashlimit-burst 3                上記の上限を超えた接続が3回連続であれば制限がかかる
# --hashlimit-htable-expire 300000   管理テーブル中のレコードの有効期間(単位:ms
# --hashlimit-mode srcip             送信元アドレスでリクエスト数を管理する
# --hashlimit-name t_SYN_FLOOD       /proc/net/ipt_hashlimit に保存されるハッシュテーブル名
# -j RETURN                          制限以内であれば、親チェーンに戻る

# 制限を超えたSYNパケットを破棄
iptables -A SYN_FLOOD -j LOG --log-prefix "syn_flood_attack: "
iptables -A SYN_FLOOD -j DROP

# SYNパケットは "SYN_FLOOD" チェーンへジャンプ
iptables -A INPUT -p tcp --syn -j SYN_FLOOD


###########################################################
# 攻撃対策: HTTP DoS/DDoS Attack
###########################################################

# "HTTP_DOS" という名前でチェーンを作る
iptables -N HTTP_DOS
iptables -A HTTP_DOS -p tcp -m multiport --dports $HTTP \
         -m hashlimit \
         --hashlimit 1/s \
         --hashlimit-burst 100 \
         --hashlimit-htable-expire 300000 \
         --hashlimit-mode srcip \
         --hashlimit-name t_HTTP_DOS \
         -j RETURN

# 解説
# -m hashlimit                       ホストごとに制限するため limit ではなく hashlimit を利用する
# --hashlimit 1/s                    秒間1接続を上限とする
# --hashlimit-burst 100              上記の上限を100回連続で超えると制限がかかる
# --hashlimit-htable-expire 300000   管理テーブル中のレコードの有効期間(単位:ms
# --hashlimit-mode srcip             送信元アドレスでリクエスト数を管理する
# --hashlimit-name t_HTTP_DOS        /proc/net/ipt_hashlimit に保存されるハッシュテーブル名
# -j RETURN                          制限以内であれば、親チェーンに戻る

# 制限を超えた接続を破棄
iptables -A HTTP_DOS -j LOG --log-prefix "http_dos_attack: "
iptables -A HTTP_DOS -j DROP

# HTTPへのパケットは "HTTP_DOS" チェーンへジャンプ
iptables -A INPUT -p tcp -m multiport --dports $HTTP -j HTTP_DOS




###########################################################
# 攻撃対策: IDENT port probe
# identを利用し攻撃者が将来の攻撃に備えるため、あるいはユーザーの
# システムが攻撃しやすいかどうかを確認するために、ポート調査を実行
# する可能性があります。
# DROP ではメールサーバ等のレスポンス低下になるため REJECTする
###########################################################
iptables -A INPUT -p tcp -m multiport --dports $IDENT -j REJECT --reject-with tcp-reset

###########################################################
# 攻撃対策: SSH Brute Force
# SSHはパスワード認証を利用しているサーバの場合、パスワード総当り攻撃に備える。
# 1分間に5回しか接続トライをできないようにする。
# SSHクライアント側が再接続を繰り返すのを防ぐためDROPではなくREJECTにする。
# SSHサーバがパスワード認証ONの場合、以下をアンコメントアウトする
###########################################################
iptables -A INPUT -p tcp --syn -m multiport --dports $SSH -m recent --name ssh_attack --set
iptables -A INPUT -p tcp --syn -m multiport --dports $SSH -m recent --name ssh_attack --rcheck --seconds 60 --hitcount 5 -j LOG --log-prefix "ssh_brute_force: "
iptables -A INPUT -p tcp --syn -m multiport --dports $SSH -m recent --name ssh_attack --rcheck --seconds 60 --hitcount 5 -j REJECT --reject-with tcp-reset


###########################################################
# 攻撃対策: FTP Brute Force
# FTPはパスワード認証のため、パスワード総当り攻撃に備える。
# 1分間に5回しか接続トライをできないようにする。
# FTPクライアント側が再接続を繰り返すのを防ぐためDROPではなくREJECTにする。
# FTPサーバを立ち上げている場合、以下をアンコメントアウトする
###########################################################
iptables -A INPUT -p tcp --syn -m multiport --dports $FTP -m recent --name ftp_attack --set
iptables -A INPUT -p tcp --syn -m multiport --dports $FTP -m recent --name ftp_attack --rcheck --seconds 60 --hitcount 5 -j LOG --log-prefix "ftp_brute_force: "
iptables -A INPUT -p tcp --syn -m multiport --dports $FTP -m recent --name ftp_attack --rcheck --seconds 60 --hitcount 5 -j REJECT --reject-with tcp-reset

###########################################################
# 全ホスト(ブロードキャストアドレス、マルチキャストアドレス)宛パケットは破棄
###########################################################
iptables -A INPUT -d 192.168.0.255   -j LOG --log-prefix "drop_broadcast: "
iptables -A INPUT -d 192.168.0.255   -j DROP
iptables -A INPUT -d 255.255.255.255 -j LOG --log-prefix "drop_broadcast: "
iptables -A INPUT -d 255.255.255.255 -j DROP
iptables -A INPUT -d 224.0.0.1       -j LOG --log-prefix "drop_broadcast: "
iptables -A INPUT -d 224.0.0.1       -j DROP



###########################################################
# 全ホスト(ANY)からの入力許可
###########################################################

# ICMP: ping に応答する設定

# ANY -> SELF
iptables -A INPUT -p icmp -j ACCEPT

# HTTP, HTTPS
# ANY -> SELF
iptables -A INPUT -p tcp -m multiport --dports $HTTP -j ACCEPT

# SSH: ホストを制限する場合は TRUST_HOSTS に信頼ホストを書き下記をコメントアウトする
# ANY -> SELF
iptables -A INPUT -p tcp -m multiport --dports $SSH -j ACCEPT

# FTP
# ANY -> SELF
iptables -A INPUT -p tcp -m multiport --dports $FTP -j ACCEPT

# DNS
# ANY -> SELF
iptables -A INPUT -p tcp -m multiport --sports $DNS -j ACCEPT

# SMTP
# ANY -> SELF
iptables -A INPUT -p tcp -m multiport --sports $SMTP -j ACCEPT

# POP3
# ANY -> SELF
iptables -A INPUT -p tcp -m multiport --sports $POP3 -j ACCEPT

# IMAP
# ANY -> SELF
iptables -A INPUT -p tcp -m multiport --sports $IMAP -j ACCEPT


###########################################################
# ローカルネットワーク(制限付き)からの入力許可
###########################################################

if [ "$LIMITED_LOCAL_NET" ]
then
	# SSH

# LIMITED_LOCAL_NET -> SELF
	iptables -A INPUT -p tcp -s $LIMITED_LOCAL_NET -m multiport --dports $SSH -j ACCEPT
	
	# FTP
# LIMITED_LOCAL_NET -> SELF
	iptables -A INPUT -p tcp -s $LIMITED_LOCAL_NET -m multiport --dports $FTP -j ACCEPT

	# MySQL
# LIMITED_LOCAL_NET -> SELF
	iptables -A INPUT -p tcp -s $LIMITED_LOCAL_NET -m multiport --dports $MYSQL -j ACCEPT
fi

###########################################################
# 特定ホストからの入力許可
###########################################################

if [ "$ZABBIX_IP" ]
then
	# Zabbix関連を許可
# Zabbix -> SELF
	iptables -A INPUT -p tcp -s $ZABBIX_IP --dport 10050 -j ACCEPT
fi





#iptables -A INPUT -p tcp --dport 20 -j ACCEPT
#iptables -A INPUT -p tcp --dport 21 -j ACCEPT
#iptables -A INPUT -p tcp --dport 53 -j ACCEPT
#iptables -A INPUT -p tcp --dport 25 -j ACCEPT
#iptables -A INPUT -p tcp --dport 465 -j ACCEPT
#iptables -A INPUT -p tcp --dport 587 -j ACCEPT
#iptables -A INPUT -p tcp --dport 110 -j ACCEPT
#iptables -A INPUT -p tcp --dport 995 -j ACCEPT
#iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#iptables -A INPUT -p tcp --dport 2812 -j ACCEPT
#iptables -A INPUT -p tcp --dport 10000 -j ACCEPT
#iptables -A INPUT -p tcp --dport 10024 -j ACCEPT
#iptables -A INPUT -p tcp --dport 10026 -j ACCEPT
#iptables -A INPUT -p tcp --dport 123 -j ACCEPT
#iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
#iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 20022 -j ACCEPT

# ほかACCEPTやDROPなどユーザによる設定
 
#ローカルループバックの接続を許可する。
#iptables -A INPUT -i lo -j ACCEPT

#以下、こちらから求めたパケットは許可する。←このセクション非常に重要******
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
#以上、こちらから求めたパケットは許可する。←このセクション非常に重要******
##
##この2行が無いと、ローカルホストから外部サーバへのpingや名前解決での接続が出来なくなる


#それ以外はログを残す。
#iptables -A INPUT -j LOG --log-prefix "drop_packet:" 

###########################################################
# それ以外
# 上記のルールにも当てはまらなかったものはロギングして破棄
###########################################################
iptables -A INPUT  -j LOG --log-prefix "drop_packet_IPTABLES:"
iptables -A INPUT  -j DROP


###########################################################
# SSH 締め出し回避策
# 30秒間スリープしてその後 iptables をリセットする。
# SSH が締め出されていなければ、 Ctrl-C を押せるはず。
###########################################################
trap 'finailize && exit 0' 2 # Ctrl-C をトラップする
echo "In 30 seconds iptables will be automatically reset."
echo "Don't forget to test new SSH connection!"
echo "If there is no problem then press Ctrl-C to finish."
echo "このメッセージが見られたなら Ctrl-C を押下して終了して下さい。そのまま放置するとiptablesを再度初期化して終了します。"
sleep 30
echo "rollback..."
initialize


カテゴリー: 未分類 | コメントする

CentOS7.9、root宛メールにハマるの巻

先日再度のクリーンインストールを行ったCentOS7.9(x64)サーバーにて、cron君がご丁寧に毎日root宛に下記のようなメールを出してくれます。
一応ウイルススキャナ「clamav」系で何らかのトラブルが起きている事は文面から解ります。恐らくは「ウイルススキャン用の更新データベースファイルがダウンロード出来ませんでした」(fleshclamが正しく動作できなかった)といった内容。

但し、問題はその理由・・・
「Problem with the SSL CA cert (path? access rights?)」
・・・これはサーバ証明書(ルート証明書?)関係のファイルやフォルダが正しく参照出来ないと怒られていると思われるのですが、そもそも論として、この状況の原因・要因が解りません <-ここが問題。

クーグル先生に尋ねるも、イマイチ真っ当な回答が得られず、数時間悩み続けました。
そしてやっと、こちらの先達者の解にたどり着きました。

http://sci10.org/on_ca-bundle_crt.html

サーバー証明書関連のパッケージはクリーンインストールした際に失われているので、当たり前ですが、再度正しくパッケージインストールを行わなければならなかったのですが、このプロセスを飛ばしていたようです。

# mv /etc/pki/tls/certs/ca-bundle.crt /etc/pki/tls/certs/ca-bundle.crt.bak
# yum reinstall ca-certificates

を実行して、/etc/pki/tls/certs/・・・配下のファイル群を更新した後、ワークフォルダの権利関係を・・・

#chown -R clamscan.clamscan
#chmod -R 755 workdir

・・・してやる事で、fleshclam君が正常動作するようになりました。
これで明日から1通は警告メールが減る事でしょう(まだ他にもある)。


---
——– Forwarded Message ——–
Subject: Cron /usr/share/clamav/freshclam-sleep
Date: Thu, 25 Feb 2021 15:21:37 +0900 (JST)
From: (Cron Daemon) root@example.com
To: root@example.com

ERROR: Download failed (77) ERROR: Message: Problem with the SSL CA cert (path? access rights?)
ERROR: getpatch: Can’t download daily-26087.cdiff from https://database.clamav.net/daily-26087.cdiff
ERROR: Download failed (77) ERROR: Message: Problem with the SSL CA cert (path? access rights?)
ERROR: getcvd: Can’t download daily.cvd from https://database.clamav.net/daily.cvd
ERROR: Download failed (77) ERROR: Message: Problem with the SSL CA cert (path? access rights?)
ERROR: getpatch: Can’t download daily-26087.cdiff from https://database.clamav.net/daily-26087.cdiff
ERROR: Download failed (77) ERROR: Message: Problem with the SSL CA cert (path? access rights?)
ERROR: getcvd: Can’t download daily.cvd from https://database.clamav.net/daily.cvd
ERROR: Download failed (77) ERROR: Message: Problem with the SSL CA cert (path? access rights?)
ERROR: getpatch: Can’t download daily-26087.cdiff from https://database.clamav.net/daily-26087.cdiff
ERROR: Download failed (77) ERROR: Message: Problem with the SSL CA cert (path? access rights?)
ERROR: getcvd: Can’t download daily.cvd from https://database.clamav.net/daily.cvd
ERROR: Update failed for database: daily
ERROR: Database update process failed: Connection failed (5)
ERROR: Update failed.
---




カテゴリー: 未分類 | コメントする

CentOS7.9、論理クラッシュによる再インストール(2021/02/23復旧)

疲れました。。。(_ _;)
それは2021/02/12(Fri)夕刻、一瞬の出来事でした。
UPSがバッテリ寿命でピーピー鳴いていたので、バッテリ交換の為に一旦シャットダウン、
ついでにメンテナンスの為にAC直結していた電源ラインをリブータ経由につなぎ替えた後、
恐らくは2つの問題がありました。
1つはサーバPCのPowerAssy.に接続される3PのACラインコードの緩み?
そしてもう1つはリブータの挙動不具合です。

結果としてサーバはブートプロセスの最中に何度も強制AC電源断となり、最後には起動すらしなくなってしまいました。
別のWin10PCで修復法をググってみましたが、CentOS7のデフォルトファイルシステム「xfs」に関しては「xfs_repair」というツールは用意されているものの、起動HDDのsuperblockがクラッシュしている場合、予備のsuperblockを探しに行く(ここで4TBのHDDだと丸1日近くの時間が必要)・・・そして、その結果「見つからなかったので修復不能」だとのたまうのです(T_T)

また、推察ですが、ここに至るまでにも何度か電源断などにより、xfsファイルシステム(inodeなど)の一部が不整合となっており「ブートパーティションを修復」するより、CentOS7.9を再びクリーンインストールしてバックアップデータ系をリストアした方が早いという結論に達しました。

ここで問題になるのは、昨年2020年末にVine6(x86)からCentOS7.9(x64)へマイグレーションを行った際のプロセス記録が、「なんちゃって管理者」の鳥頭の中にしか残ってないという事でした。最低限早急に復旧させたいパッケージは当たり前ですが、dns(named)、web(apache2)、mail(postfix/dovecot)、ftp(vsftpd)、mailinglist(mailman)といったあたりでしたが、まぁ素直にサクっとは動いてくれないのがLInuxの世の常なのでしょう。

さらに結果としてデータファイル群は別パーティションを切っていたので友人の復旧屋に頼み、物理的にはある程度復旧できましたが、Linux系のOSでは当然の仕組み「パーミッション」の復旧には至らず、ここで相当苦しむ事になりました。
/home系のユーザディレクトリはまぁそれなりに「chown -R hoge.ftponly /home/hoge」 などで何とかなるものの、問題は実行パッケージ系(/etc配下とか)及び、httpd/htmlホーム配下の(例えばこのWordPressのような)フォルダが、どのようなパーミッションで無ければならないか、まずは所有者とグループ(chown系)と、読み書き実行(chmod系)の設定がそれぞれのパッケージによって要求仕様が異なっている為、あーでもないこーでもない・・・を繰り返し、グーグル先生にお尋ねしながらトライ&エラーを繰り返し、ダウンタイムは過去最悪・最長の2021/02/12(Fri)夕刻~2021/02/23(Tue)18:00頃迄の約11日間の長きにわたりました。

本日2/24(Wed)は後始末的な設定変更をチマチマ行っていたら、突然外部networkへの接続が出来ない(見えない)状況になり、どのプロセスでそれが起こったのか解らず、昨日2/23夕刻にフリーズミラーとして残しておいたHDDに取り替え、緊急リペアリブート、別HDDにミラーリビルドしながら今に至ります。
(その後、iptablesの設定スクリプトのどこかにに問題があると判明、暫定的に軽い設定に変更)

で、更にWordPressを起動して、いつものように更新をかけようとすると、これがまた見た事の無い認証画面が出てきて先に進まない始末。。
こちらに関しては幸い下記先達者の教えにたどり着きました・・・

「WordPress更新時にFTP情報入力画面が表示される場合の対処方法3つ」
https://www.sandalot.com/wordpress%E6%9B%B4%E6%96%B0%E3%81%A7ftp%E5%85%A5%E5%8A%9B%E7%94%BB%E9%9D%A2%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%B3%95/

・・/httpd/html/Wordpress/配下の所有者パーミッションが「apache.apache」では無い場合に発生する現象だった模様です。
「chown -R apache.apache ・・・/httpd/html/Wordpress/」
にて所有者情報を修正した結果、認証画面は発生せず、何事も無かったようにWebUIから更新出来るように戻りました。

某SNSには投稿済みですが「Linuxのシステム管理とは人生の縮図のようなもの」
(決して自分の思い通りには事は進まない、山あり谷あり乗り越えるべき壁がある)
と更に実感させられた日になりました。

ミラーリビルド完了までは大きな変更は危険なので、本日はこちらでボヤいて作業終了にします。

---本日までの再インストールプロセスで大きな単元として述べられる物(パッケージ)
×boot HDD起動不可
×/var/配下の一部フォルダ消失
×/home,/etcのパーミッション系消失

・CentOS7.9(2009_Everythingサーバ)・・2h程度?
・yum updateで上記への差分当て・・3h程度?
以下順不同で概ね10day以上?
・samba
・named(dns)
・postfix(MTA)
・dovecot(pop3/imap)
・iptables(firewalldから置き換え)
・fail2ban(データセットはバックアップから戻し)
・swatch(データセットはバックアップから戻し)
・apache2(httpd/web)
・php7.4へのリプレイス
・webmin
・webminstat
・vsftpd(ftp)
・chrony(ntpd)
・monit
・nmap
・ipset
・sshd(利用はローカルPCからのみ限定)
・telnet(利用はローカルホストからのテスト用途限定)
・boot画面の完全CUI化
・mailman(mailing list)データセットは旧Vine6/fml4次代の物から手作業入力戻し
・sasl2
・letsencrypt(データセットはバックアップから戻し)

ちなみに上記を動かすために必要要件とされる関連詳細パッケージ類
(perl CPANなど)は省略してます。

・・・でも多分まだまだ不足しており、気が遠くなります(T_T)

カテゴリー: 未分類 | コメントする

CentOS7というか、mailman(2.1.15)のmm_cfg.py、ほぼ完全版備忘録

mailman(2.1.15)のmm_cfg.pyは最小限の必要事項ですと、まぁ楽に変更で設定完了します。
逆に最大限にした場合、ほぼ丸一日ドハマり(WebUIでのml作成がBugで落ちる)したので、
最終的に完成した物を下記に備忘録として置いておきます。

ちなみにハマりの原因は推察ですが「”」(半角ダブルクォート)が「”」(全角ダブルクォート)に置き換わっていたり、pythonの行の右側に「#」でコメント書かれてたり(許されないみたい)、行の終端が0x0A(LF)のみでは無く、0x0D(CR) & 0x0A(LF)になっていたり、文末が即0x0A(LF)改行されておらず、半角や全角のスペースが入っていたり・・と一見したところ目に見えないバグが潜んでいた事だと思われます。

障害切り分けの為に、1ブロックずつmm_cfg.pyを最小版から修正・追記して、

While !=Bug {
systemctl restart mailman
systemctl status mailman
WebUIで新規ml作ってバグが出ないか確認
}

みたいな感じでデバッグしてました・・・疲れまくりですが、何とか確定し、メーリングリストサーバmailmanの設定系はほぼ完了、バグったときのために別途バックアップディレクトリに設定系のコピーも完了し本日はこれにて終了です。

以下URLにmm_cfg.pyの最終型(バグ修正完了分)を置いておきます。
同様にハマられている方は参考にして頂ければ幸いです_(_ _)_
(コピペの際はテキストエディタ等のバイナリモードで0x0D(CR)の消去をお忘れ無く)


http://www.feelkind.com/~halcom/20210101_mailman/mm_cfg.py

カテゴリー: 未分類 | コメントする

CentOS7(x64) サーバ、yumが動かなくなった件(T_T)

自宅 山科CentOS7(x64) サーバ、マイグレーションプロジェクト進捗。
本日で12日目。

本日のドハマリポイント(T_T)

CentOS7、mailmanをマズったので、一旦yum remove mailmanでアンインストールして(これはちゃんと動いた)、再度yum install mailmanをすると、yumが正しく動いてくれない。
「そのような ファイルやディレクトリはありません」とか毒を吐いて終わってしまう(謎)
いろいろググっていたら、恐らくPythonのバージョン依存によりトラブっていたのだと推察。

ちなみにCentOS7(2020_Final)でのyumは「Python 2.7.18」に完全依存している為、その他のpythonを入れたり、「python」のシンボリックリンクを書き換えるとドハマりする事を学習。
最終的にはCentOS7を最初からクリーンインストールしないとダメかなぁと諦めかけつつもゴチャゴチャしてたら、幸いにも復活しました。あ~よかった。

http://wordpress.ideacompo.com/?p=13490https://teratail.com/questions/216934

他のバージョンのPythonは全て消去。

ちなみに、先に投稿したmailmanパッケージのバグ・・・と思っていたのは、どうやらPythonがらみだったのかも知れない。
yumが正しく動作するようになった後に、再インストールしたら、バグってると思っていた書き換えポイントは正常だった。

と言うことで、メーリングリストサーバ「mailman」の稼動に関して目処が付いたので、本日・本年はこれにて終了。
関係各位、良いお年を&来年も新型コロナ/COVID-19にはくれぐれもお気を付け&ご自愛くださいませ_(_ _)_

カテゴリー: 未分類 | コメントする

鯖マイグレーション from Vine6(x86) to Cent7(x64) Job開始

今までV3.x時代から使い続けてきた、VineLinux(現在 6.x)がサポート終了、開発も多分終了、パッケージメンテナ等も続々離脱で、これ以上のアップデートは望めなくなりました。
(2014年で時計が止まった模様)

http://trac.vinelinux.org/wiki/Vine6/Roadmap
 2014 年 4 月 22 日 更新で止まってるし、

https://vinelinux.org/projectvine.html
 「Project Vine 発足時は・・・ 現在のLinuxの日本語環境整備に大きな役割を果たしました。活動は終了しています。」
とあるし、

https://mao.5ch.net/test/read.cgi/linux/1499159096/l50
事情通の方々はもうダメと認識してるみたいだし、僕もそう思うし、

3.x時代には「VineLinuxで自宅サーバー」といった本が出たりコンテンツがたくさん出回ったり、レガシーなPCでも日本語がサクサク使えるLinux環境として重宝させて戴いており、その後、ハード不良にもめげずM/B交換などもして、なんやかんや誤魔化しつつ利用を続けてましたが、流石にセキュリティ面での脆弱性や新たなモジュールとのパッケージ依存整合性などを思案すると、時間(というより日数?)を費やしてでも、別のアクティブなOSに乗り換える必然性があると決断しました。

ということで、いろいろと選択肢を悩みましたが、利用者も多く、関連コンテンツも豊富、サポート期間も長い「CentOS7」を選び、この際だから(そもそもM/BやCPUは十二分に対応している環境にリプレイス済みなので)「x64」環境へ、環境移行(マイグレーション)することにしました。

Vineすら識者にご教示戴きながら使っていたヘタレ鯖缶としましては、未知のOSへのマイグレーションなど、雲に隠れて見えない山の頂を目指すような「大変な試練」が待ち受けているだろう事はVine時代ですら数々の大ハマリを経験した身としては容易に想像がつくのですが、いつまでも棚上げしておく訳にもいかないので、公開鯖を2020年末年始にかけて落としてフルメンテする事にしました。

現在ボコボコにハマリながらも、何とかApache/PHP7/WordPressぐらいまではマイグレーション出来た模様で、この書き込みをしている次第。

開始から既に6日が経過していますが、大きな山は一応乗り越えたかも?
この後、何日かければ公開鯖として戻れるのか、努力の日々が続きます(T_T)

カテゴリー: 未分類 | コメントする

バーチャルドメインとの格闘

feelkind.comには配下にいくつかのバーチャルドメインがあります。

今回新たに「hogehoge.work」というドメインが安価に入手出来る事が解り、入手後、設定を行ったのですが、何故か疎通しない(-_-;)

他のバーチャルドメインとほぼ同じように.zone設定ファイルをin/out側共に作成して、named.confに追記、service named restartで動作するはず・・・と楽に考えてたのですが、これがハマりのポイントの一つでした。

まずサブドメインでは無く、新たな別ドメイン(.zone)が増えた場合「セカンダリDNSサービス」を受けて頂いているサーバ管理者に連絡が必要となります。
で、ここは何とかクリア。

しかし、まだ動かない。
それも以前から使っている他のバーチャルドメインは疎通しているにもかかわらず、hogehoge.workのみが疎通していない。。

色々な確認サービスを使ってリサーチするも「疎通していない」事は解っても、疎通させるための情報(何故疎通していないか)が無く、数日悩んでました。

で、結論としては、良くある話ですが「自分のステレオタイプ誤認」というオチに。。
VinelinuxでのネームサーバはBIND系で、/var/named/に設定ファイルが置かれるのですが、肝心のBIND本体の設定ファイル「named.conf」は/etc/named/配下にあるのが正解。

しかし、作業用Workとして/var/named/配下にnamed.confも置いていたものだから、こちらのファイルのみ修正してservice named restartを行っていたという超マヌケ状態でした。

cp /var/named/named.comf /etc/named/named.conf

てな感じで、本来の居場所に上書き後、service named restartの実行でサクっと解決。
いやはや、阿呆な話です(-_-;;)

同時に外部チェッカでdns状況を確認したところ、abuse@hogehoge.workとか、RFCで規定されているメアドが疎通していない(活性化していない)事も判明。

こちらもググりまくった結果、postfix側にもバーチャルドメインの設定、aliasesの設定等が必要であると判明。もう修正しまくりです(;_;)

修正箇所が判明してから都合半日ぐらいググり~の、修正してリスタートさせ~の、で、やっと外部から見てエラー無しに疎通できるレベルになりました。

さて、取得したは良いけれど、このバーチャルドメインをいつからどう使うかは全く未定です(爆)

 

カテゴリー: 未分類 | コメントする

<WordPressでblog等を運用している方への注意喚起拡散>

<WordPressでblog等を運用している方への注意喚起拡散>

GoogleからWordPressに関するセキュリティアラートのご提案が届いた。

まぁUpdateする事は必要だろうからと久しぶりにblogページに入ったら、いきなりBasic認証のIDとパスワードが要求される・・・

「http://www.yomaigoto.jp がユーザー名とパスワードを要求しています。警告: 入力したパスワードは現在のウェブサイトには送信されません!」

だそうな。。

 

 

管理モードでログインしようとしていないのにblogのトップページにアクセスしただけで訳の解らないドメインからBasic認証を要求され・・・一瞬入力しそうになったけど、キャンセル。WordPressの「ログイン」で管理者ログインし、Updateする。ついでにプラグイン類も全更新。

結果的にWordPressのVersionは4.9.5になった。

で、ログアウトしてログインを試みるも状況は変わらず
(@_@;)

調べてみると投稿した記事の中に他サイトのコンテンツへの参照リンクがあったのだけれども、このリンク先サイト(下記)がBasic認証を必要とする仕組みの模様(謎)

ttp://www.yomaigoto.jp/archives/346

よく解らないけど僕が書いた元ネタ記事のリンク参照を「http://」のハイパーリンクから「ttp://」の文字列に修正して再確認すると現象は終息した。

WordPress側の問題なのか関連性は解らないけれど、取りあえずセキュリティアラートに関しては潰しておくのが慣用かと思う次第。

下記はGoogleからの案内文。
---
ご利用の WordPress を手動で更新することをおすすめします message
Message type: [WNC-20061601]
Search Console

http://www.feelkind.com/

http://www.feelkind.com/ の所有者様

お客様のサイトで WordPress バージョン 4.9.3 のご利用が検出されました。WordPress のこのバージョンには重大なバグがあり、WordPress サイトのソフトウェアの自動更新が阻害されております。WordPress の古いバージョンをご利用になると、サイトが攻撃されやすくなるセキュリティ上の問題が発生することがございます。このメッセージは、お客様のサイトが侵害されたという通知ではなく、サイトを更新すると安
?全性が高まることをお知らせするものです。

ご利用中の WordPress のバージョンはログインしたときの [ダッシュボード] の [概要] パネルに表示されます。または、[更新] ページに移動してバージョンを確認していただくこともできます。

すでに WordPress の最新バージョンをご利用の場合は、このメールは無視していただいてかまいません。最新バージョンではない場合は、下記の手順に沿って、できる限り早急にソフトウェアを手動で更新することをおすすめいたします。

おすすめの操作

1

WordPress の最新バージョンに更新する

WordPress の最新バージョンに更新するには、WordPress の [ダッシュボード] > [更新] に移動して [今すぐ更新] をクリックします。WordPress の最新バージョンをダウンロードして更新していただくこともできます。

2

常に最新リリースを利用する

古いバージョンのソフトウェアやパッチを適用していないソフトウェアは、ハッキングや不正なソフトウェアからの攻撃を受けやすくなるため、ソフトウェアの新しいバージョンがリリースされたら、すぐにインストールすることが重要です。

ご不明な点がある場合



(以下略)

カテゴリー: 未分類 | コメントする

Vine鯖・・・権利(パーミッション)関係 & spamdトラブル対処。

朝っぱらから鯖メンテ・・やっと終了なう。

昨日apt-getでカーネル等いろいろupdateしてrebootしたらディスクの権利関係がおかしくなった模様。
rootでもtouchやchownが聞かない、spamassasinが起動できない(T_T)

騙し騙し使っていたファイルシステムの不具合かと全てのディスクに起動時fsckをかけてみる・・・とsys/の途中で強制リセットかかる(汗)
旧カーネルでfsckかけてみるとsys/はクリア、その後home/の途中でハング(滝汗)
仕方なしにfsck無しに強制リブートで起動すると、権利関係に関しては何とか復旧した模様。。
しかし、spamassasinも権利関係でNGだと思ってたのにこちらはNGのまま。
で、ググる。
あった・・・ので試してみると成功する。
先人の苦労に感謝_(_ _;)_

参照先
「ttp://www.yomaigoto.jp/archives/346」

 

カテゴリー: 未分類 | コメントする

Apache2/php5再インストール(-_-;)

Vine6.2鯖でファイルエラーが発生し、修正メンテしたのですが、何故かApache2が正常起動しなくなりました(-_-;)
解決方法が見えないので、一旦/etc/apache2/conf関連を別ディレクトリにバックアップの上、Apache2を再インストールしました。

無論conf関連は手作業で旧バックアップとにらめっこしながら書き直しです(_ _;;)

Apache2の起動終了及びcgi含むコンテンツ系は正常に戻ったのですが、何やらphp君が動作していない模様(-_-;;)

仕方なくこちらも再インストールする事に(T_T)
http://vine.1-max.net/apache2-php5.html

久々の多量メンテで疲れましたorz

<おまけ>
http://mantis.vinelinux.org/view.php?id=1191

カテゴリー: 未分類 | コメントする