【Oracle】SQLで表記揺れ

住所の登録システムを作っているときにたまに要件で出てくる表記揺れ。
ひらがなは全て半角カタカナに変換したり、
括弧も全て()に変換したりします。

Oracle10gからの機能であるUTL_I18NパッケージのTRANSLITERATEファンクションを利用します。
下記に例を示しておきます。

テキトーな仕様
全角英数字:全て半角英数字に変換
全角ひらがな、カタカナ:全て半角カタカナに変換
前後の中間の空白:全角、半角問わず削除
全角半角の括弧{}、「」、<>、():全て()に変換
全角記号:半角記号に変換
全角半角のハイフン:全て-に変換
CREATE OR REPLACE FUNCTION CONVERSION_TEST(
    IN_CHAR VARCHAR
) RETURN VARCHAR
IS
BEGIN
RETURN
    UTL_I18N.TRANSLITERATE(
        TRANSLATE(
            UPPER(TO_SINGLE_BYTE(REPLACE(REPLACE(IN_CHAR,' '),' ')))
            ,'{}「」<>()ー-!#$%'
            ,'()()()()--!#$%'
            )
        ,'kana_hwkatakana')
    ;
END CONVERSION_TEST;

記号、括弧、ハイフンは全部書くとキリないので、省略しています。
「kana_hwkatakana」の部分は他にも色々あるようです。

【ファイルサーバ】Samba導入

タブレットを買ったこともあり、
会社作業を2つのPCで行うことが増えたので、
NUCにSambaを構築します。

  • Samba導入

    yum -y install samba
    
  • Samba設定

    mkdir /home/share
    chmod 777 /home/share
    vi /etc/samba/smb.conf
    
    下記内容を[global]の下に追加
    # Linux側文字コード
    unix charset = UTF-8
    # Windows側文字コード
    dos charset = CP932
    # ローカルLAN内からのみのアクセスを許可
    hosts allow = 192.168.XXX.
    
    下記内容を変更
    # Windowsのマイコンピュータの「プロパティ」-「ワークグループ」を指定
    workgroup = MYGROUP
    ↓
    workgroup = WORKGROUP
    
    # 認証を行なわない(ローカルLAN内からのアクセスのみ許可しているため)
    security = user
    ↓
    security = share
    
    # プリンタの共有
    load printers yes
    ↓
    load printers no
    
    [printers]の部分を全てコメントアウト
    
    下記内容を最終行に追加
    # テキトーに好きな名前指定
    [Share]
    # 共有フォルダを指定
     path = /home/share
    # 書き込み許可
    writable = yes
    # ゲストユーザ許可
    guest ok = yes
    # 全てゲストユーザとして扱う
    guest only = yes
    # フルアクセスでファイル作成
    create mode = 0777
    # フルアクセスでディレクトリ作成
    directory mode = 0777
    # 複数人が同時アクセス許可
    share modes = yes
    
  • Samba用のファイアウォール設定
    ファイアウォールの設定を行う。
    外部からは接続できないようにするため、ルーターのポートは開けません。

    iptables -I INPUT 12 -p tcp --dport 445 -j ACCEPT
    iptables -I INPUT 12 -p tcp --dport 139 -j ACCEPT
    iptables -I INPUT 12 -p udp --dport 138 -j ACCEPT
    iptables -I INPUT 12 -p udp --dport 137 -j ACCEPT
    service iptables save
    
  • Samba起動

    /etc/rc.d/init.d/smb start
    /etc/rc.d/init.d/nmb start
    chkconfig smb on
    chkconfig nmb on
    

    smb:ファイル転送の機能を提供する。
    nmb:ネットワークでマシンをブラウジングする機能を提供する。

    Windowsからエクスプローラーで「\\192.168.XXX.XXX\」とうって
    shareディレクトリが確認でき、複数PCでファイルやり取りができれば問題なし。

