2026年7月18日土曜日

海外アクセスを遮断

vi /root/script/update_geoip.sh <<__EOF__
#!/bin/bash
# 日本のIPアドレス(IPv4 / IPv6両対応)をインポートするスクリプト
# 一時ファイルの準備
IP_FILE_V4="/tmp/jp_ips_v4.txt"
IP_FILE_V6="/tmp/jp_ips_v6.txt"
sudo firewall-cmd --permanent --delete-ipset=japan-ips-v4 2>/dev/null
sudo firewall-cmd --permanent --delete-ipset=japan-ips-v6 2>/dev/null
sudo firewall-cmd --permanent --delete-ipset=japan-ips 2>/dev/null
# 正しいURL(ftp.apnic.net)からデータを取得して抽出
curl -s http://ftp.apnic.net/stats/apnic/delegated-apnic-latest | grep 'apnic|JP|ipv4' | awk -F'|' '{printf "%s/%d\n", $4, 32-log($5)/log(2)}' > $IP_FILE_V4
curl -s http://ftp.apnic.net/stats/apnic/delegated-apnic-latest | grep 'apnic|JP|ipv6' | awk -F'|' '{printf "%s/%s\n", $4, $5}' > $IP_FILE_V6
# firewalld用の「japan-ips」セットを再作成
sudo firewall-cmd --permanent --delete-ipset=japan-ips-v4 2>/dev/null
sudo firewall-cmd --permanent --new-ipset=japan-ips-v4 --type=hash:net --family=inet
sudo firewall-cmd --permanent --ipset=japan-ips-v4 --add-entries-from-file=$IP_FILE_V4

sudo firewall-cmd --permanent --delete-ipset=japan-ips-v6 2>/dev/null
sudo firewall-cmd --permanent --new-ipset=japan-ips-v6 --type=hash:net --family=inet6
sudo firewall-cmd --permanent --ipset=japan-ips-v6 --add-entries-from-file=$IP_FILE_V6
# 設定の反映
sudo firewall-cmd --reload
# 一時ファイルの削除
#rm -f $IP_FILE_V4 $IP_FILE_V6
echo "日本のIPv4およびIPv6アドレスリストを正常に更新しました。"
__EOF__


# ① 全員に公開していた標準設定を削除
sudo firewall-cmd --permanent --zone=public --remove-service=http
sudo firewall-cmd --permanent --zone=public --remove-service=https
# ② 新しい日本リスト(IPv4/v6両方対応)だけを許可するリッチルールを追加
# 【IPv4用】日本のIPから、http、https、および各カスタムポートへのアクセスを許可
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset="japan-ips-v4" service name="http" accept'
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset="japan-ips-v4" service name="https" accept'
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset="japan-ips-v4" port port="3000" protocol="tcp" accept'
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset="japan-ips-v4" port port="8000" protocol="tcp" accept'

# 【IPv6用】日本のIPから、http、https、および各カスタムポートへのアクセスを許可
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset="japan-ips-v6" service name="http" accept'
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset="japan-ips-v6" service name="https" accept'
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset="japan-ips-v6" port port="3000" protocol="tcp" accept'
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset="japan-ips-v6" port port="8000" protocol="tcp" accept'

# ③ ファイアウォールをリロードして有効化
sudo firewall-cmd --reload


# ドコモ・ahamo・ISP系列のIPv6(2400::/12)を無条件で許可
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv6" source address="2400::/12" service name="https" accept'
# au・UQモバイル系列のIPv6(2408::/12)を無条件で許可
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv6" source address="2408::/12" service name="https" accept'
# ソフトバンク・ワイモバイル系列のIPv6(240a::/12)を無条件で許可
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv6" source address="240a::/12" service name="https" accept'
# 楽天モバイル系列のIPv6(240b::/12)を無条件で許可
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv6" source address="240b::/12" service name="https" accept'
# ファイアウォールを再読み
込み
sudo firewall-cmd --reload

# LAN内(192.168.1.1〜192.168.1.254)からの通信を無条件で最優先許可
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept'

# 設定の反映
sudo firewall-cmd --reload

firewall-cmd --zone=public --list-all
sudo nft list chain inet firewalld filter_INPUT


元に戻す。
# 標準の公開設定を復活させる
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https

# 今回追加したエラーの原因となるルールを削除
sudo firewall-cmd --permanent --zone=public --remove-rich-rule='rule source ipset="japan-ips" service name="http" accept'
sudo firewall-cmd --permanent --zone=public --remove-rich-rule='rule source ipset="japan-ips" service name="https" accept'

