makoto_fujimotoのblog

株式会社進角
代表 藤本信のブログです
どうぞよろしくお願いします

カテゴリ : 技術メモ

お問合せフォームや独自のメール配信システムからメールを送った場合、相手に届かなかったり迷惑メールに振り分けられてしまうことがたまにあります。この様な不具合を回避するためのチェックポイントをまとめました。

  1. Fromのドメインが存在していて返信可能か
  2. メールヘッダにエンベロープFrom(Return-path)が正しく記述されているか
  3. エンベロープFromに記述したサーバが存在しているか
  4. そのドメインのDNSにMXレコードが記述されているか
  5. そのMXレコードに記述されているMTA(メールサーバ)にメールが到達可能か
  6. ドメインのDNSにSPFレコード(送信サーバのIPアドレスやネットワーク)が記述されているか
  7. 送信サーバのIPアドレスに逆引きDNSが定義されているか
  8. MTA(メールサーバ)の正引きDNSと逆引きDNSが一致しているか
  9. 送信サーバのIPアドレスがブラックリスト(Spamhaus等)に登録されていないか
  10. 送信サーバのIPアドレスにプライベートアドレスを使用していないか
  11. メール形式にHTMLやjavascriptを使用していないか
  12. メール形式にマルチパート(multipart/alternative)を使用していないか
  13. メール本文にリンクを多用していないか
  14. メール本文にSPAMによくあるキーワードが使用されていないか
  15. 共有サーバを使用していてIPアドレスが行儀の悪い他サイトと共通になっていないか

ffmpegで動画ファイルの詳細情報を取得する際にファイル名がSJISの場合ファイル指定に
難航したので解決策のメモ。

例えばWindows系ファイルシステムがマウントされたLinux系サーバでは日本語ファイル名や
フォルダ名が以下の様に文字化けしてしまうことがあります(1行目)。ファイル名は"コ ピー.mp4"