【メールサーバ】Postfix設定その5(再送)

  • Postfix設定(再送)
    Postfixの設定内容を追加します。
    再送リトライはデフォルトだと5日となっていますが、
    再送出来ない場合、1回で諦めるように設定変更します。

    vi /etc/postfix/main.cf
    
    下記内容を追加
    # 再送リトライは1回
    maximal_queue_lifetime = 0
    bounce_queue_lifetime = 0
    

    設定内容を反映します。

    /etc/rc.d/init.d/postfix restart
    

【メールサーバ】root宛メール

  • root宛メール削除
    「/var/mail/root」と「/var/spool/mail/root」のファイルサイズが増えていたので、
    mailコマンドで確認してみたところ

    sudo -u root mail
    
    No mail for root
    

    メールがないと記載されたが、ファイルサイズがあって気持ち悪いので、
    内容を待避し、削除することにしました。

    cat /var/mail/root > /home/ユーザ名/mail.txt
    cat /dev/null > /var/mail/root
    

    これで「/var/mail/root」と「/var/spool/mail/root」のファイルサイズが0になりました。

  • root宛メール転送
    root宛のメールをPostfixを利用して
    プロバイダのメールアドレスに転送します。

    Postfixのエイリアスの設定場所を確認し、設定値を追加します。

    view /etc/postfix/main.cf
    
    下記内容が設定されていることを確認する。
    alias_maps = hash:/etc/aliases
    
    vi /etc/aliases
    
    下記内容を最終行に追加
    root: プロバイダのメールアドレス
    

    設定内容を反映します。

    postalias /etc/aliases
    /etc/rc.d/init.d/postfix restart
    
  • root宛メール転送確認

    echo test | mail root
    

    「/var/mail/root」と「/var/spool/mail/root」のファイルサイズが0KBのままで
    プロバイダのメールアドレスにテストメールが届きます。

【Java】セッションとクッキーについて

セッションとクッキーについてメモ。

  • クッキーについて

    • 保存場所

      C:\Users\ユーザ名\AppData\Local\Microsoft\Windows\Temporary Internet Files
      
    • ファイル名

      Cookie:ユーザ名@サイト名/
      
    • ブラウザメモリに保存されているクッキーの値が最優先
      ファイルに保存されたクッキーの値を変更しても
      ブラウザを閉じない限り、異なるIEで繋いでもブラウザで取得済の
      ブラウザメモリのクッキーの値を使用する。
      ブラウザを閉じて繋ぎなおすと、ファイルに保存されたクッキーの値を使用する。

      ただしクッキーの値の変更はツールを使用しないと有効にならない。
      手書きで変更しても読み取れずに2番目の動作時にクッキーの値がNULLとなる。

  • セッションについて

    • 保存場所
      ブラウザメモリまたはクッキーのファイルに保存。
      キー名はJSESSIONIDであり、クッキーの値が優先される。
    • セッションハイジャック
      セッションIDはサーバーとやり取りしている中でブラウザが自動でサーバーへ送信しているが、
      下記の記述で明示的に直接指定することも可能。

      変更前
      セッションIDはブラウザメモリまたはクッキーの値を自動でサーバーへ送信

      http://z-area.net/コンテキスト名?request1=test1&request2=test2
      

      変更後
      セッションIDはURLの値をサーバーへ送信

      http://z-area.net/コンテキスト名;jsessionid=12345?request1=test1&request2=test2
      

      12345のセッションIDが正規のユーザのものである場合、
      変更後のリクエストは正常に処理される。

      ログイン画面を表示した時点でセッションIDが採番されるので、
      セッションハイジャックを防ぐにはログイン成功後にセッションIDを採番し直す。

  • ツール
    クッキー書き換え:IECookiesView(日本語化可能)
    HTTP情報参照:ieHTTPHeaders

【APサーバ】Tomcat削除

