Linux Server

Linux Server

さくらインターネットのVPSで、サーバ構築および運用に関する記事です。
OSはCentOS 6.Xを使っています。

2016.10.18以降、さくらのVPSの1Gプランのサーバへ移行しました。
OSはCentOS7になっています。

さくらインタネットのVPSに関してはこちらを参照してください。

2017.6.27 追記

LIVA-XのOSをCentOS 7に入れ替えました。
こちらに記載することにしました。

greenleaf 2013/04/06 (土)- 12:10

nginxを導入

nginxを導入
さくらインターネットのVPSのサーバーにnginxを導入しました。

さらにWAFとしてnaxsiを導入しました。
 

背景

さくらインターネットのVPSのサーバーではWebサーバにapacheを使い2つのサイトを公開していました。
毎日メールで送られるlogwatchを見ていると、台湾や中国からの攻撃を受けているログが記録されていました。
攻撃自体はIPアドレスによるアクセス制限(国内以外からは拒否)によって防御できていますが、もし、国内のIPアドレスが利用された場合には防御できません。
たとえば、海外からの攻撃に感染してしまった国内サーバから攻撃を受ける事もあり得るので、なんらかの対策を施したいと思った次第です。

ログに記載されていたのは、「az.php」「azz.php」「azenv.php」「world.php」などの「xxx.php」です。
http://www.symantec.com/ja/jp/security_response/writeup.jsp?docid=2007-030713-4246-99&tabid=2にヒットするのかなぁと思いますが・・・

過去の記事を見ているとさくらインターネットのサーバがマルウェアのダウンローダになったといった内容があったりと、人事には思えません。

そこで、apacheにWAFを導入しようと思い、mod_securityを仕込みましたが、添付のルールだと通常の操作も拒否されてしまうため、IDごとにルールを無効化していく作業をしていました。
無効化しなくてはいけない項目がどんどん増えていくとこのルール自体を使う意味があるのだろうか?カスタマイズが必要なのではという疑問が湧きました。
そもそも、apache-itk版を導入する際にmod_securityは使わないほうがよいといった記事をどこかで読んでやめた記憶があります。

いろいろ調査していると、まだapache使ってるの?といった記事を見かけます。
nginxはdrupalが対応していたこともあり前から存在を知っていましたが詳しくは調べようとは思いませんでした。
色々読んでいるとスタティックなサイトにはnginxのほうがあってるらしく、それならMovable Typeのサイトだけでもnginxにしても良さそうだと考えました。
nginxのWAFにはどんなものがあるのかなぁということでnaxsiを知りました。
それなら・・・
ということでnginxとnaxsiを導入し、可能ならMovableTypeのサイトはnginxに移行し、ダメならnginxをリバースプロキシーだけにしてWAFとして稼働させておけばセキュリティも強化できると考えました。
Movable Typeのサイトをnginxへ移行する件は、「デザイナー必見!VPSで高速なMovable Type用サーバをゼロから構築する方法」を参考にsupervisor+starmanを導入して試してみましたが、アクセス権の問題などでうまく動作させれなかったので今回は断念しました。nginxをapacheのリバースプロキシーとしてしばらく使ってみて、もう少し理解できたら再度チャレンジする予定です。
 

作業内容の概略

CentOSで利用できるパッケージ版のバージョンは古く、SSL session reuse vulnerabilityに未対応なバージョンだったと思います。
また、nginxはapacheのようにダイナミックにモジュールを追加できませんので、naxsiを利用するのであれば再コンパイルが必要になります。
そのため、nginxの公式サイトからソースパッケージをダウンロードして、rpmパッケージのリビルドを行いました。
※naxsiを使わないなどカスタマイズしないのであれば、公式サイトから各ディストリビューション用のパッケージをダウンロードしてそのままインストールが可能になっています。
その場合は、CentOSならnginxrepoを作成しておけば次回からupdateが楽になると思います。
その際のbaseurlに指定するURLは、stable版とmainline版があるので注意してください。
推奨はmainline版らしいです。
 

導入手順

nginx-1.7.9-1ソースパッケージの入手

CentOS6.x用のソースパッケージにあるSPECファイルを使ってリビルドしたほうが、なにかと都合がよく作業も楽だと思います。

ソースパッケージ(CentOS6.x用)をダウンロードします。

# wget http://nginx.org/packages/mainline/centos/6/SRPMS/nginx-1.7.9-1.el6.ngx.src.rpm


入手したソースパッケージを展開します。

# rpm -ivh nginx-1.7.9-1.el6.ngx.src.rpm

※作業ユーザのホームディレクトリのrpmbuild以下に展開されます。
※ユーザが存在しないといったエラーメッセージが表示されますが無視します。
 

naxsi-0.53-2のソースファイルの入手

バージョンなどの詳細はnaxsi wikiReleasesを御覧ください。

ソースファイルをダウンロードします。

# cd ~/rpmbuild/SOURCES
# wget https://github.com/nbs-system/naxsi/archive/0.53-2.tar.gz


入手したソースファイルの中身は以下の通りです。
※「naxsi_src」「naxsi_config/naxsi_core.rules」「nx_util」すべてが含まれているようです。

# tar ztf 0.53-2.tar.gz
naxsi-0.53-2/
naxsi-0.53-2/README.md
naxsi-0.53-2/naxsi_config/
naxsi-0.53-2/naxsi_config/naxsi_core.rules
naxsi-0.53-2/naxsi_src/
naxsi-0.53-2/naxsi_src/Makefile
naxsi-0.53-2/naxsi_src/config
naxsi-0.53-2/naxsi_src/naxsi.h
naxsi-0.53-2/naxsi_src/naxsi_config.c
naxsi-0.53-2/naxsi_src/naxsi_json.c
naxsi-0.53-2/naxsi_src/naxsi_runtime.c
naxsi-0.53-2/naxsi_src/naxsi_skeleton.c
naxsi-0.53-2/naxsi_src/naxsi_utils.c
naxsi-0.53-2/nx_util/
naxsi-0.53-2/nx_util/nx_datas/
naxsi-0.53-2/nx_util/nx_datas/bootstrap-responsive.min.css
naxsi-0.53-2/nx_util/nx_datas/bootstrap.min.css
naxsi-0.53-2/nx_util/nx_datas/bootstrap.min.js
naxsi-0.53-2/nx_util/nx_datas/country2coords.txt
naxsi-0.53-2/nx_util/nx_datas/highcharts.js
naxsi-0.53-2/nx_util/nx_datas/map.tpl
naxsi-0.53-2/nx_util/nx_lib/
naxsi-0.53-2/nx_util/nx_lib/SQLWrapper.py
naxsi-0.53-2/nx_util/nx_lib/__init__.py
naxsi-0.53-2/nx_util/nx_lib/nx_imports.py
naxsi-0.53-2/nx_util/nx_lib/nx_report.py
naxsi-0.53-2/nx_util/nx_lib/nx_tools.py
naxsi-0.53-2/nx_util/nx_lib/nx_whitelists.py
naxsi-0.53-2/nx_util/nx_lib/ordereddict.py
naxsi-0.53-2/nx_util/nx_util.1.gz
naxsi-0.53-2/nx_util/nx_util.conf
naxsi-0.53-2/nx_util/nx_util.py
naxsi-0.53-2/nx_util/setup.py
naxsi-0.53-2/nx_util/unit_test/
naxsi-0.53-2/nx_util/unit_test/01_UNPREDICTABLE_NOTHING
naxsi-0.53-2/nx_util/unit_test/01_UNPREDICTABLE_NOTHING.results
naxsi-0.53-2/nx_util/unit_test/02_UNPREDICTABLE_ID
naxsi-0.53-2/nx_util/unit_test/02_UNPREDICTABLE_ID.results
naxsi-0.53-2/nx_util/unit_test/03_UNPREDICTABLE_URL
naxsi-0.53-2/nx_util/unit_test/03_UNPREDICTABLE_URL.results
naxsi-0.53-2/nx_util/unit_test/04_UNPREDICTABLE_ARGNAME
naxsi-0.53-2/nx_util/unit_test/04_UNPREDICTABLE_ARGNAME.results
naxsi-0.53-2/nx_util/unit_test/05_NAME_TARGET
naxsi-0.53-2/nx_util/unit_test/05_NAME_TARGET.results
naxsi-0.53-2/nx_util/unit_test/06_NAME_UNPREDICTABLE
naxsi-0.53-2/nx_util/unit_test/06_NAME_UNPREDICTABLE.results
naxsi-0.53-2/nx_util/unit_test/07_INTERNAL_REQUEST2BIG
naxsi-0.53-2/nx_util/unit_test/07_INTERNAL_REQUEST2BIG.results
naxsi-0.53-2/nx_util/unit_test/08_WEIRD_REQUESTS
naxsi-0.53-2/nx_util/unit_test/08_WEIRD_REQUESTS.results
naxsi-0.53-2/nx_util/unit_test/09_FILE_EXT_NAMED_VAR
naxsi-0.53-2/nx_util/unit_test/09_FILE_EXT_NAMED_VAR.results
naxsi-0.53-2/nx_util/unit_test/gen_ut.sh
naxsi-0.53-2/nx_util/unit_test/run_ut.sh
naxsi-0.53-2/t/
naxsi-0.53-2/t/00naxsi_base.t
naxsi-0.53-2/t/01naxsi_whitelists.t
naxsi-0.53-2/t/02naxsi_bypass.t
naxsi-0.53-2/t/03naxsi_profile.t
naxsi-0.53-2/t/04naxsi_files.t
naxsi-0.53-2/t/05naxsi_advanced_whitelists.t
naxsi-0.53-2/t/06naxsi_weirds.t
naxsi-0.53-2/t/07naxsi_argnames.t
naxsi-0.53-2/t/08negative_whitelists.t
naxsi-0.53-2/t/09sqlmap_tamper.t
naxsi-0.53-2/t/10naxsi_modifiers.t
naxsi-0.53-2/t/11naxsi_newstyle_config.t
naxsi-0.53-2/t/12naxsi_argnames_extended.t
naxsi-0.53-2/t/13test.t
naxsi-0.53-2/t/14json.t
naxsi-0.53-2/t/15json_wl.t
naxsi-0.53-2/t/16rx_mz.t
naxsi-0.53-2/t/17case.t
naxsi-0.53-2/t/18ids.t
naxsi-0.53-2/t/19targets.t
naxsi-0.53-2/t/20sqlmap.t

念のためファイル名をnginxと合わせておきます。

# mv 0.53-2.tar.gz naxsi-0.53-2.tar.gz

 

SEPCファイルの編集

パッケージのリビルドに使用するSPECファイルを編集します。
編集の前に念のためバックアップをとってから作業します。

# cd ~/rpmbuild/SPECS
# cp nginx.spec nginx.spec.bk


nginx.specファイルの編集箇所は以下の通りです。

Source0: http://nginx.org/download/%{name}-%{version}.tar.gz
Source1: logrotate
Source2: nginx.init
Source3: nginx.sysconf
Source4: nginx.conf
Source5: nginx.vh.default.conf
Source6: nginx.vh.example_ssl.conf
Source7: nginx.suse.init
Source8: nginx.service
Source9: nginx.upgrade.sh
Source10: nginx.suse.logrotate
Source11: naxsi-0.53-2.tar.gz

 

%prep
%setup -q
%setup -T -D -a 11

%build
./configure \
        --prefix=%{_sysconfdir}/nginx \
        --sbin-path=%{_sbindir}/nginx \
        --conf-path=%{_sysconfdir}/nginx/nginx.conf \
        --error-log-path=%{_localstatedir}/log/nginx/error.log \
        --http-log-path=%{_localstatedir}/log/nginx/access.log \
        --pid-path=%{_localstatedir}/run/nginx.pid \
        --lock-path=%{_localstatedir}/run/nginx.lock \
        --http-client-body-temp-path=%{_localstatedir}/cache/nginx/client_temp \
        --http-proxy-temp-path=%{_localstatedir}/cache/nginx/proxy_temp \
        --http-fastcgi-temp-path=%{_localstatedir}/cache/nginx/fastcgi_temp \
        --http-uwsgi-temp-path=%{_localstatedir}/cache/nginx/uwsgi_temp \
        --http-scgi-temp-path=%{_localstatedir}/cache/nginx/scgi_temp \
        --user=%{nginx_user} \
        --group=%{nginx_group} \
        --with-http_ssl_module \
        --with-http_realip_module \
        --with-http_addition_module \
        --with-http_sub_module \
        --with-http_dav_module \
        --with-http_flv_module \
        --with-http_mp4_module \
        --with-http_gunzip_module \
        --with-http_gzip_static_module \
        --with-http_random_index_module \
        --with-http_secure_link_module \
        --with-http_stub_status_module \
        --with-http_auth_request_module \
        --with-mail \
        --with-mail_ssl_module \
        --with-file-aio \
        --with-ipv6 \
        --with-debug \
        %{?with_spdy:--with-http_spdy_module} \
        --with-cc-opt="%{optflags} $(pcre-config --cflags)" \
        --add-module=./naxsi-0.53-2/naxsi_src \
        $*
 

 

make %{?_smp_mflags}
%{__mv} %{_builddir}/%{name}-%{version}/objs/nginx \
        %{_builddir}/%{name}-%{version}/objs/nginx.debug
./configure \
        --prefix=%{_sysconfdir}/nginx \
        --sbin-path=%{_sbindir}/nginx \
        --conf-path=%{_sysconfdir}/nginx/nginx.conf \
        --error-log-path=%{_localstatedir}/log/nginx/error.log \
        --http-log-path=%{_localstatedir}/log/nginx/access.log \
        --pid-path=%{_localstatedir}/run/nginx.pid \
        --lock-path=%{_localstatedir}/run/nginx.lock \
        --http-client-body-temp-path=%{_localstatedir}/cache/nginx/client_temp \
        --http-proxy-temp-path=%{_localstatedir}/cache/nginx/proxy_temp \
        --http-fastcgi-temp-path=%{_localstatedir}/cache/nginx/fastcgi_temp \
        --http-uwsgi-temp-path=%{_localstatedir}/cache/nginx/uwsgi_temp \
        --http-scgi-temp-path=%{_localstatedir}/cache/nginx/scgi_temp \
        --user=%{nginx_user} \
        --group=%{nginx_group} \
        --with-http_ssl_module \
        --with-http_realip_module \
        --with-http_addition_module \
        --with-http_sub_module \
        --with-http_dav_module \
        --with-http_flv_module \
        --with-http_mp4_module \
        --with-http_gunzip_module \
        --with-http_gzip_static_module \
        --with-http_random_index_module \
        --with-http_secure_link_module \
        --with-http_stub_status_module \
        --with-http_auth_request_module \
        --with-mail \
        --with-mail_ssl_module \
        --with-file-aio \
        --with-ipv6 \
        %{?with_spdy:--with-http_spdy_module} \
        --with-cc-opt="%{optflags} $(pcre-config --cflags)" \
        --add-module=./naxsi-0.53-2/naxsi_src \
        $*
make %{?_smp_mflags}

以上でパッケージのリビルドの準備ができました。
 

パッケージのリビルドの実行

以下のコマンドを実行してrpmパッケージを作成します。

# cd 
# rpmbuild -bb rpmbuild/SPECS/nginx.spec

※-baの場合はバイナリーとソースパッケージの両方を作成し、-bbの場合はバイナリーパッケージのみ作成します。
 

# cd rpmbuild/RPMS/x86_64
# ls
nginx-1.7.9-1.el6.ngx.x86_64.rpm  nginx-debug-1.7.9-1.el6.ngx.x86_64.rpm  nginx-debuginfo-1.7.9-1.el6.ngx.x86_64.rpm

※nginx,nginx-debug,nginx-debuginfoの3パッケージが作成されています。
 

nginx(naxsiモジュール追加版)パッケージのインストール

先ほど作成したバイナリパッケージをrpmコマンドを使ってインストールします。
※よくわからなかったので、今回はすべてのパッケージをインストールしました。

# rpm -ivh nginx-1.7.9-1.el6.ngx.x86_64.rpm  nginx-debug-1.7.9-1.el6.ngx.x86_64.rpm  nginx-debuginfo-1.7.9-1.el6.ngx.x86_64.rpm

※nginxとnginx-debugは依存関係があるので、アンインストールする際は両方削除されますが、nginx-debuginfoは別途削除が必要になります。

パッケージ情報を確認する場合

# rpm -qi nginx
Name        : nginx                        Relocations: (not relocatable)
Version     : 1.7.9                             Vendor: nginx inc.
Release     : 1.el6.ngx                     Build Date: 2015年01月03日 16時42分38秒
Install Date: 2015年01月03日 16時54分59秒      Build Host: wwwXXXXzz.sakura.ne.jp
Group       : System Environment/Daemons    Source RPM: nginx-1.7.9-1.el6.ngx.src.rpm
Size        : 926951                           License: 2-clause BSD-like license
Signature   : (none)
URL         : http://nginx.org/
Summary     : High performance web server
Description :
nginx [engine x] is an HTTP and reverse proxy server, as well as
a mail proxy server.

※説明欄にあるように「mail proxy server」の機能もあります。これが不要かどうかの判断が今回できませんでしたのでそのままビルドしました。
※不要な場合は、configuerのオプションで--without-xxxxxで除外できると思います。

パッケージによってインストールされたファイル一覧を確認する場合

# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
/etc/nginx/conf.d/example_ssl.conf
/etc/nginx/fastcgi_params
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/nginx.conf
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/etc/nginx/win-utf
/etc/rc.d/init.d/nginx
/etc/sysconfig/nginx
/usr/sbin/nginx
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx

CentOS6用のソースパッケージを使用したので、他のパッケージと同じ配置になっています。

以上でnginx(naxsiモジュール追加版)のインストールは完了です。
 

nginxの設定

apacheの場合と同じように、/etc/ngnix/ngnix.confからconf.d/*.confをインクルードするようになっています。
このままでもよかったのですが、複数のバーチャルドメインを管理している都合上、設定を幾度と変更する機会も多いと考えて、別途ディレクトリ(sites_enable)を作成し、そのディレクトリ配下の*.confをインクルードするように変更しました。
設定ファイルは、conf.d/domainname.confに作成し、稼働させる設定はsites_enableにそのソフトウェアリンクを作成して運用するように変更しています。
どのディストリビューションだったか忘れましたが、それのsites_enableとsites_availableと同じ使い方です。
※再コンパイルしたときにdefault.confやexample.ssl.confがconf.dに作成され、そのままだとインクルードされてしまうためです。

以下に設定内容を記載しますが、まだあまり理解できていない状態でどこかのサイトを参考に記述してしまうと、その意味とか影響がよくわからないままで表面上はうまくいってしまうと、何かあったときに何がどう影響しているのかわからないと判断して、最初は必要最小限にしてあります。そのため、本番稼働にはいろいろと不足していると思います。

各ドメインの設定は以下の通りとして説明します。

  wwwXXXXzz.sakura.ne.jp vdomain1.jp vdomain2.jp
説明 さくらインターネットのVPSサーバのホスト名 drupalサイト MovableTypeサイト
listen 80 80 80
server_name wwwXXXXzz.sakura.ne.jp vdomain1.jp vdomain2.jp
ドキュメントルート /usr/share/nginx/html /var/www/vdomain1.jp /var/www/vdomain2.jp
Listen
(apache)
- 8080 8090

 

nginx.confの編集

まず、/etc/nginx/nginx.confを編集します。
以下の2行をhttpコンテキストに追加しました。

 server_tokens      off;
 gzip_disable       "MSIE [1-6]\.(?!.*SV1)";

1行目は、serverコンテキスト内にも記載できますが、ここに記載しておきました。
2行目は、IE6以前のブラウザーでgzipを無効にしています。
 

各サーバの設定ファイルの作成

次に、各サーバ用のserverコンテキストをそれぞれ別のファイルで作成しました。
作成にあたり、default.confをテンプレートに作成しています。

wwwXXXXzz.sakura.ne.jp用

server {
  listen       80 ;
  server_name  wwwXXXXzz.sakura.ne.jp;

  #charset koi8-r;
  access_log  /var/log/nginx/host.access.log  main;
  error_log  /var/log/nginx/host.error.log  main;

  location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
  }

  #error_page  404              /404.html;

  # redirect server error pages to the static page /50x.html
  #
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
    root   /usr/share/nginx/html;
  }

  # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  #
  #location ~ \.php$ {
  #  proxy_pass   http://127.0.0.1;
  #}

  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  #
  #location ~ \.php$ {
  #  root           html;
  #  fastcgi_pass   127.0.0.1:9000;
  #  fastcgi_index  index.php;
  #  fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
  #  include        fastcgi_params;
  #}
}
server {
  listen 80 default_server;
  server_name "";
  return       444;
}

以下は、www付きでアクセスがあった場合のrewriteルールを記載してあります。
記載方法はいろいろとあるようで何がよいのかは不明です。

vdomain1.jp用

server {
  listen    80;
  server_name vdomain1.jp;

  access_log /var/log/nginx/vdomain1.jp.access.log main;
  error_log  /var/log/nginx/vdomain1.jp.error.log warn;

  ignore_invalid_headers on;
  client_max_body_size 5m;

  location / {
    proxy_set_header  X-Real-IP       $remote_addr;
    proxy_set_header  X-Forwarded-For $remote_addr;
    proxy_set_header  Host            $http_host;
    proxy_pass http://127.0.0.1:8080;
  }
}

server {
  listen   80;
  server_name www.vdomain1.jp;
  rewrite ^ http://vdomain1.jp$request_uri permanent;
}

vdomain2.jp用

server {
  listen    80;
  server_name vdomain2.jp;

  access_log /var/log/nginx/vdomain2.jp.access.log main;
  error_log  /var/log/nginx/vdomain2.jp.error.log warn;

  ignore_invalid_headers on;
  client_max_body_size 5m;

  location / {
    proxy_set_header  X-Real-IP       $remote_addr;
    proxy_set_header  X-Forwarded-For $remote_addr;
    proxy_set_header  Host            $http_host;
    proxy_pass http://127.0.0.1:8090;
  }
}

server {
  listen   80;
  server_name www.vdomain2.jp;
  rewrite ^ http://vdomain2.jp$request_uri permanent;
}

※まず、nginxを起動させ、サイトへ正常にアクセスできることを確認したのち、naxsi用の設定を行うことにしました。
 

apacheサーバの停止

現行Webサーバのapacheを停止します。
インターネットから接続可能なWebサーバはサービスポートに80番を使用しているため、起動したままの状態ではnginxで使うサービスポートと重複するためnginxを起動できません。
80番ポートを開放するためにapacheを停止します。

# service httpd stop
httpd を停止中:                                            [  OK  ]

 

apacheの設定変更

mod_rpafのインストール
リバースプロキシー経由で接続するとアクセスログのClient IPがリバースプロキシーのIPで記録されてしまいますのでその対応です。

以下の手順でmod_rpafモジュールをインストールしました。

$ mkdir mod_rpaf-0.6
$ cd mod_rpaf-0.6
$ wget https://raw.github.com/ttkzw/mod_rpaf-0.6/master/mod_rpaf-2.0.c
$ sudo /usr/sbin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c


/etc/httpd/conf.d/mod_rpaf.confを作成

LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
RPAFheader X-Forwarded-For


/etc/httpd/conf/httpd.confに追加

Include conf.d/mod_rpaf.conf

その他、バーチャルホストの設定を以下のように修正しました。

wwwXXXXzz.sakura.ne.jp用はnginxで稼働させるのでapacheの設定からは記述を削除しました。

vdomain1.jp用の変更箇所

Listen 127.0.0.1:8080
Listen 127.0.0.1:8090

<VirtualHost 127.0.0.1:8080>
    ServerName vdomain1.jp

   <省略>

    RPAFenable On
    RPAFsethostname On
    RPAFproxy_ips 127.0.0.1
    RPAFheader X-Forwarded-For
</VirtualHost>


vdomain2.jp用の変更箇所

<VirtualHost 127.0.0.1:8090>
    ServerName vdomain2.jp

   <省略>

    RPAFenable On
    RPAFsethostname On
    RPAFproxy_ips 127.0.0.1
    RPAFheader X-Forwarded-For
</VirtualHost>

wwwXXXXzz.sakura.ne.jpが一番最初に記載になっていて、それを削除したので、vdomain1.jpがデフォルト(一番最初)になります。
そのため、サーバ名:ポート番号で一致しない場合は、vdomain1.jpの設定が使用されることになりますが、apacheはインターネットから直接アクセスできなくなるはずなので、あまり気にする必要はないように思います。

その他、ssl.confなど必要のない設定を読み込まないように変更しました。
 

apacheの起動

念のため設定を確認した後、apacheを起動をします。

# apachectl -t
Syntax OK

# service httpd start
httpd を起動中:                                            [  OK  ]

 

nginxのSSL対応

example.ssl.confを参考にそれぞれのサーバ用の設定ファイルにSSL用のserverコンテキストを追加しました。
※サーバ認証書などはapacheで利用していたものをそのままコピーしてきて再利用しています。

apacheで稼働していた時は、ゲストユーザがアクセスするページ(URL)に関してはrewriteルールでhttps://をhttp://にリダイレクトして対応していました。
記述は以下になります。

RewriteEngine on
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/phpmyadmin
RewriteCond %{REQUEST_URI} !^/postfixadmn
RewriteCond %{REQUEST_URI} !^/admin
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

ユーザIDとパスワードを入力してログインしないといけないページはSSLでとしたいのですが、nginxではどう設定すればよいのか理解できていません。

とりあえず、それぞれのサーバ用の設定ファイルに追加しました。
以下は、vdomain1.confに追加した内容です。

server {
  listen  443 ssl;
  server_name vdomain1.jp;
  rewrite ^ http://vdomain1.jp$request_uri permanent;
  access_log /var/log/nginx/vdomain1.jp.access.log main;
  error_log  /var/log/nginx/vdomain1.jp.error.log warn;

  ssl on;
  ssl_certificate      /etc/nginx/ssl/vdomain1.jp/server.crt;
  ssl_certificate_key  /etc/nginx/ssl/vdomain1.jp/server.key;
  ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers          HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers on;
}

※ホストネームバーチャルホストの場合は、ブラウザーとnginxがSNI対応でなければ、別のサーバの設定で接続してしまう可能性があります。

以下のコマンドでnginxがSNI対応であるか確認できます。

# nginx -V
nginx version: nginx/1.7.9
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_spdy_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --add-module=/root/rpmbuild/BUILD/nginx-1.7.9/naxsi-0.53-2/naxsi_src

確認する箇所は、4行目の「TLS SNI support enabled」です。

次のコマンドでも実際に振り分けができていることが確認できます。

# openssl s_client -connect vdomain1.jp:443 -servername vdomain1.jp

標準出力に「-servername」に指定したサーバ名のサーバー証明書が表示されれば正常です。


改訂
さくらインターネットのVPSサーバのサーバ名でPHPアプリを設定していたので、nginxだけでやろうとするとphp-fpmなどを導入しないといけなくなるので、簡単にということで、これもapacheに任せることにしました。
あと、sslを使用した場合、httpsをhttpにrewriteで対応していましたが、動作がおかしかったので、それぞれnginx⇒apacheに送ることにしました。

バーチャルホストの記述は以下のようになります。
vdomain1.jp用

server {
  listen    80;
  server_name vdomain1.jp;

  access_log /var/log/nginx/vdomain1.jp.access.log main;
  error_log  /var/log/nginx/vdomain1.jp.error.log warn;

  ignore_invalid_headers on;
  client_max_body_size 5m;

  location / {
    proxy_set_header  X-Real-IP       $remote_addr;
    proxy_set_header  X-Forwarded-For $remote_addr;
    proxy_set_header  Host            $http_host;
    proxy_pass http://127.0.0.1:8080;
  }
}

server {
  listen   80;
  server_name www.vdomain1.jp;
  rewrite ^ http://vdomain1.jp$request_uri permanent;
}

server {
  listen  443 ssl;
  server_name vdomain1.jp;
  rewrite ^ http://vdomain1.jp$request_uri permanent;
  access_log /var/log/nginx/vdomain1.jp.access.log main;
  error_log  /var/log/nginx/vdomain1.jp.error.log warn;

  location / {
    proxy_set_header  X-Real-IP       $remote_addr;
    proxy_set_header  X-Forwarded-For $remote_addr;
    proxy_set_header  Host            $http_host;
    proxy_pass http://127.0.0.1:8080;
  }

  ssl on;
  ssl_certificate      /etc/nginx/ssl/vdomain1.jp/server.crt;
  ssl_certificate_key  /etc/nginx/ssl/vdomain1.jp/server.key;
  ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers          HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers on;
}

これを3バーチャルサーバ分用意して、あとは、naxsi用の設定を追加して完成です。
 

phoenix 2015/01/03 (土)- 13:26

ディストリビューション

CentOS 6.x

メールサーバの構築

メールサーバの構築

さくらインターネットのVPSにメールサーバを構築した際の備忘録です。

設定の詳細までは記載しませんが一例として参考程度にはなると思います。
 

前提条件

Apache2.X、MySQLおよびphpMyAdminのインストールと設定が完了していること
※どちらもremi版をインストールしてあります。

項目 設定値 備考
ホスト名 wwwNNNNzz.sakura.ne.jp さくらのVPSサーバ名
ローカルメールボックス /var/spool/ユーザ名 サーバに存在するユーザ用のメールボックス
ローカルエイリアス /etc/aliases ローカルの別名ファイル
バーチャルドメイン1 vdomain1.jp 独自ドメイン1
バーチャルドメイン2 vdomain2.jp 独自ドメイン2
バーチャルドメインメールボックス /home/mailuser/%d/%u MailDir方式
%d=ドメイン名、%u=ユーザ名
バーチャルドメインメールグループ vmail(GID:10000) バーチャルドメインのメールディレクトリのグループ(共通)
バーチャルドメインメールユーザ vmail(UID:10000) バーチャルドメインのメールディレクトリのユーザ(共通)
データベース名 postfix  
データベースユーザ名 postfix  

【参考】メールを受け取る仕組みはどうなっていますか?

参考サイトにあるMTA(Mail Transfer Agent)、MDA(Mail Delivery Agent)、MRA(Mail Retrieval Agent )を、当サイトでは、MTA:postfix、MDA:dovecot-lmtp、MRA:dovecotで構成しています。
 

PostfixAdmin

ダウンロード

最新版をhttp://sourceforge.net/projects/postfixadmin/からダウンロードしてきます。
wgetコマンドが便利です。
 

解凍

ダウンロードしたファイルを/usr/share以下に解凍しました。
解凍するとディレクトリ名はphpadmin-x.xx(x.xxはバージョン番号)になりますので、以下コマンドでソフトウェアリンクを作成しバージョン管理できるようにしました。

 # ln -s postfixadmin-x.xx postfixadmin

 

設定

設定方法はINSTALL.TXTに記載されています。
以下簡単に手順を説明します。
 

1.データベースを作成

データベース名:postfixでデータベースを作成します。
作成はphpMyAdminで行いました。
 

2.設定ファイルの編集

config.inc.phpをコピーするか、もしくは、新規作成してconfig.local.phpを編集します。

以下はconfig.local.phpの例です。自身の環境に合わせて修正してください。

<!--?php
/**
 * Contains configuration options that override the default config file
 */

/*****************************************************************
 *  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 * You have to set $CONF['configured'] = true; before the
 * application will run!
 * Doing this implies you have changed this file as required.
 * i.e. configuring database etc; specifying setup.php password etc.
 */
$CONF['configured'] = true;

// In order to setup Postfixadmin, you MUST specify a hashed password here.
// To create the hash, visit setup.php in a browser and type a password into the field,
// on submission it will be echoed out to you as a hashed value.
$CONF['postfix_admin_url'] = '/postfixadmin';
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'XXXXXXXXXX';
$CONF['database_name'] = 'postfix';
$CONF['admin_email'] = 'postmaster@wwwNNNNzz.sakura.ne.jp';
$CONF['encrypt'] = 'dovecot:CRAM-MD5';
$CONF['dovecotpw'] = '/usr/bin/doveadm pw';
$CONF['min_password_length'] = 6;
$CONF['page_size'] = '20';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['aliases'] = '50';
$CONF['mailboxes'] = '50';
$CONF['maxquota'] = '100';
$CONF['quota'] = 'YES';
$CONF['quota_multiplier'] = '1024000';
$CONF['transport'] = 'NO';
$CONF['transport_options'] = array (
    'virtual',  // for virtual accounts
    'local',    // for system accounts
    'relay'     // for backup mx
);
$CONF['transport_default'] = 'virtual';
$CONF['vacation'] = 'NO';
$CONF['special_alias_control'] = 'YES';
$CONF['user_footer_link'] = 'http://wwwNNNNzz.sakura.ne.jp/postfixadmin/main';
$CONF['show_footer_text'] = 'YES';
$CONF['footer_text'] = 'Return to change-this-to-your.domain.tld';
$CONF['footer_link'] = 'http://wwwNNNNzz.sakura.ne.jp/postfixadmin';
$CONF['create_mailbox_subdirs']=array('Drafts','Spam','Sent','Trash');
$CONF['create_mailbox_subdirs_host']='localhost';
$CONF['create_mailbox_subdirs_prefix']='';
$CONF['used_quotas'] = 'YES';
$CONF['new_quota_table'] = 'YES';


// Alias Control
// Postfix Admin inserts an alias in the alias table for every mailbox it creates.
// The reason for this is that when you want catch-all and normal mailboxes
// to work you need to have the mailbox replicated in the alias table.
// If you want to take control of these aliases as well set this to 'YES'.

// Alias control for superadmins
$CONF['alias_control'] = 'YES';

// Alias Control for domain admins
$CONF['alias_control_admin'] = 'YES';

// Special Alias Control
// Set to 'NO' if your domain admins shouldn't be able to edit the default aliases
// as defined in $CONF['default_aliases']
$CONF['special_alias_control'] = 'NO';

// Alias Goto Field Limit
// Set the max number of entries that you would like to see
// in one 'goto' field in overview, the rest will be hidden and "[and X more...]" will be added.
// '0' means no limits.
$CONF['alias_goto_limit'] = '0';

// Alias Domains
// Alias domains allow to "mirror" aliases and mailboxes to another domain. This makes
// configuration easier if you need the same set of aliases on multiple domains, but
// also requires postfix to do more database queries.
// Note: If you update from 2.2.x or earlier, you will have to update your postfix configuration.
// Set to 'NO' to disable alias domains.
$CONF['alias_domain'] = 'YES';

//
// END OF CONFIG FILE
//

※上記で$CONF['configured'] = falseに設定するとwellcome画面が表示されるだけになります。
※$CONFIG['encrypt']と$CONFIG['dovecotpw']の設定に関しては使用するdovecotのバージョンに合わせて設定が必要です。例ではdovecot-2.x用です。
※また、この設定はdovecot.confのパスワード暗号化方式とも一致する必要があります。
 

次にWEBサーバ経由でsetup.phpを実行できるように設定します。