$ ls -l
-rw-rw-r--  1 fujimoto fujimoto 111044022 11月  9 16:46 2015 ?R ?s?[.mp4
-rw-rw-r--  1 fujimoto fujimoto 111044022 11月  9 16:46 2015 ああ あ.mp4
-rw-rw-r--  1 fujimoto fujimoto 111044022 11月  9 16:46 2015 あああ.mp4

これを以下の様にffmpegにコピペしても旨く行きません
$ ffmpeg -i  ?R ?s?[.mp4
$ ffmpeg -i  "?R ?s?[.mp4"
$ env LANG=ja_JP.SJIS ffmpeg -i "?R ?s?[.mp4"
ffmpeg version N-81489-ga37e6dd Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-17)
  configuration: --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libx264
  libavutil      55. 29.100 / 55. 29.100
  libavcodec     57. 54.101 / 57. 54.101
  libavformat    57. 48.101 / 57. 48.101
  libavdevice    57.  0.102 / 57.  0.102
  libavfilter     6. 57.100 /  6. 57.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
?R ?s?[.mp4: No such file or directory


なんとか直接ファイル名を渡す方法は無いものか・・・

ということでlsやfindで取得したファイル名をそのままffmpegに渡す方法でうまくいきました。
ただしリストの何番目という情報を最初に把握する必要があり、あまりスマートな方法では無いかもしれません。

カレント内のファイルの場合
$ ls -1
$ ffmpeg -i "`ls -1|sed -n 1p`"

カレント内のサブフォルダのファイルを指定する場合
$ find . -type f|grep mp4
$ ffmpeg -i "`find . -type f|grep mp4|sed -n 1p`"

動画情報の取得に成功した場合の結果
$ ffmpeg -i "`find . -type f|grep mp4|sed -n 8p`"
ffmpeg version N-81489-ga37e6dd Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-17)
  configuration: --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libx264
  libavutil      55. 29.100 / 55. 29.100
  libavcodec     57. 54.101 / 57. 54.101
  libavformat    57. 48.101 / 57. 48.101
  libavdevice    57.  0.102 / 57.  0.102
  libavfilter     6. 57.100 /  6. 57.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './/Rs[.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: mp41mp42isom
    creation_time   : 2014-07-18T07:40:50.000000Z
  Duration: 00:00:44.08, start: 0.000000, bitrate: 20154 kb/s
    Stream #0:0(deu): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 2 kb/s (default)
    Metadata:
      creation_time   : 2014-07-18T07:40:50.000000Z
      handler_name    : Core Media Audio
    Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080, 20146 kb/s, SAR 1:1 DAR 16:9, 29.97 fps, 29.97 tbr, 30k tbn, 50 tbc (default)
    Metadata:
      creation_time   : 2014-07-18T07:40:50.000000Z
      handler_name    : Core Media Video
At least one output file must be specified

iptablesのパケットフィルタリングを使用したブリッジ型の簡易ファイアウォールを構築した際のメモです。NICをブリッジ構成とすることでHUBとして機能しますので、ネットワークゾーンを分ける必要がなく、クライアントの設定変更も必要としないので導入が簡単です。

【検証環境】
OS: CentOS 6.7
NIC: 二枚構成になっていて認識している状態
ネットワーク構成: [ RT ]----eth0[ Firewall (br0) ]eth1----[ Client ]
IPアドレス:
 Firewall 192.168.123.100 (ブリッジなので一つだけ)
  Client 192.168.123.101
  Router 192.168.123.254

【設定手順】

  1. NICのブリッジ設定
    ブリッジIDの登録
    # brctl addbr br0

  2. NICの設定
    # vi ifcfg-br0
    DEVICE=br0
    BOOTPROTO=none
    ONBOOT=yes
    ARPCHECK=no
    TYPE=Bridge
    IPADDR=192.168.123.100
    NETMASK=255.255.255.0

    # vi ifcfg-eth0
    DEVICE=eth0
    BOOTPROTO=none
    ONBOOT=yes
    ARPCHECK=no
    TYPE=Ethernet
    BRIDGE=br0


    # vi ifcfg-eth1
    DEVICE=eth1
    BOOTPROTO=none
    ONBOOT=yes
    ARPCHECK=no
    TYPE=Ethernet
    BRIDGE=br0

    # service network restart

    # ifconfig
    br0       Link encap:Ethernet  HWaddr 00:50:43:01:6B:D9
              inet addr:192.168.123.100  Bcast:192.168.155.255  Mask:255.255.255.0
              inet6 addr: fe80::250:43ff:fe01:6bd9/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:19312 errors:0 dropped:0 overruns:0 frame:0
              TX packets:1414 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:1076922 (1.0 MiB)  TX bytes:259095 (253.0 KiB)
    eth0      Link encap:Ethernet  HWaddr 9C:B6:54:A9:DE:8D
              inet6 addr: fe80::9eb6:54ff:fea9:de8d/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:19522 errors:0 dropped:0 overruns:0 frame:0
              TX packets:1634 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:1450412 (1.3 MiB)  TX bytes:293545 (286.6 KiB)
              Interrupt:18
    eth1      Link encap:Ethernet  HWaddr 00:50:43:01:6B:D9
              inet6 addr: fe80::250:43ff:fe01:6bd9/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:300 errors:0 dropped:0 overruns:0 frame:0
              TX packets:15111 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:48752 (47.6 KiB)  TX bytes:931317 (909.4 KiB)
    lo        Link encap:Local Loopback
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

    # brctl show
    bridge name     bridge id                         STP enabled     interfaces
    br0                  8000.005043016bd9       no                     eth0
                                                                                        eth1

  3. ブリッジ疎通確認
    イーサケーブルですが、ファイアウォールのeth0をWAN側にeth1をClientに数珠つなぎした上で、iptablesのポリシー設定はすべてACCEPTにしておきます。
    (1) まずはClientからFirewallへ
    # ping 192.168.123.100
    PING 192.168.123.100 (192.168.123.100) 56(84) bytes of data.
    64 bytes from 192.168.123.100: icmp_seq=1 ttl=64 time=0.310 ms
    64 bytes from 192.168.123.100: icmp_seq=2 ttl=64 time=0.280 ms
    64 bytes from 192.168.123.100: icmp_seq=3 ttl=64 time=0.277 ms
    64 bytes from 192.168.123.100: icmp_seq=4 ttl=64 time=0.281 ms
    ・・・
    (2) ClientからFirewall越しのルーターへ
    # ping 192.168.123.254
    PING 192.168.123.254 (192.168.123.254) 56(84) bytes of data.
    64 bytes from 192.168.123.254: icmp_seq=1 ttl=255 time=0.399 ms
    64 bytes from 192.168.123.254: icmp_seq=2 ttl=255 time=0.269 ms
    64 bytes from 192.168.123.254: icmp_seq=3 ttl=255 time=0.270 ms
    64 bytes from 192.168.123.254: icmp_seq=4 ttl=255 time=0.280 ms
    ・・・
    Clientからファイアウォール越しにルータなどのIPアドレスにpingが通ればブリッジ設定はOKです。

  4. カーネルパラメータの変更
    パケットフォワードの許可とiptablesでブリッジのパケットを扱えるようにします。
    (1) /etc/sysctl.confに以下パラメータを追加
    net.ipv4.ip_forward = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.bridge.bridge-nf-call-arptables = 1
    (2) 設定を反映
    # sysctl -p

  5. iptablesの検証1
    取り急ぎFirewallのNIC間を流れるパケットの制御が有効か確かめるためにFORWARDチェインをすべてDROPしてみます。
    (1) /etc/sysconfig/iptablesを編集
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD DROP [0:0]
    :OUTPUT ACCEPT [0:0]
    COMMIT

    (2) iptablesの再起動
    # service iptables restart
    (3) Clientからpingが通らなくなったことを確認
    ping 192.168.123.100
    ping 192.168.123.254


  6. iptablesの検証2
    ping(ICMP)だけ通してみる
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD DROP [0:0]
    :OUTPUT ACCEPT [0:0]
    -A FORWARD -p icmp -j ACCEPT
    COMMIT
    # service iptables restart
    これでClientからFirewall越しにpingが通ればパケットフィルタリング制御が有効に働いていることになります。

  7. iptablesの実際的な設定
    社内LANなどで使用するパソコンが外部の不要なサービスにアクセスすることを防止するため、一般的に使用されるホワイトリストを登録する例です。
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD DROP [0:0]
    :OUTPUT ACCEPT [0:0]
    -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A FORWARD -p icmp -j ACCEPT
    -A FORWARD -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
    -A FORWARD -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
    -A FORWARD -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
    -A FORWARD -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT
    -A FORWARD -m state --state NEW -m udp -p udp --dport 123 -j ACCEPT
    -A FORWARD -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT
    -A FORWARD -m state --state NEW -m tcp -p tcp --dport 995 -j ACCEPT
    -A FORWARD -m state --state NEW -m tcp -p tcp --dport 587 -j ACCEPT
    -A FORWARD -m state --state NEW -m tcp -p tcp --dport 465 -j ACCEPT
    COMMIT
    # service iptables restart

  8. プロキシ―の設定について
    例えばマルウェア等のダウンロードを防止するために、HTTPプロキシ―によるゲートウェイ型のウィルスチェックソフトを併用することも可能です。この場合もブリッジ型ネットワーク構成であればクライアントのブラウザ設定を変える必要はありません。以下はこのFirewall自身をHTTPのウィルスチェックゲートウェイとする設定例です。
    (1) HTTPのプロキシサーバを立てる
    8080ポートを使用(ウィルスチェックソフトの設定になるので詳細は割愛)
    (2) NATの設定
    外部の80にリクエストが投げられると8080で動作するプロキシ(ウィルスチェック)が処理を行います。
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD DROP [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
    COMMIT

    *nat
    -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
    COMMIT

みんな大好きな()WordPressのインストールですが、非エンジニアやセキュリティに詳しくない人が設定することが多い傾向にあり、ファイルのパーミションやオーナー・グループが不適切な状態になっていることがよくあります。特にWebから更新するファイルやフォルダ設定が777になっていたり、1つのアカウントを複数人で共有して運用していることも多いようです。

以下は不必要なパーミションを与えず、複数人がそれぞれのアカウントで共同作業ができるようにWordPressをインストールする例です。ユーザーをすべて同じグループに所属させ、新規でファイルをアップロードする際には自動的にグループとパーミション(664)が設定されます。そうすることで別のメンバーが作成したファイルを共同編集することが可能になります。

■サブドメインのパーミション設定
$ su
# mkdir /var/www/vhosts
# mkdir /var/www/vhosts/hoge.jp
# mkdir /var/www/vhosts/hoge.jp/html
# cd /var/www/vhosts/hoge.jp
# chmod 2775 .
# chmod 2775 html
# groupadd hoge-dev
# chgrp hoge-dev .
# chgrp hoge-dev html
# vi /etc/group
 関係者をhoge-devに追加(apacheユーザも)
# vi /home/User/.bashrc
 umask 002を追加 (各ユーザに)
FTPを使用する場合もumaskが002になるようにしておきます。

ここらでApacheの設定をしておきましょう

■Wordpressのインストール
/var/www/vhosts/hoge.jp/html直下に展開する方法
$ cd
$ mkdir wp
$ cd wp
 最新パッケージをダウンロード http://ja.wordpress.org/
$ gzip -d *.gz
$ tar xvf *.tar
$ cd wordpress
$ chgrp -R hoge-dev *
$ chmod -R g+w .
$ cp -pr * /var/www/vhosts/hoge.jp/html

■その他
/wp-adminには無慈悲なくらいアクセス制限を掛けましょう!

みんな大好き()Wordpressですが、Webサイトのエンタープライズ運用で必須とされているステージング(テスト)環境から本番環境へ正確にコンテンツ同期するスマートな方法があまり存在しないようです。

え!?公開予約機能を使って購読者アカウントでクライアントに事前確認させればいいって?
でも全体的なデザインやレイアウト改修を事前確認してもらうにはどうしたらいいんですかね?みなさんどうやって運用しているんでしょうか?

いろいろ調べていたらwordmoveというツールを見つけたので検証してみたところ、まあまあ問題なく使えそうなことがわかりましたので設定メモを残しておきます。wordmoveをざっと説明するとWordpress関連ファイルの物理コピーとデータベースのダンプ、変換、リストアを行ってくれるコマンドベースのユーティリティで、サーバの引っ越しにも用いられているようです。ちなみにrubyで作られています。

通常であればステージングサーバと本番サーバは別々の構成になると思いますが、このケースでは同一サーバ内でステージング用のサブドメインを同居させる方法としました。Wordpressはドキュメントルート直下にすでにインストール済みの状態を想定しています。

OS:CentOS 6.7
本番サイト
 www.test-wordmove.jp  /var/www/vhosts/www.test-wordmove.jp/html
 DB:www_wordmove
ステージングサイト
 stg.test-wordmove.jp  /var/www/vhosts/stg.test-wordmove.jp/html
 DB:stg_wordmove

以下設定手順

# yum install openssl-devel
# yum install rdoc

rubyの構築
CentOS6.xに標準のRubyはバージョンが古いようなのでソースから構築します。
$ cd
$ mkdir ruby
$ cd ruby
$ wget http://ftp.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.gz
$ gzip -d ruby-2.3.0.tar.gz
$ tar xvf ruby-2.3.0.tar
$ cd ruby-2.3.0
$ ./configure
$ make

rubyの動作確認
$ ./ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]

rubyのインストール
$ su
# make install

wordmoveのインストール
# gem install wordmove
動作確認
# wordmove --help

環境変数LANG=ja_JP.UTF-8を設定
# vi /etc/sysconfig/i18n

wordmoveの設定
$ cd
$ mkdir wordmove
$ cd wordmove/
$ wordmove init
  Movefileが生成されます。

Movefileの編集
$ vi Movefile
インシデントがとてもデリケートなので編集注意
-------------------------------------------------
local:  #こちらがステージングサイト
  vhost: "http://stg.test-wordmove.jp"
  wordpress_path: "/var/www/vhosts/stg.test-wordmove.jp/html" # use an absolute path here

  database:
    name: "stg_wordmove"
    user: "DBユーザー名"
    password: "DBパスワード"
    host: "127.0.0.1"

staging:  #こちらが本番サイト
  vhost: "http://www.test-wordmove.jp"
  wordpress_path: "/var/www/vhosts/www.test-wordmove.jp/html" # use an absolute path here

  database:
    name: "www_wordmove"
    user: "DBユーザー名"
    password: "DBパスワード"
    host: "127.0.0.1"
    # port: "3308" # Use just in case you have exotic server config

  exclude: #同期しないリスト
    - ".git/"
    - ".gitignore"
    - ".sass-cache/"
    - "node_modules/"
    - "bin/"
    - "tmp/*"
    - "Gemfile*"
    - "Movefile"
    - "wp-config.php"
    - "wp-content/*.sql"
    - ".htaccess"

  # paths: # you can customize wordpress internal paths
  #   wp_content: "wp-content"
  #   uploads: "wp-content/uploads"
  #   plugins: "wp-content/plugins"
  #   themes: "wp-content/themes"
  #   languages: "wp-content/languages"
  #   themes: "wp-content/themes"

  ssh:  #本番側のアカウント
    host: "localhost"
    user: "wordmoveを実行するユーザー"
  #   password: "password" # password is optional, will use public keys if available.
  #   port: 22 # Port is optional
    rsync_options: "--verbose" # Additional rsync options, optional
  #   gateway: # Gateway is optional
  #     host: "host"
  #     user: "user"
  #     password: "password" # password is optional, will use public keys if available.

  # ftp:
  #   user: "user"
  #   password: "password"
  #   host: "host"
  #   passive: true

# production: # multiple environments can be specified
#   [...]
-------------------------------------------------
この例ではlocalhostからlocalhostへsshのパスワード問合せが無いように設定されていることを前提としています。

実行テスト
ステージング側のWordpressに何らかの記事を更新
$ wordmove push --all -s (シミュレーションモード)
$ wordmove push --all
本番サイトで更新が反映されていれば成功です。

注意点
ステージング側のhtml/wp-content/にsqlのダンプファイルが残存してしまうので、セキュリティ的には消すような運用をしたほうがよさそうです。

運用課題
wordmoveはあくまでコマンドベースのユーティリティですので、cronで定期実行したりワンショットでスケジューリング行う必要があります。また同期したいタイミングで手動にて実行する必要があります。

ネットワーク制御が可能な動画デジタルサイネージを構築する場合に、C#などでがりがりWindowsネイティブコードを書いたり、レガシーなFlashで制作するのは少し荷が重いので既成品ソフトで対応できそうなモノを検証してみました。

まずWindows標準のメディアプレイヤーにもいくつかコマンドラインオプションが有るようですが、ローカル再生かつファイル指定程度しか対応していないので、そもそもリモート操作が出来ないということが分かりました。少し調べたところVLC media playerという、フリーの動画再生ソフトが豊富なコマンドラインオプションを実装していることが分かりましたのでこちらの方法をご紹介します。
VLC

(1) ソフトウェアパッケージの入手
http://www.videolan.org/vlc/

(2) VLCメディアプレーヤーのリモートコントロール設定
VLCを起動します
ツール>設定>設定の表示[すべて]>インターフェース
 メインインターフェース>
  拡張インターフェースモジュール
   WebとTelnetにチェック
 メインインターフェース>Lua
  Lua HTTP
   パスワード:*****(必須)
   ソースディレクトリ:
   ディレクトリインデックス:非チェック
  Lua Telnet
   ホスト  :localhost→192.168.123.10 (固定かDHCPで割り当てられているアドレス)
   ポート番号:4212(デフォルト)
   パスワード:*****(必須)

設定を行ったらVLCを再起動します。
 コマンドプロンプトのnetstatコマンドで8080と4212ポートがListenされていることを確認します。
 ファイアウォールで閉じられている場合は解放する必要があります。またリモート操作で応答が無い場合などは制御側PCからもからもポートチェックをしたほうがよいでしょう。


(3) 別マシンから動作確認
リモートマシンはPCでもLinuxでも可能です。
ブラウザにて操作する場合
 http://192.168.123.10:8080:/

TeratermによるTelnet接続の設定
VLC Teraterm 端末の設定
 送信時の改行:CR+LF
 エコーバックする

VLC Teraterm 新しい接続
 ポート:4212
 サービス:Telnet

VLC Teraterm ログイン

VLMコマンドの操作方法
 事前に再生PCに動画ファイルを用意する
  Telnetにログイン
  すぐに再生
  > add c:\movie\sample.mp4
  再生リストを作った後に再生
  > enqueue c:\movie\sample.mp4
  > play
  フルスクリーンにする
  > f
  コマンド一覧(help)
  > help

この様にtelnetプロトコルを使用して映像制御するスクリプトを組めば、簡易的なデジタルサイネージのリモート制御が可能となります。

(4) その他VLCの商用向け設定

再生ファイル名の非表示
ツール>設定>設定の表示[すべて]
 ビデオ>ビデオの一般的な設定
  ビデオにメディアタイトルを表示:非チェック


起動時にコントローラーを表示しない
ツール>設定>
 最小表示で起動:チェック


ファイルエラー等を表示しない
ツール>設定>設定の表示[すべて]>インターフェース
 対話的なインターフェース:非チェック

起動時にスタート画面を表示しないでデスクトップを表示する
タスクバー(右ボタン)>プロパティ>[タブ]ナビゲーション
 スタート画面
  サイン時または画面上~スタート画面ではなくデスクトップに移動する

待機中のカラーコーンを表示しない
ツール>設定>設定の表示[すべて]>インターフェース>メインインターフェース>Qt
 バックグラントコーン、またはアートの表示:非チェック

自動ログイン設定
netplwizを起動する
http://pc-karuma.net/windows-8-auto-sign-in/

プログラムの自動起動(win8.1)
C:\Users\ユーザーID\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
にアプリ(VLC)のショートカットをコピーする

Samba内臓のDNSを使用してAD構築した場合、ラウンドロビンが正常に動作しないなどの問題があったのでBINDを使用する様に設定したメモです。

OS      : CentOS release 6.7 (Final)
パッケージ : EnterpriseSAMBA ver4.2
ネットワーク : 192.168.123.0/24
種類     : ドメインコントローラー
ドメイン名  : TEST.LOCAL
DNS     : BIND 9.8.2

(1)  samba4をインストールする
まずリポジトリの作成
# vi /etc/yum.repos.d/sernet-samba-4.2.repo
※ 参考 https://portal.enterprisesamba.com/
# yum install sernet-samba-ad

サーバの基本設定はこちらを参考にしてください。
Samba4によるAD構築メモ1

(2) samba4のAD設定 
# samba-tool domain provision --use-rfc2307 --interactive --function-level=2008_R2
Realm [TEST.LOCAL]:
 Domain [TEST]:
 Server Role (dc, member, standalone) [dc]:
 DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:BIND9_DLZ
Administrator password:********

(3) bindの設定(/etc/named.conf)
-----------------------------------------------------------
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { 192.168.123.0/24; localhost; };
        allow-transefer     { 192.168.123.0/24;}; #冗長構成にする場合
        recursion yes;
        forwarders {
            8.8.8.8; 8.8.4.4;
        };

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
        tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
include "/var/lib/samba/private/named.conf";
-----------------------------------------------------------
# chown named:named /var/lib/samba/private/dns.keytab

(4) /var/lib/samba/private/named.confの確認
bindのバージョンに合ったsoが有効になっているか
-----------------------------------------------------------
dlz "AD DNS Zone" {
    # For BIND 9.8.x
     database "dlopen /usr/lib64/samba/bind9/dlz_bind9.so";

    # For BIND 9.9.x
    # database "dlopen /usr/lib64/samba/bind9/dlz_bind9_9.so";

    # For BIND 9.10.x
    # database "dlopen /usr/lib64/samba/bind9/dlz_bind9_10.so";
};
-----------------------------------------------------------
# service named restart

(5) samba-toolを使用したゾーンレコードの編集方法
Aレコードの追加
# samba-tool dns add  localhost test.local sales-ns A 192.168.123.12
NSレコードの追加
# samba-tool dns add  localhost test.local sales NS sales-ns.test.local.
逆引きゾーンの作成
# samba-tool dns zonecreate test.local 123.168.192.in-addr.arpa
PTRレコードの追加
# samba-tool dns add localhost 123.168.192.in-addr.arpa 12 PTR sales-ns.test.local.
ゾーンの確認
# samba-tool dns query localhost test.local @ ALL
# samba-tool dns query localhost test.local sales ALL

ちなみに、Windows管理ツールのDNSマネージャーでゾーンレコードを編集することも可能ですが、単純な設定しかSamba4には対応していないようです。しかもADのデータベースが不整合を起こす可能性もあるので使用はお勧めしません。

(6) サブドメインの名前解決を他のDNSに委任する場合
ADで利用するドメインは概ねローカルドメインになるかと思いますが、ルートヒントから委任先を辿ることができません。したがって/etc/named.confに以下の様にフォワーディング設定を追加します。一見samba-toolで委任のNSレコードを追加すれば解決できそうな気もしますがうまくいきませんでした。
-----------------------------------------------------------
zone "sales.test.local"
{
        type forward;
        forward only;
        forwarders
        {
            192.168.123.12; #委任先DNSのIPアドレス
        };
};
-----------------------------------------------------------
# service named restart

【追記】
ADサーバをインターネットに接続していない環境かつサブドメインを別のDNSに委任している場合、D
NSSECが悪影響を与えるようですので明示的に無効にした方が良さそうです。
dnssec-enable no;
dnssec-validation no;
この設定を行ったところ、(6)のゾーン設定が不用になりました。

Apacheのconf設定でIPアドレスによるアクセス制限を行うとステータス403が返ります。これをURLの存在を分からなくする為に404として返す必要があったのですが少し難しかったのでメモを残しておきます。

<Directory "/var/www/html">
    AllowOverride All
    Options -Indexes FollowSymLinks
    Order deny,allow
    deny from all
    allow from ***.***.***.***
</Directory>

#上記で拒否された403を404に書き換え
ErrorDocument 403 /403.html  #実態は不要
ErrorDocument 404 /404.html  #Not Foundページを用意
<Location ~ "/40(3|4).html">
    Order allow,deny
    allow from all
</Location>
RewriteEngine on
RewriteRule /403.html - [R=404,L]

ちなみに最近は.htaccessファイルを使用してカジュアルにアクセス制限やURLの書き換えを行うことが多いのですが、FTPアカウントなどで簡単に変更ができてしまうので、セキュリティに関わる設定は静的なconfファイルに記述することをお勧めします。

2015年5月、日本年金機構が標的型メール攻撃を受け、職員のPCが不正操作されてファイルサーバーに保管していた約125万件の年金情報が漏洩したとのことです。捜査が進むにつれ攻撃者のアドレスがフリーメールだったとか、添付書類の拡張子が"exe"なのにうかつに開いてしまったというお粗末な運用実態も次々に明るみになっています。

年金機構は当然セキュリティ対策としてウィルスチェックソフトを運用していたと思われますが、標的型メールは独自にカスタマイズされていることが多いのでウィルスパターンをすり抜けて検知されないことがあるようです。

今回のようにウィルスチェックを通過してしまう可能性のある標的型メールを水際で防ぐために、Postfixメールサーバーの設定だけで比較的簡単にできる対策を4つまとめました。
(1) 送・受信容量制限を行う
(2) 偽証の元になる差出人名をフィルタして元のメアドのみ表示させる
(3) 本文内のURLをフィルタリングして非リンク化
(4) 添付ファイルの送・受信を禁止する

具体的な設定方法はこちらになりますが、実用レベルでは未検証ですので各自の責任においてお試しください。

(1) 送・受信容量制限を行う

ウィルスソフトを送りつけられるリスクを軽減するために必要最小限の容量に制限します。また盗まれた情報を外部に大量送信することを防ぐ効果もあります。

a. /etc/postfix/main.cfを編集
以下の設定を追加
------------------------------------------
message_size_limit = 102400
------------------------------------------
※単位はバイト数になりますが、通常のテキストメールのやり取りであれば100k程度で済むのでは?デフォルトでは10MByteに設定されています。

b. サービスの再起動
# service postfix reload

(2) 成りすました差出人名をフィルタして元のメアドのみ表示させる

差出人名は容易に成りすましが可能で気が付きにくいので、メールソフトがメールアドレスを直接表示するようにフィルタリング処理を行います。
From: 藤本 信 <jt85do34903h7@yahoo.com>

From: jt85do34903h7@yahoo.com

a. /etc/postfix/main.cfを編集
メールのヘッダ部分をチェックする設定ファイルを記述
------------------------------------------
header_checks = regexp:/etc/postfix/header_checks.regexp
------------------------------------------

b. /etc/postfix/header_checks.regexpを編集
------------------------------------------
/(^From: ).*<(.*)>/ REPLACE $1$2
------------------------------------------

c. サービスの再起動
# service postfix reload

(3) 本文内のURLをフィルタリングして非リンク化

メール本文内にあるURLをうかつにクリックしないように非リンク化させます。
http://www.yahoo.jp → ttp://www.yahoo.co.jp
https://www.yahoo.jp → ttps://www.yahoo.co.jp
また注意を促す文字列を挿入することもできます。
https://www.yahoo.jp → [クリック注意]https://www.yahoo.co.jp

a. /etc/postfix/main.cfを編集
メールの本文をチェックする設定ファイルを記述
------------------------------------------
body_checks = regexp:/etc/postfix/body_checks.regexp
------------------------------------------

b. /etc/postfix/body_checks.regexpを編集
------------------------------------------
/^(.*)http:(.*)/ REPLACE ${1}ttp:${2}
/^(.*)https:(.*)/ REPLACE ${1}ttps:${2}
------------------------------------------
※やや甘いので改良の余地ありです

c. サービスの再起動
# service postfix reload

(4) 添付ファイルの送・受信を禁止する

業務やサービス運営に支障が無ければ特定の添付ファイルを除外することも可能です。

拡張子のタイプを判別して除外する場合
a. /etc/postfix/header_checks.regexpを編集(複数行の設定も可能)
------------------------------------------
/name=\".*\.(exe|vbs|pif|sh|com|bat|scr|dll|wsh|cab|inf|ins|hlp|hta|js|vb|lnk|cmd|chm|cpl|msi|wsf|reg|vbe|wsc )"/ REJECT
------------------------------------------
※ファイル名に日本語が含まれていた場合に検知できるか未確認です

b. サービスの再起動
# service postfix reload

このページのトップヘ