Tomcatが停止できない原因はファイアウォールだったわけですが、
原因特定前にTomcatを再インストールしたので、
Tomcatの削除手順を記載しておきます。

  • Tomcat停止

    ps -ef | grep java
    

    Tomcatが起動していないことを確認。
    Tomcatが起動している場合、停止する。

    sudo -u tomcat /usr/local/tomcat/bin/shutdown.sh
    
  • Tomcat自動起動の停止

    chkconfig --list | grep tomcat
    

    Tomcatが自動起動になっている場合、停止および削除する。

    sudo chkconfig tomcat off
    chkconfig --del tomcat
    
  • Tomcat削除

    • yumでインストールしている場合

      yum list installed | grep tomcat
      

      yumでインストールしたアプリ名を確認し、removeで削除していく。

      sudo yum remove -y 上記で出力されたアプリ名
      
    • 手動でインストールしている場合(私の場合はこちら)

      rm -f /usr/local/tomcat
      rm -fr /usr/local/apache-tomcat-7.0.50
      

【APサーバ】Tomcat停止時にエラー

  • Tomcat停止時エラー
    Apache2とTomcat連携をしてからか、
    MyDNSの設定を変更してからか不明ですが、
    Tomcat停止時に下記エラーが発生しました。

    重大: Catalina.stop:
    java.net.NoRouteToHostException: ホストへの経路がありません
    
    重大: Catalina.stop:
    java.net.ConnectException: 接続を拒否されました
    
  • ファイアウォールの設定見直し
    ルーティング系のエラーはファイアウォールが一番怪しいので、調べてみると
    Tomcat停止時は8005番ポートを利用しているようなので、iptablesの設定を変更します。
    内部の話なのでルーターの設定は変更していません。

    iptables -L --line-numbers
    iptables -I INPUT 9 -p tcp -m tcp --dport 8005 -j ACCEPT
    service iptables save
    

【メールサーバ】PostfixとDovecotの設定値まとめ

  • Postfix設定値一覧

    postconf
    

    Postfixに関わる全ての設定値が出力されます。

  • Postfixデフォルト値一覧

    postconf -d
    

    Postfixに関わる全てのデフォルト値が出力されます。

  • Postfixデフォルトと異なる値一覧

    postconf -n
    

    Postfixに関わる全てのデフォルト値と異なる値が出力されます。
    設定した覚えないのないキーと値も出ますが、そういうものだと思い込みました。

  • Dovecotデフォルトと異なる値一覧

    dovecot -n
    

    Dovecotに関わる全てのデフォルト値と異なる値が出力されます。