sudo firewall-cmd --permanent --delete-ipset=japan-ips-v4 2>/dev/null
sudo firewall-cmd --permanent --delete-ipset=japan-ips-v6 2>/dev/null
sudo firewall-cmd --permanent --delete-ipset=japan-ips 2>/dev/null

# 反映させる
sudo firewall-cmd --reload



 【ブロックログを確認する。】
sudo firewall-cmd --set-log-denied=all

# ログ記録をオフに戻すコマンド
sudo firewall-cmd --set-log-denied=off

journalctl -xef -t firewall
sudo journalctl -f -k | grep -E "FINAL_REJECT|FINAL_DROP"



2026年7月6日月曜日

ZABBIX8.0 with postgres and nginx

■インストール前に PHP8.2以上が必要。

sudo dnf install -y epel-release
sudo dnf install -y http://rpms.remirepo.net/enterprise/remi-release-9.rpm # Rocky Linux9
sudo dnf module reset php -y
sudo dnf module enable php:remi-8.5 -y
sudo dnf update php\* -y
php -v
PHP 8.5.8 (cli) (built: Jul  1 2026 03:46:27) (NTS gcc x86_64)
Copyright (c) The PHP Group
Built by Remi's RPM repository <https://rpms.remirepo.net/> #StandWithUkraine
Zend Engine v4.5.8, Copyright (c) Zend Technologies
    with Zend OPcache v8.5.8, Copyright (c), by Zend Technologies
sudo vi /etc/php-fpm.d/zabbix.conf 
  user = nginx
  group = nginx

sudo systemctl restart php-fpm
sudo systemctl restart nginx

[epel]
...
excludepkgs=zabbix*

# dnf install zabbix-server-pgsql zabbix-web-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent

# sudo -u postgres createuser --pwprompt zabbix
# sudo -u postgres createdb -O zabbix zabbix

# zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix

vi /etc/zabbix/zabbix_server.conf
DBPassword=password

vi /etc/nginx/conf.d/zabbix.conf
        listen          443 ssl;
        server_name     zabbix.dom.mydns.com;

# systemctl restart zabbix-server zabbix-agent2 nginx php-fpm
# systemctl enable zabbix-server zabbix-agent2 nginx php-fpm

# firewall-cmd --add-port=10050/tcp --zone=public --permanent
# firewall-cmd --add-port=10051/tcp --zone=public --permanent
# firewall-cmd --reload

# chown -R nginx:nginx /etc/zabbix
# chown -R nginx:nginx /usr/share/zabbix

setsebool -P httpd_can_connect_zabbix on
setsebool -P httpd_can_network_connect_db on
setsebool -P httpd_can_network_connect on
setsebool -P zabbix_can_network on

# dnf install zabbix-selinux-policy

【フロントエンドの設定】
user: Admin
password: zabbix


【NGINX】
vi /etc/nginx/conf.d/00_zabbix.conf  <<__EOF__
server {
        listen          443 ssl;
        server_name     zabbix.dom.mydns.com;

        # SSL証明書のパス(お使いの環境のパスに必ず書き換えてください)

        ssl_certificate     /etc/pki/tls/certs/localhost.crt;
        ssl_certificate_key /etc/pki/tls/private/localhost.key;

        # ドキュメントルートは「/ui」の手前までに変更
        root    /usr/share/zabbix/ui;
        index   index.php;

        client_max_body_size 5m;

        location = /favicon.ico {
                log_not_found   off;
        }

        # /zabbix/ でアクセスされた場合の挙動
        location / {
                #alias /usr/share/zabbix/ui;
                try_files $uri $uri/ =404;
        }

        location /assets {
                access_log      off;
                expires         10d;
        }

        location ~ /\.ht {
                deny            all;
        }

        location ~ /(api\/|conf[^\.]|include|locale) {
                deny            all;
                return          404;
        }

        location /vendor {
                deny            all;
                return          404;
        }

        # PHPの実行設定
        location ~ ^/(.+\.php)(/|$) {
                fastcgi_pass    unix:/run/php-fpm/zabbix.sock;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_index   index.php;

                fastcgi_param   DOCUMENT_ROOT   /usr/share/zabbix/ui;
                fastcgi_param   SCRIPT_FILENAME /usr/share/zabbix/ui/$1;
                fastcgi_param   PATH_TRANSLATED /usr/share/zabbix/ui/$1;

                include fastcgi_params;
                fastcgi_param   QUERY_STRING    $query_string;
                fastcgi_param   REQUEST_METHOD  $request_method;
                fastcgi_param   CONTENT_TYPE    $content_type;
                fastcgi_param   CONTENT_LENGTH  $content_length;

                fastcgi_intercept_errors        on;
                fastcgi_ignore_client_abort     off;
                fastcgi_connect_timeout         60;
                fastcgi_send_timeout            180;
                fastcgi_read_timeout            180;
                fastcgi_buffer_size             128k;
                fastcgi_buffers                 4 256k;
                fastcgi_busy_buffers_size       256k;
                fastcgi_temp_file_write_size    256k;
        }
}
__EOF__






