/etc/httpd/conf.dにpostfixadmin.confでファイルを作成します。
※/etc/httpd/conf/httpd.confがhttpd起動時に読み込まれますが、httpd.conf内にconf.d/*.confを読み込むようにデフォルトで設定されていますので、XXX.confになるように作成します。
※バーチャルホストの設定を複数設定している場合は、include conf.d/postfixadmin.confを記述する場所で、どのサーバのURLでアクセスした場合にpostfixadminを使えるようにするかをコントロールできます。
※この際は、デフォルトのhttpd.confでIncludeしている箇所をコメントにして無効にする必要があります。

以下は、postfixadmin.confの例です。ご自身の環境に合わせて修正してください。

#  Web application to manage Postfix email server
#

<Directory "/usr/share/postfixadmin/">
 AllowOverride AuthConfig
 Order Deny,Allow
 Deny from All
 Allow from 127.0.0.1
 Allow from 自宅のルータに割り当てられたWAN側IPアドレス(グローバルIPアドレス)
</Directory>

Alias /postfixadmin /usr/share/postfixadmin
Alias /PostFixAdmin /usr/share/postfixadmin
Alias /PostfixAdmin /usr/share/postfixadmin

※上記の例ではローカルホストと自宅からのみアクセスを許可しています。
※自宅からのみにアクセスを制限した場合は、ルータの電源ON/OFFなどで割り当てられるIPアドレスが変更になる可能性があります。
 

3.セットアップの実行

WEBブラウザーから「http://wwwNNNNzz.sakura.ne.jp/postfixadmin/setup.php」にアクセスします。
セットアップのチェックが実行され、postfixadminの特別な管理用ユーザのアカウントを作成します。
アカウントが作成されるとメッセージが表示されますのでそれに従って、config.inc.phpを編集してください。

一旦、終了して再度「http://wwwNNNNzz.sakura.ne.jp/postfixadmin」にアクセスすれば、バーチャルドメイン、メールユーザやエイリアスなどの登録が可能です。

postfixadminで登録するものは、postfixのバーチャルドメインマップ、バーチャルエイリアスマップ、dovecotのuserdbやpassdbなどに使われます。
 

Postfix

インストール

インストールは以下のコマンドで実施しました。

 # yum install postfix

依存関係のあるモジュールもすべてインストールしました。
 

sendmailの停止

※sendmailが起動している場合にのみ実施します。

# service sendmail stop
# chkconfig sendmail off
# alternatives --config mta
sendmail.postfixを選択します。 

 

設定

/etc/postfixにあるmain.cfを環境に合わせて編集します。

以下は、main.cfの例です。自身の環境に合わせて修正してください。

# --------------- local settings ------------------
inet_interfaces                 = all
inet_protocols                  = ipv4
mynetworks_style                = host
alias_maps                      = hash:/etc/aliases
relay_domains                   =

とりあえずは、上記の設定でローカルユーザのメールの送受信は可能になるはずです。
記述のないオプションはデフォルトが使用されます。

デフォルトの値を確認するには以下のコマンドで行います。

# postconf -d
または
# postconf -d inet_interfaces 

inet_interfacesの箇所を別のパラメータに変更すれば個別で値を確認できます。
半角スペースで区切れば複数のパラメータを一度に確認できます。
 

Postfix SMTPサーバに対するDovecot SASLの設定

今回はdovecotを使ってSMTPサーバ(smtpd)でのSASL認証サーバを構築します。

以下のコマンドでSMTPサーバ(smtpd)でのSASLサポートを確認します。

# postconf -a

 

dovecotが表示されればSMTPサーバでのSASLサポートをdovecotで構築できます。

ちなみに以下のコマンドでSMTP+LMTPクライアント(smtp+lmtp)でのSASLサポートを確認できます。

# postconf -A


以下がDovecot SASL認証に関するPostfix SMTPサーバ(smtpd)の設定例になりますので、main.cfに追記します。

# ---------------------- SASL PART (Server) -----------------
smtpd_sasl_auth_enable         = yes
smtpd_sasl_local_domain        = $myhostname
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options    = noplaintext,noanonymous
broken_sasl_auth_clients       = yes
smtpd_sasl_type                = dovecot
# Can be an absolute path, or relative to $queue_directory
smtpd_sasl_path                = private/auth

※smtpd_sasl_security_optionsには最低限noanonymousは設定してください。
※smtpとsmptdは異なりますので注意してください。ここではsmptdになります。
※dovecot側にもSASL認証の設定が必要です。
 

Cyrus-SASLの停止

今回はDovecotを利用しますのでCyrus-SASLを停止します。

以下のコマンドで停止および自動起動しないように設定します。

# chkconfig saslauthd off
# service saslauthd stop

 

バーチャルドメインに関する設定

以下はバーチャルドメイン用のmain.cfの例です。

# --------------- VIRTUAL DOMAINS ----------------------
virtual_mailbox_domains             = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_base                = /home/mailuser
virtual_mailbox_maps                = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_limit_maps          = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_alias_maps                  = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_minimum_uid                 = 10000
virtual_uid_maps                    = static:10000
virtual_gid_maps                    = static:10000
virtual_transport                   = lmtp:unix:private/dovecot-lmtp
dovecot_destination_recipient_limit = 1

各マップはデータベースにクエリを発行し、その結果を使用しています。
データベースへの登録は、先に導入したpostfixadminで行います。
それぞれのファイルは、/usr/share/postfixadmin/DOCUMENTS/POSTFIX_CONF.txtを参考にして記述してください。
最初はローカルファイルのマップを使って動作確認をしたのちデータベースを利用するように変更するとうまくいかないときの切り分けが簡単になるかもしれません。

postfixで利用可能なマップ形式は以下のコマンドで確認できます。

# postconf -m


なお、以下のコマンドでテストが可能です。

# postmap -q vdomain1.jp mysql:/etc/postfix/mysql_virtual_domains_maps.cf
vdomain1.jp

-qの後に実際のバーチャルドメイン名(検索キー)を入力して、同じ名前のみが表示されれば成功です。

TLSに関する設定

# ---------------------- TLS PART --------------------------------
smtpd_tls_auth_only                 = yes
smtpd_tls_CAfile                    = /etc/pki/server1/cacert.crt
smtpd_tls_cert_file                 = /etc/pki/server1/mail-server.crt
smtpd_tls_key_file                  = /etc/pki/server1/mail-server.key
smtpd_tls_session_cache_database    = btree:/var/lib/postfix/smtpd_scache
smtpd_tls_security_level            = may
smtpd_tls_received_header           = yes
smtpd_tls_loglevel                  = 1
tls_random_source                   = dev:/dev/urandom

セキュリティに関する設定

# ---------------------- Security PART ----------------------
smtp_tls_protocols                  = !SSLv2, !SSLv3
smtp_tls_mandatory_protocols        = !SSLv2, !SSLv3
smtpd_tls_protocols                 = !SSLv2, !SSLv3
smtpd_tls_mandatory_protocols       = !SSLv2, !SSLv3
smtpd_banner                        = $myhostname ESMTP Unknown
smtpd_helo_required                 = yes
disable_vrfy_command                = yes
unknown_local_recipient_reject_code = 550
maps_rbl_reject_code                = 550
default_rbl_reply                   = $rbl_code <$recipient>: Recipient address rejected: User unknown in local recipient table
header_checks                       = pcre:/etc/postfix/header_checks
#warning: the restrictions reject_unknown_(sender|recipient)_domain
#will trigger if your DNS becomes unavailable
smtpd_client_restrictions           = permit_mynetworks,
                                      check_client_access hash:/etc/postfix/access,
                                      check_client_access cidr:/etc/postfix/client.cidr,
                                      reject_rbl_client all.rbl.jp,
                                      reject_rbl_client bl.spamcop.net,
                                      reject_rbl_client multi.surbl.org,
                                      reject_rbl_client sbl-xbl.spamhaus.org,
                                      permit
smtpd_helo_restrictions             = permit_mynetworks,
                                      check_helo_access hash:/etc/postfix/access,
                                      check_client_access cidr:/etc/postfix/client.cidr,
                                      reject_invalid_hostname,
                                      permit
smtpd_sender_restrictions           = permit_mynetworks,
                                      hash:/etc/postfix/reject_sender,
                                      reject_unknown_sender_domain,
                                      reject_non_fqdn_sender
smtpd_recipient_restrictions        = permit_mynetworks,
                                      permit_sasl_authenticated,
                                      reject_unauth_destination
smtpd_data_restrictions             = reject_unauth_pipelining,
                                      reject_multi_recipient_bounce,
                                      permit

上記は、POODLE SSLv3.0 脆弱性問題対応を含んでいます。

master.cfの編集

以下の様に変更しました。

smtp      inet  n       -       n       -       -       smtpd
  -o receive_override_options=no_address_mappings
submission inet n       -       n       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o milter_macro_daemon_name=ORIGINATING
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_sasl_security_options=noanonymous,noplaintext
  -o smtpd_sasl_local_domain=$myhostname
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject_unauth_destination
smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,permit_mynetworks,reject

Dovecot

インストール

POODLE SSLv3.0 脆弱性問題に対応するには、dovecot-2.1以降でなければダメなようです。
dovecot-2.0.9でもssl_cipher_listを使えば一見対応できそうですが、実際の接続時にTLSv1.0およびTLS1.2が使用できないため接続できませんでした。
これを回避するには、パッチがあたったものを利用するかdovecot-2.1以降を使うことになります。
そのため、ここではdovecot-2.2.x(atrpms-testing)をインストールしました。
 

atrpmsレポの設定

以下のコマンドを実行してサインキーをインポートします。

# rpm --inport http://packages.atrpms.net/RPM-GPG-KEY.atrpms

次にatrpmsのrepoパッケージをダウンロードし、インストールを実行します。

# cd /usr/local/src/rpm
# wget http://packages.atrpms.net/dist/el6/atrpms-repo/atrpms-repo-6-7.el6.i686.rpm
# rpm -ivH atrpms-repo-6-7.el6.i686.rpm

/etc/yum.repos.d/にatrpms関連のrepoが追加されています。

dovecot-2.2.10のインストール

dovecot-2.1以降をインストールするにはperl(JSON::XS)が要件になりますので事前にインストールが必要です。
以下のコマンドでdovecot-2.2.Xをatrpms-testingからインストールします。

# yum --disablerepo=\* --enablerepo=atrpms-testing install dovecot

設定

dovecotの設定ファイルは、/etc/dovecot/dovecot.confとconf.d以下にある*.confなどを読み込むようですが、面倒なのでdovecot.confだけを使用する様に変更しています。

protocols = imap pop3 lmtp
disable_plaintext_auth = yes
ssl=yes
ssl_ca = </etc/pki/server1/cacert.crt
ssl_cert = </etc/pki/server1/mail-server.crt
ssl_key = </etc/pki/server1/mail-server.key
mail_location = maildir:/home/maiuser/%d/%n
first_valid_uid = 10000
last_valid_uid = 10000
maildir_copy_with_hardlinks = yes
mail_plugins = quota

# Should saving a mail to a nonexistent mailbox automatically create it?
lda_mailbox_autocreate = yes

# Should automatically created mailboxes be also automatically subscribed?
lda_mailbox_autosubscribe = yes

# Having "login" also as a mechanism make sure outlook can use the auth smtpd as well
# http://wiki.dovecot.org/Authentication/Mechanisms
auth_mechanisms = cram-md5 plain login
passdb {
  driver = sql
  args = /etc/dovecot/sql.conf
}
userdb {
  driver = sql
  args = /etc/dovecot/sql.conf
}
# ++++++++++++++++++++++++ conf.d/10-master.conf ++++++++++++++++++
service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
   group = postfix
   mode = 0600
   user = postfix
  }

  # Create inet listener only if you can't use the above UNIX socket
  #inet_listener lmtp {
    # Avoid making LMTP visible for the entire internet
    #address =
    #port =
  #}
  process_min_avail = 5
  executable = lmtp -L
}
service imap {
  # Most of the memory goes to mmap()ing files. You may need to increase this
  # limit if you have huge mailboxes.
  vsz_limit = 256M

  # Max. number of IMAP processes (connections)
  process_limit = 1024
}
service pop3 {
  # Max. number of POP3 processes (connections)
  process_limit = 1024
}
#auth_verbose = yes
#auth_debug = yes
#auth_debug_passwords = yes
service auth {
  unix_listener auth-userdb {
    group = vmail
    mode = 0600
    user = vmail
  }
  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    # Assuming the default Postfix user and group
    user = postfix
    group = postfix
  }
}
service dict {
  # If dict proxy is used, mail processes should have access to its socket.
  # For example: mode=0660, group=vmail and global mail_access_groups=vmail
  unix_listener dict {
    mode = 0600
    user = vmail
    group = vmail
  }
}

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

protocol imap {
  mail_plugins = $mail_plugins imap_quota
  imap_client_workarounds = delay-newmail
}
protocol pop3 {
  mail_plugins = $mail_plugins quota
  pop3_uidl_format = %08Xu%08Xv
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
protocol lmtp {
  postmaster_address = postmaster@wwwNNNNzz.sakura.ne.jp
  mail_plugins = quota sieve
  info_log_path = /var/log/dovecot-lmtp.log
}
dict {
  quotadict = mysql:/etc/dovecot/dict-quota.conf
}
plugin {
  quota2 = dict:User quota::proxy::quotadict
  quota = dict:Domain quota:%d:proxy::quotadict
  acl = vfile:/etc/dovecot/acls
  trash = /etc/dovecot/trash.conf
  sieve_global_path = /home/sieve/globalfilter.sieve
  sieve = ~/dovecot.sieve
  sieve_dir = ~/sieve
  sieve_global_dir = /home/sieve/
  #sieve_extensions = +notify +imapflags
  sieve_max_script_size = 1M
  #sieve_max_actions = 32
  #sieve_max_redirects = 4
}
namespace {
# Namespace type: private, shared or public
type = private
# Hierarchy separator to use. You should use the same separator for all
# namespaces or some clients get confused. '/' is usually a good one.
# The default however depends on the underlying mail storage format.
separator = .
# Prefix required to access this namespace. This needs to be different for
# all namespaces. For example "Public/".
prefix = INBOX.
# Physical location of the mailbox. This is in same format as
# mail_location, which is also the default for it.
#location =
# There can be only one INBOX, and this setting defines which namespace
# has it.
inbox = yes
# If namespace is hidden, it's not advertised to clients via NAMESPACE
# extension or shown in LIST replies. This is mostly useful when converting
# from another server with different namespaces which you want to depricate
# but still keep working. For example you can create hidden namespaces with
# prefixes "~/mail/", "~%u/mail/" and "mail/".
hidden = no
}
ssl_protocols = !SSLv2 !SSLv3

※2.0との変更点としては、protocolsにsieveを記述するとエラーになるので削除しました。
※ssl_protocols = !SSLv2 !SSLv3がPOODLE SSLv3.0 脆弱性問題対応箇所です。
※/etc/dovecot/sql.confと/etc/dovecot/dict-quota.confは/usr/share/postfixadmin/DOCUMENTS/DOVECOT.txtを参考にして記述してください。

imap/pop3を使用しない(imaps/pop3sのみ使用する)ようにするにはport=0を記載します。

service imap-login {
  inet_listener imap {
    port = 0
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 0
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}

以下の箇所のコメントを外せば、dovecotの詳細確認が可能です。

#auth_verbose = yes
#auth_debug = yes
#auth_debug_passwords = yes

Postfixの起動

# service postfix start

Dovecotの起動

# service dovecot start

動作確認は/var/log/mailogを確認してください。

Firewallの設定例

-A RH-Firewall-1-INPUT -p tcp -m state -m tcp --dport 25 --state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp --dport 465 --state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp --dport 587 --state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp --dport 995 --state NEW -j ACCEPT

上から順に、smtp,SMTP over SSL/TLS,サブミッションポート,POP3 over SSL/TLSになります。
POP3(110番)は使用しませんので、ファイアーウォールで閉じています。
POP3を開けていた場合、「メールサーバが攻撃を受けている」に記載したように総当り攻撃を受けるので注意が必要です。

phoenix 2014/12/19 (金)- 19:14

ディストリビューション

CentOS 6.x

CentOS7

CentOS7

さくらのVPSのOSをCentOS6.XからCentOS7.Xに変更しました。

この場合、アップグレードは推奨されていませんので、既存の環境をすべて削除して新規にCentOS7をインストールすることになります。
別の物理ディスクを準備してマルチブート環境を構成できるのであれば、別のサーバを準備する必要も上書きする必要もなくなります。
ただ、この場合はサービスの提供を停止する期間が長くなります。

バックアップ

通常は既存の環境がすべて消えてしまいますので、消えて困るものはPCなどへバックアップして、新しい環境へリストアする必要があります。

VPSの契約更新に併せて、新規VPSへ乗り換えるのも1つの選択肢だと思います。
新規VPSを追加すると2週間のお試し期間がありますので、その間に環境構築と稼働テストをすませてしまえば重複して費用が発生することはありません。
※支払方法によりお試し期間中は制限があったりしますので注意してください。
バックアップでデータをまとめて圧縮してしまうと中身のファイルを確認するのに非常に面倒です。
新旧のサーバが稼働していれば、以前はどういった設定にしていたかの確認が同時に行えるので便利です。
ディスクドライブを複数準備する方法もマウントして参照できるパーティション構造にしてあるのであれば同じく便利です。

また、例えばPCにバックアップデータをダウンロードし、それを新規サーバへアップロードした場合、私のネットワーク環境ではISPの使用パケット通信料の制限を超え規制される可能性があります。
過去、動画ファイルを扱っている際に何度かメールでの通知が来たことがあります。
そのため、バックアップデータをPCからサーバへアップロードする行為には抵抗があります。

さくらのVPSの場合、同じデータセンター内のサーバ間であれば、スイッチを作成しローカルネットワークを構成できます。
そうすればサーバ間でのデータ転送が可能になりますので、わざわざISPの規制にかかるような作業をする必要がなくなります。

新規VPSを契約したので、バックアップはとらず、サービスも移行するまでは停止せずに、新規VPSの環境構築に専念することにしました。

カスタムOSのインストール

さくらのVPSでインストール可能なOSは提供OS一覧をご覧ください。

CentOS7はカスタムOSインストールからインストール可能です。
新規サーバには標準OSのCentOS6がセットアップされていますので、新規サーバでも再インストールになります。
※標準OSについての詳細は「OSセットアップ情報」をご覧ください。
※都合によりスクリーンショットは、既存サーバのものですが、新規サーバでも同じです。

OSの選択

コントロールパネルにログインして、OSインストールするサーバを選択します。
コントロールパネル

インストールメニューからカスタムOSインストールを選択します。
インストール可能なOSの一覧が表示されますので、「CentOS 7 x86_64」を選択しました。
CentOS 7 x86_64

セットアップ

インストールの設定を行います。
さくらのVPSの場合は、新規サーバでも標準のCentOS 6がインストールされた状態です。
カスタムOSインストールを選択することで選択したブートイメージでサーバが起動して、インストールが開始されます。

インストーラの起動中

OSインストール用のブートイメージが起動し準備ができるとVNCコンソールの選択メニューが表示されます。

VNCコンソールの選択

今回は「VNCコンソール(HTML5版)を起動」を選択しました。

次のように、HTML5版のVNCコンソールが表示されます。(デフォルトのブラウザーにしているFirefoxで起動します)
そのまま、【ENTER】を押して進みます。
起動

インストール設定

以下のようなインストールメニュー画面が表示されます。
各設定項目の下に設定値が表示されています。
デフォルトでは設定されていない(Not Configured)の項目や既定値を変更したい項目を変更していきます。
インストールメニュー
 

LANGUAGE SUPPORT(言語サポート)

言語選択の既定値は英語のみになっているので日本語を追加しました。
※適用は左上の【DONE】(完了)ボタンで行います。この先の操作はすべて同じです。
日本語追加

SOFTWARE SELECTION(ソフトウェアの選択)

サーバ用途なので最小構成にしました。
のちほどインストールしなければならないのがわかっている開発ツールも一緒に選択しました。
ソフトウェアの選択

INSTALLATION DESTINATION(インストール先)

インストール先の設定をします。要はパーティション設定です。
既定値は自動作成になっていますが、用途に合わせて自分で設定することにしました。
VPSの契約によってHDDまたはSSDになります。
また容量や台数も契約内容で異なります。

まず、インストール先のドライブを選択します。
インストール先の設定

パーティションの設定についてはCentOSのドキュメントを参考にしてください。
必ず、/bootパーティションは物理ディスクに作成します。
必要な容量はカーネルのサイズに左右されますので複数のカーネルを使用する場合は注意が必要ですが、通常は256MBあれば十分だと言われています。
bootパーティション以外はLVMで作成しました。
ただLVMを選択しただけでは、デフォルトの長い名前で作成されるためボリュームグループ名を【VgSystem】に変更しました。
ボリュームグループ名の変更

次にそれぞれ必要なパーティションを作成しました。
マウントポイントの名前はこれも長い名前が自動で生成されるので変更しました。
右の画面で個別の設定を変更した場合は右下のボタンで更新すれば変更内容が左の画面に反映されます。
※最終的には左の画面の内容でフォーマットされます。
パーティション設定

左下のピンク色の部分にパーティション設定したサイズが表示されています。右側のグレイの部分に選択したドライブの総容量が表示されています。
LVMにしてあるので、あとで追加変更も可能ですから各パーティションのサイズはおおまかに設定しました。

/var/lib/mysqlのようにミドルウェア用のパーティションを個別で用意しておくと、バージョンアップや障害時などに役立つことがあると思います。
スワップは物理メモリが4GB以内であればその2倍あればよいと思います。

NETWORK&HOSTNAME(ネットワークとホスト名)

さくらのVPSはNICが3ポート(eth0~eth2)あります。
サーバ情報にあるネットワーク設定はeth0に反映されています。
サーバのコントロールパネルのネットワークインターフェースの項目にそれぞれのインターフェースがどこに接続しているかを確認できます。
デフォルトではeth0がインターネットでその他は未接続です。

今回、同じデータセンター内の2台目のサーバになりますので、サーバ間通信のためスイッチを作成しローカルネットワーク接続できるようにします。
コントロールパネルで行うスイッチの作成とそれぞれのネットワークインターフェースの設定はすでに済ませた状態です。

eth1のネットワークインターフェスをローカルネットワーク接続に使用することにしました。
インストール後にもできますが、この場で行うことにしました。

eth1をONに変更します。
ETH1を有効化


次にIPの設定を行います。
右下の【Configure...】ボタンをクリックすると設定メニューが表示されます。
IPv4に固定IP(ローカルIPアドレス)を割り振りました。
IPv4固定IP

以上でインストールの設定が完了です。

インストールの開始

いよいよインストールの開始です。
スクリーンショットにはありませんが、右下のボタンをクリックすればインストールが開始されます。
インストールの確認

インストール中に管理者(root)のパスワードと追加するユーザの登録を行います。
インストール中

今回はrootのパスワードはRoboformで生成したものを使用しました。
※12文字以上にすればGoodになるようです。

追加するユーザはこのあとsshでの接続用に使用するので少なくとも1ユーザは作成することをお勧めします。
rootへスイッチユーザできるユーザを作成する場合は、管理者ユーザとして作成すればwheelグループに追加してくれます。

インストールが完了するとサーバは停止した状態でしたので、この先は別の記事にします。
※もし稼働中の状態でこのまま放置していると、sshdの設定がデフォルトのままなのでrootでのログイン試行をされ最悪乗っ取られる可能性があります。
※稼働中で放置する場合は最低でもsshdの設定を行い安全性を高めるところまでは作業するようにしてください。

追記

リブート後にローカルネットワーク用のeth1の設定でブート時に自動接続の設定ができていなかったので、以下を行いました。

NetworkManagerのnmtuiコマンドを実行して、自動接続にチェック。
もしくは、/etc/sysconfig/network-scripts/ifcfg-eth1に「ONBOOT=yes」を追加

ifup eth1

で接続します。

サーバのコントロールパネルについて

コントロールパネルからはOSインストールやレスキューモードで起動してシステムの修復をしたり、ローカルネットワークの構成をしたりなど行うと思います。

ログイン方法が2通りあり、1つ目が会員IDを入力する方法、もう1つがサーバのIPアドレスを入力する方法です。
それぞれログイン後に表示されるサーバ情報がことなります。

仮にサーバAのIPアドレスを入力してログインした場合は、コントロールパネルのサーバ一覧には、サーバAのみ表示されます。
コントロールパネルで行う作業内容に応じてログイン方法を使い分ければよいと思います。

例えば、ローカルネットワーク接続を構成する場合は、まずコントロールパネルから複数のサーバのネットワークインターフェースに対して設定変更が必要になります。
会員IDを入力してログインしていれば、コントロールパネルのサーバ一覧には、契約しているすべてのサーバが表示されますので、作業がスムーズになります。

phoenix 2016/10/18 (火)- 20:52

ディストリビューション

CentOS 7.x

SSHの設定

SSHの設定

SSHの設定に関する記事です。
SSH(Secure Shell)は認証や暗号の技術を使った安全にサーバとクライアント間の通信を行うプロトコルです。
パスワードの入力を含む通信データすべてを暗号化できます。
通信を傍受され改ざんや情報漏洩の可能性は極めて低くなります。

ここでは、さくらのVPSでOSのインストールまで終了している状態から説明します。
標準OSおよびカスタムOSインストールのどちらの場合であっても、OSインストール後に最初にやるべきことになります。
※新規契約した最初の状態は標準OSがセットアップされています。

OSのセットアップが完了しているとさくらのVPSの場合はSSHでの接続が可能になっています。
ただし、かなり制限が緩い設定のため、早急にSSHサーバの設定変更を行うべきです。

OSインストールではコンソール端末が必要だったのでサーバのコントロールパネルから接続しましたが、利便性がよくないので今後の作業はリモート端末ソフトのPuTTYを使用します。
※PuTTYの設定についてはSSHクライアントの設定で記載します。

公開鍵と秘密鍵の作成

暗号に必要な鍵の作成を行います。
鍵はサーバ側に配置する公開鍵とクライアント側に配置する秘密鍵のペアで作成します。
公開鍵が暗号化(符号化)に使用され、秘密鍵が復号化に使用されます。
秘密鍵が人手に渡るとだれでも復号(解読)できることになりますので、秘密鍵の取り扱いには十分注意して本人以外の手に渡らないようにしてください。

PuTTY Key Generator

鍵の作成には、PuTTYに付属のPuTTY Key Generatorを使用しました。
今回はSSHバージョン2 RSA 2048bitの鍵を生成します。

生成(Generate)

PuTTY Key Generatorを起動

Keyの枠内でマウスカーソルを移動させてキーを生成します。

生成

パスフェーズの入力

入力するパスフェーズはSSH接続時に必要になりますので忘れないようにしてください。
通常のログインのパスワードの代わりに使用されますが、パスワードとは異なるものにしてください。

パスフェーズを入力

公開鍵の保存(Save public key:id_rsa.pub)

公開鍵の保存(Save public key)

秘密鍵の保存(Save private key:id_rsa.ppk)

秘密鍵は絶対に他人の手に渡らないように細心の注意をしてください。
例えば、玄関の前の郵便ポストのような場所に家の鍵を入れていたのでは、知っている人であればだれでも家に入れてしまいます。

秘密鍵の保存(Save private key)

以上で、公開鍵(id_rsa.pub)と秘密鍵(id_rsa.ppk)が作成できました。

SSHサーバの設定

カスタムOSインストールでCentOS 7 x86_64を選択し最小構成+開発ツールのインストールを行いました。
まず、openssh-serverがインストールされていることとそのバージョンを確認しておきます。

# rpm -qa openssh-server
openssh-server-6.6.1p1-25.el7_2.x86_64

上記のように表示されればすでにインストールされています。

SELinuxの無効化

SELinuxはセキュリティ管理を担う重要なモジュールですが、慣れていないといろいろと今後の作業で躓く原因になります。
適切な判断のもと、無効化してください。

SELinuxを無効にする

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

# setenforce 0
Permissive

# getenforce
Disabled

# vi /etc/sysconfig/selinux
...
#SELINUX=enforcing
SELINUX=disabled

# reboot

もしくは

# shutdown -r now

※setenforceの実行を追加しました。
setenforce 0でPermissiveになります。この状態ではポリシーの監視はしますがアクセス制限はしませんのでログファイルにエラーメッセージが出力されるのみです。
SELINUX変数の変更だけでリブートしたシステムでは、ファイル作成時に付与されたセキュリティコンテキスト(ファイルパーミッションの11bit目)の影響でアクセス制限によりアクセスが拒否され悩まされました。
ちょうどポリシーが適用されたままの状態と同じに思えました。
このセキュリティコンテキストはSELinuxで無効化した状態で作成したファイルには付与されませんが、一旦、SELinuxを有効化してしまうとOS再起動時にセキュリティコンテキストのラベル付与が行われ非常に時間がかかります。
有効化すると監視対象となっているサービス等は起動しませんので、もちろん変更したSSHサーバも起動しません。

現在の状態を表示し、設定ファイルを編集して無効(disabled)にしています。
このあと、システムの再起動を行うとSELinuxが無効の状態で起動します。

SELinuxの無効化の確認

# sestatus
SELinux status:                 disabled

# getenforce
Disabled
 

どちらのコマンドでも無効(disabled)になっているのが確認できます。
※OSブート時のログファイル(/var/log/messageなど)を一応見ておいたほうが良いかもしれません。

sshdの設定

OpenSSHサーバの標準設定を変更します。
※標準の設定のままですと、悪意のあるユーザが攻撃を行いrootでログインできてしまいます。

変更箇所は次の通りです。(※OpenSSHサーバの設定以外も含んでいます)

  1. sshdサービスポート番号の変更(デフォルト:22)
  2. SSHプロトコルをSSHバージョン2のみにする
  3. rootでの接続を拒否する
  4. パスワードなしでのログインを拒否する
  5. パスワードでのログインを拒否する
  6. 特定のユーザのみ接続を許可する
  7. 管理者ユーザ以外はrootにスイッチユーザできないようにする
  8. 管理者ユーザはwheelグループに追加する

上記1番~7番のうち、5番についてはSSH接続が正常にできたあとの最終的な変更です。
また、7番と8番はsshdの設定とは無関係ですが、3番の設定に関連して、この7番と8番を設定しておかないとsshで接続した端末でrootになれません。

1番から6番までは「/etc/ssh/sshd_config」ファイルを編集します。
※ssh_config(SSHクライアント用の設定ファイル)のほうではありません。

sshdサービスポート番号の変更

Port 1022 

SSHプロトコルをSSHバージョン2のみにする

Protocol 2 

rootでの接続を拒否する

PermitRootLogin no 

パスワードなしでのログインを拒否する

PermitEmptyPasswords no 

パスワードでのログインを許可する

※SSHでの接続が確認できるまで許可にしておきます。

PasswordAuthentication yes 

特定のユーザ(hogehoge)のみ接続を許可する

AllowUsers hogehoge

変更が終わったら保存してファイルを閉じます。

sshdの再起動と状態確認

変更した内容を反映するため、sshdサービスの停止と起動を行っています。
reloadでも反映されると思います。

# systemctl stop sshd
# systemctl start sshd
# systemctl status sshd 

以下のコマンドで接続中と待機中のポート番号一覧を表示できますので、ポート1022/TCPでLISTENになっていることを確認してください。

# ss -antup 

管理者ユーザ以外はrootにスイッチユーザできないようにする

6行目がコメントになっているので有効にします。

auth            required        pam_wheel.so use_uid 

管理者ユーザはwheelグループに追加する

※カスタムOSインストール時に管理者ユーザを作成した場合はすでにwheelグループに追加されています。

# usermod -G wheel hogehoge 

公開鍵の設置

前に作成した公開鍵(id_rsa.pub)をSSHサーバに転送します。
転送の方法はPuTTYに付属のpscpコマンドやsftp、別途WinSCPのようなファイル転送ソフトを使ってもよいですし、PuTTYを使ってリモート操作しているのであれば、サーバ上に新規ファイルを作成し、公開鍵の内容をコピー&ペーストして貼り付けることでも可能です。
今回は、簡単な後者の方法で行いました。
※PuTTY Key Generatorで生成した公開鍵はそのままではOpenSSHでは使用できませんので変換作業が必要です。

まず、SSHで接続するユーザのホームディレクトリへ移動します。
※SSHで接続を許可しているユーザでログインしているとして説明します。

$ cd 
$ mkdir .ssh
$ cd .ssh
$ vi id_rsa.pub
id_rsa.pubファイルの中身をコピーして貼り付け保存します。

次にOpenSSHで利用できるように鍵を変換します。

$ ssh-keygen -i -f id_rsa.pub >> authorized_keys 
$ rm id_rsa.pub

ファイル名authorized_keysは/etc/ssh/sshd_conf内で設定されているファイル名にあわせます。
「>>」を使用しているので、すでにauthorized_keysが存在している場合は上書きではなく追加になります。

上の例では元のファイルは削除しています。

最後にパーミッションの変更をしておいてください。
適切なパーミッションが設定されていないとSSH接続時にアクセス拒否されます。

# chmod 600 *
# cd ../
# chmod 700 .ssh 

※ファイルは読み取り権限、ディレクトリは実行権限が必要です。
※もちろんオーナはログインしているユーザと同じにしてください。

Firewallの設定変更

先ほど、sshdサービスのポート番号を変更しましたので、firewallの設定をそれに併せて変更しないと接続ができません。
設定変更にはfirewall-cmdコマンドを使用します。

現在接続可能なサービス名の確認

# firewall-cmd --list-services
dhcpv6-client ssh 

ここで表示されるsshサービス名はポート22/TCPを使用していた標準の設定です。
現在、sshdサービスは標準の設定(ポート22/TCP)では起動していませんので不要です。
※/etc/servicesファイルを見ればwell knowポートとサービス名の対応が一覧になっています。

現在接続可能なポート番号の確認

# firewall-cmd --list-ports 

何も表示されない場合はポート番号で許可している登録はなしです。

変更前のSSHサーバーのサービスを削除

sshサービス名を登録から削除します。
再起動後にも設定が反映されるようにpermanentオプションを使用します。
ただし、現在のfirewall設定には影響ありません。

# firewall-cmd --permanent --remove-service=ssh
success

変更後のSSHサーバのポート番号を登録

ポート1022/TCPを登録します。
再起動後にも設定が反映されるようにpermanentオプションを使用します。
ただし、現在のfirewall設定には影響ありません。

# firewall-cmd --permanent --add-port=1022/tcp
success 

firewallの設定の再読み込み

これまで変更した内容(parmanentオプションを使った変更)で現在稼働中のfirewallの設定を更新します。

# firewall-cmd --reload
success

すべての情報を表示

 # firewall-cmd --list-all 
public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client
  ports: 1022/tcp
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

標準のfirewallの設定内容は登録があるものが接続許可され、ないものは拒否される仕組みです。
サービス名で登録されている場合と通信ポート番号で登録されている場合の2通りがあります。
※この設定はネットワークインターフェース:eth0のみに有効です。

以上でSSHサーバの設定は一応完了です。
5番のところは、最後に接続テストが正常であることが確認できたのちに変更します。

SSHクライアントの設定

まず、Windows OSからSSHサーバへの接続を想定して、SSHクライアントにPuTTYとWinSCPを使う場合の設定を記載します。
その他、Android TabletからSSHサーバへの接続を想定して、SSHクライアントにConnect Botを使う場合の設定を記載します。
さらに、さくらのVPSで2台のサーバ間をローカルネットワークで接続していますので、OpenSSHクライアントを使う場合の設定を記載します。

PuTTY(PuTTYjp)の設定

公式サイトはhttp://www.chiark.greenend.org.uk/~sgtatham/putty/になります。
現在の最新バージョンは0.67です。
インストーラ版とポータブル版があります。

非公式のISO2021のパッチ(日本語パッチ)があたったPuTTYjpも存在します。
こちらも最新バージョンは0.67です。
入手はVectorのサイトから可能です。http://hp.vector.co.jp/authors/VA024651/PuTTYkj.html

今回はPuTTYjpのポータブル版を使用します。
ダウンロードしたファイルを解凍し、解凍したフォルダーごとD:\toolsに移動しました。
(移動先は任意です。ポータブル版の場所をD:\tools以下にまとめているのでそうしているだけです)

セッションの基本設定

接続先のホスト名またはIPアドレス(VPSサーバのホスト名)、SSHサービスのポート番号(1022)、接続方式(SSH)を設定します。
※ホスト名で接続する場合はネットワーク上でホスト名からIPアドレスへの名前解決ができる(正引きできる)状態でなければ接続できません。
※さくらのVPSの場合は、DNSに登録されていますので名前解決(正引き)できる状態になっていますが、独自ドメインサービスを利用している場合のサーバー名(ドメイン名)で接続する場合はDNS情報がインターネット上に伝達するまで時間がかかる場合があります。
セッションの基本設定

ウィンドウの設定

接続時のPuTTYウィンドウの画面サイズ(120x76)とスクロールバックの行数(2000)を設定します。
※スクロールバックは表示する行数が画面サイズ以上になった場合に画面がスクロールする際、何行スクロールを戻して表示が可能かに影響します。
ウィンドウの設定

文字セット変換の設定

日本語の表示や入力時に文字化けしないように、サーバ上のユーザ環境変数LANGの設定に合わせます。(UTF-8)
文字コード変換の設定

サーバに送られるデータ

自動ログインのユーザ名にSSH接続を許可したユーザ名を入力します。(user1)
サーバに送られるデータ

SSH接続の設定

SSHプロトコルバージョン2(2のみ)と ASE(SSH-2 only)を設定します。
SSH接続の設定

PuTTYのSSH認証の設定

PuTTY Key Generatorで作成した秘密鍵ファイル(プライベートキーファイル)を登録します。
秘密鍵の設定

セッションの基本設定

最後に「セッションの読み込み、保存、削除」の欄に設定の名前を入力して、保存します。
セッションの基本設定

以上でPuTTYjpの設定が完了です。

パスフレーズの入力に関して

パスフレーズの入力は通常のログインと同じくパスワードを入力する作業と安易にとらえてしまうとパスフレーズなしで鍵を生成したくなる場合もあるかと思います。
パスフレーズは通信を傍受されたのち、攻撃者がパスフレーズを解析する分の時間、猶予がありますので、万が一に備え、パスフレーズを付与することを推奨します。
それでも毎回パスフレーズを入力するのは面倒という方は、pageantを使うとよいでしょう。
PuTTYに付属のpageantを利用するれば、接続のたびにパスフレーズを入力しなくても、pageantに秘密鍵(プライベートキー)を登録しその時にパスフレーズを一緒に保存しておけば、以降の接続の際にパスフレーズの入力を自動化できます。
pagent.exeは起動するとプロセスは常駐していますので、タスクトレイの一覧から選択しNew Sessionで接続先を選択すればサーバへの接続が自動になります。

WinSCPの設定

WinSCPはグラフィカルな操作でコンピュータ間のファイル転送が可能なクライアントソフトウェアです。
外部プログラムにPuTTYを利用することもできますし、ファイルの中身を参照する場合に使用するテキストエディタも好みのエディタを設定することが可能です。

WinSCPについてはhttps://winscp.net/eng/docs/lang:jpをご覧ください。
現在の最新バージョンは5.9.2です。
上記リンク先のダウンロードからソフトウェアのダウンロードが可能です。
インストーラ版とポータブル版があります。
また、日本語対応は別途言語ファイルをダウンロードしてWinSCPにロードすれば日本語表示になります。
言語ファイルはWinSCPのバージョンと言語ファイルのバージョンが一致していないとエラーメッセージが表示されますので、WinSCPの環境設定から言語ファイルのダウンロードサイトにアクセスするのが確実です。

今回はポータブル版をダウンロードしました。バージョンは最新版の5.9.2です。
ZIPで圧縮されているのでOS標準の機能で解凍できると思います。

解凍したフォルダーごとD:\toolsに移動しました。(移動先は任意です。ポータブル版の場所をD:\tools以下にまとめているのでそうしているだけです)

日本語対応

日本語ファイルのダウンロード

WinSCPを起動します。
以下のように標準では英語の表記になっています。
初回起動時

左下にある「Tools」→「Preferences...」を選択し、Preferences画面を表示します。
次に「Environment」の中の「Languages」を選択します。
現在インポートされている言語の一覧と選択されている言語が表示されます。
言語の選択画面

右下にある「Get More ...」ボタンをクリックすると、その他の言語ファイルがダウンロードできるサイトにアクセスします。
そこにある一覧から「Japanese」をダウンロードし、解凍します。
解凍したフォルダーにある「WinSCP.jp」をWinSCP本体があるフォルダーに移動します。
移動後のWinSCPフォルダーは以下のようになります。
日本語ファイルを設置
 

日本語ファイルのロード

WinSCPをいったん終了して再度起動したのち、先ほどと同じ「Languages」の画面を表示すれば、一覧に日本語が追加されています。
日本語を選択しOKで保存します。
日本語を選択

もう一度、WinSCPを再起動すれば日本語表記に変わります。
再起動後の状態

セッションの設定

まず、編集ボタンを押して編集ができるようにします。
次にホスト名、ポート番号、ユーザ名を入力し、「保存」ボタンでとりあえず接続設定を保存します。
保存すると左の画面の一覧に設定が追加されます。
接続の基本設定作成
一覧にある設定名を変更する際は、管理メニューから名前の変更で行います。
※設定変更する際、編集ボタンを設定変更したら保存ボタンを押せば、ログインやツールメニューや管理メニューなどその他の操作ができるようになります。

秘密鍵の設定

詳細な設定は、編集ボタンをクリックした後、その横にある設定メニューから設定を選択して行います。
高度なサイトの設定画面が開きますので、以下のように使用する秘密鍵を設定します。
秘密鍵の設定
設定を変更したので保存ボタンをクリックし保存します。

外部プログラムの使用

WinSCPはSSH端末ソフトやテキストエディタソフトに外部プログラムを設定できます。
その設定は「ツール」→「環境設定」で行います。

テキストエディタの変更

標準設定の内部エディタをポータブル版のサクラエディタに変更します。
エディタを選択したのち追加ボタンをクリックします。
エディタの追加

以下のように、サクラエディタを追加します。
※プログラムファイル(拡張子.exe)を選択します。
サクラエディタを追加

つぎに優先順位を一番上に変更します。
優先順位を変更

外部アプリケーションの変更

続いて、外部アプリケーションにポータブル版のPuTTYjpを設定します。
統合の中になるアプリケーションを選択します。
標準ではインストーラ版のPuTTYの設定になっているのでポータブル版に変更しました。
ポータブル版PuTTYjpに変更
WinSCPからPuTTYjpやサクラエディタを使用できるようになりました。
あと、PuTTYに付属のpegeantを起動してAddKeyを行いパスフェーズを入力し終わっていれば、WinSCPからの接続時のパスフェーズの入力を省略できます。

以上でWinSCPの設定は完了です。

Connect Botの設定

Connect BotはAndroid OS用のSSHクライアントソフトです。
Google Playストアに登録されているのでダウンロードはhttps://play.google.com/store/apps/details?id=org.connectbotから行います。

Connect Bot + Hacker's KeyboardのセットでZ4 Tabletからサーバーへ接続する際に使用しています。
Hacker's Keyboardはソフトウェアキーボードですが、標準の文字入力ソフトと違ってキーボード感覚で文字入力ができます。
Z4 Tabletはbluetoothの同時接続数が2デバイスまでですので、キーボードの代わりにマウスを接続し、ヘッドセットを接続して音楽を聴きながらもしくは通話しながらのほうが便利だと思います。
文字列のコピーのような選択範囲を指定する操作はキーボードよりマウスのほうが便利です。

ここでは簡単な紹介だけにしておきます。

公開鍵管理で鍵の生成が可能

接続に使用する秘密鍵の管理だけでなく、鍵の生成もできるようです。
公開鍵管理

接続前に秘密鍵のアンロック(パスフェーズを入力してアンロックした状態)

秘密鍵のアンロック後

接続した状態

サーバへ接続した状態

カラーは変更できます(スクリーンショットはグレイ系になっています)

OpenSSHクライアントの設定

さくらのVPSで2台のサーバをローカルネットワーク接続して主にファイルの転送に利用します。
このためだけに安全でない方法を構築するほうが面倒で不安なため、SSH接続にしました。

OpenSSHクライアントの確認

まずは、OpenSSHクライアントがインストールされているか念のため確認します。

# rpm -qa openssh-clients
openssh-clients-6.6.1p1-25.el7_2.x86_64 

OpenSSHクライアントの設定を変更

Linuxで使用するSSHクライアントというとscpやsftpになると思います。
OepnSSHサーバで行った変更に合わせてクライアントの設定を変更します。

ホスト名 *.localの設定を追加

/etc/ssh/ssh_configを以下のように変更しました。

Host *.local
        CheckHostIP no
        Port 1022
        Protocol 2

Host *

ssh_configは上から順番にHostに一致した項目が設定されますので、Host  *より前に追加します。
SSH接続に使用するポートはSSHサーバにあわせて1022に設定しています。
この設定をすることでSSH接続時に毎回ポート番号やSSHプロトコルバージョンを指定する必要がなくなります。
SSHプロトコルバージョン2はChipersの設定を使用しますので、優先順位を変更する場合はChipersの設定を追加します。
デフォルトの値はssh_configのコメント行に記載されています。

ホスト名の登録

ローカルネットワーク接続で使用しているネットワークインターフェース(eth1)に割り当てたIPアドレスはどこにもホスト名を設定していないので名前解決ができません。
ローカルネットワーク内で使用できればよいだけなので2台のサーバの/etc/hostsファイルに以下を追加しました。

192.168.0.1 server1 server1.local
192.168.0.2 server2 server2.local 

これで接続時にはホスト名を使用することができるようになります。

scpの例

scpを使ったSSHファイル転送の方法です。
scpはsftpと違ってファイル単位での転送しかできません。また、中断すると転送を継続することができません。

以下はSCPコマンドを使用してserver1からserver2へSSH接続しています。
ユーザ:user1でtest.txtファイルを転送しています。
サーバ側のパスを指定しなかった場合はサーバのユーザホームディレクトリに保存されます。(サーバのパスを省略する場合でも「:」は必要です)

$ scp test.txt user1@server2:test.txt
The authenticity of host '[server2]:11022 ([192.168.0.2]:11022)' can't be established.
ECDSA key fingerprint is 12:34:56:78:9a:bc:de:fg:hi:jk:lm:no:pq:rs:tu:vw.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[server2]:11022,[192.168.0.2]:11022' (ECDSA) to the list of known hosts.
Enter passphrase for key '/home/user1/.ssh/id_rsa':
test.txt                                                                              100%   47KB  46.7KB/s   00:00

初回接続時はサーバ情報とfinger printが表示されます。(上のfinger printは実際のものとは異なります)
一度接続したサーバのこれらの情報は.ssh/known_hostsファイルに追加されます。
以降、サーバの情報が変更された際にはメッセージが表示されます。
※サーバ上に同じファイル名のファイルがあった場合は上書きされます。

SSHサーバへの接続テスト

SSHクライアントからSSHサーバへ実際に接続してテストを行います。
接続テストの結果、問題がなければ5番の設定変更を行います。

パスワードでのログインを拒否する

PasswordAuthentication no

変更が終わったら変更内容を反映します。

# systemctl reload sshd

長くなりましたが以上でSSH接続に関する設定は完了です。

暗号化技術はいろいろとありますが、それを解読できるかどうかの状況も日々進化しています。
RSA暗号はいまだ効率よく解読する方法が知られていないため、総当たりで計算し解読していくことになります。
その際、暗号化キーのビット長が難易度をさらに高める効果があり、ビット長は2048bitであればこの先もある程度は安全であるとされています。
総当たりでも短時間で解読できるほどにコンピュータの計算性能が向上すれば、もしくは、効率よく解析できる方法が発見されれば、今使っているRSA暗号の2048bitが危険になる日もいずれ訪れます。
2010年くらいにRSA暗号の1024bitが危険であると報じられています。また、共通鍵暗号方式のDES暗号の512bitは2000年までには20時間ほどで解読できる状況になりました。
今ではDESに変わりAESが推奨されている理由です。
今は問題なくてもこの先、効率よく解読できる方法が解明されれば、暗号強度が高い状態といえなくなります。

phoenix 2016/10/24 (月)- 06:29

ディストリビューション

CentOS 7.x

さくらVPSのコンソール

さくらVPSのコンソール

さくらのVPSで提供されているコンソールについてです。

OSのインストールとSSH接続の設定をすれば、その後は不要だと思っている人もいるかもしれません。
たしかに、サーバ管理者でなければ関係ないことかもしれません。
しかし、何かあったときに確実なのはコンソールからの操作です。

新入社員によくviエディターの操作をトレーニングしました。
なぜviエディタなのか?
それは、viエディタはコマンド編集とライン編集(edとexの機能が備わっていた)ができる点です。
様々な装置に接続されているいろんなタイプのコンソールであっても、どちらか一方が使える可能性が高いからです。
操作を覚えておけば困ることがない。というのが理由です。
今ではviエディタの派生版が多くあります。

コンソールからしかわからない情報やコンソールからしかできない操作があります。
本当であれば、サーバが設置されている場所まで行かなければならない情報です。
しかし、ネットワークを経由して遠隔から操作してわかるようになっています。

具体的な例

SSHクライアントから接続してサーバをリブートしたとします。
いつもは数分でSSHクライアントから再接続できるはずが、いつまで経っても応答がありません。
応答がないのは、何らかの処理で遅いのか、それともブートシーケンスのどこかで止まっているのか?
それさえわかりません。

こういったときに使うのがコンソールです。

また、カーネルをアップデートしたあとからOSが起動しなくなったようだ。
というときにも、コンソールが役立ちます。

ブートローダの修復や変更なども行うことがあるでしょう。
レスキューモードで起動する場合もコンソールからできます。

さくらのVPSコントロールパネルから契約IDもしくはサーバのIPアドレスでログインすればサーバ一情報の画面から利用可能です。
Java版とHTML5版のVCNコンソールとシリアルコンソールの計3種類から利用できます。

おすすめは、シリアルコンソールです。
シリアルコンソールはまだβ版なので正式リリースではありませんが、VNCコンソールからではできないことが可能です。
シリアルコンソール

さくらのVPSのシリアルコンソールの利点

  1. コンソール画面がみれる
  2. スクロールバックして見える
  3. テキストの貼付けができる

コンソール画面が見れる

当たり前ですが、VNCコンソールでは見れないものも見れます。
出力が/dev/consoleになっているメッセージが見れます。

サーバ起動時、停止時のメッセージが表示されますので、今どの処理中なのか、正常に完了したのかをリアルタイムで追えます。

起動時

起動時

停止時

停止時

何らかの障害で停止していればすぐにわかります。

SELinuxを無効から有効にしてリブートした際

SELinux
セキュリティコンテキストの付け直しに時間がかかっている様子です。
確かこの後、自動で再起動したと思います。

起動後にログメッセージを参照すれば解析はできますが、OSが起動しない場合や起動が遅い場合など状況をみながらというのは便利です。
また、サーバ起動時にはブートローダーの出力もみれますので、GURB2のメニューからレスキューモードで起動したり、複数のカーネルバージョンから選択して起動したりが可能です。

GRUB2のメニュー

GRUB2メニュー
別途、GRUB2の編集をすればこのメニューの構成を変更することが可能です。

スクロールバックして見れる

スクロールバーは表示されていませんが、マウスホイールを動かせば画面がスクロールします。
見落としたメッセージなどもスクロールして確認できます。

テキストの貼付けができる

VNCコンソールが不便だったのは、環境設定ファイルなどをいちいち手入力しなければならなかったことです。
シリアルコンソールにはテキスト送信ボタンがありますので、コピーした内容を貼付けることが可能です。

以上、使ってみて便利だなぁと思ったことです。

サーバコントロールパネルへは、契約IDとサーバIPアドレスとの2通りのログイン方法がありますので、権限で使い分けも可能ですし、サーバへのログインはコントロールパネルへのログイン後にさらにシリアルコンソールでのログインの2重のログインが必要になりますので安全面も強化できるように思います。
また、VNCコンソールよりも幾分か応答性がいいように思います。

rootでログイン

もちろんSSHサーバの設定に関係なくrootでログインできます。
rootでログイン

phoenix 2016/10/28 (金)- 07:31

ディストリビューション

CentOS 7.x

LIVA-XにCentOS 7をインストール

LIVA-XにCentOS 7をインストール

背景

LIVA-Xは、Windows 8 ProからWindows 10へ無償アップグレードし、最近、Windows 10 Creators Updateのタイミングでクリーンインストールを行いました。

追加したアプリケーションは以下の通りです。

  • カスペルスキーセキュリティ2017
  • Serviio 1.8

主にNASとして利用しているため、追加したのはセキュリティソフトとDLNA Media Serverのみという非常にシンプルな状態です。
Windows 10 Creators Update後は、5日くらい経過するとLIVA-Xがフリーズするようになりました。

復旧は、強制電源OFFしてから電源ONで正常に動作しますが、根本的には解決していないのでこの繰り返しです。
リモートデスクトップ接続でアクセスしていると、復帰後はサクサク動作します。
しかし1日後、2日後と時間が経過するにつれ重くなっていくのが体感でわかります。

LIVA-Xのハードウェアはこれ以上性能アップは望めません。
状態が悪くなることはあってもよくなることはありません。

今後、Windows 10でアップデートがあるたびに、何らかの問題が発生するのは懲り懲りなので、思い切ってLinuxに変更することにしました。
今のLIVA-Xの用途であればLinuxにしても問題はありません。
あるとすれば、Windows ライセンスコードが余ってしまうということくらいです。

LIVA-Xのスペック表
製品名 LIVA X
型番 LIVAX-C0-4G-64G-B
JAN 4580137829225
カラー ブラック
OS 無し
プロセッサー プロセッサー Intel® Celeron® Processor N2808
コア数/スレッド数 2/2
ベース動作周波数 1.58 GHz
バースト周波数 2.25 GHz
キャッシュ 1MB
グラフィックス Intel® HD Graphics
メモリ 規格 DDR3L
容量 4GB
動作周波数 1333MHz
定格動作電圧 1.35V
ストレージ 規格 eMMC
容量 64GB
拡張スロット 1×mSATA(SATA 3.0Gb/s)
映像出力 出力端子 1×HDMI 1.4a
1×D-sub
最大解像度 HDMI:1920×1080 @60Hz
D-sub:2056×1536 @60Hz
有線LAN Realtek RTL8111G Gigabit LAN(10BASE-T/100BASE-TX/1000BASE-T)
無線LAN
(NGEF Key E Type)
Wi-Fi 802.11b/g/n
Bluetooth 4.0
オーディオ Realtek ALC283 2ch
インターフェース 1×HDMI
1×D-sub
1×ギガビットLANポート
1×USB 3.0
2×USB 2.0
1×音声出力とマイクインの3.5mmコンボジャック
1×給電用DCポート
冷却方式 ファンレスヒートシンク
対応温湿度 動作時温度/動作時湿度 0~40℃/ 20%-80% R.H.
非動作時温度/非動作時湿度 -20~60℃/ not over 90%R.H
ACアダプタ 入力:AC100-240V
出力:DC12V/3A
消費電力 最大消費電力 約15W
待機時消費電力 約3W(S3待機時)
対応OS Windows 8.1 64Bit(UEFI)
Windows 7 64bit(mSATAをインストールドライブとした場合のみ利用可能)
保証 1年間
付属品 1×クイックインストールガイド
1×VESAマウント
1×ネジセット(VESAマウント用)
1×mSATA固定用ネジ
1×ACアダプタ
1×ACプラグ形状変換コネクタ-Aタイプ(日本などの東南アジア地域の100Vコンセントに対応した変換コネクタ)
1×ACプラグ形状変換コネクタ-Cタイプ(主に欧州地域の200Vコンセントに対応した変換コネクタ)
1×ACプラグ形状変換コネクタ-BFタイプ(一部の東南アジア地域などの200Vコンセントに対応した変換コネクタ)
1×ドライバDVD
製品寸法 135mm×83mm×40mm
製品重量 約445g
パッケージ寸法 270mm×138mm×65mm
パッケージ重量 約970g

Linuxディストリビューションの選択

多くのディストリビューションが存在していますが、今回はCentOS 7にしました。

選択の理由は以下の通りです。

  1. ホスティングサーバでCentOS7を使っている
  2. サーバー向けである

Fedoraで新しい機能を積極的に開発テストして、それを成果物として製品版も含めRedHat Enterprise Linux(有償)へ、RHELの有償のものを除きCentOSとなります。
これらのディストリビューションのパッケージ管理はすべてRedhat Package Manager(RPM)を利用します。
いわゆるRedhat系です。

パッケージは今では当たり前に使用できて当たり前に何事もなく無事終了するようになりましたが、当初はそうではありませんでした。
そのころでも強固なパッケージ管理で定評があったのがdebパッケージを使用するDebianでした。
現在、Debian系では主にデスクトップ用途のUbuntuが有名です。

今回は、GUI環境は必要ありませんのでUbuntuやFedoraは選択肢から省きました。
CentOSはどうしても他のディストリビューションに比較するとカーネルや各アプリケーションのバージョンが古くなってしまいますが、ソースコードからコンパイルすれば対応できるのでそれほどデメリットではありません。

Windows 10 から CentOS7への移行手順

手順概要

  1. 既存共有データの取り扱い
    • 既存の共有データ(Windows 記憶域ブール)を退避
      • 2台の外付けHDDケースをそれぞれ別々の記憶域プールになるように再構成(共有用,その他)
      • 共有用(消えると困るデータ)の外付けHDDケースを別のWindows 10 PCへ接続
    • 作業中に共有していたデータにアクセスしたい場合の対応
      • 共有用データはLIVA-Xのローカルアカウントのユーザ(SID)になっているため別のWindows 10 PCへ接続して利用するには、アクセス権を再付与しなければアクセスできない場合があります。
    • OSセットアップ後の共有スペースの確保
      • その他の記憶域プールを消去しsamba用の共有フォルダとして利用。
    • 既存共有スペースのデータを新共有スペースへ移動
      • Windows 10 PCの記憶域プールにあるデータをSambaの共有フォルダーへコピー
  2. インストール用USBフラッシュメモリの作成(Windows 10 PCで作業)
    • CentOS ISOイメージをダウンロード
    • USBフラッシュメモリにISOイメージを展開
  3. 起動ドライブの順番の変更
    • UEFI~から始まるUSBフラッシュメモリもしくはUSBハードディスクから起動するように変更
  4. CentOSのインストール
    • 最小構成をインストール
    • 有線LANを使用
    • LVMを構成
  5. リモート接続の設定
    • sshdの設定
    • Firewalldの設定
  6. sambaのインストール
    • 共有フォルダーの構成を検討中
  7. Serviioのインストール
    • java 8のインストール
    • FFmpegのインストール

以上、現在稼働しているWindows 10からCentS7へ移行する手順ですが、いくつかポイントがあります。
これがクリアできないと結果移行できないということになりかねません。

重要ポイント

  1. 既存共有データ(記憶域スプール)の取り扱い
    • 記憶域スプールはマイクロソフトWindows 8以降の機能でLinuxでは使えない
    • 古いバージョンでは新しいバージョンの記憶域を認識できない
  2. インストール用USBフラッシュメモリで起動しない(unetbootinで作成した場合)
    • ブートシーケンス中に以下のメッセージが表示され起動に失敗する
      • "dracut-initqueue[402]: Warning: dracut-initqueue timeout - starting timeout scripts"
      • "Warning: /dev/root does not exist"
    • rufus-2.15pで作成した場合は正常に起動
  3. UEFI対応
    • UEFIを有効にする
    • 起動オプションで「UEFI」から始まるデバイスを選択する
    • UEFI対応インストール用USBフラッシュメモリの作成
    • EFI System Partition (/boot/efi) を作成する
  4. eMMC対応
    • CentOS 7.3 1611(Kernel-3.10.0 514.21.1.el7)で問題なくeMMCを認識します。
    • 認識した場合「/dev/mmcblk0rpmb」が作成されます。
  5. セキュアブート対応
    • セキュアブートを有効にした場合はelrepoのkernel-mlでは起動できない

補足

Windows 8のころからずっとLIVA-Xは、OSの選択で「Windows 8 with CSM」にし、セキュアブートを「有効」にして、使用するキーを「カスタム」に設定していました。
CentOSにする際は、一旦、キーを工場出荷状態に戻して「標準」にしましたが、これによりeMMCが認識できたようにも思います。
ただ、インストール用USBフラッシュメモリの件と重なり記憶があいまいなので正確ではありません。
OSの選択で「Windows 7 またはその他」や「手動」にするとダメなだけかもしれません。

phoenix 2017/06/15 (木)- 19:04

ディストリビューション

CentOS 7.x

LIVA-X ハードウェア構成

LIVA-X ハードウェア構成

ECS LIVA-X

製品名 LIVA X
型番 LIVAX-C0-4G-64G-B
JAN 4580137829225
カラー ブラック
OS 無し
プロセッサー プロセッサー Intel® Celeron® Processor N2808
コア数/スレッド数 2/2
ベース動作周波数 1.58 GHz
バースト周波数 2.25 GHz
キャッシュ 1MB
グラフィックス Intel® HD Graphics
メモリ 規格 DDR3L
容量 4GB
動作周波数 1333MHz
定格動作電圧 1.35V
ストレージ 規格 eMMC
容量 64GB
拡張スロット 1×mSATA(SATA 3.0Gb/s)
映像出力 出力端子 1×HDMI 1.4a
1×D-sub
最大解像度 HDMI:1920×1080 @60Hz
D-sub:2056×1536 @60Hz
有線LAN Realtek RTL8111G Gigabit LAN(10BASE-T/100BASE-TX/1000BASE-T)
無線LAN
(NGEF Key E Type)
Wi-Fi 802.11b/g/n
Bluetooth 4.0
オーディオ Realtek ALC283 2ch
インターフェース 1×HDMI
1×D-sub
1×ギガビットLANポート
1×USB 3.0
2×USB 2.0
1×音声出力とマイクインの3.5mmコンボジャック
1×給電用DCポート
冷却方式 ファンレスヒートシンク
対応温湿度 動作時温度/動作時湿度 0~40℃/ 20%-80% R.H.
非動作時温度/非動作時湿度 -20~60℃/ not over 90%R.H
ACアダプタ 入力:AC100-240V
出力:DC12V/3A
消費電力 最大消費電力 約15W
待機時消費電力 約3W(S3待機時)
対応OS Windows 8.1 64Bit(UEFI)
Windows 7 64bit(mSATAをインストールドライブとした場合のみ利用可能)
保証 1年間
付属品 1×クイックインストールガイド
1×VESAマウント
1×ネジセット(VESAマウント用)
1×mSATA固定用ネジ
1×ACアダプタ
1×ACプラグ形状変換コネクタ-Aタイプ(日本などの東南アジア地域の100Vコンセントに対応した変換コネクタ)
1×ACプラグ形状変換コネクタ-Cタイプ(主に欧州地域の200Vコンセントに対応した変換コネクタ)
1×ACプラグ形状変換コネクタ-BFタイプ(一部の東南アジア地域などの200Vコンセントに対応した変換コネクタ)
1×ドライバDVD
製品寸法 135mm×83mm×40mm
製品重量 約445g
パッケージ寸法 270mm×138mm×65mm
パッケージ重量 約970g

USB

USB3.0 (右) RATOC Systems RS-EC32-U3RX
USB2.0 (中) Century CRSJ535EU3S6G
USB2.0 (左) EPSON PX-501A

HDMI

HDMI (背面) Panasonic VIERA TH-50PZ700 (HDMI 2) 1080p入力対応

RATOC Systems RS-EC32-U3RX

接続 USB (USB3.0動作) High Speed
動作モード RAID1:ミラーリング
DIP1 ブザー:ON
HDDまたは本体が異常のとき、本体のブザーを鳴らす機能
※無効にするとHDD破損/RAIDシステム異常時でもブザーは鳴りません。
※鳴っているブザーを停止することができます
DIP2 電源連動:ON
パソコンの電源がOFF、もしくはスリープや休止モードのとき、HDDの電源をOFFにする機能
※本機能が無効の場合もHDDのスピンダウンはおこなわれます
ドライブベイ1 WDC WD30 EZRX-00D8PB0 3TB (Green)
ドライブベイ2 WDC WD30 EZRX-00D8PB0 3TB (Green)

Century CRSJ535EU3S6G

接続 USB (USB2.0動作)
ドライブベイ1 Hitachi HDS721010CLA330 1TB
ドライブベイ2 Hitachi HDS721010CLA332 1TB
ドライブベイ3 Hitachi HDS721010CLA330 1TB
ドライブベイ4 Hitachi HDP725050GLA360 500GB
ドライブベイ5 Hitachi HDP725050GLA360 500GB

 

phoenix 2017/06/16 (金)- 19:20

カテゴリ

ハードウェア

ディストリビューション

CentOS 7.x

LIVA-X ソフトウェア構成

LIVA-X ソフトウェア構成

BIOS for LIVA X(UEFI)

BIOSバージョン 12/02/2014
メイン BIOS 情報 システム言語 日本語
    システム日付 【Mon 06/19/2017】
    システム時間 06:58:24
詳細 LAN 構成 オンボード LAN コントローラ 有効
  パワーマネージメント・セットアップ PMEで復帰 無効
    USBで復帰 有効
    RTCアラームで復帰 無効
    EUP機能 有効
  PCI Express 構成 mPCIEの速度 自動
  ACPI の設定 ACPI のスリープ状態 サスペンド機能を無効に
  CPU 構成 ソケット0のプロセッサ情報 Intel(R) Celeron(R) CPU N2808 @ 1.58GHz
CPU Signature (30678)
Microcode Patch (815)
Min CPU Speed (500 MHz)
Processor Cores (2)
Intel HT Technology (Not Supported)
Intel VT-X Technology (Supported)
L1 Data Cache (24 KB x 2)
L1 Code Cache (32 KB x 2)
L2 Cache (1024 KB x 1)
L3 Cache (Not Present)
    CPUIDの最大値 無効
    XDビット 有効
    インテル・バーチャライゼーション・テクノロジー 有効
    パワー・テクノロジー 最大省電力
  SATA 構成 SATA モード AHCI モード
    mSATA 存在しない
  USB 構成 すべてのUSBデバイス 有効
    レガシーUSBサポート 有効
    XHCIモード 有効
Chipset SoC 構成 DVMT の事前割り当て 256M
    DVMT Gfx 総メモリ量 最大
    AC停電解消後の回復 パワーオフ
    アゼリアHDオーディオ 有効
    アゼリア内部 HDMI コーディック 有効
  TXE 情報 Sec RCバージョン 00.05.00.00
    TXE FW バージョン 01.01.00.1089
    TXE モード Enabled
Tweak Tweak CPU 周波数 83.3 MHz
    CPU倍率 19
    Intel(R) Celeron(R) CPU N2808 @ 1.58GHz  
    プロセッサー速度 1.58 GHz
    メモリ周波数 1333 MHz
    メモリ総容量 4096 MB(LPDDR3)
ブート ブート構成 オペレーティングシステムの選択 Windows 8.x with CSM
    Network OpROMを起動 Disabled
    高速ブート 有効
    VGA サポート EFI ドライバー
    USB サポート 全て初期化
    PS2 デバイスサポート 有効
    ネットワークスタックドライバのサポート 無効
    ブートアップ時のNumLock 状態 オフ
    ロゴ表示なしブート Enabled
    ブートモードの選択 UEFI
    ブート順序の設定 ブートオプション #1 【USB フラッシュ】
ブートオプション #2 【光学式デバイス】
ブートオプション #3 【USBフロッピーディスク】
ブートオプション #4 【USB光学式デバイス】
ブートオプション #5 【USBハードディスク】
ブートオプション #6 【ハードディスク: CentOS】
ブートオプション #7 【ネットワーク】
    UEFI ハードディスクドライブ ブートオプション#1 【CentOS Linux】
ブートオプション#2 【UEFI OS】
セキュリティ セキュアブート・メニュー システム・モード ユーザー
    セキュアブート 有効
    セキュアブート・モード 標準

OS設定

インストール

オペレーティングシステム CentOS 7.3  
カーネル 3.10.0-514.21.1.el7.x86_64  
日付と時刻 アジア/東京 タイムゾーン  
キーボード 日本語  
言語サポート 日本語  
インストールメディア ローカルメディア  
ソフトウェアの選択 最小限のインストール  
インストール先 /dev/mmcblk0  
KDUMP 有効  
ネットワークとホスト名 ネットワーク:有線を有効、無線を無効
ホスト名:FileServer
 

パーティション詳細

内蔵ストレージ

モデル MMC SEM64G (sd/mmc)
ディスク /dev/mmcblk0: 62.5GB
セクタサイズ (論理/物理) 512B/512B
パーティションテーブル gpt
番号 マウントポイント ファイルシステム サイズ 名前 フラグ
1 /boot/efi fat16 268MB EFI System Partition boot
2 /boot xfs 537MB    
3 swap linux-swap(v1) 4295MB    
4 / xfs 57.4GB    

外付けUSB HDD(RATOC Systems RS-EC32-U3RX) ハードウェアRAID1

モデル WDC WD30 EZRX-00D8PB0 (scsi)
ディスク /dev/sda:3001GB
セクタサイズ (論理/物理) 512B/512B
パーティションテーブル gpt
番号 マウントポイント ファイルシステム サイズ 名前 フラグ
1 /home xfs 3001GB RAID1  

外付けUSB HDD(Century CRSJ535EU3S6G) btrfs RAID5

 # mkfs.btrfs -d raid5 -m raid5 -L softRAID5 /dev/sd[bcd] 
Label softRAID5
uuid 5edcfa41-3b8f-407c-a465-7681eae68d51
Total devices 3 FS bytes devid    1 size 931.51GiB used 157.01GiB path /dev/sdb
devid    2 size 931.51GiB used 157.01GiB path /dev/sdc
devid    3 size 931.51GiB used 157.01GiB path /dev/sdd
マウントポイント /home/samba
devid 1
モデル Hitachi HDS721010CLA330 (scsi)
ディスク /dev/sdb: 1000GB
セクタサイズ (論理/物理) 512B/512B
パーティションテーブル loop
番号 マウントポイント ファイルシステム サイズ 名前 フラグ
1   btrfs 1000GB    
devid 2
モデル Hitachi HDS721010CLA332 (scsi)
ディスク /dev/sdc: 1000GB
セクタサイズ (論理/物理) 512B/512B
パーティションテーブル loop
番号 マウントポイント ファイルシステム サイズ 名前 フラグ
1   btrfs 1000GB    
devid 3
モデル Hitachi HDS721010CLA330 (scsi)
ディスク /dev/sdd: 1000GB
セクタサイズ (論理/物理) 512B/512B
パーティションテーブル loop
番号 マウントポイント ファイルシステム サイズ 名前 フラグ
1   btrfs 1000GB    

外付けUSB HDD(Century CRSJ535EU3S6G) btrfs RAID1

 # mkfs.btrfs -d raid1 -m raid1 -L softRAID1 /dev/sd[ef] 
Label softRAID1
uuid 8d8b20d6-fff1-4429-9f96-d279884049a2
Total devices 2 FS bytes devid    1 size 465.76GiB used 2.01GiB path /dev/sde
devid    2 size 465.76GiB used 2.01GiB path /dev/sdf
マウントポイント /backup
devid 1
モデル Hitachi HDP725050GLA360 (scsi)
ディスク /dev/sde: 500GB
セクタサイズ (論理/物理) 512B/512B
パーティションテーブル loop
番号 マウントポイント ファイルシステム サイズ 名前 フラグ
1   btrfs 500GB    
devid 2
モデル Hitachi HDP725050GLA360 (scsi)
ディスク /dev/sdf: 500GB
セクタサイズ (論理/物理) 512B/512B
パーティションテーブル loop
番号 マウントポイント ファイルシステム サイズ 名前 フラグ
1   btrfs 500GB    

/etc/fstab

デバイスファイル名 マウントポイント ファイルシステム オプション dumpフラグ fsck
UUID=c48e96c8-3168-41fa-a272-9b34709ba051 / xfs defaults 0 0
UUID=23953154-cadf-4d1f-8f2e-e19eb3f9676c /boot xfs defaults 0 0
UUID=7377-658C /boot/efi vfat umask=0077,
shortname=winnt
0 0
UUID=04e47f20-6e05-411d-9532-c02e4cd3e1f9 swap swap defaults 0 0
UUID=c25a9864-ae95-4a49-b696-dea32bb1de9b /home xfs defaults 0 0
UUID=8d8b20d6-fff1-4429-9f96-d279884049a2 /backup btrfs noatime,
autodefrag,
compress-force=lzo,
space_cache
0 0
UUID=5edcfa41-3b8f-407c-a465-7681eae68d51 /home/samba btrfs noatime,
autodefrag,
compress-force=lzo,
space_cache
0 0

ネットワーク設定

/dev/lo (/etc/sysconfig/network-scripts/ifcfg-lo)

DEVICE lo
IPADDR 127.0.0.1
NETMASK 255.0.0.0
NETWORK 127.0.0.0
BROADCAST 127.255.255.255
ONBOOT yes
NAME loopback

/dev/enp3s0 (/etc/sysconfig/network-scripts/ifcfg-enp3s0)

NAME enp3s0
TYPE Ethernet
BOOTPROTO dhcp
DEFROUTE yes
PEERDNS yes
PEERROUTES yes
IPV4_FAILURE_FATAL no
IPV6INIT yes
IPV6_AUTOCONF yes
IPV6_DEFROUTE yes
IPV6_PEERDNS yes
IPV6_DEFROUTE yes
IPV6_PEERROUTES yes
IPV6_FAILURE_FATAL no
IPV6_ADDR_GEN_MODE stable-privacy
ONBOOT yes
UUID 1057de9c-5e60-4c60-b75b-9e676cdb28c4
DEVICE enp3s0

※DHCPサーバにて、IPアドレスは、MACアドレスによる静的IPアドレス付与とアクセス制限を行っています。

SELinux

/etc/selinux/config

SeLinux enforcing

ターゲットポリシー適用確認

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

ユーザ設定(/etc/passwd)

ユーザ名 UID GID コメント ホームディレクトリ ログインシェル
user1 1000 1000 管理ユーザ /home/user1 /bin/bash
user2 1001 1001 一般ユーザ /home/user2 /bin/bash
serviio 995 992 Serviio管理ユーザ /opt/serviio /sbin/nologin

グループ設定(/etc/group)

グループ名 パスワード GID サブグループのユーザ名
wheel X 10 user1
user1 X 1000 user1
user2 X 1001 user2
serviio X 992 serviio
homeusers X 1002 user1,user2,serviio

rootアクセス制御

auth            sufficient      pam_rootok.so
auth            required        pam_wheel.so use_uid
auth            substack        system-auth
auth            include         postlogin
account         sufficient      pam_succeed_if.so uid = 0 use_uid quiet
account         include         system-auth
password        include         system-auth
session         include         system-auth
session         include         postlogin
session         optional        pam_xauth.so

追加パッケージ

 # yum groupinstall "開発ツール" 
 # yum install policycoreutils-python 
 # yum install samba 
 # yum install ffmpeg 

追加リポジトリ

リポジトリーID リポジトリー名
remi-safe Safe Remi's RPM repository for Enterprise Linux 7 - x86_64
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64
rpmfusion-free-updates/x86_64 RPM Fusion for EL 7 - Free - Updates

※rpmfusion-free-updatesはffmpegのrpmバイナリーパッケージのインストールに必要。ソースからコンパイルする場合は不要だが有効にするエンコーダとデコーダによってはあるとコンパイルが楽になるケースあり。

remiレポジトリー

 # rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm 
# This repository is safe to use with RHEL/CentOS base repository
# it only provides additional packages for the PHP stack
# all dependencies are in base repository or in EPEL

[remi-safe]
name=Safe Remi's RPM repository for Enterprise Linux 7 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/safe/$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/7/safe/httpsmirror
mirrorlist=http://rpms.remirepo.net/enterprise/7/safe/mirror
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-safe-debuginfo]
name=Remi's RPM repository for Enterprise Linux 7 - $basearch - debuginfo
baseurl=http://rpms.remirepo.net/enterprise/7/debug-remi/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi 
# Repository: http://rpms.remirepo.net/
# Blog:       http://blog.remirepo.net/
# Forum:      http://forum.remirepo.net/

[remi]
name=Remi's RPM repository for Enterprise Linux 7 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/remi/$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/7/remi/httpsmirror
mirrorlist=http://rpms.remirepo.net/enterprise/7/remi/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-php55]
name=Remi's PHP 5.5 RPM repository for Enterprise Linux 7 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/php55/$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/7/php55/httpsmirror
mirrorlist=http://rpms.remirepo.net/enterprise/7/php55/mirror
# NOTICE: common dependencies are in "remi-safe"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-php56]
name=Remi's PHP 5.6 RPM repository for Enterprise Linux 7 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/php56/$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/7/php56/httpsmirror
mirrorlist=http://rpms.remirepo.net/enterprise/7/php56/mirror
# NOTICE: common dependencies are in "remi-safe"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-test]
name=Remi's test RPM repository for Enterprise Linux 7 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/test/$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/7/test/mirror
mirrorlist=http://rpms.remirepo.net/enterprise/7/test/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-debuginfo]
name=Remi's RPM repository for Enterprise Linux 7 - $basearch - debuginfo
baseurl=http://rpms.remirepo.net/enterprise/7/debug-remi/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-php55-debuginfo]
name=Remi's PHP 5.5 RPM repository for Enterprise Linux 7 - $basearch - debuginfo
baseurl=http://rpms.remirepo.net/enterprise/7/debug-php55/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-php56-debuginfo]
name=Remi's PHP 5.6 RPM repository for Enterprise Linux 7 - $basearch - debuginfo
baseurl=http://rpms.remirepo.net/enterprise/7/debug-php56/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-test-debuginfo]
name=Remi's test RPM repository for Enterprise Linux 7 - $basearch - debuginfo
baseurl=http://rpms.remirepo.net/enterprise/7/debug-test/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi 

epelリポジトリー

# yum install epel-release 
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch/debug
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1 

rpmfusion-free-updatesリポジトリー

rpm -Uvh https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
[rpmfusion-free-updates]
name=RPM Fusion for EL 7 - Free - Updates
#baseurl=http://download1.rpmfusion.org/free/el/updates/7/$basearch/
mirrorlist=http://mirrors.rpmfusion.org/mirrorlist?repo=free-el-updates-released-7&arch=$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-free-el-7

[rpmfusion-free-updates-debuginfo]
name=RPM Fusion for EL 7 - Free - Updates Debug
#baseurl=http://download1.rpmfusion.org/free/el/updates/7/$basearch/debug/
mirrorlist=http://mirrors.rpmfusion.org/mirrorlist?repo=free-el-updates-released-debug-7&arch=$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-free-el-7

[rpmfusion-free-updates-source]
name=RPM Fusion for EL 7 - Free - Updates Source
#baseurl=http://download1.rpmfusion.org/free/el/updates/7/SRPMS/
mirrorlist=http://mirrors.rpmfusion.org/mirrorlist?repo=free-el-updates-released-source-7&arch=$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-free-el-7

Firewalld

 public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp3s0
  sources:
  services: dhcpv6-client samba serviio ssh-alt
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

ssh-altサービス

/etc/firewalld/services/ssh-alt.xml

<!--?xml version="1.0" encoding="utf-8"?-->
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port port="1022" protocol="tcp"></port>
</service>
# semanage port -a -t ssh_port_t -p tcp 1022 

sambaサービス

/lib/firewalld/services/samba.xml

<!--?xml version="1.0" encoding="utf-8"?-->
<service>
  <short>Samba</short>
  <description>This option allows you to access and participate in Windows file and printer sharing networks. You need the samba package installed for this option to be useful.</description>
  <port port="137" protocol="udp"></port>
  <port port="138" protocol="udp"></port>
  <port port="139" protocol="tcp"></port>
  <port port="445" protocol="tcp"></port>
  <module name="nf_conntrack_netbios_ns"></module>
</service>

serviioサービス

<!--?xml version="1.0" encoding="utf-8"?-->
<service version="1.0">
        <short>serviio</short>
        <description>Serviio Server</description>
        <port port="8895" protocol="udp"></port>
        <port port="8895" protocol="tcp"></port>
        <port port="1900" protocol="udp"></port>
        <port port="1900" protocol="tcp"></port>
        <port port="23423" protocol="udp"></port>
        <port port="23423" protocol="tcp"></port>
        <port port="23424" protocol="udp"></port>
        <port port="23424" protocol="tcp"></port>
</service>

SSHD

/etc/ssh/sshd_config

PORT 1022
Protocol 2
PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
AllowUsers user1

公開鍵ディレクトリパーミッション($HOME/.ssh)

 drwx------. user1 user1 unconfined_u:object_r:ssh_home_t:s0 .ssh 

公開鍵ファイルパーミッション($HOME/.ssh/authorized_keys)

 -rw-------. user1 user1 unconfined_u:object_r:ssh_home_t:s0 authorized_keys 
phoenix 2017/06/16 (金)- 20:59

ディストリビューション

CentOS 7.x

LIVA-X samba 4

LIVA-X samba 4

samba

 # yum -y install samba 

sambaの設定

# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.

[global]
        workgroup = WORKGROUP
        security = user

        passdb backend = tdbsam

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw

[homes]
        comment = Home Directories
        valid users = %S, %D%w%S
        browseable = No
        read only = No
        inherit acls = Yes
        inherit permissions = Yes
        create mask=0700
        directory mask=0700

[printers]
        comment = All Printers
        path = /var/tmp
        printable = Yes
        create mask = 0600
        browseable = No

[print$]
        comment = Printer Drivers
        path = /var/lib/samba/drivers
        write list = root
        create mask = 0664
        directory mask = 0775

[media]
        comment = DLNA Meida Contents
        path = /home/samba/media
        read only = yes
        create mask = 0777
        directory mask = 0777
        write list = user1

[share]
        comment = Public Folder
        path = /home/samba/share
        read only = no
        inherit permissions = yes
        force create mode = 0660
        create mask = 0770
        directory mask = 0770
        valid users = @homeusers
        write list = user1, user2
        force group = homeusers
127.0.0.1 localhost 

SELinuxのコンテキストラベル

共有フォルダー

drwxr-xr-x. user1 homeusers unconfined_u:object_r:samba_share_t:s0 media
drwxr-x---. user1 homeusers unconfined_u:object_r:samba_share_t:s0 share

ホームディレクトリ

# setsebool -P samba_enable_home_dirs 1
# getsebool samba_enable_home_dirs
samba_enable_home_dirs --> on

sambaプロセス

system_u:system_r:nmbd_t:s0     /usr/sbin/nmbd
system_u:system_r:smbd_t:s0     /usr/sbin/smbd

sambaサービスの設定

sambaサービスの自動起動

# systemctl enable smb.service

# systemctl enable nmb.service 

sambaサービスの起動

# systemctl start nmb

# systemctl start smb 
phoenix 2017/06/28 (水)- 20:00

ディストリビューション

CentOS 7.x

LIVA-X serviio

LIVA-X serviio

serviio

バージョン 1.8
Serviioの要件 512MB以上のメモリ
150MB以上のディスクスペース(トランスコードには1GBの空きスペース)
Java8のインストール
FFmpeg package (incl. libRTMP, libASS, libx264 and libmp3lame)
FFMpeg 3.0.2
libRTMP 2.4+
Lame MP3 v 3.99.5
RAWイメージをサポートする場合は、dcraw パッケージのインストールが必要
インストールディレクトリ /opt/serviio

Java 8

Oracle Java 8 JRE Downloads Page

# yum localinstall jre-8u131-linux-x64.rpm 

dcraw

# yum install dcraw 

FFMPEG

# yum install ffmpeg 
ffmpeg version 2.8.12 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-11)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' --extra-ldflags='-Wl,-z,relro ' --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-version3 --enable-bzlib --disable-crystalhd --enable-gnutls --enable-ladspa --enable-libass --enable-libcdio --enable-libdc1394 --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libx264 --enable-libx265 --enable-libxvid --enable-x11grab --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'
configuration:
    --prefix=/usr
    --bindir=/usr/bin
    --datadir=/usr/share/ffmpeg
    --incdir=/usr/include/ffmpeg
    --libdir=/usr/lib64
    --mandir=/usr/share/man
    --arch=x86_64
    --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong
    --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic'
    --extra-ldflags='-Wl,-z,relro '
    --enable-libopencore-amrnb
    --enable-libopencore-amrwb
    --enable-libvo-amrwbenc
    --enable-version3
    --enable-bzlib
    --disable-crystalhd
    --enable-gnutls
    --enable-ladspa
    --enable-libass
    --enable-libcdio
    --enable-libdc1394
    --disable-indev=jack
    --enable-libfreetype
    --enable-libgsm
    --enable-libmp3lame
    --enable-openal
    --enable-libopenjpeg
    --enable-libopus
    --enable-libpulse
    --enable-libschroedinger
    --enable-libsoxr
    --enable-libspeex
    --enable-libtheora
    --enable-libvorbis
    --enable-libv4l2
    --enable-libx264
    --enable-libx265
    --enable-libxvid
    --enable-x11grab
    --enable-avfilter
    --enable-avresample
    --enable-postproc
    --enable-pthreads
    --disable-static
    --enable-shared
    --enable-gpl
    --disable-debug
    --disable-stripping
    --shlibdir=/usr/lib64
    --enable-runtime-cpudetect
File formats:
 D. = Demuxing supported
 .E = Muxing supported
 --
  E 3g2             3GP2 (3GPP2 file format)
  E 3gp             3GP (3GPP file format)
 D  4xm             4X Technologies
  E a64             a64 - video for Commodore 64
 D  aa              Audible AA format files
 D  aac             raw ADTS AAC (Advanced Audio Coding)
 DE ac3             raw AC-3
 D  act             ACT Voice file format
 D  adf             Artworx Data Format
 D  adp             ADP
  E adts            ADTS AAC (Advanced Audio Coding)
 DE adx             CRI ADX
 D  aea             MD STUDIO audio
 D  afc             AFC
 DE aiff            Audio IFF
 DE alaw            PCM A-law
 D  alias_pix       Alias/Wavefront PIX image
 DE alsa            ALSA audio output
 DE amr             3GPP AMR
 D  anm             Deluxe Paint Animation
 D  apc             CRYO APC
 D  ape             Monkey's Audio
 DE apng            Animated Portable Network Graphics
 D  aqtitle         AQTitle subtitles
 DE asf             ASF (Advanced / Active Streaming Format)
 D  asf_o           ASF (Advanced / Active Streaming Format)
  E asf_stream      ASF (Advanced / Active Streaming Format)
 DE ass             SSA (SubStation Alpha) subtitle
 DE ast             AST (Audio Stream)
 DE au              Sun AU
 DE avi             AVI (Audio Video Interleaved)
  E avm2            SWF (ShockWave Flash) (AVM2)
 D  avr             AVR (Audio Visual Research)
 D  avs             AVS
 D  bethsoftvid     Bethesda Softworks VID
 D  bfi             Brute Force & Ignorance
 D  bfstm           BFSTM (Binary Cafe Stream)
 D  bin             Binary text
 D  bink            Bink
 DE bit             G.729 BIT file format
 D  bmp_pipe        piped bmp sequence
 D  bmv             Discworld II BMV
 D  boa             Black Ops Audio
 D  brender_pix     BRender PIX image
 D  brstm           BRSTM (Binary Revolution Stream)
 D  c93             Interplay C93
 DE caf             Apple CAF (Core Audio Format)
 DE cavsvideo       raw Chinese AVS (Audio Video Standard) video
 D  cdg             CD Graphics
 D  cdxl            Commodore CDXL video
 D  cine            Phantom Cine
 D  concat          Virtual concatenation script
  E crc             CRC testing
  E dash            DASH Muxer
 DE data            raw data
 DE daud            D-Cinema audio
 D  dds_pipe        piped dds sequence
 D  dfa             Chronomaster DFA
 DE dirac           raw Dirac
 DE dnxhd           raw DNxHD (SMPTE VC-3)
 D  dpx_pipe        piped dpx sequence
 D  dsf             DSD Stream File (DSF)
 D  dsicin          Delphine Software International CIN
 D  dss             Digital Speech Standard (DSS)
 DE dts             raw DTS
 D  dtshd           raw DTS-HD
 DE dv              DV (Digital Video)
 D  dv1394          DV1394 A/V grab
 D  dvbsub          raw dvbsub
  E dvd             MPEG-2 PS (DVD VOB)
 D  dxa             DXA
 D  ea              Electronic Arts Multimedia
 D  ea_cdata        Electronic Arts cdata
 DE eac3            raw E-AC-3
 D  epaf            Ensoniq Paris Audio File
 D  exr_pipe        piped exr sequence
 DE f32be           PCM 32-bit floating-point big-endian
 DE f32le           PCM 32-bit floating-point little-endian
  E f4v             F4V Adobe Flash Video
 DE f64be           PCM 64-bit floating-point big-endian
 DE f64le           PCM 64-bit floating-point little-endian
 DE fbdev           Linux framebuffer
 DE ffm             FFM (FFserver live feed)
 DE ffmetadata      FFmpeg metadata in text
 D  film_cpk        Sega FILM / CPK
 DE filmstrip       Adobe Filmstrip
 DE flac            raw FLAC
 D  flic            FLI/FLC/FLX animation
 DE flv             FLV (Flash Video)
  E framecrc        framecrc testing
  E framemd5        Per-frame MD5 testing
 D  frm             Megalux Frame
 DE g722            raw G.722
 DE g723_1          raw G.723.1
 D  g729            G.729 raw format demuxer
 DE gif             GIF Animation
 D  gsm             raw GSM
 DE gxf             GXF (General eXchange Format)
 DE h261            raw H.261
 DE h263            raw H.263
 DE h264            raw H.264 video
  E hds             HDS Muxer
 DE hevc            raw HEVC video
  E hls             Apple HTTP Live Streaming
 D  hls,applehttp   Apple HTTP Live Streaming
 D  hnm             Cryo HNM v4
 DE ico             Microsoft Windows ICO
 D  idcin           id Cinematic
 D  idf             iCE Draw File
 D  iff             IFF (Interchange File Format)
 DE ilbc            iLBC storage
 DE image2          image2 sequence
 DE image2pipe      piped image2 sequence
 D  ingenient       raw Ingenient MJPEG
 D  ipmovie         Interplay MVE
  E ipod            iPod H.264 MP4 (MPEG-4 Part 14)
 DE ircam           Berkeley/IRCAM/CARL Sound Format
  E ismv            ISMV/ISMA (Smooth Streaming)
 D  iss             Funcom ISS
 D  iv8             IndigoVision 8000 video
 DE ivf             On2 IVF
 D  j2k_pipe        piped j2k sequence
 DE jacosub         JACOsub subtitle format
 D  jpeg_pipe       piped jpeg sequence
 D  jpegls_pipe     piped jpegls sequence
 D  jv              Bitmap Brothers JV
 DE latm            LOAS/LATM
 D  lavfi           Libavfilter virtual input device
 D  libcdio
 D  libdc1394       dc1394 v.2 A/V grab
 D  live_flv        live RTMP FLV (Flash Video)
 D  lmlm4           raw lmlm4
 D  loas            LOAS AudioSyncStream
 DE lrc             LRC lyrics
 D  lvf             LVF
 D  lxf             VR native stream (LXF)
 DE m4v             raw MPEG-4 video
  E matroska        Matroska
 D  matroska,webm   Matroska / WebM
  E md5             MD5 testing
 D  mgsts           Metal Gear Solid: The Twin Snakes
 DE microdvd        MicroDVD subtitle format
 DE mjpeg           raw MJPEG video
  E mkvtimestamp_v2 extract pts as timecode v2 format, as defined by mkvtoolnix
 DE mlp             raw MLP
 D  mlv             Magic Lantern Video (MLV)
 D  mm              American Laser Games MM
 DE mmf             Yamaha SMAF
  E mov             QuickTime / MOV
 D  mov,mp4,m4a,3gp,3g2,mj2 QuickTime / MOV
  E mp2             MP2 (MPEG audio layer 2)
 DE mp3             MP3 (MPEG audio layer 3)
  E mp4             MP4 (MPEG-4 Part 14)
 D  mpc             Musepack
 D  mpc8            Musepack SV8
 DE mpeg            MPEG-1 Systems / MPEG program stream
  E mpeg1video      raw MPEG-1 video
  E mpeg2video      raw MPEG-2 video
 DE mpegts          MPEG-TS (MPEG-2 Transport Stream)
 D  mpegtsraw       raw MPEG-TS (MPEG-2 Transport Stream)
 D  mpegvideo       raw MPEG video
 DE mpjpeg          MIME multipart JPEG
 D  mpl2            MPL2 subtitles
 D  mpsub           MPlayer subtitles
 D  msnwctcp        MSN TCP Webcam stream
 D  mtv             MTV
 DE mulaw           PCM mu-law
 D  mv              Silicon Graphics Movie
 D  mvi             Motion Pixels MVI
 DE mxf             MXF (Material eXchange Format)
  E mxf_d10         MXF (Material eXchange Format) D-10 Mapping
  E mxf_opatom      MXF (Material eXchange Format) Operational Pattern Atom
 D  mxg             MxPEG clip
 D  nc              NC camera feed
 D  nistsphere      NIST SPeech HEader REsources
 D  nsv             Nullsoft Streaming Video
  E null            raw null video
 DE nut             NUT
 D  nuv             NuppelVideo
  E oga             Ogg Audio
 DE ogg             Ogg
 DE oma             Sony OpenMG audio
 D  openal          OpenAL audio capture device
  E opus            Ogg Opus
 DE oss             OSS (Open Sound System) playback
 D  paf             Amazing Studio Packed Animation File
 D  pictor_pipe     piped pictor sequence
 D  pjs             PJS (Phoenix Japanimation Society) subtitles
 D  pmp             Playstation Portable PMP
 D  png_pipe        piped png sequence
  E psp             PSP MP4 (MPEG-4 Part 14)
 D  psxstr          Sony Playstation STR
 DE pulse           Pulse audio output
 D  pva             TechnoTrend PVA
 D  pvf             PVF (Portable Voice Format)
 D  qcp             QCP
 D  qdraw_pipe      piped qdraw sequence
 D  r3d             REDCODE R3D
 DE rawvideo        raw video
 D  realtext        RealText subtitle format
 D  redspark        RedSpark
 D  rl2             RL2
 DE rm              RealMedia
 DE roq             raw id RoQ
 D  rpl             RPL / ARMovie
 D  rsd             GameCube RSD
 DE rso             Lego Mindstorms RSO
 DE rtp             RTP output
  E rtp_mpegts      RTP/mpegts output format
 DE rtsp            RTSP output
 DE s16be           PCM signed 16-bit big-endian
 DE s16le           PCM signed 16-bit little-endian
 DE s24be           PCM signed 24-bit big-endian
 DE s24le           PCM signed 24-bit little-endian
 DE s32be           PCM signed 32-bit big-endian
 DE s32le           PCM signed 32-bit little-endian
 DE s8              PCM signed 8-bit
 D  sami            SAMI subtitle format
 DE sap             SAP output
 D  sbg             SBaGen binaural beats script
  E sdl             SDL output device
 D  sdp             SDP
 D  sdr2            SDR2
  E segment         segment
 D  sgi_pipe        piped sgi sequence
 D  shn             raw Shorten
 D  siff            Beam Software SIFF
  E singlejpeg      JPEG single image
 D  sln             Asterisk raw pcm
 DE smjpeg          Loki SDL MJPEG
 D  smk             Smacker
  E smoothstreaming Smooth Streaming Muxer
 D  smush           LucasArts Smush
 D  sol             Sierra SOL
 DE sox             SoX native
 DE spdif           IEC 61937 (used on S/PDIF - IEC958)
  E spx             Ogg Speex
 DE srt             SubRip subtitle
 D  stl             Spruce subtitle format
  E stream_segment,ssegment streaming segment muxer
 D  subviewer       SubViewer subtitle format
 D  subviewer1      SubViewer v1 subtitle format
 D  sunrast_pipe    piped sunrast sequence
 D  sup             raw HDMV Presentation Graphic Stream subtitles
  E svcd            MPEG-2 PS (SVCD)
 DE swf             SWF (ShockWave Flash)
 D  tak             raw TAK
 D  tedcaptions     TED Talks captions
  E tee             Multiple muxer tee
 D  thp             THP
 D  tiertexseq      Tiertex Limited SEQ
 D  tiff_pipe       piped tiff sequence
 D  tmv             8088flex TMV
 DE truehd          raw TrueHD
 D  tta             TTA (True Audio)
 D  tty             Tele-typewriter
 D  txd             Renderware TeXture Dictionary
 DE u16be           PCM unsigned 16-bit big-endian
 DE u16le           PCM unsigned 16-bit little-endian
 DE u24be           PCM unsigned 24-bit big-endian
 DE u24le           PCM unsigned 24-bit little-endian
 DE u32be           PCM unsigned 32-bit big-endian
 DE u32le           PCM unsigned 32-bit little-endian
 DE u8              PCM unsigned 8-bit
  E uncodedframecrc uncoded framecrc testing
  E v4l2            Video4Linux2 output device
 DE vc1             raw VC-1 video
 DE vc1test         VC-1 test bitstream
  E vcd             MPEG-1 Systems / MPEG program stream (VCD)
 D  video4linux2,v4l2 Video4Linux2 device grab
 D  vivo            Vivo
 D  vmd             Sierra VMD
  E vob             MPEG-2 PS (VOB)
 D  vobsub          VobSub subtitle format
 DE voc             Creative Voice
 D  vplayer         VPlayer subtitles
 D  vqf             Nippon Telegraph and Telephone Corporation (NTT) TwinVQ
 DE w64             Sony Wave64
 DE wav             WAV / WAVE (Waveform Audio)
 D  wc3movie        Wing Commander III movie
  E webm            WebM
  E webm_chunk      WebM Chunk Muxer
 DE webm_dash_manifest WebM DASH Manifest
  E webp            WebP
 D  webp_pipe       piped webp sequence
 DE webvtt          WebVTT subtitle
 D  wsaud           Westwood Studios audio
 D  wsvqa           Westwood Studios VQA
 DE wtv             Windows Television (WTV)
 DE wv              raw WavPack
 D  x11grab         X11 screen capture, using XCB
 D  xa              Maxis XA
 D  xbin            eXtended BINary text (XBIN)
 D  xmv             Microsoft XMV
  E xv              XV (XVideo) output device
 D  xwma            Microsoft xWMA
 D  yop             Psygnosis YOP
 DE yuv4mpegpipe    YUV4MPEG pipe
Devices:
 D. = Demuxing supported
 .E = Muxing supported
 --
 DE alsa            ALSA audio output
 D  dv1394          DV1394 A/V grab
 DE fbdev           Linux framebuffer
 D  lavfi           Libavfilter virtual input device
 D  libcdio
 D  libdc1394       dc1394 v.2 A/V grab
 D  openal          OpenAL audio capture device
 DE oss             OSS (Open Sound System) playback
 DE pulse           Pulse audio output
  E sdl             SDL output device
  E v4l2            Video4Linux2 output device
 D  video4linux2,v4l2 Video4Linux2 device grab
 D  x11grab         X11 screen capture, using XCB
  E xv              XV (XVideo) output device
Codecs:
 D..... = Decoding supported
 .E.... = Encoding supported
 ..V... = Video codec
 ..A... = Audio codec
 ..S... = Subtitle codec
 ...I.. = Intra frame-only codec
 ....L. = Lossy compression
 .....S = Lossless compression
 -------
 D.VI.. 012v                 Uncompressed 4:2:2 10-bit
 D.V.L. 4xm                  4X Movie
 D.VI.S 8bps                 QuickTime 8BPS video
 .EVIL. a64_multi            Multicolor charset for Commodore 64 (encoders: a64multi )
 .EVIL. a64_multi5           Multicolor charset for Commodore 64, extended with 5th color (colram) (encoders: a64multi5 )
 D.V..S aasc                 Autodesk RLE
 D.VIL. aic                  Apple Intermediate Codec
 DEVI.S alias_pix            Alias/Wavefront PIX image
 DEVIL. amv                  AMV Video
 D.V.L. anm                  Deluxe Paint Animation
 D.V.L. ansi                 ASCII/ANSI art
 DEV..S apng                 APNG (Animated Portable Network Graphics) image
 DEVIL. asv1                 ASUS V1
 DEVIL. asv2                 ASUS V2
 D.VIL. aura                 Auravision AURA
 D.VIL. aura2                Auravision Aura 2
 D.V... avrn                 Avid AVI Codec
 DEVI.. avrp                 Avid 1:1 10-bit RGB Packer
 D.V.L. avs                  AVS (Audio Video Standard) video
 DEVI.. avui                 Avid Meridien Uncompressed
 DEVI.. ayuv                 Uncompressed packed MS 4:4:4:4
 D.V.L. bethsoftvid          Bethesda VID video
 D.V.L. bfi                  Brute Force & Ignorance
 D.V.L. binkvideo            Bink video
 D.VI.. bintext              Binary text
 DEVI.S bmp                  BMP (Windows and OS/2 bitmap)
 D.V..S bmv_video            Discworld II BMV video
 D.VI.S brender_pix          BRender PIX image
 D.V.L. c93                  Interplay C93
 D.V.L. cavs                 Chinese AVS (Audio Video Standard) (AVS1-P2, JiZhun profile)
 D.V.L. cdgraphics           CD Graphics video
 D.VIL. cdxl                 Commodore CDXL video
 DEV.L. cinepak              Cinepak
 DEVIL. cljr                 Cirrus Logic AccuPak
 D.VI.S cllc                 Canopus Lossless Codec
 D.V.L. cmv                  Electronic Arts CMV video (decoders: eacmv )
 D.V... cpia                 CPiA video format
 D.V..S cscd                 CamStudio (decoders: camstudio )
 D.VIL. cyuv                 Creative YUV (CYUV)
 D.VILS dds                  DirectDraw Surface image decoder
 D.V.L. dfa                  Chronomaster DFA
 DEV.LS dirac                Dirac (decoders: dirac libschroedinger ) (encoders: libschroedinger )
 DEVIL. dnxhd                VC3/DNxHD
 DEVI.S dpx                  DPX (Digital Picture Exchange) image
 D.V.L. dsicinvideo          Delphine Software International CIN video
 DEVIL. dvvideo              DV (Digital Video)
 D.V..S dxa                  Feeble Files/ScummVM DXA
 D.VI.S dxtory               Dxtory
 D.V.L. escape124            Escape 124
 D.V.L. escape130            Escape 130
 D.VILS exr                  OpenEXR image
 DEV..S ffv1                 FFmpeg video codec #1
 DEVI.S ffvhuff              Huffyuv FFmpeg variant
 D.V.L. fic                  Mirillis FIC
 DEV..S flashsv              Flash Screen Video v1
 DEV.L. flashsv2             Flash Screen Video v2
 D.V..S flic                 Autodesk Animator Flic video
 DEV.L. flv1                 FLV / Sorenson Spark / Sorenson H.263 (Flash Video) (decoders: flv ) (encoders: flv )
 D.V..S fraps                Fraps
 D.VI.S frwu                 Forward Uncompressed
 D.V.L. g2m                  Go2Meeting
 DEV..S gif                  GIF (Graphics Interchange Format)
 DEV.L. h261                 H.261
 DEV.L. h263                 H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2
 D.V.L. h263i                Intel H.263
 DEV.L. h263p                H.263+ / H.263-1998 / H.263 version 2
 DEV.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_vdpau ) (encoders: libx264 libx264rgb )
 D.VIL. hap                  Vidvox Hap decoder
 DEV.L. hevc                 H.265 / HEVC (High Efficiency Video Coding) (encoders: libx265 )
 D.V.L. hnm4video            HNM 4 video
 D.VIL. hq_hqa               Canopus HQ/HQA
 D.VIL. hqx                  Canopus HQX
 DEVI.S huffyuv              HuffYUV
 D.V.L. idcin                id Quake II CIN video (decoders: idcinvideo )
 D.VI.. idf                  iCEDraw text
 D.V.L. iff_byterun1         IFF ByteRun1 (decoders: iff )
 D.V.L. iff_ilbm             IFF ILBM (decoders: iff )
 D.V.L. indeo2               Intel Indeo 2
 D.V.L. indeo3               Intel Indeo 3
 D.V.L. indeo4               Intel Indeo Video Interactive 4
 D.V.L. indeo5               Intel Indeo Video Interactive 5
 D.V.L. interplayvideo       Interplay MVE video
 DEVILS jpeg2000             JPEG 2000 (decoders: jpeg2000 libopenjpeg ) (encoders: jpeg2000 libopenjpeg )
 DEVILS jpegls               JPEG-LS
 D.VIL. jv                   Bitmap Brothers JV video
 D.V.L. kgv1                 Kega Game Video
 D.V.L. kmvc                 Karl Morton's video codec
 D.VI.S lagarith             Lagarith lossless
 .EVI.S ljpeg                Lossless JPEG
 D.VI.S loco                 LOCO
 D.V.L. mad                  Electronic Arts Madcow Video (decoders: eamad )
 D.VIL. mdec                 Sony PlayStation MDEC (Motion DECoder)
 D.V.L. mimic                Mimic
 DEVIL. mjpeg                Motion JPEG
 D.VIL. mjpegb               Apple MJPEG-B
 D.V.L. mmvideo              American Laser Games MM Video
 D.V.L. motionpixels         Motion Pixels video
 DEV.L. mpeg1video           MPEG-1 video (decoders: mpeg1video mpeg1video_vdpau )
 DEV.L. mpeg2video           MPEG-2 video (decoders: mpeg2video mpegvideo mpegvideo_vdpau )
 DEV.L. mpeg4                MPEG-4 part 2 (decoders: mpeg4 mpeg4_vdpau ) (encoders: mpeg4 libxvid )
 D.V.L. mpegvideo_xvmc       MPEG-1/2 video XvMC (X-Video Motion Compensation)
 D.V.L. msa1                 MS ATC Screen
 D.V.L. msmpeg4v1            MPEG-4 part 2 Microsoft variant version 1
 DEV.L. msmpeg4v2            MPEG-4 part 2 Microsoft variant version 2
 DEV.L. msmpeg4v3            MPEG-4 part 2 Microsoft variant version 3 (decoders: msmpeg4 ) (encoders: msmpeg4 )
 D.V..S msrle                Microsoft RLE
 D.V.L. mss1                 MS Screen 1
 D.VIL. mss2                 MS Windows Media Video V9 Screen
 DEV.L. msvideo1             Microsoft Video 1
 D.VI.S mszh                 LCL (LossLess Codec Library) MSZH
 D.V.L. mts2                 MS Expression Encoder Screen
 D.VIL. mvc1                 Silicon Graphics Motion Video Compressor 1
 D.VIL. mvc2                 Silicon Graphics Motion Video Compressor 2
 D.V.L. mxpeg                Mobotix MxPEG video
 D.V.L. nuv                  NuppelVideo/RTJPEG
 D.V.L. paf_video            Amazing Studio Packed Animation File Video
 DEVI.S pam                  PAM (Portable AnyMap) image
 DEVI.S pbm                  PBM (Portable BitMap) image
 DEVI.S pcx                  PC Paintbrush PCX image
 DEVI.S pgm                  PGM (Portable GrayMap) image
 DEVI.S pgmyuv               PGMYUV (Portable GrayMap YUV) image
 D.VIL. pictor               Pictor/PC Paint
 DEV..S png                  PNG (Portable Network Graphics) image
 DEVI.S ppm                  PPM (Portable PixelMap) image
 DEVIL. prores               Apple ProRes (iCodec Pro) (decoders: prores prores_lgpl ) (encoders: prores prores_aw prores_ks )
 D.VIL. ptx                  V.Flash PTX image
 D.VI.S qdraw                Apple QuickDraw
 D.V.L. qpeg                 Q-team QPEG
 DEV..S qtrle                QuickTime Animation (RLE) video
 DEVI.S r10k                 AJA Kona 10-bit RGB Codec
 DEVI.S r210                 Uncompressed RGB 10-bit
 DEVI.S rawvideo             raw video
 D.VIL. rl2                  RL2 video
 DEV.L. roq                  id RoQ video (decoders: roqvideo ) (encoders: roqvideo )
 D.V.L. rpza                 QuickTime video (RPZA)
 DEV.L. rv10                 RealVideo 1.0
 DEV.L. rv20                 RealVideo 2.0
 D.V.L. rv30                 RealVideo 3.0
 D.V.L. rv40                 RealVideo 4.0
 D.V.L. sanm                 LucasArts SANM/SMUSH video
 DEVI.S sgi                  SGI image
 D.VI.S sgirle               SGI RLE 8-bit
 D.V.L. smackvideo           Smacker video (decoders: smackvid )
 D.V.L. smc                  QuickTime Graphics (SMC)
 D.V... smvjpeg              Sigmatel Motion Video
 DEV.LS snow                 Snow
 D.VIL. sp5x                 Sunplus JPEG (SP5X)
 DEVI.S sunrast              Sun Rasterfile image
 DEV.L. svq1                 Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1
 D.V.L. svq3                 Sorenson Vector Quantizer 3 / Sorenson Video 3 / SVQ3
 DEVI.S targa                Truevision Targa image
 D.VI.. targa_y216           Pinnacle TARGA CineWave YUV16
 D.V.L. tdsc                 TDSC
 D.V.L. tgq                  Electronic Arts TGQ video (decoders: eatgq )
 D.V.L. tgv                  Electronic Arts TGV video (decoders: eatgv )
 DEV.L. theora               Theora (encoders: libtheora )
 D.VIL. thp                  Nintendo Gamecube THP video
 D.V.L. tiertexseqvideo      Tiertex Limited SEQ video
 DEVI.S tiff                 TIFF image
 D.VIL. tmv                  8088flex TMV
 D.V.L. tqi                  Electronic Arts TQI video (decoders: eatqi )
 D.V.L. truemotion1          Duck TrueMotion 1.0
 D.V.L. truemotion2          Duck TrueMotion 2.0
 D.V..S tscc                 TechSmith Screen Capture Codec (decoders: camtasia )
 D.V.L. tscc2                TechSmith Screen Codec 2
 D.VIL. txd                  Renderware TXD (TeXture Dictionary) image
 D.V.L. ulti                 IBM UltiMotion (decoders: ultimotion )
 DEVI.S utvideo              Ut Video
 DEVI.S v210                 Uncompressed 4:2:2 10-bit
 D.VI.S v210x                Uncompressed 4:2:2 10-bit
 DEVI.. v308                 Uncompressed packed 4:4:4
 DEVI.. v408                 Uncompressed packed QT 4:4:4:4
 DEVI.S v410                 Uncompressed 4:4:4 10-bit
 D.V.L. vb                   Beam Software VB
 D.VI.S vble                 VBLE Lossless Codec
 D.V.L. vc1                  SMPTE VC-1 (decoders: vc1 vc1_vdpau )
 D.V.L. vc1image             Windows Media Video 9 Image v2
 D.VIL. vcr1                 ATI VCR1
 D.VIL. vixl                 Miro VideoXL (decoders: xl )
 D.V.L. vmdvideo             Sierra VMD video
 D.V..S vmnc                 VMware Screen Codec / VMware Video
 D.V.L. vp3                  On2 VP3
 D.V.L. vp5                  On2 VP5
 D.V.L. vp6                  On2 VP6
 D.V.L. vp6a                 On2 VP6 (Flash version, with alpha channel)
 D.V.L. vp6f                 On2 VP6 (Flash version)
 D.V.L. vp7                  On2 VP7
 D.V.L. vp8                  On2 VP8
 D.V.L. vp9                  Google VP9
 D.VILS webp                 WebP
 DEV.L. wmv1                 Windows Media Video 7
 DEV.L. wmv2                 Windows Media Video 8
 D.V.L. wmv3                 Windows Media Video 9 (decoders: wmv3 wmv3_vdpau )
 D.V.L. wmv3image            Windows Media Video 9 Image
 D.VIL. wnv1                 Winnov WNV1
 D.V.L. ws_vqa               Westwood Studios VQA (Vector Quantized Animation) video (decoders: vqavideo )
 D.V.L. xan_wc3              Wing Commander III / Xan
 D.V.L. xan_wc4              Wing Commander IV / Xxan
 D.VI.. xbin                 eXtended BINary text
 DEVI.S xbm                  XBM (X BitMap) image
 DEVIL. xface                X-face image
 DEVI.S xwd                  XWD (X Window Dump) image
 DEVI.. y41p                 Uncompressed YUV 4:1:1 12-bit
 D.V.L. yop                  Psygnosis YOP Video
 DEVI.. yuv4                 Uncompressed packed 4:2:0
 D.V..S zerocodec            ZeroCodec Lossless Video
 DEVI.S zlib                 LCL (LossLess Codec Library) ZLIB
 DEV..S zmbv                 Zip Motion Blocks Video
 ..A.L. 4gv                  4GV (Fourth Generation Vocoder)
 D.A.L. 8svx_exp             8SVX exponential
 D.A.L. 8svx_fib             8SVX fibonacci
 DEA.L. aac                  AAC (Advanced Audio Coding) (decoders: aac aac_fixed )
 D.A.L. aac_latm             AAC LATM (Advanced Audio Coding LATM syntax)
 DEA.L. ac3                  ATSC A/52A (AC-3) (decoders: ac3 ac3_fixed ) (encoders: ac3 ac3_fixed )
 D.A.L. adpcm_4xm            ADPCM 4X Movie
 DEA.L. adpcm_adx            SEGA CRI ADX ADPCM
 D.A.L. adpcm_afc            ADPCM Nintendo Gamecube AFC
 D.A.L. adpcm_ct             ADPCM Creative Technology
 D.A.L. adpcm_dtk            ADPCM Nintendo Gamecube DTK
 D.A.L. adpcm_ea             ADPCM Electronic Arts
 D.A.L. adpcm_ea_maxis_xa    ADPCM Electronic Arts Maxis CDROM XA
 D.A.L. adpcm_ea_r1          ADPCM Electronic Arts R1
 D.A.L. adpcm_ea_r2          ADPCM Electronic Arts R2
 D.A.L. adpcm_ea_r3          ADPCM Electronic Arts R3
 D.A.L. adpcm_ea_xas         ADPCM Electronic Arts XAS
 DEA.L. adpcm_g722           G.722 ADPCM (decoders: g722 ) (encoders: g722 )
 DEA.L. adpcm_g726           G.726 ADPCM (decoders: g726 ) (encoders: g726 )
 D.A.L. adpcm_g726le         G.726 ADPCM little-endian (decoders: g726le )
 D.A.L. adpcm_ima_amv        ADPCM IMA AMV
 D.A.L. adpcm_ima_apc        ADPCM IMA CRYO APC
 D.A.L. adpcm_ima_dk3        ADPCM IMA Duck DK3
 D.A.L. adpcm_ima_dk4        ADPCM IMA Duck DK4
 D.A.L. adpcm_ima_ea_eacs    ADPCM IMA Electronic Arts EACS
 D.A.L. adpcm_ima_ea_sead    ADPCM IMA Electronic Arts SEAD
 D.A.L. adpcm_ima_iss        ADPCM IMA Funcom ISS
 D.A.L. adpcm_ima_oki        ADPCM IMA Dialogic OKI
 DEA.L. adpcm_ima_qt         ADPCM IMA QuickTime
 D.A.L. adpcm_ima_rad        ADPCM IMA Radical
 D.A.L. adpcm_ima_smjpeg     ADPCM IMA Loki SDL MJPEG
 DEA.L. adpcm_ima_wav        ADPCM IMA WAV
 D.A.L. adpcm_ima_ws         ADPCM IMA Westwood
 DEA.L. adpcm_ms             ADPCM Microsoft
 D.A.L. adpcm_sbpro_2        ADPCM Sound Blaster Pro 2-bit
 D.A.L. adpcm_sbpro_3        ADPCM Sound Blaster Pro 2.6-bit
 D.A.L. adpcm_sbpro_4        ADPCM Sound Blaster Pro 4-bit
 DEA.L. adpcm_swf            ADPCM Shockwave Flash
 D.A.L. adpcm_thp            ADPCM Nintendo THP
 D.A.L. adpcm_thp_le         ADPCM Nintendo THP (Little-Endian)
 D.A.L. adpcm_vima           LucasArts VIMA audio (decoders: adpcm_vima vima )
 D.A.L. adpcm_xa             ADPCM CDROM XA
 DEA.L. adpcm_yamaha         ADPCM Yamaha
 DEA..S alac                 ALAC (Apple Lossless Audio Codec)
 DEA.L. amr_nb               AMR-NB (Adaptive Multi-Rate NarrowBand) (decoders: amrnb libopencore_amrnb ) (encoders: libopencore_amrnb )
 DEA.L. amr_wb               AMR-WB (Adaptive Multi-Rate WideBand) (decoders: amrwb libopencore_amrwb ) (encoders: libvo_amrwbenc )
 D.A..S ape                  Monkey's Audio
 D.A.L. atrac1               ATRAC1 (Adaptive TRansform Acoustic Coding)
 D.A.L. atrac3               ATRAC3 (Adaptive TRansform Acoustic Coding 3)
 D.A.L. atrac3p              ATRAC3+ (Adaptive TRansform Acoustic Coding 3+) (decoders: atrac3plus )
 D.A.L. avc                  On2 Audio for Video Codec (decoders: on2avc )
 D.A.L. binkaudio_dct        Bink Audio (DCT)
 D.A.L. binkaudio_rdft       Bink Audio (RDFT)
 D.A.L. bmv_audio            Discworld II BMV audio
 ..A.L. celt                 Constrained Energy Lapped Transform (CELT)
 DEA.L. comfortnoise         RFC 3389 Comfort Noise
 D.A.L. cook                 Cook / Cooker / Gecko (RealAudio G2)
 D.A.L. dsd_lsbf             DSD (Direct Stream Digital), least significant bit first
 D.A.L. dsd_lsbf_planar      DSD (Direct Stream Digital), least significant bit first, planar
 D.A.L. dsd_msbf             DSD (Direct Stream Digital), most significant bit first
 D.A.L. dsd_msbf_planar      DSD (Direct Stream Digital), most significant bit first, planar
 D.A.L. dsicinaudio          Delphine Software International CIN audio
 D.A.L. dss_sp               Digital Speech Standard - Standard Play mode (DSS SP)
 DEA.LS dts                  DCA (DTS Coherent Acoustics) (decoders: dca ) (encoders: dca )
 ..A.L. dvaudio              DV audio
 DEA.L. eac3                 ATSC A/52B (AC-3, E-AC-3)
 D.A.L. evrc                 EVRC (Enhanced Variable Rate Codec)
 DEA..S flac                 FLAC (Free Lossless Audio Codec)
 DEA.L. g723_1               G.723.1
 D.A.L. g729                 G.729
 DEA.L. gsm                  GSM (decoders: gsm libgsm ) (encoders: libgsm )
 DEA.L. gsm_ms               GSM Microsoft variant (decoders: gsm_ms libgsm_ms ) (encoders: libgsm_ms )
 D.A.L. iac                  IAC (Indeo Audio Coder)
 ..A.L. ilbc                 iLBC (Internet Low Bitrate Codec)
 D.A.L. imc                  IMC (Intel Music Coder)
 D.A.L. interplay_dpcm       DPCM Interplay
 D.A.L. mace3                MACE (Macintosh Audio Compression/Expansion) 3:1
 D.A.L. mace6                MACE (Macintosh Audio Compression/Expansion) 6:1
 D.A.L. metasound            Voxware MetaSound
 D.A..S mlp                  MLP (Meridian Lossless Packing)
 D.A.L. mp1                  MP1 (MPEG audio layer 1) (decoders: mp1 mp1float )
 DEA.L. mp2                  MP2 (MPEG audio layer 2) (decoders: mp2 mp2float ) (encoders: mp2 mp2fixed )
 DEA.L. mp3                  MP3 (MPEG audio layer 3) (decoders: mp3 mp3float ) (encoders: libmp3lame )
 D.A.L. mp3adu               ADU (Application Data Unit) MP3 (MPEG audio layer 3) (decoders: mp3adu mp3adufloat )
 D.A.L. mp3on4               MP3onMP4 (decoders: mp3on4 mp3on4float )
 D.A..S mp4als               MPEG-4 Audio Lossless Coding (ALS) (decoders: als )
 D.A.L. musepack7            Musepack SV7 (decoders: mpc7 )
 D.A.L. musepack8            Musepack SV8 (decoders: mpc8 )
 DEA.L. nellymoser           Nellymoser Asao
 DEA.L. opus                 Opus (Opus Interactive Audio Codec) (decoders: opus libopus ) (encoders: libopus )
 D.A.L. paf_audio            Amazing Studio Packed Animation File Audio
 DEA.L. pcm_alaw             PCM A-law / G.711 A-law
 D.A..S pcm_bluray           PCM signed 16|20|24-bit big-endian for Blu-ray media
 D.A..S pcm_dvd              PCM signed 20|24-bit big-endian
 DEA..S pcm_f32be            PCM 32-bit floating point big-endian
 DEA..S pcm_f32le            PCM 32-bit floating point little-endian
 DEA..S pcm_f64be            PCM 64-bit floating point big-endian
 DEA..S pcm_f64le            PCM 64-bit floating point little-endian
 D.A..S pcm_lxf              PCM signed 20-bit little-endian planar
 DEA.L. pcm_mulaw            PCM mu-law / G.711 mu-law
 DEA..S pcm_s16be            PCM signed 16-bit big-endian
 DEA..S pcm_s16be_planar     PCM signed 16-bit big-endian planar
 DEA..S pcm_s16le            PCM signed 16-bit little-endian
 DEA..S pcm_s16le_planar     PCM signed 16-bit little-endian planar
 DEA..S pcm_s24be            PCM signed 24-bit big-endian
 DEA..S pcm_s24daud          PCM D-Cinema audio signed 24-bit
 DEA..S pcm_s24le            PCM signed 24-bit little-endian
 DEA..S pcm_s24le_planar     PCM signed 24-bit little-endian planar
 DEA..S pcm_s32be            PCM signed 32-bit big-endian
 DEA..S pcm_s32le            PCM signed 32-bit little-endian
 DEA..S pcm_s32le_planar     PCM signed 32-bit little-endian planar
 DEA..S pcm_s8               PCM signed 8-bit
 DEA..S pcm_s8_planar        PCM signed 8-bit planar
 DEA..S pcm_u16be            PCM unsigned 16-bit big-endian
 DEA..S pcm_u16le            PCM unsigned 16-bit little-endian
 DEA..S pcm_u24be            PCM unsigned 24-bit big-endian
 DEA..S pcm_u24le            PCM unsigned 24-bit little-endian
 DEA..S pcm_u32be            PCM unsigned 32-bit big-endian
 DEA..S pcm_u32le            PCM unsigned 32-bit little-endian
 DEA..S pcm_u8               PCM unsigned 8-bit
 D.A.L. pcm_zork             PCM Zork
 D.A.L. qcelp                QCELP / PureVoice
 D.A.L. qdm2                 QDesign Music Codec 2
 ..A.L. qdmc                 QDesign Music
 DEA.L. ra_144               RealAudio 1.0 (14.4K) (decoders: real_144 ) (encoders: real_144 )
 D.A.L. ra_288               RealAudio 2.0 (28.8K) (decoders: real_288 )
 D.A..S ralf                 RealAudio Lossless
 DEA.L. roq_dpcm             DPCM id RoQ
 DEA..S s302m                SMPTE 302M
 D.A..S shorten              Shorten
 D.A.L. sipr                 RealAudio SIPR / ACELP.NET
 D.A.L. smackaudio           Smacker audio (decoders: smackaud )
 ..A.L. smv                  SMV (Selectable Mode Vocoder)
 D.A.L. sol_dpcm             DPCM Sol
 DEA... sonic                Sonic
 .EA... sonicls              Sonic lossless
 DEA.L. speex                Speex (decoders: libspeex ) (encoders: libspeex )
 D.A..S tak                  TAK (Tom's lossless Audio Kompressor)
 D.A..S truehd               TrueHD
 D.A.L. truespeech           DSP Group TrueSpeech
 DEA..S tta                  TTA (True Audio)
 D.A.L. twinvq               VQF TwinVQ
 D.A.L. vima                 LucasArts VIMA audio (deprecated id) (decoders: adpcm_vima vima )
 D.A.L. vmdaudio             Sierra VMD audio
 DEA.L. vorbis               Vorbis (decoders: vorbis libvorbis ) (encoders: vorbis libvorbis )
 ..A.L. voxware              Voxware RT29 Metasound
 D.A... wavesynth            Wave synthesis pseudo-codec
 DEA.LS wavpack              WavPack
 D.A.L. westwood_snd1        Westwood Audio (SND1) (decoders: ws_snd1 )
 D.A..S wmalossless          Windows Media Audio Lossless
 D.A.L. wmapro               Windows Media Audio 9 Professional
 DEA.L. wmav1                Windows Media Audio 1
 DEA.L. wmav2                Windows Media Audio 2
 D.A.L. wmavoice             Windows Media Audio Voice
 D.A.L. xan_dpcm             DPCM Xan
 ..D... bin_data             binary data
 ..D... dvd_nav_packet       DVD Nav packet
 ..D... klv                  SMPTE 336M Key-Length-Value (KLV) metadata
 ..D... otf                  OpenType font
 ..D... timed_id3            timed ID3 metadata
 ..D... ttf                  TrueType font
 DES... ass                  ASS (Advanced SSA) subtitle
 DES... dvb_subtitle         DVB subtitles (decoders: dvbsub ) (encoders: dvbsub )
 ..S... dvb_teletext         DVB teletext
 DES... dvd_subtitle         DVD subtitles (decoders: dvdsub ) (encoders: dvdsub )
 D.S... eia_608              EIA-608 closed captions (decoders: cc_dec )
 D.S... hdmv_pgs_subtitle    HDMV Presentation Graphic Stream subtitles (decoders: pgssub )
 ..S... hdmv_text_subtitle   HDMV Text subtitle
 D.S... jacosub              JACOsub subtitle
 D.S... microdvd             MicroDVD subtitle
 DES... mov_text             MOV text
 D.S... mpl2                 MPL2 subtitle
 D.S... pjs                  PJS (Phoenix Japanimation Society) subtitle
 D.S... realtext             RealText subtitle
 D.S... sami                 SAMI subtitle
 ..S... srt                  SubRip subtitle with embedded timing
 DES... ssa                  SSA (SubStation Alpha) subtitle
 D.S... stl                  Spruce subtitle format
 DES... subrip               SubRip subtitle (decoders: srt subrip ) (encoders: srt subrip )
 D.S... subviewer            SubViewer subtitle
 D.S... subviewer1           SubViewer v1 subtitle
 D.S... text                 raw UTF-8 text
 D.S... vplayer              VPlayer subtitle
 DES... webvtt               WebVTT subtitle
 DES... xsub                 XSUB
 Decoders:
 V..... = Video
 A..... = Audio
 S..... = Subtitle
 .F.... = Frame-level multithreading
 ..S... = Slice-level multithreading
 ...X.. = Codec is experimental
 ....B. = Supports draw_horiz_band
 .....D = Supports direct rendering method 1
 ------
 V....D 012v                 Uncompressed 4:2:2 10-bit
 V....D 4xm                  4X Movie
 V....D 8bps                 QuickTime 8BPS video
 V....D aasc                 Autodesk RLE
 V....D aic                  Apple Intermediate Codec
 V....D alias_pix            Alias/Wavefront PIX image
 V....D amv                  AMV Video
 V....D anm                  Deluxe Paint Animation
 V....D ansi                 ASCII/ANSI art
 VF...D apng                 APNG (Animated Portable Network Graphics) image
 V....D asv1                 ASUS V1
 V....D asv2                 ASUS V2
 V....D aura                 Auravision AURA
 V....D aura2                Auravision Aura 2
 V....D avrn                 Avid AVI Codec
 V....D avrp                 Avid 1:1 10-bit RGB Packer
 V....D avs                  AVS (Audio Video Standard) video
 V....D avui                 Avid Meridien Uncompressed
 V....D ayuv                 Uncompressed packed MS 4:4:4:4
 V....D bethsoftvid          Bethesda VID video
 V....D bfi                  Brute Force & Ignorance
 V....D binkvideo            Bink video
 V....D bintext              Binary text
 V....D bmp                  BMP (Windows and OS/2 bitmap)
 V....D bmv_video            Discworld II BMV video
 V....D brender_pix          BRender PIX image
 V....D c93                  Interplay C93
 V....D cavs                 Chinese AVS (Audio Video Standard) (AVS1-P2, JiZhun profile)
 V....D cdgraphics           CD Graphics video
 V....D cdxl                 Commodore CDXL video
 V....D cinepak              Cinepak
 V....D cljr                 Cirrus Logic AccuPak
 V....D cllc                 Canopus Lossless Codec
 V....D eacmv                Electronic Arts CMV video (codec cmv)
 V....D cpia                 CPiA video format
 V....D camstudio            CamStudio (codec cscd)
 V....D cyuv                 Creative YUV (CYUV)
 V.S..D dds                  DirectDraw Surface image decoder
 V....D dfa                  Chronomaster DFA
 V..... dirac                BBC Dirac VC-2
 V..... libschroedinger      libschroedinger Dirac 2.2 (codec dirac)
 VF...D dnxhd                VC3/DNxHD
 V....D dpx                  DPX (Digital Picture Exchange) image
 V....D dsicinvideo          Delphine Software International CIN video
 V.S..D dvvideo              DV (Digital Video)
 V....D dxa                  Feeble Files/ScummVM DXA
 V....D dxtory               Dxtory
 V....D escape124            Escape 124
 V....D escape130            Escape 130
 VFS..D exr                  OpenEXR image
 VFS..D ffv1                 FFmpeg video codec #1
 VF..BD ffvhuff              Huffyuv FFmpeg variant
 V.S..D fic                  Mirillis FIC
 V....D flashsv              Flash Screen Video v1
 V....D flashsv2             Flash Screen Video v2
 V....D flic                 Autodesk Animator Flic video
 V...BD flv                  FLV / Sorenson Spark / Sorenson H.263 (Flash Video) (codec flv1)
 VF...D fraps                Fraps
 V....D frwu                 Forward Uncompressed
 V....D g2m                  Go2Meeting
 V....D gif                  GIF (Graphics Interchange Format)
 V....D h261                 H.261
 V...BD h263                 H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2
 V...BD h263i                Intel H.263
 V...BD h263p                H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2
 VFS..D h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
 V....D h264_vdpau           H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (VDPAU acceleration) (codec h264)
 VFS..D hap                  Vidvox Hap decoder
 VFS..D hevc                 HEVC (High Efficiency Video Coding)
 V....D hnm4video            HNM 4 video
 V....D hq_hqa               Canopus HQ/HQA
 V.S..D hqx                  Canopus HQX
 VF..BD huffyuv              Huffyuv / HuffYUV
 V....D idcinvideo           id Quake II CIN video (codec idcin)
 V....D idf                  iCEDraw text
 V....D iff                  IFF (codec iff_byterun1)
 V....D iff                  IFF (codec iff_ilbm)
 V....D indeo2               Intel Indeo 2
 V....D indeo3               Intel Indeo 3
 V....D indeo4               Intel Indeo Video Interactive 4
 V....D indeo5               Intel Indeo Video Interactive 5
 V....D interplayvideo       Interplay MVE video
 VF...D jpeg2000             JPEG 2000
 VF...D libopenjpeg          OpenJPEG JPEG 2000 (codec jpeg2000)
 V....D jpegls               JPEG-LS
 V....D jv                   Bitmap Brothers JV video
 V....D kgv1                 Kega Game Video
 V....D kmvc                 Karl Morton's video codec
 VF...D lagarith             Lagarith lossless
 V....D loco                 LOCO
 V....D eamad                Electronic Arts Madcow Video (codec mad)
 VF...D mdec                 Sony PlayStation MDEC (Motion DECoder)
 VF...D mimic                Mimic
 V....D mjpeg                MJPEG (Motion JPEG)
 V....D mjpegb               Apple MJPEG-B
 V....D mmvideo              American Laser Games MM Video
 V....D motionpixels         Motion Pixels video
 V.S.BD mpeg1video           MPEG-1 video
 V....D mpeg1video_vdpau     MPEG-1 video (VDPAU acceleration) (codec mpeg1video)
 V.S.BD mpeg2video           MPEG-2 video
 V.S.BD mpegvideo            MPEG-1 video (codec mpeg2video)
 V....D mpegvideo_vdpau      MPEG-1/2 video (VDPAU acceleration) (codec mpeg2video)
 VF..BD mpeg4                MPEG-4 part 2
 V....D mpeg4_vdpau          MPEG-4 part 2 (VDPAU) (codec mpeg4)
 V...BD mpegvideo_xvmc       MPEG-1/2 video XvMC (X-Video Motion Compensation)
 V....D msa1                 MS ATC Screen
 V...BD msmpeg4v1            MPEG-4 part 2 Microsoft variant version 1
 V...BD msmpeg4v2            MPEG-4 part 2 Microsoft variant version 2
 V...BD msmpeg4              MPEG-4 part 2 Microsoft variant version 3 (codec msmpeg4v3)
 V....D msrle                Microsoft RLE
 V....D mss1                 MS Screen 1
 V....D mss2                 MS Windows Media Video V9 Screen
 V....D msvideo1             Microsoft Video 1
 V....D mszh                 LCL (LossLess Codec Library) MSZH
 V....D mts2                 MS Expression Encoder Screen
 V....D mvc1                 Silicon Graphics Motion Video Compressor 1
 V....D mvc2                 Silicon Graphics Motion Video Compressor 2
 V....D mxpeg                Mobotix MxPEG video
 V....D nuv                  NuppelVideo/RTJPEG
 V....D paf_video            Amazing Studio Packed Animation File Video
 V....D pam                  PAM (Portable AnyMap) image
 V....D pbm                  PBM (Portable BitMap) image
 V....D pcx                  PC Paintbrush PCX image
 V....D pgm                  PGM (Portable GrayMap) image
 V....D pgmyuv               PGMYUV (Portable GrayMap YUV) image
 V....D pictor               Pictor/PC Paint
 VF...D png                  PNG (Portable Network Graphics) image
 V....D ppm                  PPM (Portable PixelMap) image
 V.S..D prores               ProRes
 V.S..D prores_lgpl          Apple ProRes (iCodec Pro) (codec prores)
 V....D ptx                  V.Flash PTX image
 V....D qdraw                Apple QuickDraw
 V....D qpeg                 Q-team QPEG
 V....D qtrle                QuickTime Animation (RLE) video
 V....D r10k                 AJA Kona 10-bit RGB Codec
 V....D r210                 Uncompressed RGB 10-bit
 V..... rawvideo             raw video
 V....D rl2                  RL2 video
 V....D roqvideo             id RoQ video (codec roq)
 V....D rpza                 QuickTime video (RPZA)
 V....D rv10                 RealVideo 1.0
 V....D rv20                 RealVideo 2.0
 VF...D rv30                 RealVideo 3.0
 VF...D rv40                 RealVideo 4.0
 V....D sanm                 LucasArts SANM/Smush video
 V....D sgi                  SGI image
 V....D sgirle               Silicon Graphics RLE 8-bit video
 V....D smackvid             Smacker video (codec smackvideo)
 V....D smc                  QuickTime Graphics (SMC)
 V..... smvjpeg              SMV JPEG
 V....D snow                 Snow
 V....D sp5x                 Sunplus JPEG (SP5X)
 V....D sunrast              Sun Rasterfile image
 V....D svq1                 Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1
 V...BD svq3                 Sorenson Vector Quantizer 3 / Sorenson Video 3 / SVQ3
 V....D targa                Truevision Targa image
 V....D targa_y216           Pinnacle TARGA CineWave YUV16
 V....D tdsc                 TDSC
 V....D eatgq                Electronic Arts TGQ video (codec tgq)
 V....D eatgv                Electronic Arts TGV video (codec tgv)
 VF..BD theora               Theora
 V....D thp                  Nintendo Gamecube THP video
 V....D tiertexseqvideo      Tiertex Limited SEQ video
 VF...D tiff                 TIFF image
 V....D tmv                  8088flex TMV
 V....D eatqi                Electronic Arts TQI Video (codec tqi)
 V....D truemotion1          Duck TrueMotion 1.0
 V....D truemotion2          Duck TrueMotion 2.0
 V....D camtasia             TechSmith Screen Capture Codec (codec tscc)
 V....D tscc2                TechSmith Screen Codec 2
 V....D txd                  Renderware TXD (TeXture Dictionary) image
 V....D ultimotion           IBM UltiMotion (codec ulti)
 VF...D utvideo              Ut Video
 V....D v210                 Uncompressed 4:2:2 10-bit
 V....D v210x                Uncompressed 4:2:2 10-bit
 V....D v308                 Uncompressed packed 4:4:4
 V....D v408                 Uncompressed packed QT 4:4:4:4
 V....D v410                 Uncompressed 4:4:4 10-bit
 V....D vb                   Beam Software VB
 V....D vble                 VBLE Lossless Codec
 V....D vc1                  SMPTE VC-1
 V....D vc1_vdpau            SMPTE VC-1 VDPAU (codec vc1)
 V....D vc1image             Windows Media Video 9 Image v2
 V....D vcr1                 ATI VCR1
 V....D xl                   Miro VideoXL (codec vixl)
 V....D vmdvideo             Sierra VMD video
 V....D vmnc                 VMware Screen Codec / VMware Video
 VF..BD vp3                  On2 VP3
 V....D vp5                  On2 VP5
 V....D vp6                  On2 VP6
 V.S..D vp6a                 On2 VP6 (Flash version, with alpha channel)
 V....D vp6f                 On2 VP6 (Flash version)
 V....D vp7                  On2 VP7
 VFS..D vp8                  On2 VP8
 VF...D vp9                  Google VP9
 VF...D webp                 WebP image
 V...BD wmv1                 Windows Media Video 7
 V...BD wmv2                 Windows Media Video 8
 V....D wmv3                 Windows Media Video 9
 V....D wmv3_vdpau           Windows Media Video 9 VDPAU (codec wmv3)
 V....D wmv3image            Windows Media Video 9 Image
 V....D wnv1                 Winnov WNV1
 V....D vqavideo             Westwood Studios VQA (Vector Quantized Animation) video (codec ws_vqa)
 V....D xan_wc3              Wing Commander III / Xan
 V....D xan_wc4              Wing Commander IV / Xxan
 V....D xbin                 eXtended BINary text
 V....D xbm                  XBM (X BitMap) image
 V..... xface                X-face image
 V....D xwd                  XWD (X Window Dump) image
 V....D y41p                 Uncompressed YUV 4:1:1 12-bit
 V..... yop                  Psygnosis YOP Video
 V....D yuv4                 Uncompressed packed 4:2:0
 V....D zerocodec            ZeroCodec Lossless Video
 V....D zlib                 LCL (LossLess Codec Library) ZLIB
 V....D zmbv                 Zip Motion Blocks Video
 A....D 8svx_exp             8SVX exponential
 A....D 8svx_fib             8SVX fibonacci
 A....D aac                  AAC (Advanced Audio Coding)
 A....D aac_fixed            AAC (Advanced Audio Coding) (codec aac)
 A....D aac_latm             AAC LATM (Advanced Audio Coding LATM syntax)
 A....D ac3                  ATSC A/52A (AC-3)
 A....D ac3_fixed            ATSC A/52A (AC-3) (codec ac3)
 A....D adpcm_4xm            ADPCM 4X Movie
 A....D adpcm_adx            SEGA CRI ADX ADPCM
 A....D adpcm_afc            ADPCM Nintendo Gamecube AFC
 A....D adpcm_ct             ADPCM Creative Technology
 A....D adpcm_dtk            ADPCM Nintendo Gamecube DTK
 A....D adpcm_ea             ADPCM Electronic Arts
 A....D adpcm_ea_maxis_xa    ADPCM Electronic Arts Maxis CDROM XA
 A....D adpcm_ea_r1          ADPCM Electronic Arts R1
 A....D adpcm_ea_r2          ADPCM Electronic Arts R2
 A....D adpcm_ea_r3          ADPCM Electronic Arts R3
 A....D adpcm_ea_xas         ADPCM Electronic Arts XAS
 A....D g722                 G.722 ADPCM (codec adpcm_g722)
 A....D g726                 G.726 ADPCM (codec adpcm_g726)
 A....D g726le               G.726 ADPCM little-endian (codec adpcm_g726le)
 A....D adpcm_ima_amv        ADPCM IMA AMV
 A....D adpcm_ima_apc        ADPCM IMA CRYO APC
 A....D adpcm_ima_dk3        ADPCM IMA Duck DK3
 A....D adpcm_ima_dk4        ADPCM IMA Duck DK4
 A....D adpcm_ima_ea_eacs    ADPCM IMA Electronic Arts EACS
 A....D adpcm_ima_ea_sead    ADPCM IMA Electronic Arts SEAD
 A....D adpcm_ima_iss        ADPCM IMA Funcom ISS
 A....D adpcm_ima_oki        ADPCM IMA Dialogic OKI
 A....D adpcm_ima_qt         ADPCM IMA QuickTime
 A....D adpcm_ima_rad        ADPCM IMA Radical
 A....D adpcm_ima_smjpeg     ADPCM IMA Loki SDL MJPEG
 A....D adpcm_ima_wav        ADPCM IMA WAV
 A....D adpcm_ima_ws         ADPCM IMA Westwood
 A....D adpcm_ms             ADPCM Microsoft
 A....D adpcm_sbpro_2        ADPCM Sound Blaster Pro 2-bit
 A....D adpcm_sbpro_3        ADPCM Sound Blaster Pro 2.6-bit
 A....D adpcm_sbpro_4        ADPCM Sound Blaster Pro 4-bit
 A....D adpcm_swf            ADPCM Shockwave Flash
 A....D adpcm_thp            ADPCM Nintendo THP
 A....D adpcm_thp_le         ADPCM Nintendo THP (little-endian)
 A....D adpcm_vima           LucasArts VIMA audio
 A....D vima                 LucasArts VIMA audio (codec adpcm_vima)
 A....D adpcm_xa             ADPCM CDROM XA
 A....D adpcm_yamaha         ADPCM Yamaha
 AF...D alac                 ALAC (Apple Lossless Audio Codec)
 A....D amrnb                AMR-NB (Adaptive Multi-Rate NarrowBand) (codec amr_nb)
 A....D libopencore_amrnb    OpenCORE AMR-NB (Adaptive Multi-Rate Narrow-Band) (codec amr_nb)
 A....D amrwb                AMR-WB (Adaptive Multi-Rate WideBand) (codec amr_wb)
 A....D libopencore_amrwb    OpenCORE AMR-WB (Adaptive Multi-Rate Wide-Band) (codec amr_wb)
 A....D ape                  Monkey's Audio
 A....D atrac1               ATRAC1 (Adaptive TRansform Acoustic Coding)
 A....D atrac3               ATRAC3 (Adaptive TRansform Acoustic Coding 3)
 A....D atrac3plus           ATRAC3+ (Adaptive TRansform Acoustic Coding 3+) (codec atrac3p)
 A....D on2avc               On2 Audio for Video Codec (codec avc)
 A....D binkaudio_dct        Bink Audio (DCT)
 A....D binkaudio_rdft       Bink Audio (RDFT)
 A....D bmv_audio            Discworld II BMV audio
 A....D comfortnoise         RFC 3389 comfort noise generator
 A....D cook                 Cook / Cooker / Gecko (RealAudio G2)
 A..... dsd_lsbf             DSD (Direct Stream Digital), least significant bit first
 A..... dsd_lsbf_planar      DSD (Direct Stream Digital), least significant bit first, planar
 A..... dsd_msbf             DSD (Direct Stream Digital), most significant bit first
 A..... dsd_msbf_planar      DSD (Direct Stream Digital), most significant bit first, planar
 A....D dsicinaudio          Delphine Software International CIN audio
 A....D dss_sp               Digital Speech Standard - Standard Play mode (DSS SP)
 A....D dca                  DCA (DTS Coherent Acoustics) (codec dts)
 A....D eac3                 ATSC A/52B (AC-3, E-AC-3)
 A....D evrc                 EVRC (Enhanced Variable Rate Codec)
 AF...D flac                 FLAC (Free Lossless Audio Codec)
 A....D g723_1               G.723.1
 A....D g729                 G.729
 A....D gsm                  GSM
 A....D libgsm               libgsm GSM (codec gsm)
 A....D gsm_ms               GSM Microsoft variant
 A....D libgsm_ms            libgsm GSM Microsoft variant (codec gsm_ms)
 A....D iac                  IAC (Indeo Audio Coder)
 A....D imc                  IMC (Intel Music Coder)
 A....D interplay_dpcm       DPCM Interplay
 A....D mace3                MACE (Macintosh Audio Compression/Expansion) 3:1
 A....D mace6                MACE (Macintosh Audio Compression/Expansion) 6:1
 A....D metasound            Voxware MetaSound
 A....D mlp                  MLP (Meridian Lossless Packing)
 A....D mp1                  MP1 (MPEG audio layer 1)
 A....D mp1float             MP1 (MPEG audio layer 1) (codec mp1)
 A....D mp2                  MP2 (MPEG audio layer 2)
 A....D mp2float             MP2 (MPEG audio layer 2) (codec mp2)
 A....D mp3                  MP3 (MPEG audio layer 3)
 A....D mp3float             MP3 (MPEG audio layer 3) (codec mp3)
 A....D mp3adu               ADU (Application Data Unit) MP3 (MPEG audio layer 3)
 A....D mp3adufloat          ADU (Application Data Unit) MP3 (MPEG audio layer 3) (codec mp3adu)
 A....D mp3on4               MP3onMP4
 A....D mp3on4float          MP3onMP4 (codec mp3on4)
 A....D als                  MPEG-4 Audio Lossless Coding (ALS) (codec mp4als)
 A....D mpc7                 Musepack SV7 (codec musepack7)
 A....D mpc8                 Musepack SV8 (codec musepack8)
 A....D nellymoser           Nellymoser Asao
 A....D opus                 Opus
 A....D libopus              libopus Opus (codec opus)
 A....D paf_audio            Amazing Studio Packed Animation File Audio
 A....D pcm_alaw             PCM A-law / G.711 A-law
 A....D pcm_bluray           PCM signed 16|20|24-bit big-endian for Blu-ray media
 A....D pcm_dvd              PCM signed 16|20|24-bit big-endian for DVD media
 A....D pcm_f32be            PCM 32-bit floating point big-endian
 A....D pcm_f32le            PCM 32-bit floating point little-endian
 A....D pcm_f64be            PCM 64-bit floating point big-endian
 A....D pcm_f64le            PCM 64-bit floating point little-endian
 A....D pcm_lxf              PCM signed 20-bit little-endian planar
 A....D pcm_mulaw            PCM mu-law / G.711 mu-law
 A....D pcm_s16be            PCM signed 16-bit big-endian
 A....D pcm_s16be_planar     PCM signed 16-bit big-endian planar
 A....D pcm_s16le            PCM signed 16-bit little-endian
 A....D pcm_s16le_planar     PCM signed 16-bit little-endian planar
 A....D pcm_s24be            PCM signed 24-bit big-endian
 A....D pcm_s24daud          PCM D-Cinema audio signed 24-bit
 A....D pcm_s24le            PCM signed 24-bit little-endian
 A....D pcm_s24le_planar     PCM signed 24-bit little-endian planar
 A....D pcm_s32be            PCM signed 32-bit big-endian
 A....D pcm_s32le            PCM signed 32-bit little-endian
 A....D pcm_s32le_planar     PCM signed 32-bit little-endian planar
 A....D pcm_s8               PCM signed 8-bit
 A....D pcm_s8_planar        PCM signed 8-bit planar
 A....D pcm_u16be            PCM unsigned 16-bit big-endian
 A....D pcm_u16le            PCM unsigned 16-bit little-endian
 A....D pcm_u24be            PCM unsigned 24-bit big-endian
 A....D pcm_u24le            PCM unsigned 24-bit little-endian
 A....D pcm_u32be            PCM unsigned 32-bit big-endian
 A....D pcm_u32le            PCM unsigned 32-bit little-endian
 A....D pcm_u8               PCM unsigned 8-bit
 A....D pcm_zork             PCM Zork
 A....D qcelp                QCELP / PureVoice
 A....D qdm2                 QDesign Music Codec 2
 A....D real_144             RealAudio 1.0 (14.4K) (codec ra_144)
 A....D real_288             RealAudio 2.0 (28.8K) (codec ra_288)
 A....D ralf                 RealAudio Lossless
 A....D roq_dpcm             DPCM id RoQ
 A....D s302m                SMPTE 302M
 A....D shorten              Shorten
 A....D sipr                 RealAudio SIPR / ACELP.NET
 A....D smackaud             Smacker audio (codec smackaudio)
 A....D sol_dpcm             DPCM Sol
 A..X.D sonic                Sonic
 A....D libspeex             libspeex Speex (codec speex)
 AF...D tak                  TAK (Tom's lossless Audio Kompressor)
 A....D truehd               TrueHD
 A....D truespeech           DSP Group TrueSpeech
 AF...D tta                  TTA (True Audio)
 A....D twinvq               VQF TwinVQ
 A....D adpcm_vima           LucasArts VIMA audio (codec vima)
 A....D vima                 LucasArts VIMA audio
 A....D vmdaudio             Sierra VMD audio
 A....D vorbis               Vorbis
 A..... libvorbis            libvorbis (codec vorbis)
 A....D wavesynth            Wave synthesis pseudo-codec
 AF...D wavpack              WavPack
 A....D ws_snd1              Westwood Audio (SND1) (codec westwood_snd1)
 A....D wmalossless          Windows Media Audio Lossless
 A....D wmapro               Windows Media Audio 9 Professional
 A....D wmav1                Windows Media Audio 1
 A....D wmav2                Windows Media Audio 2
 A....D wmavoice             Windows Media Audio Voice
 A....D xan_dpcm             DPCM Xan
 S..... ass                  ASS (Advanced SubStation Alpha) subtitle
 S..... dvbsub               DVB subtitles (codec dvb_subtitle)
 S..... dvdsub               DVD subtitles (codec dvd_subtitle)
 S..... cc_dec               Closed Caption (EIA-608 / CEA-708) Decoder (codec eia_608)
 S..... pgssub               HDMV Presentation Graphic Stream subtitles (codec hdmv_pgs_subtitle)
 S..... jacosub              JACOsub subtitle
 S..... microdvd             MicroDVD subtitle
 S..... mov_text             3GPP Timed Text subtitle
 S..... mpl2                 MPL2 subtitle
 S..... pjs                  PJS subtitle
 S..... realtext             RealText subtitle
 S..... sami                 SAMI subtitle
 S..... ssa                  SSA (SubStation Alpha) subtitle
 S..... stl                  Spruce subtitle format
 S..... srt                  SubRip subtitle (codec subrip)
 S..... subrip               SubRip subtitle
 S..... subviewer            SubViewer subtitle
 S..... subviewer1           SubViewer1 subtitle
 S..... text                 Raw text subtitle
 S..... vplayer              VPlayer subtitle
 S..... webvtt               WebVTT subtitle
 S..... xsub                 XSUB
Encoders:
 V..... = Video
 A..... = Audio
 S..... = Subtitle
 .F.... = Frame-level multithreading
 ..S... = Slice-level multithreading
 ...X.. = Codec is experimental
 ....B. = Supports draw_horiz_band
 .....D = Supports direct rendering method 1
 ------
 V..... a64multi             Multicolor charset for Commodore 64 (codec a64_multi)
 V..... a64multi5            Multicolor charset for Commodore 64, extended with 5th color (colram) (codec a64_multi5)
 V..... alias_pix            Alias/Wavefront PIX image
 V..... amv                  AMV Video
 V..... apng                 APNG (Animated Portable Network Graphics) image
 V..... asv1                 ASUS V1
 V..... asv2                 ASUS V2
 V..... avrp                 Avid 1:1 10-bit RGB Packer
 V..X.. avui                 Avid Meridien Uncompressed
 V..... ayuv                 Uncompressed packed MS 4:4:4:4
 V..... bmp                  BMP (Windows and OS/2 bitmap)
 V..... cinepak              Cinepak / CVID
 V..... cljr                 Cirrus Logic AccuPak
 V..... libschroedinger      libschroedinger Dirac 2.2 (codec dirac)
 V.S... dnxhd                VC3/DNxHD
 V..... dpx                  DPX (Digital Picture Exchange) image
 VFS... dvvideo              DV (Digital Video)
 V.S... ffv1                 FFmpeg video codec #1
 VF.... ffvhuff              Huffyuv FFmpeg variant
 V..... flashsv              Flash Screen Video
 V..... flashsv2             Flash Screen Video Version 2
 V..... flv                  FLV / Sorenson Spark / Sorenson H.263 (Flash Video) (codec flv1)
 V..... gif                  GIF (Graphics Interchange Format)
 V..... h261                 H.261
 V..... h263                 H.263 / H.263-1996
 V.S... h263p                H.263+ / H.263-1998 / H.263 version 2
 V..... libx264              libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)
 V..... libx264rgb           libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB (codec h264)
 V..... libx265              libx265 H.265 / HEVC (codec hevc)
 VF.... huffyuv              Huffyuv / HuffYUV
 V..... jpeg2000             JPEG 2000
 VF.... libopenjpeg          OpenJPEG JPEG 2000 (codec jpeg2000)
 VF.... jpegls               JPEG-LS
 VF.... ljpeg                Lossless JPEG
 VFS... mjpeg                MJPEG (Motion JPEG)
 V.S... mpeg1video           MPEG-1 video
 V.S... mpeg2video           MPEG-2 video
 V.S... mpeg4                MPEG-4 part 2
 V..... libxvid              libxvidcore MPEG-4 part 2 (codec mpeg4)
 V..... msmpeg4v2            MPEG-4 part 2 Microsoft variant version 2
 V..... msmpeg4              MPEG-4 part 2 Microsoft variant version 3 (codec msmpeg4v3)
 V..... msvideo1             Microsoft Video-1
 V..... pam                  PAM (Portable AnyMap) image
 V..... pbm                  PBM (Portable BitMap) image
 V..... pcx                  PC Paintbrush PCX image
 V..... pgm                  PGM (Portable GrayMap) image
 V..... pgmyuv               PGMYUV (Portable GrayMap YUV) image
 VF.... png                  PNG (Portable Network Graphics) image
 V..... ppm                  PPM (Portable PixelMap) image
 VF.... prores               Apple ProRes
 VF.... prores_aw            Apple ProRes (codec prores)
 V.S... prores_ks            Apple ProRes (iCodec Pro) (codec prores)
 V..... qtrle                QuickTime Animation (RLE) video
 V..... r10k                 AJA Kona 10-bit RGB Codec
 V..... r210                 Uncompressed RGB 10-bit
 V..... rawvideo             raw video
 V..... roqvideo             id RoQ video (codec roq)
 V..... rv10                 RealVideo 1.0
 V..... rv20                 RealVideo 2.0
 V..... sgi                  SGI image
 V..... snow                 Snow
 V..... sunrast              Sun Rasterfile image
 V..... svq1                 Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1
 V..... targa                Truevision Targa image
 V..... libtheora            libtheora Theora (codec theora)
 VF.... tiff                 TIFF image
 VF.... utvideo              Ut Video
 V..... v210                 Uncompressed 4:2:2 10-bit
 V..... v308                 Uncompressed packed 4:4:4
 V..... v408                 Uncompressed packed QT 4:4:4:4
 V..... v410                 Uncompressed 4:4:4 10-bit
 V..... wmv1                 Windows Media Video 7
 V..... wmv2                 Windows Media Video 8
 V..... xbm                  XBM (X BitMap) image
 V..... xface                X-face image
 V..... xwd                  XWD (X Window Dump) image
 V..... y41p                 Uncompressed YUV 4:1:1 12-bit
 V..... yuv4                 Uncompressed packed 4:2:0
 VF.... zlib                 LCL (LossLess Codec Library) ZLIB
 V..... zmbv                 Zip Motion Blocks Video
 A..X.. aac                  AAC (Advanced Audio Coding)
 A..... ac3                  ATSC A/52A (AC-3)
 A..... ac3_fixed            ATSC A/52A (AC-3) (codec ac3)
 A..... adpcm_adx            SEGA CRI ADX ADPCM
 A..... g722                 G.722 ADPCM (codec adpcm_g722)
 A..... g726                 G.726 ADPCM (codec adpcm_g726)
 A..... adpcm_ima_qt         ADPCM IMA QuickTime
 A..... adpcm_ima_wav        ADPCM IMA WAV
 A..... adpcm_ms             ADPCM Microsoft
 A..... adpcm_swf            ADPCM Shockwave Flash
 A..... adpcm_yamaha         ADPCM Yamaha
 A..... alac                 ALAC (Apple Lossless Audio Codec)
 A..... libopencore_amrnb    OpenCORE AMR-NB (Adaptive Multi-Rate Narrow-Band) (codec amr_nb)
 A..... libvo_amrwbenc       Android VisualOn AMR-WB (Adaptive Multi-Rate Wide-Band) (codec amr_wb)
 A..... comfortnoise         RFC 3389 comfort noise generator
 A..X.. dca                  DCA (DTS Coherent Acoustics) (codec dts)
 A..... eac3                 ATSC A/52 E-AC-3
 A..... flac                 FLAC (Free Lossless Audio Codec)
 A..... g723_1               G.723.1
 A..... libgsm               libgsm GSM (codec gsm)
 A..... libgsm_ms            libgsm GSM Microsoft variant (codec gsm_ms)
 A..... mp2                  MP2 (MPEG audio layer 2)
 A..... mp2fixed             MP2 fixed point (MPEG audio layer 2) (codec mp2)
 A..... libmp3lame           libmp3lame MP3 (MPEG audio layer 3) (codec mp3)
 A..... nellymoser           Nellymoser Asao
 A..... libopus              libopus Opus (codec opus)
 A..... pcm_alaw             PCM A-law / G.711 A-law
 A..... pcm_f32be            PCM 32-bit floating point big-endian
 A..... pcm_f32le            PCM 32-bit floating point little-endian
 A..... pcm_f64be            PCM 64-bit floating point big-endian
 A..... pcm_f64le            PCM 64-bit floating point little-endian
 A..... pcm_mulaw            PCM mu-law / G.711 mu-law
 A..... pcm_s16be            PCM signed 16-bit big-endian
 A..... pcm_s16be_planar     PCM signed 16-bit big-endian planar
 A..... pcm_s16le            PCM signed 16-bit little-endian
 A..... pcm_s16le_planar     PCM signed 16-bit little-endian planar
 A..... pcm_s24be            PCM signed 24-bit big-endian
 A..... pcm_s24daud          PCM D-Cinema audio signed 24-bit
 A..... pcm_s24le            PCM signed 24-bit little-endian
 A..... pcm_s24le_planar     PCM signed 24-bit little-endian planar
 A..... pcm_s32be            PCM signed 32-bit big-endian
 A..... pcm_s32le            PCM signed 32-bit little-endian
 A..... pcm_s32le_planar     PCM signed 32-bit little-endian planar
 A..... pcm_s8               PCM signed 8-bit
 A..... pcm_s8_planar        PCM signed 8-bit planar
 A..... pcm_u16be            PCM unsigned 16-bit big-endian
 A..... pcm_u16le            PCM unsigned 16-bit little-endian
 A..... pcm_u24be            PCM unsigned 24-bit big-endian
 A..... pcm_u24le            PCM unsigned 24-bit little-endian
 A..... pcm_u32be            PCM unsigned 32-bit big-endian
 A..... pcm_u32le            PCM unsigned 32-bit little-endian
 A..... pcm_u8               PCM unsigned 8-bit
 A..... real_144             RealAudio 1.0 (14.4K) (codec ra_144)
 A..... roq_dpcm             id RoQ DPCM
 A..X.. s302m                SMPTE 302M
 A..X.. sonic                Sonic
 A..X.. sonicls              Sonic lossless
 A..... libspeex             libspeex Speex (codec speex)
 A..... tta                  TTA (True Audio)
 A..X.. vorbis               Vorbis
 A..... libvorbis            libvorbis (codec vorbis)
 A..... wavpack              WavPack
 A..... wmav1                Windows Media Audio 1
 A..... wmav2                Windows Media Audio 2
 S..... ass                  ASS (Advanced SubStation Alpha) subtitle
 S..... dvbsub               DVB subtitles (codec dvb_subtitle)
 S..... dvdsub               DVD subtitles (codec dvd_subtitle)
 S..... mov_text             3GPP Timed Text subtitle
 S..... ssa                  SSA (SubStation Alpha) subtitle
 S..... srt                  SubRip subtitle (codec subrip)
 S..... subrip               SubRip subtitle
 S..... webvtt               WebVTT subtitle
 S..... xsub                 DivX subtitles (XSUB)
Bitstream filters:
text2movsub
remove_extra
noise
mov2textsub
mpeg4_unpack_bframes
mp3decomp
mjpegadump
mjpeg2jpeg
imxdump
hevc_mp4toannexb
h264_mp4toannexb
dump_extra
chomp
aac_adtstoasc
Supported file protocols:
Input:
  async
  cache
  concat
  crypto
  data
  ffrtmpcrypt
  ffrtmphttp
  file
  ftp
  gopher
  hls
  http
  httpproxy
  https
  mmsh
  mmst
  pipe
  rtmp
  rtmpe
  rtmps
  rtmpt
  rtmpte
  rtmpts
  rtp
  srtp
  subfile
  tcp
  tls
  udp
  udplite
  unix
Output:
  crypto
  ffrtmpcrypt
  ffrtmphttp
  file
  ftp
  gopher
  http
  httpproxy
  https
  icecast
  md5
  pipe
  rtmp
  rtmpe
  rtmps
  rtmpt
  rtmpte
  rtmpts
  rtp
  srtp
  tcp
  tls
  udp
  udplite
  unix
Filters:
  T.. = Timeline support
  .S. = Slice threading
  ..C = Command support
  A = Audio input/output
  V = Video input/output
  N = Dynamic number and/or type of input/output
  | = Source or sink filter
 ... acrossfade       AA->A      Cross fade two input audio streams.
 T.. adelay           A->A       Delay one or more audio channels.
 ... aecho            A->A       Add echoing to the audio.
 ... aeval            A->A       Filter audio signal according to a specified expression.
 T.. afade            A->A       Fade in/out input audio.
 ... aformat          A->A       Convert the input audio to one of the specified formats.
 ... ainterleave      N->A       Temporally interleave audio inputs.
 ... allpass          A->A       Apply a two-pole all-pass filter.
 ... amerge           N->A       Merge two or more audio streams into a single multi-channel stream.
 ... amix             N->A       Audio mixing.
 ... anull            A->A       Pass the source unchanged to the output.
 T.. apad             A->A       Pad audio with silence.
 ... aperms           A->A       Set permissions for the output audio frame.
 ... aphaser          A->A       Add a phasing effect to the audio.
 ... aresample        A->A       Resample audio data.
 ... areverse         A->A       Reverse an audio clip.
 ... aselect          A->N       Select audio frames to pass in output.
 ... asendcmd         A->A       Send commands to filters.
 ... asetnsamples     A->A       Set the number of samples for each output audio frames.
 ... asetpts          A->A       Set PTS for the output audio frame.
 ... asetrate         A->A       Change the sample rate without altering the data.
 ... asettb           A->A       Set timebase for the audio output link.
 ... ashowinfo        A->A       Show textual information for each audio frame.
 ... asplit           A->N       Pass on the audio input to N audio outputs.
 ... astats           A->A       Show time domain statistics about audio frames.
 ... astreamsync      AA->AA     Copy two streams of audio data in a configurable order.
 ... asyncts          A->A       Sync audio data to timestamps
 ..C atempo           A->A       Adjust audio tempo.
 ... atrim            A->A       Pick one continuous section from the input, drop the rest.
 ... bandpass         A->A       Apply a two-pole Butterworth band-pass filter.
 ... bandreject       A->A       Apply a two-pole Butterworth band-reject filter.
 ... bass             A->A       Boost or cut lower frequencies.
 ... biquad           A->A       Apply a biquad IIR filter with the given coefficients.
 ... channelmap       A->A       Remap audio channels.
 ... channelsplit     A->N       Split audio into per-channel streams.
 ... chorus           A->A       Add a chorus effect to the audio.
 ... compand          A->A       Compress or expand audio dynamic range.
 T.. dcshift          A->A       Apply a DC shift to the audio.
 ... dynaudnorm       A->A       Dynamic Audio Normalizer.
 ... earwax           A->A       Widen the stereo image.
 ... ebur128          A->N       EBU R128 scanner.
 ... equalizer        A->A       Apply two-pole peaking equalization (EQ) filter.
 ... flanger          A->A       Apply a flanging effect to the audio.
 ... highpass         A->A       Apply a high-pass filter with 3dB point frequency.
 ... join             N->A       Join multiple audio streams into multi-channel output.
 ..C ladspa           N->A       Apply LADSPA effect.
 ... lowpass          A->A       Apply a low-pass filter with 3dB point frequency.
 ... pan              A->A       Remix channels with coefficients (panning).
 ... replaygain       A->A       ReplayGain scanner.
 ... resample         A->A       Audio resampling and conversion.
 ... sidechaincompress AA->A      Sidechain compressor.
 ... silencedetect    A->A       Detect silence.
 ... silenceremove    A->A       Remove silence.
 ... treble           A->A       Boost or cut upper frequencies.
 T.C volume           A->A       Change input volume.
 ... volumedetect     A->A       Detect audio volume.
 ... aevalsrc         |->A       Generate an audio signal generated by an expression.
 ... anullsrc         |->A       Null audio source, return empty audio frames.
 ... sine             |->A       Generate sine wave audio signal.
 ... anullsink        A->|       Do absolutely nothing with the input audio.
 ... alphaextract     V->N       Extract an alpha channel as a grayscale image component.
 ... alphamerge       VV->V      Copy the luma value of the second input into the alpha channel of the first input.
 TS. atadenoise       V->V       Apply an Adaptive Temporal Averaging Denoiser.
 ... ass              V->V       Render ASS subtitles onto input video using the libass library.
 T.. bbox             V->V       Compute bounding box for each frame.
 ... blackdetect      V->V       Detect video intervals that are (almost) black.
 ... blackframe       V->V       Detect frames that are (almost) black.
 TS. blend            VV->V      Blend two video frames into each other.
 T.. boxblur          V->V       Blur the input.
 T.. codecview        V->V       Visualize information about some codecs
 T.. colorbalance     V->V       Adjust the color balance.
 T.. colorchannelmixer V->V       Adjust colors by mixing color channels.
 TS. colorkey         V->V       colorkey filter
 T.. colorlevels      V->V       Adjust the color levels.
 TS. colormatrix      V->V       Convert color matrix.
 ... copy             V->V       Copy the input video unchanged to the output.
 ... cover_rect       V->V       Find and cover a user specified object
 ..C crop             V->V       Crop the input video.
 T.. cropdetect       V->V       Auto-detect crop size.
 TS. curves           V->V       Adjust components curves.
 TS. dctdnoiz         V->V       Denoise frames using 2D DCT.
 TS. deband           V->V       Debands video.
 ... decimate         N->V       Decimate frames (post field matching filter).
 T.. deflate          V->V       Apply deflate effect
 ... dejudder         V->V       Remove judder produced by pullup.
 T.. delogo           V->V       Remove logo from input video.
 ... deshake          V->V       Stabilize shaky video.
 ... detelecine       V->V       Apply an inverse telecine pattern.
 T.. dilation         V->V       Apply dilation effect
 T.. drawbox          V->V       Draw a colored box on the input video.
 ... drawgraph        V->V       Draw a graph using input video metadata.
 T.. drawgrid         V->V       Draw a colored grid on the input video.
 T.C drawtext         V->V       Draw text on top of video frames using libfreetype library.
 T.. edgedetect       V->V       Detect and draw edge.
 ... elbg             V->V       Apply posterize effect, using the ELBG algorithm.
 ..C eq               V->V       Adjust brightness, contrast, gamma, and saturation.
 T.. erosion          V->V       Apply erosion effect
 ... extractplanes    V->N       Extract planes as grayscale frames.
 .S. fade             V->V       Fade in/out input video.
 ... fftfilt          V->V       Apply arbitrary expressions to samples in frequency domain
 ... field            V->V       Extract a field from the input video.
 ... fieldmatch       N->V       Field matching for inverse telecine.
 T.. fieldorder       V->V       Set the field order.
 ... find_rect        V->V       Find a user specified object
 ... format           V->V       Convert the input video to one of the specified pixel formats.
 ... fps              V->V       Force constant framerate.
 ... framepack        VV->V      Generate a frame packed stereoscopic video.
 ... framerate        V->V       Upsamples or downsamples progressive source between specified frame rates.
 T.. framestep        V->V       Select one frame every N frames.
 T.. fspp             V->V       Apply Fast Simple Post-processing filter.
 T.. geq              V->V       Apply generic equation to each pixel.
 T.. gradfun          V->V       Debands video quickly using gradients.
 TS. haldclut         VV->V      Adjust colors using a Hald CLUT.
 .S. hflip            V->V       Horizontally flip the input video.
 T.. histeq           V->V       Apply global color histogram equalization.
 ... histogram        V->V       Compute and draw a histogram.
 T.. hqdn3d           V->V       Apply a High Quality 3D Denoiser.
 .S. hqx              V->V       Scale the input by 2, 3 or 4 using the hq*x magnification algorithm.
 ... hstack           N->V       Stack video inputs horizontally.
 T.C hue              V->V       Adjust the hue and saturation of the input video.
 ... idet             V->V       Interlace detect Filter.
 T.. il               V->V       Deinterleave or interleave fields.
 T.. inflate          V->V       Apply inflate effect
 ... interlace        V->V       Convert progressive video into interlaced.
 ... interleave       N->V       Temporally interleave video inputs.
 ... kerndeint        V->V       Apply kernel deinterlacing to the input.
 .S. lenscorrection   V->V       Rectify the image by correcting for lens distortion.
 TS. lut3d            V->V       Adjust colors using a 3D LUT.
 T.. lut              V->V       Compute and apply a lookup table to the RGB/YUV input video.
 T.. lutrgb           V->V       Compute and apply a lookup table to the RGB input video.
 T.. lutyuv           V->V       Compute and apply a lookup table to the YUV input video.
 ... mcdeint          V->V       Apply motion compensating deinterlacing.
 ... mergeplanes      N->V       Merge planes.
 ... mpdecimate       V->V       Remove near-duplicate frames.
 T.. negate           V->V       Negate input video.
 ... noformat         V->V       Force libavfilter not to use any of the specified pixel formats for the input to the next filter.
 TS. noise            V->V       Add noise.
 ... null             V->V       Pass the source unchanged to the output.
 T.C overlay          VV->V      Overlay a video source on top of the input.
 T.. owdenoise        V->V       Denoise using wavelets.
 ... pad              V->V       Pad the input video.
 ... palettegen       V->V       Find the optimal palette for a given stream.
 ... paletteuse       VV->V      Use a palette to downsample an input video stream.
 ... perms            V->V       Set permissions for the output video frame.
 TS. perspective      V->V       Correct the perspective of video.
 T.. phase            V->V       Phase shift fields.
 ... pixdesctest      V->V       Test pixel format definitions.
 T.C pp               V->V       Filter video using libpostproc.
 T.. pp7              V->V       Apply Postprocessing 7 filter.
 ... psnr             VV->V      Calculate the PSNR between two video streams.
 ... pullup           V->V       Pullup from field sequence to frames.
 T.. qp               V->V       Change video quantization parameters.
 ... random           V->V       Return random frames.
 TS. removegrain      V->V       Remove grain.
 T.. removelogo       V->V       Remove a TV logo based on a mask image.
 ... repeatfields     V->V       Hard repeat fields based on MPEG repeat field flag.
 ... reverse          V->V       Reverse a clip.
 TSC rotate           V->V       Rotate the input image.
 T.. sab              V->V       Apply shape adaptive blur.
 ..C scale            V->V       Scale the input video size and/or convert the image format.
 ..C scale2ref        VV->VV     Scale the input video size and/or convert the image format to the given reference.
 ... select           V->N       Select video frames to pass in output.
 ... sendcmd          V->V       Send commands to filters.
 ... separatefields   V->V       Split input video frames into fields.
 ... setdar           V->V       Set the frame display aspect ratio.
 ... setfield         V->V       Force field for the output video frame.
 ... setpts           V->V       Set PTS for the output video frame.
 ... setsar           V->V       Set the pixel sample aspect ratio.
 ... settb            V->V       Set timebase for the video output link.
 ... showinfo         V->V       Show textual information for each video frame.
 T.. showpalette      V->V       Display frame palette
 ... shuffleplanes    V->V       Shuffle video planes
 .S. signalstats      V->V       Generate statistics from video analysis.
 T.. smartblur        V->V       Blur the input video without impacting the outlines.
 ... split            V->N       Pass on the input to N video outputs.
 T.C spp              V->V       Apply a simple post processing filter.
 ... ssim             VV->V      Calculate the SSIM between two video streams.
 .S. stereo3d         V->V       Convert video stereoscopic 3D view.
 ... subtitles        V->V       Render text subtitles onto input video using the libass library.
 ... super2xsai       V->V       Scale the input by 2x using the Super2xSaI pixel art algorithm.
 ... swapuv           V->V       Swap U and V components.
 .S. tblend           V->V       Blend successive frames.
 ... telecine         V->V       Apply a telecine pattern.
 ... thumbnail        V->V       Select the most representative frame in a given sequence of consecutive frames.
 ... tile             V->V       Tile several successive frames together.
 ... tinterlace       V->V       Perform temporal field interlacing.
 .S. transpose        V->V       Transpose input video.
 ... trim             V->V       Pick one continuous section from the input, drop the rest.
 T.. unsharp          V->V       Sharpen or blur the input video.
 T.. uspp             V->V       Apply Ultra Simple / Slow Post-processing filter.
 ... vectorscope      V->V       Video vectorscope.
 ... vflip            V->V       Flip the input video vertically.
 T.. vignette         V->V       Make or reverse a vignette effect.
 ... vstack           N->V       Stack video inputs vertically.
 TS. w3fdif           V->V       Apply Martin Weston three field deinterlace.
 ... waveform         V->V       Video waveform monitor.
 .S. xbr              V->V       Scale the input using xBR algorithm.
 TS. yadif            V->V       Deinterlace the input image.
 T.. zoompan          V->V       Apply Zoom & Pan effect.
 ... allrgb           |->V       Generate all RGB colors.
 ... allyuv           |->V       Generate all yuv colors.
 ... cellauto         |->V       Create pattern generated by an elementary cellular automaton.
 ..C color            |->V       Provide an uniformly colored input.
 ... haldclutsrc      |->V       Provide an identity Hald CLUT.
 ... life             |->V       Create life.
 ... mandelbrot       |->V       Render a Mandelbrot fractal.
 ... mptestsrc        |->V       Generate various test pattern.
 ... nullsrc          |->V       Null video source, return unprocessed video frames.
 ... rgbtestsrc       |->V       Generate RGB test pattern.
 ... smptebars        |->V       Generate SMPTE color bars.
 ... smptehdbars      |->V       Generate SMPTE HD color bars.
 ... testsrc          |->V       Generate test pattern.
 ... nullsink         V->|       Do absolutely nothing with the input video.
 ... adrawgraph       A->V       Draw a graph using input audio metadata.
 ... aphasemeter      A->V       Convert input audio to phase meter video output.
 ... avectorscope     A->V       Convert input audio to vectorscope video output.
 ... concat           N->N       Concatenate audio and video streams.
 ... showcqt          A->V       Convert input audio to a CQT (Constant Q Transform) spectrum video output.
 ... showfreqs        A->V       Convert input audio to a frequencies video output.
 ... showspectrum     A->V       Convert input audio to a spectrum video output.
 ... showvolume       A->V       Convert input audio volume to video output.
 ... showwaves        A->V       Convert input audio to a video output.
 ... showwavespic     A->V       Convert input audio to a video output single picture.
 ... amovie           |->N       Read audio from a movie source.
 ... movie            |->N       Read from a movie source.
 ... ffbuffersink     V->|       Buffer video frames, and make them available to the end of the filter graph.
 ... ffabuffersink    A->|       Buffer audio frames, and make them available to the end of the filter graph.
 ... abuffer          |->A       Buffer audio frames, and make them accessible to the filterchain.
 ... buffer           |->V       Buffer video frames, and make them accessible to the filterchain.
 ... abuffersink      A->|       Buffer audio frames, and make them available to the end of the filter graph.
 ... buffersink       V->|       Buffer video frames, and make them available to the end of the filter graph.
 ... afifo            A->A       Buffer input frames and send them when they are requested.
 ... fifo             V->V       Buffer input images and send them when they are requested.
Pixel formats:
I.... = Supported Input  format for conversion
.O... = Supported Output format for conversion
..H.. = Hardware accelerated format
...P. = Paletted format
....B = Bitstream format
FLAGS NAME            NB_COMPONENTS BITS_PER_PIXEL
-----
IO... yuv420p                3            12
IO... yuyv422                3            16
IO... rgb24                  3            24
IO... bgr24                  3            24
IO... yuv422p                3            16
IO... yuv444p                3            24
IO... yuv410p                3             9
IO... yuv411p                3            12
IO... gray                   1             8
IO..B monow                  1             1
IO..B monob                  1             1
I..P. pal8                   1             8
IO... yuvj420p               3            12
IO... yuvj422p               3            16
IO... yuvj444p               3            24
..H.. xvmcmc                 0             0
..H.. xvmcidct               0             0
IO... uyvy422                3            16
..... uyyvyy411              3            12
IO... bgr8                   3             8
.O..B bgr4                   3             4
IO... bgr4_byte              3             4
IO... rgb8                   3             8
.O..B rgb4                   3             4
IO... rgb4_byte              3             4
IO... nv12                   3            12
IO... nv21                   3            12
IO... argb                   4            32
IO... rgba                   4            32
IO... abgr                   4            32
IO... bgra                   4            32
IO... gray16be               1            16
IO... gray16le               1            16
IO... yuv440p                3            16
IO... yuvj440p               3            16
IO... yuva420p               4            20
..H.. vdpau_h264             0             0
..H.. vdpau_mpeg1            0             0
..H.. vdpau_mpeg2            0             0
..H.. vdpau_wmv3             0             0
..H.. vdpau_vc1              0             0
IO... rgb48be                3            48
IO... rgb48le                3            48
IO... rgb565be               3            16
IO... rgb565le               3            16
IO... rgb555be               3            15
IO... rgb555le               3            15
IO... bgr565be               3            16
IO... bgr565le               3            16
IO... bgr555be               3            15
IO... bgr555le               3            15
..H.. vaapi_moco             0             0
..H.. vaapi_idct             0             0
..H.. vaapi_vld              0             0
IO... yuv420p16le            3            24
IO... yuv420p16be            3            24
IO... yuv422p16le            3            32
IO... yuv422p16be            3            32
IO... yuv444p16le            3            48
IO... yuv444p16be            3            48
..H.. vdpau_mpeg4            0             0
..H.. dxva2_vld              0             0
IO... rgb444le               3            12
IO... rgb444be               3            12
IO... bgr444le               3            12
IO... bgr444be               3            12
IO... ya8                    2            16
IO... bgr48be                3            48
IO... bgr48le                3            48
IO... yuv420p9be             3            13
IO... yuv420p9le             3            13
IO... yuv420p10be            3            15
IO... yuv420p10le            3            15
IO... yuv422p10be            3            20
IO... yuv422p10le            3            20
IO... yuv444p9be             3            27
IO... yuv444p9le             3            27
IO... yuv444p10be            3            30
IO... yuv444p10le            3            30
IO... yuv422p9be             3            18
IO... yuv422p9le             3            18
..H.. vda_vld                0             0
IO... gbrp                   3            24
IO... gbrp9be                3            27
IO... gbrp9le                3            27
IO... gbrp10be               3            30
IO... gbrp10le               3            30
I.... gbrp16be               3            48
I.... gbrp16le               3            48
IO... yuva420p9be            4            22
IO... yuva420p9le            4            22
IO... yuva422p9be            4            27
IO... yuva422p9le            4            27
IO... yuva444p9be            4            36
IO... yuva444p9le            4            36
IO... yuva420p10be           4            25
IO... yuva420p10le           4            25
IO... yuva422p10be           4            30
IO... yuva422p10le           4            30
IO... yuva444p10be           4            40
IO... yuva444p10le           4            40
IO... yuva420p16be           4            40
IO... yuva420p16le           4            40
IO... yuva422p16be           4            48
IO... yuva422p16le           4            48
IO... yuva444p16be           4            64
IO... yuva444p16le           4            64
..H.. vdpau                  0             0
IO... xyz12le                3            36
IO... xyz12be                3            36
..... nv16                   3            16
..... nv20le                 3            20
..... nv20be                 3            20
IO... yvyu422                3            16
..H.. vda                    0             0
I.... ya16be                 2            32
I.... ya16le                 2            32
..H.. qsv                    0             0
..H.. mmal                   0             0
..H.. d3d11va_vld            0             0
IO... rgba64be               4            64
IO... rgba64le               4            64
IO... bgra64be               4            64
IO... bgra64le               4            64
IO... 0rgb                   3            24
IO... rgb0                   3            24
IO... 0bgr                   3            24
IO... bgr0                   3            24
IO... yuva444p               4            32
IO... yuva422p               4            24
IO... yuv420p12be            3            18
IO... yuv420p12le            3            18
IO... yuv420p14be            3            21
IO... yuv420p14le            3            21
IO... yuv422p12be            3            24
IO... yuv422p12le            3            24
IO... yuv422p14be            3            28
IO... yuv422p14le            3            28
IO... yuv444p12be            3            36
IO... yuv444p12le            3            36
IO... yuv444p14be            3            42
IO... yuv444p14le            3            42
IO... gbrp12be               3            36
IO... gbrp12le               3            36
IO... gbrp14be               3            42
IO... gbrp14le               3            42
IO... gbrap                  4            32
I.... gbrap16be              4            64
I.... gbrap16le              4            64
IO... yuvj411p               3            12
I.... bayer_bggr8            3             8
I.... bayer_rggb8            3             8
I.... bayer_gbrg8            3             8
I.... bayer_grbg8            3             8
I.... bayer_bggr16le         3            16
I.... bayer_bggr16be         3            16
I.... bayer_rggb16le         3            16
I.... bayer_rggb16be         3            16
I.... bayer_gbrg16le         3            16
I.... bayer_gbrg16be         3            16
I.... bayer_grbg16le         3            16
I.... bayer_grbg16be         3            16
IO... yuv440p10le            3            20
IO... yuv440p10be            3            20
IO... yuv440p12le            3            24
IO... yuv440p12be            3            24
IO... ayuv64le               4            64
..... ayuv64be               4            64
..H.. videotoolbox_vld       0             0
Individual channels:
NAME           DESCRIPTION
FL             front left
FR             front right
FC             front center
LFE            low frequency
BL             back left
BR             back right
FLC            front left-of-center
FRC            front right-of-center
BC             back center
SL             side left
SR             side right
TC             top center
TFL            top front left
TFC            top front center
TFR            top front right
TBL            top back left
TBC            top back center
TBR            top back right
DL             downmix left
DR             downmix right
WL             wide left
WR             wide right
SDL            surround direct left
SDR            surround direct right
LFE2           low frequency 2

Standard channel layouts:
NAME           DECOMPOSITION
mono           FC
stereo         FL+FR
2.1            FL+FR+LFE
3.0            FL+FR+FC
3.0(back)      FL+FR+BC
4.0            FL+FR+FC+BC
quad           FL+FR+BL+BR
quad(side)     FL+FR+SL+SR
3.1            FL+FR+FC+LFE
5.0            FL+FR+FC+BL+BR
5.0(side)      FL+FR+FC+SL+SR
4.1            FL+FR+FC+LFE+BC
5.1            FL+FR+FC+LFE+BL+BR
5.1(side)      FL+FR+FC+LFE+SL+SR
6.0            FL+FR+FC+BC+SL+SR
6.0(front)     FL+FR+FLC+FRC+SL+SR
hexagonal      FL+FR+FC+BL+BR+BC
6.1            FL+FR+FC+LFE+BC+SL+SR
6.1(back)      FL+FR+FC+LFE+BL+BR+BC
6.1(front)     FL+FR+LFE+FLC+FRC+SL+SR
7.0            FL+FR+FC+BL+BR+SL+SR
7.0(front)     FL+FR+FC+FLC+FRC+SL+SR
7.1            FL+FR+FC+LFE+BL+BR+SL+SR
7.1(wide)      FL+FR+FC+LFE+BL+BR+FLC+FRC
7.1(wide-side) FL+FR+FC+LFE+FLC+FRC+SL+SR
octagonal      FL+FR+FC+BL+BR+BC+SL+SR
hexadecagonal  FL+FR+FC+BL+BR+BC+SL+SR+TFL+TFC+TFR+TBL+TBC+TBR+WL+WR
downmix        DL+DR
name   depth
u8        8
s16      16
s32      32
flt      32
dbl      64
u8p       8
s16p     16
s32p     32
fltp     32
dblp     64
name                             #RRGGBB
AliceBlue                        #f0f8ff
AntiqueWhite                     #faebd7
Aqua                             #00ffff
Aquamarine                       #7fffd4
Azure                            #f0ffff
Beige                            #f5f5dc
Bisque                           #ffe4c4
Black                            #000000
BlanchedAlmond                   #ffebcd
Blue                             #0000ff
BlueViolet                       #8a2be2
Brown                            #a52a2a
BurlyWood                        #deb887
CadetBlue                        #5f9ea0
Chartreuse                       #7fff00
Chocolate                        #d2691e
Coral                            #ff7f50
CornflowerBlue                   #6495ed
Cornsilk                         #fff8dc
Crimson                          #dc143c
Cyan                             #00ffff
DarkBlue                         #00008b
DarkCyan                         #008b8b
DarkGoldenRod                    #b8860b
DarkGray                         #a9a9a9
DarkGreen                        #006400
DarkKhaki                        #bdb76b
DarkMagenta                      #8b008b
DarkOliveGreen                   #556b2f
Darkorange                       #ff8c00
DarkOrchid                       #9932cc
DarkRed                          #8b0000
DarkSalmon                       #e9967a
DarkSeaGreen                     #8fbc8f
DarkSlateBlue                    #483d8b
DarkSlateGray                    #2f4f4f
DarkTurquoise                    #00ced1
DarkViolet                       #9400d3
DeepPink                         #ff1493
DeepSkyBlue                      #00bfff
DimGray                          #696969
DodgerBlue                       #1e90ff
FireBrick                        #b22222
FloralWhite                      #fffaf0
ForestGreen                      #228b22
Fuchsia                          #ff00ff
Gainsboro                        #dcdcdc
GhostWhite                       #f8f8ff
Gold                             #ffd700
GoldenRod                        #daa520
Gray                             #808080
Green                            #008000
GreenYellow                      #adff2f
HoneyDew                         #f0fff0
HotPink                          #ff69b4
IndianRed                        #cd5c5c
Indigo                           #4b0082
Ivory                            #fffff0
Khaki                            #f0e68c
Lavender                         #e6e6fa
LavenderBlush                    #fff0f5
LawnGreen                        #7cfc00
LemonChiffon                     #fffacd
LightBlue                        #add8e6
LightCoral                       #f08080
LightCyan                        #e0ffff
LightGoldenRodYellow             #fafad2
LightGreen                       #90ee90
LightGrey                        #d3d3d3
LightPink                        #ffb6c1
LightSalmon                      #ffa07a
LightSeaGreen                    #20b2aa
LightSkyBlue                     #87cefa
LightSlateGray                   #778899
LightSteelBlue                   #b0c4de
LightYellow                      #ffffe0
Lime                             #00ff00
LimeGreen                        #32cd32
Linen                            #faf0e6
Magenta                          #ff00ff
Maroon                           #800000
MediumAquaMarine                 #66cdaa
MediumBlue                       #0000cd
MediumOrchid                     #ba55d3
MediumPurple                     #9370d8
MediumSeaGreen                   #3cb371
MediumSlateBlue                  #7b68ee
MediumSpringGreen                #00fa9a
MediumTurquoise                  #48d1cc
MediumVioletRed                  #c71585
MidnightBlue                     #191970
MintCream                        #f5fffa
MistyRose                        #ffe4e1
Moccasin                         #ffe4b5
NavajoWhite                      #ffdead
Navy                             #000080
OldLace                          #fdf5e6
Olive                            #808000
OliveDrab                        #6b8e23
Orange                           #ffa500
OrangeRed                        #ff4500
Orchid                           #da70d6
PaleGoldenRod                    #eee8aa
PaleGreen                        #98fb98
PaleTurquoise                    #afeeee
PaleVioletRed                    #d87093
PapayaWhip                       #ffefd5
PeachPuff                        #ffdab9
Peru                             #cd853f
Pink                             #ffc0cb
Plum                             #dda0dd
PowderBlue                       #b0e0e6
Purple                           #800080
Red                              #ff0000
RosyBrown                        #bc8f8f
RoyalBlue                        #4169e1
SaddleBrown                      #8b4513
Salmon                           #fa8072
SandyBrown                       #f4a460
SeaGreen                         #2e8b57
SeaShell                         #fff5ee
Sienna                           #a0522d
Silver                           #c0c0c0
SkyBlue                          #87ceeb
SlateBlue                        #6a5acd
SlateGray                        #708090
Snow                             #fffafa
SpringGreen                      #00ff7f
SteelBlue                        #4682b4
Tan                              #d2b48c
Teal                             #008080
Thistle                          #d8bfd8
Tomato                           #ff6347
Turquoise                        #40e0d0
Violet                           #ee82ee
Wheat                            #f5deb3
White                            #ffffff
WhiteSmoke                       #f5f5f5
Yellow                           #ffff00
YellowGreen                      #9acd32

Systemdサービスの作成

[Unit]
Description=Serviio Server Daemon
After=syslog.target network.target

[Service]
User=serviio
Type=simple
ExecStart=/opt/serviio/bin/serviio.sh

[Install]
WantedBy=multi-user.target 
# systemctl daemon-reload
# systemctl enable serviio 

JAVA_OPTSの編集(/opt/serviio/bin/serviio.sh)

ffmpeg.location /bin/ffmpeg
dcraw.location /bin/dcraw

補足

  • 「OS specific support」では、「uname」コマンドの出力結果でOSタイプを自動設定するようになっているが、「CYGWIN*」、「Darwin*」、「Linux」以外が返される場合は修正が必要。
  • 「Setup the JVM」では、javaをインストールした場所を「PATH」変数に設定していない場合は、「JAVA_HOME」変数を設定しておくべきである。
  • ユーザシェル変数は、Serviioサービスを実行するユーザの環境で行う。
# systemctl start serviio 

Serviioストリーミングサーバの設定

WEBコンソールに接続

メディアファイルのフォルダをストリーミング配信(公開)するための設定はWebコンソールから行います。

URL http://172.16.0.3:23423/console

※ローカルにGUI環境(デスクトップ環境)がインストール済みの場合は、「serviio-console.sh」を実行するかもしくは、使用しているWebブラウザーにてURLを「http://localhost:23423/console」にしてアクセス可能です。

SERVIIOへようこそ

SERVIIOへようこそ

状態

ネットワークアドレスが「172.16.1.0」になっていますが、正しくは「172.16.0.0」です。
状態

ライブラリ

共有フォルダ

共有フォルダ

オンラインリソース

オンラインリソース

配信

トランスコーディング

トランスコーディング

字幕

字幕

言語

言語

スタッキング

スタッキング

メタデータ

メタデータ

表示

表示

リモートアクセス

リモートアクセス

ソーシャル

ソーシャル

デバイスプロファイル設定

デバイスプロファイル作成ポリシー

1つのIPアドレスに対して複数のデバイス名をもつデバイスプロファイル設定は、Serviio 1.8ではサポートされていない。
例えば、Windows 10であれば、DLNA Media Playerには、「映画&テレビ」、「Windows Media Player」とサードパティ製DLNA Media Playerが考えられるが、接続したアプリによってデバイスプロファイルを変更できない。
また、Xperia ZL2 SOL25やXperia Z Ultra SOL24や Xperia Z4 Tablet SOT31のようなSony製のAndroid端末では、「VIDO&TV Sideview」、「ビデオ」、「ミュージック」アプリやその他Google Play アプリで接続可能であるが、それぞれのアプリ用のデバイスプロファイルを使い分けることができない。
そのため、接続機器ごとのデバイス名のマッピングだけを行い、デバイスプロファイルは「Generic DLNA Profile」を使用している。
再生問題が発生した場合は、接続アプリを変更したりアプリ側の設定を変更するようにし、それでもだめな場合のみ、個別にトランスコード設定を追加予定。

         <!--
                ========================= DO NOT EDIT - end     ====================================
        -->
        <profile extendsprofileid="1" id="Xperia SOL24" name="Xperia Z Ultra SOL24">
                <detection>
                        <httpheaders>
                                <x-av-client-info>.*SOL24.*</x-av-client-info>
                        </httpheaders>
                </detection>
        </profile>
        <profile extendsprofileid="1" id="Xperia SOT31" name="Xperia Tablet Z4 SOT31">
                <detection>
                        <httpheaders>
                                <x-av-client-info>.*SOT31.*</x-av-client-info>
                        </httpheaders>
                </detection>
        </profile>
        <profile extendsprofileid="1" id="Xperia SOL25" name="Xperia ZL2 SOL25">
                <detection>
                        <httpheaders>
                                <x-av-client-info>.*SOL25.*</x-av-client-info>
                        </httpheaders>
                </detection>
        </profile>
        <profile extendsprofileid="1" id="Windows 10" name="Windows 10">
                <detection>
                        <httpheaders>
                                <user-agent>Microsoft-Windows\/10\.0.*</user-agent>
                        </httpheaders>
                </detection>
        </profile>

補足

上記、デバイスプロファイルでは、Panasonic DIGA DMR-BWT660のデバイス名がまだ"Unrecognized device"のままでうまく検出できていません。
残り2デバイスは、RECBOXであるためMedia Playerの機能はないのでWebコンソール側でアクセス制限しています。
MSearchによるデバイス検出を定義する場合、「Editing Renderer Profiles」に記載のある要素しか使用できません。この際、記載順序も固定です。また、大文字小文字の区別もあります。
上記プロファイルに使用している要素名がすべて小文字に変換されていますので、コピーして使用する場合は正しく書き換えが必要です。

例えば以下のようなエラーが発生してServiioが起動しません。

2017-06-30 06:48:16,707 ERROR [XmlUtils] XML Profiles.xsd didn't pass validation, reason: cvc-complex-type.2.4.a: 要素'ModelNumber'で始まる無効なコンテンツが見つかりました。'{ProductNumber, Server}'のいずれかが必要です。 

デバイス名の文字数制限は20文字です。

2017-06-30 06:39:29,495 ERROR [XmlUtils] XML Profiles.xsd didn't pass validation, reason: cvc-maxLength-valid: 長さが'22'である値'DiXiM SeeQVault Server'は、タイプ'#AnonType_idProfileType'のmaxLength '20'に対してファセットが有効ではありません。 

 

ログファイルの最大サイズ変更

DEBUGで使用することを想定して最大サイズを500MBに変更しました。

<xml version="1.0" encoding="UTF-8"?>


<!-- ===================================================================== -->
<!--                                                                       -->
<!--  Log4j Configuration                                                  -->
<!--                                                                       -->
<!-- ===================================================================== -->

<log4j:configuration debug="false" xmlns:log4j="http://jakarta.apache.org/log4j/">

        <appender class="org.apache.log4j.RollingFileAppender" name="FILE"><param name="Threshold" value="DEBUG" /><param name="Append" value="true" /><param name="File" value="${serviio.home}/log/serviio.log" /><param name="MaxFileSize" value="500MB" /><param name="MaxBackupIndex" value="5" /><param name="Encoding" value="UTF-8" />
                <layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%d{ISO8601} %-5p [%c{1}] %m%n" />
                </layout>
        </appender>

   <category name="org.serviio">
      <priority value="INFO">
   </priority></category>

   <category name="com.sun.syndication">
      <priority value="ERROR">
   </priority></category>

   <category name="org.jaudiotagger">
      <priority value="ERROR">
   </priority></category>

   <category name="org.restlet">
      <priority value="OFF">
   </priority></category>

   <category name="LogService"> <!-- Restlet access log -->
      <priority value="OFF">
   </priority></category>

   <category name="org.apache.jcs">
      <priority value="WARN">
   </priority></category>

   <root>
      <priority value="INFO">
      <appender-ref ref="FILE">
   </appender-ref></priority></root>

</log4j:configuration>

課題

FFmpegのコンパイルオプションがServiioのフル機能に対応していません。

2017-06-30 07:03:41,793 INFO  [FFMPEGWrapper] Found FFmpeg: /bin/ffmpeg
2017-06-30 07:03:41,797 INFO  [FFMPEGWrapper] FFmpeg details: [version=2.8.12, libRtpmPresent=false, libAssPresent=true, libShinePresent=false, libMxfPresent=false] 

ffmpegのバージョンも古いため最新のソースコードからコンパイル予定です。

ファイル破損してしまっている楽曲が存在しているようで、起動時に警告メッセージが出力されています。

2017-06-30 07:04:08,198 WARN  [MetadataExtractionCoordinator] Skipping processing metadata for an unsupported file (省略). Message: Unknown audio file type. 

serviioは起動しますので、この楽曲だけがうまく再生できないだけです。
serviioでは検出したメディアファイルに対して「ffmpeg -i ファイル名」の結果をデータベースに登録していきます。
この時にメタ情報が抽出できなかったメディアファイルは再生が正しくできない可能性があります。
試しに、Windowsファイル共有にて再生してみましたが、「ファイルタイプがサポートされていないか、ファイルの拡張子が正しくないかまたはファイル破損」といったエラーで再生できません。
再度、CDから変換予定です。

phoenix 2017/06/28 (水)- 20:07

ディストリビューション

CentOS 7.x

LVM化

LVM化

LIVA-Xのパーティションは「ソフトウェア構成」に記載した通り、非LVMで構成しました。
USB接続の外部HDDのファイルシステムはbtrfsでRAIDを構成しました。
ファイルシステムにbtrfsを使用したかったのが理由です。
当時、btrfsはLVMに対応していないためLVMにはできませんでした。
今後、CentOSが推奨するファイルシステムは少なくともbtrfsにはならないであろうことが判明したので思い切ってLVM化することにしました。

当初2台接続していた外部HDDケースですが、1台はWindows 10に接続してユーザデータ用に使用するために取り除きました。
今回は、/bootと/boot/efiを除くすべてをLVMに移行することにしました。

なお当環境はUEFI+GPTです。

パーティションは以下の通りです。

# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sat Jul 15 21:17:31 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=ba71a324-7dad-43ec-84f4-965cd89eea8e /                       xfs     defaults        0 0
UUID=7fcac5e9-e97c-4767-a6e1-a09902aa0453 /boot                   xfs     defaults        0 0
UUID=7D97-F900          /boot/efi               vfat    umask=0077,shortname=winnt 0 0
UUID=e16ad6b1-825e-45a0-8927-e624adca3a56 swap                    swap    defaults        0 0
UUID=c25a9864-ae95-4a49-b696-dea32bb1de9b /home                   xfs     defaults        0 0
UUID=8d8b20d6-fff1-4429-9f96-d279884049a2 /backup               btrfs noatime,autodefrag,compress-force=lzo,space_cache 0 0
UUID=c3291542-f3cc-4ccd-87e7-4ad5a5a2c578 /var/lib/mysql        btrfs noatime,nodatacow,autodefrag,space_cache 0 0

データの移動

外付けHDDに保存されているデータを退避させるため、RHDMアダプターにiVDR-SカセットHDD1TBを装着して利用しました。
使用量の少ないパーティションはそのままルートパーティションに含めました。

なおデータの移動にはtarコマンドを使用しました。

例)/mntにマウントしたドライブに/homeの内容をコピー

# cd /home 
# tar cvf . - | (cd /mnt | tar xvf -)

/varと/var/lib/mysqlはルートパーティションへ同じようにコピーしました。

ディスクドライブの初期化

外付けHDDの対象のディスクドライブは5台あります。
それぞれデバイス名は/dev/sd[a,b,c,d,e]です。
※USB接続のHDDは起動順序でデバイス名が変わりますので/var/log/messagesで確認してください。

まず、ファイルシステムbtrfsでRAIDを構成していたため、念のため、以下を実施しました。

# mount /dev/sdd /mnt
# btrfs device delete /dev/sdd /mnt
# btrfs device delete /dev/sde /mnt
# umount /mnt
# wipefs -o 0x10040 /dev/sd[de]
# fdisk /dev/sdd
# fdisk /dev/sde
# mount /dev/sda /mnt
# btrfs device delete /dev/sda /mnt
# btrfs device delete /dev/sdb /mnt
# btrfs device delete /dev/sdc /mnt
# umount /mnt
# wipefs -o 0x10040 /dev/sd[abc]
# fdisk /dev/sda
# fdisk /dev/sdb
# fdisk /dev/sdc

コマンドはGPT対応バージョンのfdiskかgdiskを使用すればよいと思います。
fdiskでシステムIDをLinux LVM(8e)に設定しています。

LVMの作成

PVの作成

# pvcraete /dev/sda1
# pvcraete /dev/sdb1
# pvcraete /dev/sdc1
# pvcraete /dev/sdd1
# pvcraete /dev/sde1

VGの作成

以下の例ではVG名はLIVAX(任意)にしています。

# vgcreate LIVAX /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

LVの作成(RAID1)

LVをミラーで作成します。

# lvcreate --type raid1 -m 1 -L 10G -n system-root LIVAX
# lvcreate --type raid1 -m 1 -L 10G -n system-usr LIVAX
# lvcreate --type raid1 -m 1 -L 10G -n system-var LIVAX
# lvcreate --type raid1 -m 1 -L 20G -n system-mysql LIVAX
# lvcreate --type raid1 -m 1 -L 1T -n system-home LIVAX

※/(ルート),/usr,/var,/var/mysql,/homeのパーティションを作成しました。

ファイルシステムの作成(フォーマット)

XFSでフォーマットしました。

 # mkfs -t xfs /dev/LIVAX/system-var
 # mkfs -t xfs /dev/LIVAX/system-usr
 # mkfs -t xfs /dev/LIVAX/system-root
 # mkfs -t xfs /dev/LIVAX/system-mysql
 # mkfs -t xfs /dev/LIVAX/system-home

新環境へデータの複製

/mntにそれぞれのLVをマウントしてtarコマンドにてデータを複製しました。
以下は/homeの例です。

# mount /dev/LIVAX/system-home /mnt
# cd /home
# tar cvf . - | (cd /mnt;tar xvf -)
# umount /mnt

※/(ルート)の場合は、/usrや/varや/homeやデバイスファイルなどをコピーしないように除外リストを使用しました。

新環境をマウント

/mnt以下に新環境をすべてマウントします。

# mount /dev/LIVAX/system-root /mnt
# cd /mnt
# mkdir -p home usr var
# mount /dev/LIVAX/system-usr usr
# mount /dev/LIVAX/system-var var
# mount /dev/LIVAX/system-mysql var/lib/mysql
# mount /dev/LIVAX/system-home home
# mount /dev/mmcblk0p2 boot
# mount /dev/mmcblk0p2 boot/efi
# mount -t proc proc proc
# mount -t sysfs sys sys
# mount -o bind /dev dev
# mount -t devpts pts dev/pts

自動マウントの設定

新環境の/etc/fstab(/mnt/etc/fstab)の内容をLVMのディスクパーティションをマウントするように変更します。
USBデバイスが複数あるとデバイス名が起動時に変更になることがあるので今回はUUIDを使用することにしました。

UUIDの取得

# blkid

/mnt/etc/fstabの変更

※編集するファイルのパスに注意してください

#
# /etc/fstab
# Created by anaconda on Sat Jul 15 21:17:31 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
#UUID=ba71a324-7dad-43ec-84f4-965cd89eea8e /                       xfs     defaults        0 0
UUID=49d00818-8ab7-4162-9818-43b79135175c /                       xfs     defaults        0 0
UUID=7fcac5e9-e97c-4767-a6e1-a09902aa0453 /boot                   xfs     defaults        0 0
UUID=7D97-F900          /boot/efi               vfat    umask=0077,shortname=winnt 0 0
UUID=e16ad6b1-825e-45a0-8927-e624adca3a56 swap                    swap    defaults        0 0
#UUID=3b7735e7-61aa-4781-a271-c3df5a2eccdc /home                   xfs     defaults        0 0
UUID=bbd8789e-379a-4034-ae4e-452c9156b9b9  /usr                   xfs     defaults        0 0
UUID=074c1b74-976c-4333-a7b4-98b78d3daad1  /var                   xfs     defaults        0 0
UUID=5b535b7b-bc20-434c-a132-e019293c3245  /var/lib/mysql                   xfs     defaults        0 0
UUID=9237bcd9-ea64-47db-bcd1-1f83bb6f8953 /home                   xfs     defaults        0 0

ルートディレクトリの変更

新環境がルートになるようにchrootコマンドで変更

# chroot /mnt

GRUB2の更新

# grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

初期RAMディスクイメージの再作成

# cd boot
# mv initramfs-3.10.0-693.21.1.el7.x86_64.img initramfs-3.10.0-693.21.1.el7.x86_64.img.old
# dracut initramfs-3.10.0-693.21.1.el7.x86_64.img 3.10.0-693.21.1.el7.x86_64

chrootから抜ける

# exit

すべてアンマウント

# umount dev/pts
# umount dev
# umount sys
# umount proc
# umount boot/efi
# umount boot
# umount home
# umount var/lib/mysql
# umount var
# umount usr
# umount /mnt

システムの再起動

# shutdown -r now

LVMのパーティション

# df
ファイルシス                    1K-ブロック      使用    使用可 使用% マウント位置
/dev/mapper/LIVAX-system--root     10475520   1320256   9155264   13% /
devtmpfs                            1773824         0   1773824    0% /dev
tmpfs                               1785528         0   1785528    0% /dev/shm
tmpfs                               1785528     53920   1731608    4% /run
tmpfs                               1785528         0   1785528    0% /sys/fs/cgroup
/dev/mapper/LIVAX-system--usr      10475520   4059452   6416068   39% /usr
/dev/mmcblk0p2                      1038336    250036    788300   25% /boot
/dev/mmcblk0p1                       204580      9968    194612    5% /boot/efi
/dev/mapper/LIVAX-system--var      10475520   2323672   8151848   23% /var
/dev/mapper/LIVAX-system--home   1073217536 543722072 529495464   51% /home
/dev/mapper/LIVAX-system--mysql    20961280   1774052  19187228    9% /var/lib/mysql
tmpfs                                357108         0    357108    0% /run/user/1000

以上で完了です。

phoenix 2018/08/08 (水)- 11:33

ディストリビューション

CentOS 7.x

タグ

LVM LIVA-X grub2

後方散乱メール/配信不能レポートスパム対策

後方散乱メール/配信不能レポートスパム対策

さくらのVPSで独自ドメイン用のメールサーバを構築していますが、最近になってパートナーのメールアドレスへ後方散乱メール/配信不能レポートスパムが届くようになりました。

後方散乱メール/配信不能レポートについては「後方散乱メール (Backscatter)/配信不能レポート (NDR) スパムについて」がわかりやすいと思います。

どうしてターゲットになってしまったのか?

独自ドメインは2ドメイン運営しています。
しかし、ターゲットになっているのはパートナーのドメインのうち1ユーザのメールアドレスのみです。
独自ドメインでそれぞれ別のWEBサイトも運営していますが、管理ユーザのメールアドレスは私のメールアドレスにしてあります。WEBサイトからどうこうではないようです。
考えられうのは過去に届いたフィッシング詐欺メールの可能性が高いです。
楽天カード関連かアップルID関連の偽装メールでメール本文のリンク先をクリックしてしまったそうです。

事象

スパムメールはスパム対策(ブラックリスト)によりほぼ拒否(REJECT)できています。
また、milter-managerによりウィルススキャンとspamチェックを行いspamと判断されればヘッダー内容を変更して受信しています。
問題のメールはFrom:とTo:が偽装され送られてきます。
From:には当ドメインのメールアドレスです。
To:やcc:には第3者のメールアドレスが複数記載されています。
外部のMTAからこのメールを受信するとまずsmtpdで処理されます。
smtpdからcleanupサーバに渡されここで偽装されたFrom:に書き換えられます。
そして、/var/spool/postfix/incomingキューにメールを置きます。
ここまでがメールの受け取り( receiving )です。
次に、cleanupから通知を受けincomingキューにあるメールをqmgrが処理してsmtp(リモート配送)、local(ローカル配送)、lmtp(lmtpを使用したローカル配送)、virtual(バーチャルドメインメール配送)、pipe(外部プログラム配送)、error(エラーメール配送)のそれぞれに配送します。この一連の操作がメールの配送(delivering)です。今回は、smtp(リモート配信)を行おうとしてerrorが発生しています。

アクセス制限は、smtpd_client_restrictions、smtpd_helo_restrictions、smtpd_sender_restrictions、smtpd_recipient_restrictions、smtpd_data_restrictions、smtpd_etrn_restrictionsで行えます。
これらはsmtpdのそれぞれのコマンドのEHLO/HELO、MAIL FROM、RPCT TO、DATA、ETRNでアクセス制限が行えます。
rblブラックリストのサーバは以下の3つを使用しています。

reject_rbl_client zen.spamhaus.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client sbl.spamhaus.org,

zenだけでもいいようにおもいますが念のためsblも追加しています。

メールの第3者への配送は失敗しています。
スパムメールのブラックリストサイトにも当ドメインは登録されていませんでした。
しかし失敗したメールはdefferedキューもしくはbounceキューに入ってしまいます。これらは設定にもよりますが有効期間中は間隔を変えながら再送を試みます。
送信者がローカルのメールアドレスに書き換えられているため、これによってキューには4000通以上のNDRレポートが蓄積されていました。
当然、新たにスパムメールも次々配信されてきますのでたまる一方です。
当サイトではmysqlにも影響を与えます。

対処

キュー一覧の表示

# postqueue -p

キューのクリア

# postsuper -d ALL

※すべてのキューを削除していますが個別に削除も可能です。

対策

header_checksを追加

もともとこの機能は利用していましたが、添付ファイルの拡張子で拒否判定をしていただけでした。

header_checks                       = pcre:/etc/postfix/header_checks

/etc/postfix/header_checksにFrom行の文字列一致で拒否を追加しました。

/^From:.*\"CANADA PHARMACY\" <.*@.*>/ REJECT

From:が"CANADA PHARMACY" <メールアドレス>に書き換えられているのでこの部分にマッチするものをREJECTしています。
これによってキューに残らなくなりました。

ips.backscatter.orgを追加

smtpd_recipient_restrictions        = permit_mynetworks,
                                              .....
                                              check_sender_access hash:/etc/postfix/check_backscatterer,
                                              .....
# cat check_backscatterer
<>  reject_rbl_client ips.backscatterer.org
postmaster reject_rbl_client ips.backscatterer.org

これについてはこちらを参照してください。
※postconf -mでサポートテーブルタイプがわかります。dbmはサポートしていなかったのでhashにしています。hashの場合はpostmapを実行してdbを作成してください。

# postmap check_backscatterer
# systemctl reload postfix

今回は以上で対策できましたが、別のサイトから狙われるとパターンが変わるのでまた対策が必要です。

DSN をすべて拒否

今回のスパム送信者は配送状態通知(DSN)を利用していたため、無効にしても当システムには影響ないので拒否するように設定しました。

smtpd_discard_ehlo_keywords         = silent-discard, dsn

2018.9.13追記 メールのパスワードが盗まれていた

MailFromヘッダーの一致で拒否していましたが、ずっと気になっていたメールログです。やっぱりリモートでSMTPS認証に成功しているようにしか思えません。

Sep 13 13:03:03 MTAホスト名 postfix/smtpd[7649]: Anonymous TLS connection established from unknown[186.216.156.42]: TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)
Sep 13 13:03:07 MTAホスト名 postfix/smtpd[7649]: 37FCF20156D2: client=unknown[186.216.156.42], sasl_method=CRAM-MD5, sasl_username=当該メールアドレス

もう一度、パートナーにヒヤリングをしてみることにしました。
その中で、メールに貼り付けられたリンクボタンから楽天のログインページにアクセスしてアカウント(メールアドレス)とパスワードを入力までして、楽天カードは入会していないからおかしいと気が付いてページを閉じたそうです。しかし、楽天では身に覚えのない商品が注文されていて・・・、楽天の方は対処してパスワードも変更したそうです。
それではなんでメールサーバにログインできるかというとメールのパスワードと変更前の楽天のパスワードが同じだったからです。
メールのパスワードは変更していなかったのでそのままリモートでログインされていた。というのが真実のようです。

SMTP認証にはdovecot-saslを使用しています。
mysqlデータベースで管理しているためメールのパスワード変更方法が特殊でその方法を教えていなかった責任を感じました。
本日、パスワード変更をしたので「authentication failed: 」で拒否されるでしょう。
これで根本的な解決ができました。

なにかあるとすべてのパスワードが流出してしまうことになるためパスワードの使いまわしはやめましょう!!
そんなにたくさんのパスワードを覚えられないという方は、信頼できるパスワード管理ツールの利用を検討するとよいと思います。

phoenix 2018/09/05 (水)- 15:51

ディストリビューション

CentOS 7.x

Milter Manager + OpenDKIM

Milter Manager + OpenDKIM

OpenDKIMのインストールおよび設定(postfixの設定やDNSの設定など含む)と「milterを使った効果的な迷惑メール対策」にあるCentOS7のインストール方法にてMilter ManagerおよびPostfixの設定までが完了しているとして、OpenDKIMをMilter Managerで管理させる方法を記載します。

それぞれ関連するソフトウェアのバージョンです。

postfix 2.10.1
openDKIM 2.11.0
Milter Manager 2.1.4

Postfixの設定はMilter Managerの設定方法通りです。
※Postfix+openDKIMにあるような設定をPostfix(main.cfやmaster.cf)にはしません。

# ---------------------- Milter Manager ------------------------------
milter_protocol                     = 6
milter_default_action               = accept
smtpd_milters                       = unix:/var/run/milter-manager/milter-manager.sock
milter_mail_macros                  = {auth_author} {auth_type} {auth_authen}

スパム対策/ウィルス対策はそれぞれspamass-milterとclamav-milterにてすでにMilter Manager管理下にあります。
これまでcontent_filterに記載していたスパム対策/ウィルス対策用フィルターは削除するかコメントにしておきます。

Milter ManagerにopenDKIMを管理させる

Milter ManagerはシステムにインストールされているMilterを自動検出できるので以下のコマンドで検出できて有効になっているかが確認できます。

# milter-manager --show-config
# default
package.platform = "centos7"
# default
package.options = nil

# /etc/milter-manager/defaults/redhat.conf:3
security.privilege_mode = true
# default
security.effective_user = "milter-manager"
# default
security.effective_group = "milter-manager"

# default
log.level = "default"
# default
log.path = nil
# default
log.use_syslog = true
# default
log.syslog_facility = "mail"

# /etc/milter-manager/milter-manager.conf:11
manager.connection_spec = "inet:10025@[127.0.0.1]"
# /etc/milter-manager/milter-manager.conf:12
manager.unix_socket_mode = 0660
# default
manager.unix_socket_group = "milter-manager"
# default
manager.remove_unix_socket_on_create = true
# default
manager.remove_unix_socket_on_close = true
# default
manager.daemon = false
# default
manager.pid_file = "/var/run/milter-manager/milter-manager.pid"
# default
manager.maintenance_interval = 10
# default
manager.suspend_time_on_unacceptable = 5
# default
manager.max_connections = 0
# default
manager.max_file_descriptors = 0
# default
manager.custom_configuration_directory = nil
# default
manager.fallback_status = "accept"
# default
manager.fallback_status_at_disconnect = "temporary-failure"
# default
manager.event_loop_backend = "glib"
# default
manager.n_workers = 0
# default
manager.packet_buffer_size = 0
# default
manager.connection_check_interval = 0
# default
manager.chunk_size = 65535
# default
manager.max_pending_finished_sessions = 0

# default
controller.connection_spec = nil
# default
controller.unix_socket_mode = 0660
# default
controller.unix_socket_group = nil
# default
controller.remove_unix_socket_on_create = true
# default
controller.remove_unix_socket_on_close = true

# default
database.type = nil
# default
database.name = nil
# default
database.host = nil
# default
database.port = nil
# default
database.path = nil
# default
database.user = nil
# default
database.password = nil

# /etc/milter-manager/applicable-conditions/authentication.conf:3
define_applicable_condition("Authenticated") do |condition|
  # /etc/milter-manager/applicable-conditions/authentication.conf:4
  condition.description = "Apply a milter only when sender is authorized"
end

# /etc/milter-manager/applicable-conditions/authentication.conf:11
define_applicable_condition("Unauthenticated") do |condition|
  # /etc/milter-manager/applicable-conditions/authentication.conf:12
  condition.description = "Apply a milter only when sender is not authorized"
end

# /etc/milter-manager/applicable-conditions/dnsbl.conf:99
define_applicable_condition("DNSBL Listed") do |condition|
  # /etc/milter-manager/applicable-conditions/dnsbl.conf:100
  condition.description = "Apply a milter only when connected host is listed in DNS-based Blackhole List"
end

# /etc/milter-manager/applicable-conditions/dnsbl.conf:109
define_applicable_condition("Not DNSBL Listed") do |condition|
  # /etc/milter-manager/applicable-conditions/dnsbl.conf:110
  condition.description = "Apply a milter only when connected host is not listed in DNS-based Blackhole List"
end

# /etc/milter-manager/applicable-conditions/remote-network.conf:25
define_applicable_condition("Remote Network") do |condition|
  # /etc/milter-manager/applicable-conditions/remote-network.conf:26
  condition.description = "Apply milter only if connected from remote network"
end

# /etc/milter-manager/applicable-conditions/s25r.conf:70
define_applicable_condition("S25R") do |condition|
  # /etc/milter-manager/applicable-conditions/s25r.conf:71
  condition.description = "Selective SMTP Rejection"
end

# /etc/milter-manager/applicable-conditions/sendmail-compatible.conf:5
define_applicable_condition("Sendmail Compatible") do |condition|
  # /etc/milter-manager/applicable-conditions/sendmail-compatible.conf:6
  condition.description = "Make a milter depends on Sendmail workable with Postfix"
end

# /etc/milter-manager/applicable-conditions/stress.conf:25
define_applicable_condition("Stress Notify") do |condition|
  # /etc/milter-manager/applicable-conditions/stress.conf:26
  condition.description = "Define stress=yes macro when stress situation"
end

# /etc/milter-manager/applicable-conditions/stress.conf:34
define_applicable_condition("No Stress") do |condition|
  # /etc/milter-manager/applicable-conditions/stress.conf:35
  condition.description = "Apply milter only when normal condition"
end

# /etc/milter-manager/applicable-conditions/trust.conf:87
define_applicable_condition("Trust") do |condition|
  # /etc/milter-manager/applicable-conditions/trust.conf:88
  condition.description = "Set {trusted_*}=yes macros for trusted session"
end

# /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:36
define_milter("milter-greylist") do |milter|
  # /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:44
  milter.connection_spec = "unix:/run/milter-greylist/milter-greylist.sock"
  # /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:38
  milter.description = "Grey listing filter for sendmail"
  # /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:37
  milter.enabled = true
  # default
  milter.fallback_status = "accept"
  # default
  milter.evaluation_mode = false
  milter.applicable_conditions = [
    # default
    "Sendmail Compatible",
    # default
    "Stress Notify",
    # default
    "Trust",
    # default
    "Remote Network",
    # default
    "S25R",
    # default
    "Unauthenticated",
  ]
  # /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:39
  milter.command = "/usr/bin/systemctl"
  # /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:40
  milter.command_options = "start milter-greylist"
  # default
  milter.user_name = nil
  # default
  milter.connection_timeout = 297.0
  # default
  milter.writing_timeout = 7.0
  # default
  milter.reading_timeout = 7.0
  # default
  milter.end_of_message_timeout = 297.0
end

# /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:36
define_milter("clamav-milter") do |milter|
  # /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:44
  milter.connection_spec = "unix:/var/run/clamav-milter/clamav-milter.socket"
  # /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:38
  milter.description = "Milter module for the Clam Antivirus scanner"
  # /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:37
  milter.enabled = true
  # default
  milter.fallback_status = "accept"
  # default
  milter.evaluation_mode = false
  # default
  milter.applicable_conditions = []
  # /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:39
  milter.command = "/usr/bin/systemctl"
  # /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:40
  milter.command_options = "start clamav-milter"
  # default
  milter.user_name = nil
  # default
  milter.connection_timeout = 297.0
  # default
  milter.writing_timeout = 7.0
  # default
  milter.reading_timeout = 7.0
  # default
  milter.end_of_message_timeout = 297.0
end

# /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:36
define_milter("spamass-milter") do |milter|
  # /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:44
  milter.connection_spec = "unix:/run/spamass-milter/postfix/sock"
  # /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:38
  milter.description = "Mail filter for SpamAssassin"
  # /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:37
  milter.enabled = true
  # default
  milter.fallback_status = "accept"
  # default
  milter.evaluation_mode = false
  milter.applicable_conditions = [
    # default
    "Remote Network",
    # default
    "Unauthenticated",
    # default
    "No Stress",
  ]
  # /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:39
  milter.command = "/usr/bin/systemctl"
  # /usr/lib64/milter-manager/binding/lib/milter/manager/detector.rb:40
  milter.command_options = "start spamass-milter"
  # default
  milter.user_name = nil
  # default
  milter.connection_timeout = 297.0
  # default
  milter.writing_timeout = 7.0
  # default
  milter.reading_timeout = 7.0
  # default
  milter.end_of_message_timeout = 297.0
end

または

# milter-manager --show-config | egrep 'define_milter|milter.connection_spec|milter.enabled'
define_milter("milter-greylist") do |milter|
  milter.connection_spec = "unix:/run/milter-greylist/milter-greylist.sock"
  milter.enabled = true
define_milter("clamav-milter") do |milter|
  milter.connection_spec = "unix:/var/run/clamav-milter/clamav-milter.socket"
  milter.enabled = true
define_milter("spamass-milter") do |milter|
  milter.connection_spec = "unix:/run/spamass-milter/postfix/sock"
  milter.enabled = true

openDKIMは検出できていないようですので/etc/milter-manager/milter-manager.local.confを作成し編集することで追加します。

# vi milter-manager.local.conf
define_milter("opendkim") do |milter|
  milter.connection_spec = "unix:/run/opendkim/opendkim.sock"
  milter.description = nil
  milter.enabled = true
  milter.fallback_status = "accept"
  milter.evaluation_mode = false
  milter.applicable_conditions = []
  milter.command = "/usr/bin/systemctl"
  milter.command_options = "start opendkim"
  milter.user_name = nil
  milter.connection_timeout = 300.0
  milter.writing_timeout = 10.0
  milter.reading_timeout = 10.0
  milter.end_of_message_timeout = 300.0
end

念のため再起動

# systemctl restart milter-manager

設定が反映されていることを確認

# milter-manager --show-config | egrep 'define_milter|milter.connection_spec|milter.enabled'
define_milter("milter-greylist") do |milter|
  milter.connection_spec = "unix:/run/milter-greylist/milter-greylist.sock"
  milter.enabled = true
define_milter("clamav-milter") do |milter|
  milter.connection_spec = "unix:/var/run/clamav-milter/clamav-milter.socket"
  milter.enabled = true
define_milter("spamass-milter") do |milter|
  milter.connection_spec = "unix:/run/spamass-milter/postfix/sock"
  milter.enabled = true
define_milter("opendkim") do |milter|
  milter.connection_spec = "unix:/run/opendkim/opendkim.sock"
  milter.enabled = true

openDKIMの動作を確認

外部からメールを送信または外部へメールを送信してみてpostfixのログファイル(/var/log/maillog)をチェックします。
また、メールのソースを表示してヘッダーを確認します。
※外部メールは自分が所有しているメールアドレスにしてください。

Sep 12 08:37:00 MTAホスト名 postfix/smtpd[17439]: connect from 送信元ドメイン名[IPアドレス]
Sep 12 08:37:00 MTAホスト名 milter-manager[7282]: [statistics] [milter][end][connect][stop][0.00082](2017): milter-greylist
Sep 12 08:37:01 MTAホスト名 policyd-spf[17466]: None; identity=helo; client-ip=IPアドレス; helo=送信元ドメイン名; envelope-from=送信者メールアドレス; receiver=宛先メールアドレス
Sep 12 08:37:01 MTAホスト名 policyd-spf[17466]: Pass; identity=mailfrom; client-ip=IPアドレス; helo=送信元ドメイン名; envelope-from=送信者メールアドレス; receiver=宛先メールアドレス
Sep 12 08:37:01 MTAホスト名 postfix/smtpd[17439]: キューID: client=送信元domain名[IPアドレス]
Sep 12 08:37:01 MTAホスト名 postfix/cleanup[17467]: キューID: message-id=<メッセージID>
Sep 12 08:37:07 MTAホスト名 spamd[13149]: spamd: connection from localhost [::1]:46338 to port 783, fd 6
Sep 12 08:37:07 MTAホスト名 spamd[13149]: spamd: setuid to sa-milt succeeded
Sep 12 08:37:07 MTAホスト名 spamd[13149]: spamd: processing message <メッセージID> for sa-milt:990
Sep 12 08:37:08 MTAホスト名 spamd[13149]: spamd: clean message (2.7/5.0) for sa-milt:990 in 1.5 seconds, 25646 bytes.
Sep 12 08:37:08 MTAホスト名 spamd[13149]: spamd: result: . 2 - FROM_EXCESS_BASE64,HTML_IMAGE_RATIO_04,HTML_MESSAGE,HTML_NONELEMENT_30_40,MIME_HEADER_CTYPE_ONLY,RCVD_IN_DNSWL_NONE,SPF_PASS,T_REMOTE_IMAGE,UNPARSEABLE_RELAY,URIBL_BLOCKED scantime=1.5,size=25646,user=sa-milt,uid=990,required_score=5.0,rhost=localhost,raddr=::1,rport=46338,mid=<メッセージID>,autolearn=no autolearn_force=no
Sep 12 08:37:08 MTAホスト名 milter-manager[7282]: [statistics] [milter][header][add](2019): <X-Spam-Status>=<No, score=2.7 required=5.0 tests=FROM_EXCESS_BASE64,#012#011HTML_IMAGE_RATIO_04,HTML_MESSAGE,HTML_NONELEMENT_30_40,MIME_HEADER_CTYPE_ONLY,#012#011RCVD_IN_DNSWL_NONE,SPF_PASS,T_REMOTE_IMAGE,UNPARSEABLE_RELAY,URIBL_BLOCKED#012#011autolearn=no autolearn_force=no version=3.4.0>: spamass-milter
Sep 12 08:37:08 MTAホスト名 milter-manager[7282]: [statistics] [milter][header][add](2019): <X-Spam-Level>=<**>: spamass-milter
Sep 12 08:37:08 MTAホスト名 milter-manager[7282]: [statistics] [milter][header][add](2019): <X-Spam-Checker-Version>=<SpamAssassin 3.4.0 (2014-02-07) on#012#011MTA-FQDN>: spamass-milter
Sep 12 08:37:08 MTAホスト名 opendkim[7019]: キューID: 送信元ドメイン名 [IPアドレス] not internal
Sep 12 08:37:08 MTAホスト名 opendkim[7019]: キューID: not authenticated
Sep 12 08:37:08 MTAホスト名 opendkim[7019]: キューID: no signature data
Sep 12 08:37:08 MTAホスト名 milter-manager[7282]: [statistics] [milter][header][add](2020): <DKIM-Filter>=< OpenDKIM Filter v2.11.0 MTA-FQDN キューID>: opendkim
Sep 12 08:37:08 MTAホスト名 milter-manager[7282]: [statistics] [session][header][add](2016): <DKIM-Filter>=< OpenDKIM Filter v2.11.0 MTA-FQDN キューID>
Sep 12 08:37:08 MTAホスト名 milter-manager[7282]: [statistics] [session][header][add](2016): <X-Spam-Status>=< No, score=2.7 required=5.0 tests=FROM_EXCESS_BASE64,#012#011HTML_IMAGE_RATIO_04,HTML_MESSAGE,HTML_NONELEMENT_30_40,MIME_HEADER_CTYPE_ONLY,#012#011RCVD_IN_DNSWL_NONE,SPF_PASS,T_REMOTE_IMAGE,UNPARSEABLE_RELAY,URIBL_BLOCKED#012#011autolearn=no autolearn_force=no version=3.4.0>
Sep 12 08:37:08 MTAホスト名 milter-manager[7282]: [statistics] [session][header][add](2016): <X-Spam-Level>=< **>
Sep 12 08:37:09 MTAホスト名 milter-manager[7282]: [statistics] [session][header][add](2016): <X-Spam-Checker-Version>=< SpamAssassin 3.4.0 (2014-02-07) on#012#011MTA-FQDN>
Sep 12 08:37:09 MTAホスト名 spamd[13148]: prefork: child states: II
Sep 12 08:37:09 MTAホスト名 postfix/qmgr[16914]: キューID: from=<送信者メールアドレス>, size=25625, nrcpt=1 (queue active)
Sep 12 08:37:09 MTAホスト名 postfix/smtpd[17439]: disconnect from 送信元ドメイン名[IPアドレス]
Sep 12 08:37:09 MTAホスト名 milter-manager[7282]: [statistics] [session][end][end-of-message][pass][8.41667](2016)
Sep 12 08:37:09 MTAホスト名 milter-manager[7282]: [statistics] [sessions][finished] 404(+1) 0
Sep 12 08:37:09 MTAホスト名 dovecot: lda(宛先メールアドレス): msgid=<メッセージID>: saved mail to INBOX
Sep 12 08:37:09 MTAホスト名 postfix/pipe[17476]: キューID: to=<宛先メールアドレス>, relay=dovecot, delay=8.3, delays=8.2/0.07/0/0.11, dsn=2.0.0, status=sent (delivered via dovecot service)
Sep 12 08:37:09 MTAホスト名 postfix/qmgr[16914]: キューID: removed

スパムチェック処理後にopendkimの処理とmilter-managerにてopendkimヘッダーが追加されているのがわかります。
現在、受信ではspfやopenDKIMにて拒否する設定にはしていませんが、送信では拒否されないようにSPF+openDKIM認証に対応するようにしてあります。
※SPFやDKIM認証で設定にミスがあるとREJECT(拒否)されてしまいメールが一切受信できなくなるので注意してください。

UNIXソケットファイル関連

openDKIMのソケットファイルへのアクセスエラーやファイルが存在しないエラーの対応です。

まず、CentOS7では/var/run以下は再起動すると削除されますので削除されないように設定します。

# vi /usr/lib/tempfiles.d/opendkim.conf
d /var/run/opendkim 0710 opendkim opendkim

パーミッションはpostfixやmilter-managerからアクセスできるように設定します。
milter-managerの設定を参考にすればよいと思います。

# usermod -G opendkim -a milter-manager

必要であれば/var/run/opendkim/opendkim.sockにグループがアクセスできるように/etc/opendkim.confのUmask値を変更します。

# ls -la /var/run/opendkim/
合計 4
drwx--x---  2 opendkim opendkim   80  9月 11 20:59 .
drwxr-xr-x 39 root     root     1100  9月 12 10:03 ..
-rw-r--r--  1 opendkim opendkim    5  9月 11 20:59 opendkim.pid
srw-rw----  1 opendkim opendkim    0  9月 11 20:59 opendkim.sock

恐らくopenDKIMをインストール時、/var/run/opendkimディレクトリのパーミッションがデフォルトは0700になっているはずです。
chmodで0710に変更してください。※ディレクトリ配下にアクセスするには実行権が必要です。

phoenix 2018/09/12 (水)- 08:22

ディストリビューション

CentOS 7.x

SPF認証対応

SPF認証対応

送信者偽装(なりすまし)対策のもう1つの方法としてSPF認証です。
ここではSPF認証で受信メールを拒否するのではなく、送信メールが拒否されないようにのみしています。
すべてのサイトでSPFレコードが記述されているわけでもなく、SPF認証の結果で受信拒否するにはまだまだリスクがあると判断したためです。
なお、SPF受信側の設定を行い判定までは行っていますが、その結果で受信メールを拒否するようにはしていません。

SPF送信側の設定

DNSのレコードにSPF用のレコードを追加します。(さくらの場合は、ドメインメニューからゾーン編集で設定します。)
例) ホスト名での記述例です。

TXT "v=spf1 a:phoenixknight.jp ~all"

末尾は「~all」です。「-all」ではありませんので、あいまいな設定になっています。
いずれ「-all」に変える予定です。

SPF受信側の設定

policyd-spfにはpython版とperl版があるそうですが、ここではいろいろ設定できるpython版にしました。

pythonのバージョン

CentOS7で配布されているpythonは2.7です。
pypolicyd-spf-2.xではpython3.3以降を要件にしています。
python3.3以降をインストールするにはIUSなどのレポジトリを利用すればyumでpythonのrpmパッケージをインストール可能です。
しかし、標準のpythonバージョンを3.xにしてしまうとyumが動作しなくなりますので共存させて利用する必要があります。
python 2.7の場合はpythonまたはpython2、python 3.xの場合はpython3またはpython3.xで起動するように設定すればよいと思います。

iusレポジトリを追加

$ yum install -y https://centos7.iuscommunity.org/ius-release.rpm

ius.repoがenable=1なのでenable=0に変更

$ yum search --enablerepo=ius python3

検索結果からpython36uをインストール

$ yum install -y --enablerepo=ius python36u python36u-libs python36u-devel python36u-pip python36u-tools

python3でも起動できるようにリンクを作成

$ ln -s /bin/python3.6 /bin/python3

PYDNS

python DNS Libraryです。pydnsがpython 2.x、py3dnsがpython 3.x用のようです。
py3dns-3.2.0.tar.gzをダウンロードしてインストールしました。

ダウンロード
$  wget https://files.pythonhosted.org/packages/b9/46/8ea57e6722fec2384d2de7afee81b892693ae3ed99917756d71dd0027739/py3dns-3.2.0.tar.gz

解凍
$ tar zxvf py3dns-3.2.0.tar.gz

インストール
$ cd py3dns-3.2.0
$ python3 setup.py install

PYSPF

Sender-Policy-Framework queries in Python.です。
pydnsまたはpy3dns(python3の場合)が必要です。

ダウンロード
$ wget https://files.pythonhosted.org/packages/88/4d/440c273b6a136b58fad9f779847cc90179d627f8a2f2cd8b36313664cf1b/pyspf-2.0.12t.tar.gz

解凍
$ tar zxvf pyspf-2.0.12t.tar.gz

インストール
$ cd pyspf-2.0.12t
$ python3 setup.py install

PYPOLICYD-SPF

pypolicyd-spf is a Postfix policy engine for Sender Policy Framework (SPF) checking. It is implemented in pure Python and uses the python-spf (pyspf) module. Updated for RFC 7208.です。

ダウンロード
$ wget https://launchpad.net/pypolicyd-spf/2.0/2.0.2/+download/pypolicyd-spf-2.0.2.tar.gz

解凍
$ tar zxvf pypolicyd-spf-2.0.2.tar.gz

インストール
$ cd pypolicyd-spf-2.0.2
$ python3 setup.py install

pypolicyd-spfの設定

デフォルトの設定ファイルはバックアップしておいて、ソースに付属の設定ファイルを使用します。
各設定がコメントアウトされているので有効にしたい場合はコメント文字を削除すればOKです。
今回は、ヘッダーに判定結果を追加するだけで拒否はしないようにしています。

$ cd /etc/python-policyd-spf
$ mv policyd-spf.conf policyd-spf.conf.org
$ cp /usr/local/src/pypolicyd-spf-2.0.2/policyd-spf.conf.commented policyd-spf.conf
$ vi policyd-spf.conf
cat policyd-spf.conf
#  Amount of debugging information logged.  0 logs no debugging messages
#  5 includes all debug messages.
debugLevel = 1

#  If set to 0, no messages are rejected by SPF.  This allows you to see the
#  potential impact of SPF checking in your mail logs without rejecting mail.
TestOnly = 1

#  Reject and deferred reason
#Reason_Message = Message {rejectdefer} due to: {spf}. Please see {url}

#  HELO check rejection policy. Options are:
#  HELO_reject = SPF_Not_Pass (default) - Reject if result not Pass/None/Tempfail.
#  HELO_reject = Softfail - Reject if result Softfail and Fail
#  HELO_reject = Fail - Reject on HELO Fail
#  HELO_reject = Null - Only reject HELO Fail for Null sender (SPF Classic)
#  HELO_reject = False - Never reject/defer on HELO, append header only.
#  HELO_reject = No_Check - Never check HELO.
HELO_reject = False

#  HELO pass restriction policy.
#  HELO_pass_restriction = helo_passed_spf - Apply the given restriction when
#    the HELO checking result is Pass.  The given restriction must be an
#    action as defined for a Postfix SMTP server access table access(5).
#HELO_pass_restriction

#  Mail From rejection policy.  Options are:
#  Mail_From_reject = SPF_Not_Pass - Reject if result not Pass/None/Tempfail.
#  Mail_From_reject = Softfail - Reject if result Softfail and Fail
#  Mail_From_reject = Fail - Reject on Mail From Fail (default)
#  Mail_From_reject = False - Never reject/defer on Mail From, append header only
#  Mail_From_reject = No_Check - Never check Mail From/Return Path.
Mail_From_reject = False

#  Reject only from domains that send no mail. Options are:
#  No_Mail = False - Normal SPF record processing (default)
#  No_Mail = True - Only reject for "v=spf1 -all" records

#  Mail From pass restriction policy.
#  Mail_From_pass_restriction = mfrom_passed_spf - Apply the given
#    restriction when the Mail From checking result is Pass.  The given
#    restriction must be an action as defined for a Postfix SMTP server
#    access table access(5).
#Mail_From_pass_restriction

#  Reject mail for Netural/Softfail results for these domains.
#  Recevier policy option to reject mail from certain domains when SPF is not
#  Pass/None even if their SPF record does not produce a Fail result.  This
#  Option does not change the effect of PermError_reject or TempError_Defer
#  Reject_Not_Pass_Domains = aol.com,hotmail.com

#  Policy for rejecting due to SPF PermError.  Options are:
#  PermError_reject = True
#  PermError_reject = False
PermError_reject = False

#  Policy for deferring messages due to SPF TempError.  Options are:
#  TempError_Defer = True
#  TempError_Defer = False
TempError_Defer = False

#  Prospective SPF checking - Check to see if mail sent from the defined IP
#  address would pass.
#  Prospective = 192.168.0.4

#  Do not check SPF for localhost addresses - add to skip addresses to
#  skip SPF for internal networks if desired. Defaults are standard IPv4 and
#  IPv6 localhost addresses.
skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0/104,::1

#  Whitelist: CIDR Notation list of IP addresses not to check SPF for.
#  Example (default is no whitelist):
#  Whitelist = 192.168.0.0/31,192.168.1.12

# SPF HELO WHITELIST: HELO/EHLO host names to skip SPF checks for.
# Example (default is no HELO_Whitelist):
# HELO_Whitelist = relay.example.com,sender.example.org

#  Domain_Whitelist: List of domains whose sending IPs (defined by passing
#  their SPF check should be whitelisted from SPF.
#  Example (default is no domain whitelist):
#  Domain_Whitelist = pobox.com,trustedforwarder.org

# Domain_Whitelist_PTR: List of domains to whitelist against SPF checks base
# on PTR match.
# Example (default is no PTR whitelist)
# Domain_Whitelist_PTR = yahoo.com

# SPF ENHANCED STATUS CODES: Override Postfix enhanced status codes to use the
# RFC 7372 codes.  Disable by setting this option to "No".
# SPF_Enhanced_Status_Codes = No

# Type of header to insert to document SPF result. Can be Received-SPF (SPF)
# or Authentication Results (AR). It cannot be both.
# Examples: (default is Received-SPF):
# Header_Type = AR
# Header_Type = SPF

# In order to avoid disclosing BCC recipients in SPF header fields,
# Hide_Receiver is set to Yes by default in the interest of maximizing
# privacy.  This setting will replace the actual recipient with <UNKNOWN> both
# in header fields and SMTP responses.  The latter may make it more difficult
# for senders to troubleshoot issues with their SPF deployments.
#Hide_Receiver = No
Hide_Receiver = Yes

# Every Authentication-Results header field has an authentication identifier
# field ('Authserv_Id'). This is similar in syntax to a fully-qualified domain
# name. See policyd-spf.conf.5 and RFC 7001 paragraph 2.4 for details.
# Default is HOSTNAME (as provided by socket.gethostname).  Authserv-Id must
# be provided if Header_Type 'AR' is used.
# Authserv_Id = mx.example.com
Authserv_Id = HEADER

# RFC 7208 recommends an elapsed time limit for SPF checks of at least 20
# seconds.  Lookup_Time allows the maximum time (seconds) to be adjusted.  20
# seconds is the default.
# Lookup_Time = 20

# Some of the available whitelisting mechanisms, i.e. Domain_Whitelist,
# Domain_Whitelist_PTR, and HELO_Whitelist, require specific non-SPF DNS
# lookups to determine if a connection should be white listed from SPF checks.
#  The maximum amount of time (in seconds) allocated for each of these checks,
# when used (none are enabled by default), is controlled by the
# Whitelist_Lookup_Time parameter.  It defaults to 10 seconds and is applied
# independently to each whitelisting method in use.
# Whitelist_Lookup_Time = 10

# RFC 7208 adds a new processing limit called "void lookup limit" (See section
# 4.6.4).  Default is 2, but it can be adjusted.
# Void_Limit = 2

# In some versions of postfix, for bizarre Sendmail compatibility reasons, the
# first header field added by a policy server is not visible to milters.  To
# make this easy to work around, set the Mock value to true and a fixed header
# field will be inserted so the actual SPF check will be the second field and
# visible to milters such as DMARC milter.
# Mock = False

TestOnlyに関して"0"で何もメッセージを記録しなくなるようです。動作確認を含め行いたいのでログに記述するよう"1"にしています。
HELO_rejectとMail_From_rejectとをFalseに変更し、判定結果でreject/deferしないようにヘッダーへの追加のみにしてあります。

Postfix側の変更

main.cfの変更点は以下を追加します。

smtpd_recipient_restrictions        = permit_mynetworks,
                                      permit_sasl_authenticated,
                                      reject_unauth_destination,
                                      reject_unauth_pipelining,
                                      reject_invalid_hostname,
                                      check_sender_access hash:/etc/postfix/check_backscatterer,
                                      reject_rbl_client zen.spamhaus.org,
                                      reject_rbl_client bl.spamcop.net,
                                      reject_rbl_client sbl.spamhaus.org,
                                      check_policy_service unix:private/policy-spf

policy-spf_time_limit = 3600s

master.cfの変更点は以下になります。

# fpr SPF
policy-spf   unix  -       n       n       -       0       spawn
   user=nobody argv=/usr/bin/python3 /usr/bin/policyd-spf /etc/python-policyd-spf/policyd-spf.conf

※スペースは半角スペースです。
※pythonはpython3を指定します。
※spawnでその都度プロセスが起動します。

postfixの再読み込み

$ systemctl reload postfix

SPF認証の動作確認

外部メールからテストメールを送信(SPF受信側の確認)および外部メールへテストメールを送信(SPF送信側の確認)を行います。
確認はpostfixのログファイル(/var/log/maillog)やメールのソースファイルのヘッダー情報です。

例)SPF送信側の確認(メールヘッダー抜粋)

Received-SPF: pass (サーバのホスト名: domain designate client-ip as permitted sender) client-ip=IPアドレス; envelope-from=<送信者のメールアドレス>; helo=送信ホストFQDN名;
Authentication-Results: サーバのホスト名; spf=pass smtp.mailfrom=送信者のメールアドレス

メールログによるSPF送信側の確認は送信先のメールサーバを管理していれば可能ですがそうでないので不可です。
外部メールサーバに送信したメールのヘッダーに判定結果がPassで追加されているのでうまくいっていると思います。

例)SPF受信側の確認(メールヘッダー抜粋)

Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=IPアドレス; helo=送信ホストFQDN名; envelope-from=送信者メールアドレス; receiver=宛先メールアドレス

※identityの箇所がmaifromとなっているので、HELOでなくMailFromで認証パスしたということです。

例)SPF受信側の確認(メールログ抜粋)

Sep 12 10:14:48 ホスト名 policyd-spf[18707]: None; identity=helo; client-ip=IPアドレス; helo=FQDN名; envelope-from=送信者メールアドレス; receiver=宛先メールアドレス
Sep 12 10:14:48 ホスト名 policyd-spf[18707]: Pass; identity=mailfrom; client-ip=IPアドレス; helo=FQDN名; envelope-from=送信者メールアドレス; receiver=宛先メールアドレス

※HELOではNone、Mail_FromではPassの判定になっているのがわかります。

SPFによるなりすまし判定はMailFromであればすぐにでもできそうですが、ホワイトリストに登録する必要があるサイトなどまだまだデータが蓄積できていないのでとりあえずこの設定で情報収集です。

phoenix 2018/09/12 (水)- 10:31

ディストリビューション

CentOS 7.x