【メールサーバ】PostfixとDovecotのSSL導入

  • サーバー証明書作成

    cd /etc/pki/tls/certs/
    make mail.pem
    
    下記内容を入力
    ~略~
    Country Name (2 letter code) [XX]:JP
    State or Province Name (full name) []:Tokyo
    Locality Name (eg, city) [Default City]:Akihabara
    Organization Name (eg, company) [Default Company Ltd]:OreOreCA
    Organizational Unit Name (eg, section) []:
    Common Name (eg, your name or your server's hostname) []:mail.z-area.net
    Email Address []:ユーザ名@mail.z-area.net
    
  • Postfix設定(SSL)

    vi /etc/postfix/main.cf
    
    下記内容を最終行に追加
    smtpd_use_tls = yes
    smtpd_tls_cert_file = /etc/pki/tls/certs/mail.pem
    smtpd_tls_key_file = /etc/pki/tls/certs/mail.pem
    smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
    
    cp -pi /etc/postfix/master.cf /etc/postfix/master.cf.org
    vi /etc/postfix/master.cf
    
    下記内容を変更(コメントアウトを外す)
    #smtps     inet  n       -       n       -       -       smtpd
    #  -o smtpd_tls_wrappermode=yes
    #  -o smtpd_sasl_auth_enable=yes
    #  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
    ↓
    smtps     inet  n       -       n       -       -       smtpd
      -o smtpd_tls_wrappermode=yes
      -o smtpd_sasl_auth_enable=yes
      -o smtpd_client_restrictions=permit_sasl_authenticated,reject
    
    下記内容がコメントアウトされていないことを確認
    tlsmgr    unix  -       -       n       1000?   1       tlsmgr
    
    /etc/rc.d/init.d/postfix restart
    
  • Dovecot設定(SSL)

    cp -pi /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.org
    vi /etc/dovecot/conf.d/10-ssl.conf
    
    下記内容を変更(<が必要な点に注意)
    #ssl = yes
    ↓
    ssl = yes
    
    ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
    ssl_key = </etc/pki/dovecot/private/dovecot.pem
    ↓
    ssl_cert = </etc/pki/tls/certs/mail.pem
    ssl_key = </etc/pki/tls/certs/mail.pem
    
    /etc/rc.d/init.d/dovecot restart
    
  • ポート開放と閉鎖

    SMTP(SSL)では465番ポートを利用し、
    POP(SSL)では995番ポート、IMAP(SSL)では993番ポートを利用するため、
    利用状況に合わせてポートを開放します。

    POPで利用していた110番ポートは閉じました。
    SMTPで利用していた25番ポートは閉じた場合、
    メール受信の制限確認等で利用しているようで、
    閉じると外部からメールが届かなくなったため、開放したままにしています。
    内部から内部へは閉じてても届くので、その辺は調査しないと不明です。

    iptables -I INPUT 8 -p tcp -m tcp --dport 465 -j ACCEPT
    iptables -I INPUT 9 -p tcp -m tcp --dport 995 -j ACCEPT
    iptables -D INPUT -p tcp -m tcp --dport 110 -j ACCEPT
    service iptables save
    
    iptables -L --line-numbers
    
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source    destination
    1    ACCEPT     all  --  anywhere  anywhere     state RELATED,ESTABLISHED
    2    ACCEPT     icmp --  anywhere  anywhere
    3    ACCEPT     tcp  --  anywhere  anywhere     state NEW tcp dpt:ssh
    4    ACCEPT     tcp  --  anywhere  anywhere     tcp dpt:http
    5    ACCEPT     tcp  --  anywhere  anywhere     tcp dpt:https
    6    ACCEPT     tcp  --  anywhere  anywhere     tcp dpt:urd
    7    ACCEPT     tcp  --  anywhere  anywhere     tcp dpt:pop3s
    8    REJECT     all  --  anywhere  anywhere     reject-with icmp-host-prohibited
    
  • メーラーの設定

    • 詳細設定タブ

【メールサーバ】PostfixとDovecot起動

  • Postfix起動

    /etc/rc.d/init.d/postfix restart
    chkconfig postfix on
    
  • Dovecot起動

    /etc/rc.d/init.d/dovecot start
    chkconfig dovecot on
    
  • PostfixとDovecotの動作確認
    動作確認にはWindowsLiveメールを利用しました。
    初回起動するとアカウントの追加が立ち上がりますが、ここでは一旦適当に入力します。
    次に追加されたアカウントを右クリックからプロパティを選択。
    下記の通りに入力します。
    特に記載のない項目はデフォルト設定としています。

    • 全般タブ
    • サーバータブ

      注意点として受信メールサーバーのパスワードは
      ユーザー名に合致するLinuxのパスワードを入力します。
      (SMTP-Authは送信用のため)
    • サーバータブの送信メールサーバーの設定ボタン

      注意点として送信メールサーバーのパスワードは
      SMTP-Authの設定で設定したパスワードを入力します。

    設定が完了したら下記内容を確認します。

    ローカルLANで同一ユーザ同士でメールの送受信
    ローカルLANで他ユーザ間でメールの送受信
    ローカルLANで外部(プロバイダやgmail)との送受信
    ローカルLANで携帯との送受信
    外部LAN(会社や公衆LAN)で同一ユーザ同士でメールの送受信
    外部LAN(会社や公衆LAN)で他ユーザ間でメールの送受信
    外部LAN(会社や公衆LAN)で外部(プロバイダやgmail)との送受信
    外部LAN(会社や公衆LAN)で携帯との送受信
    

    外部LANでの確認は後述するOpenSSLの適用を行ってから実施します。

  • 踏み台確認
    自宅メールサーバーが第三者中継に利用されない設定になっているかを確認します。
    下記サイト説明を読んだ上で利用します。
    http://www.rbl.jp/svcheck.php

    19個前後のテストが実施され、下記内容が出力されれば問題ありません。

    第三者中継テストの結果
    全てのテストが行われました, no relays accepted.