2026年7月2日木曜日

Let'sEncryptのSSL証明書

sudo dnf install epel-release -y
sudo dnf install certbot python3-certbot-nginx -y
certbot --nginx -d office.dom.mydns.jp -d link.dom.mydns.jp -d dom.mydns.jp
 
  • Email Address: 期限切れ通知などを受け取るメールアドレスを入力。
  • Terms of Service: 利用規約への同意。Y を入力。
  • Share Email: 運営団体(EFF)へのメール共有可否。任意(Y または N)。 [1]

  • ※自動的に、/etc/nginx/conf.d/00-xxxx.conf が書き換わる。 ⇐確認必要。

    # tree /etc/letsencrypt
    /etc/letsencrypt
    ├── accounts
    │   └── acme-v02.api.letsencrypt.org
    │       └── directory
    │           └── 37fc0a779cab99282f60862f0ee7f16f
    │               ├── meta.json
    │               ├── private_key.json
    │               └── regr.json
    ├── archive
    │   └── office.dom.mydns.jp
    │       ├── cert1.pem
    │       ├── chain1.pem
    │       ├── fullchain1.pem
    │       └── privkey1.pem
    ├── cli.ini
    ├── live
    │   ├── README
    │   └── office.dom.mydns.jp
    │       ├── README
    │       ├── cert.pem -> ../../archive/office.dom.mydns.jp/cert1.pem
    │       ├── chain.pem -> ../../archive/office.dom.mydns.jp/chain1.pem
    │       ├── fullchain.pem -> ../../archive/office.dom.mydns.jp/fullchain1.pem
    │       └── privkey.pem -> ../../archive/office.dom.mydns.jp/privkey1.pem
    ├── options-ssl-nginx.conf
    ├── renewal
    │   └── office.dom.mydns.jp.conf
    ├── renewal-hooks
    │   ├── deploy
    │   ├── post
    │   └── pre
    └── ssl-dhparams.pem

    sudo systemctl restart nginx

    Let's Encryptの有効期限は90日
    #  certbot renew --dry-run
    Saving debug log to /var/log/letsencrypt/letsencrypt.log

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Processing /etc/letsencrypt/renewal/office.dom.mydns.jp.conf
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Account registered.
    Simulating renewal of an existing certificate for office.dom.mydns.jp

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Congratulations, all simulated renewals succeeded: 
      /etc/letsencrypt/live/office.dom.mydns.jp/fullchain.pem (success)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    【確認】


    ※デバックは、本番のDjangoとNextJSを停止して、手動でDjangoとNextJSを起動する。

    sudo systemctl stop gunicorn
    sudo -u nginx /usr/local/bin/pm2 status
    sudo -u nginx /usr/local/bin/pm2 stop nextjs-app






    デバック時の利用
    vi /et c/hosts   << __EOF__
    192.168.1.198   office.dom.mydns.jp link.dom.mydns.jp dom.mydns.jp
    __EOF__

    【Djanogo】
    . ./env
    pip install django-extensions Werkzeug pyOpenSSL

    INSTALLED_APPS = [
        ...
        'django_extensions',
    ]

    cd Cert
    sudo cp /etc/letsencrypt/live/office.dom.mydns.jp/fullchain.pem fullchain.pem
    sudo cp  /etc/letsencrypt/live/office.dom.mydns.jp/privkey.pem    privkey.pem
    sudo chown takahab:takahab fullchain.pem  privkey.pem


    python manage.py runserver_plus --cert-file Cert/ fullchain.pem --key-file Cert/privkey.pem.pem 127.0.0.1:8001














    海外アクセスを遮断

    vi /root/script/update_geoip.sh <<__EOF__ #!/bin/bash # 日本のIPアドレス(IPv4 / IPv6両対応)をインポートするスクリプト # 一時ファイルの準備 IP_FILE_V4="/tmp/jp_ip...