トップ 一覧 検索 ヘルプ RSS ログイン

NetworkTipsの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!ユーザ単位のログイン制限
SSHによる不正侵入対策としてログイン制限を加える。基本的な戦略としては、hostの制限はTCPwrapper(/etc/hosts.allow)を用い、ユーザ制限はloginで行うことにする。
loginの制限は/etc/login.access に
 -:ALL EXCEPT wheel hogehoge :ALL EXCEPT LOCAL 192.168.
としてリモートログインできるユーザをwheelグループとhogehogeに限定。
SSHはデフォではloginを用いないので、/etc/ssh/sshd_config に
 UseLogin yes
として、sshでloginを使うようにする。

::直接SSHに設定
/etc/ssh/sshd_config に
 UseLogin no
 AllowUsers user1 user2 ...
と記述する。



!メールサーバの不正中継
このサイトで不正中継のチェックが可能
http://www.rbl.jp/svcheck.php
その他のブラックリストチェックも可能
http://www.rbl.jp/

!Spamメール対策
Postfixの設定 main.cf に
 smtpd_helo_restrictions = permit_mynetworks,
 reject_invalid_hostname
を追加してみる

Amavisd-new の設定 /usr/local/etc/amavisd.conf
 # add spam info headers if at, or above that level
 $sa_tag_level_deflt  = 2.0;  
 # add 'spam detected' headers at that level
 $sa_tag2_level_deflt = 8.5; 
 # triggers spam evasive actions
 $sa_kill_level_deflt = 13.0; 
 # spam level beyond which a DSN is not sent
 $sa_dsn_cutoff_level = 15;  
このへんでレベルの調整。誤検出を防ぐためにはこの程度かな?
!テストウイルスコード(EICAR)
ウイルススキャナー各社共通テストウイルス(無害)
http://www.trendmicro.co.jp/download/test-virus.asp
http://www.eicar.org/anti_virus_test_file.htm
あたりで入手可能

!IMAPでSSL認証
/usr/ports/mail/imap-uw でSSLを有効にしてimapdをインストールした場合、
make install の後に
 # make cert
を実行してオレオレ証明書を作っておく。

imap-uw から dovecot2 への移行を図る。(2017/06)

証明書作成は、cd /usr/local/share/examples/dovecot/ と移動して dovecot-openssl.cnf を編集し、
 # mkdir -p /etc/ssl/private
 # mkdir -p /etc/ssl/certs
 # cd /usr/local/share/examples/dovecot/
 # sh ./mkcert.sh
を実行する。
/etc/ssl/private, /etc/ssl/certs に dovecot.pem が作られる。

pkg または ports から、mail/dovecot2 をインストール。portsならTCP wrapper を有効にできるが、pkg だと有効になっていない。しかたがないので、pf でアクセス制御することにする。グローバル側からは、imapsのみ受け付け、pop3, imap, pop3s は落とす。

設定ファイルはとりあえず、/usr/local/etc/dovecot/example-config/ の中身を、/usr/local/etc/dovecot/ にコピーする。設定ファイルは多数のファイルに分割されている。
exampleからイジったファイルは以下。

dovecot.conf
 protocols = imap pop3
pop3s, imaps も含む。

conf.d/auth-system.conf.ext
 passdb {
   driver = pam
   args = %s
 }
これで認証の際、/etc/pam.d/imap,pop3 を参照するようになる。

conf.d/10-mail.conf 
 mail_location = mbox:~/mail:INBOX=/var/mail/%u
 mail_access_groups = mail
imap-uw では各ユーザのホームが見えていたが、この設定では ~/mail 以下が購読可能となるので、移行の際は注意。

conf.d/10-ssl.conf 
 ssl = yes
 local 192.168.0.0/16 { 
   protocol pop3 {
     ssl = no
     disable_plaintext_auth = no
   }
 }
グローバルで一旦、sslを有効にする必要がある。プライベートネットワークではsslを使わず、平文パスワードでPOP3ができるように上書き。

dovecot2.3への対応 (2018/08)

conf.d/10-ssl.conf でパラメータの変更
 ssl_dh_parameters_length = 1024
が廃止され、
 ssl_dh = </usr/local/etc/dovecot/dh.pem
が加わった。dh.pemを作るのはコメントにあるように、
 # openssl dhparam -out /usr/local/etc/dovecot/dh.pem 4096
とする。また、
 ssl_protocols = !SSLv3
も廃止され、代わりに
 ssl_min_protocol = TLSv1
というのが加わった。

![amavisd-new|http://www.ijs.si/software/amavisd/](デーモン化AMaVisの新しいやつ)

::スキャナー設定
ウイルススキャナーに[Sophos|http://www.sophos.co.jp/]を用いる場合は
/usr/ports/security/p5-SAVI-Perl (perl interface module)を
インストールしておくと速くて良い。
設定は /usr/local/etc/amavisd.conf で、
 @av_scanners = (
  ### http://www.csupomona.edu/~henson/www/projects/SAVI-Perl/
  ['Sophos SAVI', \&sophos_savi ],
 );
のところをコメントアウトすれば SAVI がプライマリスキャナーとなる。

(2017/06/17)
SophosがFreeBSDに対応しなくなったので、ClamAVのデーモン版を使うことにする。
 ['ClamAV-clamd',
   \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],
   qr/\bOK$/m, qr/\bFOUND$/m,
   qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],

 @av_scanners_backup = (
  ### http://www.clamav.net/   - backs up clamd or Mail::ClamAV
  ['ClamAV-clamscan', 'clamscan',
    "--stdout --no-summary -r --tempdir=$TEMPBASE {}",
    [0], qr/:.*\sFOUND$/, qr/^.*?: (?!Infected Archive)(.*) 
    FOUND$/ ],
   
  # ### http://www.sophos.com/   - backs up Sophie or SAVI-Perl
  ['Sophos Anti Virus (sweep)', 'sweep',
    '-nb -f -all -rec -ss -sc -archive -cab -tnef 
    --no-reset-atime {}', [0,2], qr/Virus .*? found/,
    qr/^>>> Virus(?: fragment)? '?(.*?)'? found/,
  ],
 );
セカンダリはClamAVのスキャンコマンドにする。
うまく設定できれば /var/log/maillog に
 amavis[***]: Using primary internal av scanner code for ClamAV-clamd
 amavis[***]: Found secondary av scanner ClamAV-clamscan at /usr/local/bin /clamscan
というログを吐く。

処理としては例えば、
 $final_virus_destiny      = D_DISCARD;
 $final_banned_destiny     = D_PASS;
 $final_spam_destiny       = D_BOUNCE;
 $final_bad_header_destiny = D_PASS;
で、ウイルスメール捨て、禁止メール通過、スパム反射、
ヘッダの不正は通過、となる。
D_PASSは通過と行っても本文が警告文意になって、メールのボディが
マルチパートにまわされる。

::BANNED ファイルの設定
BANNED(禁止)ファイルとして、実行ファイル(EXE,COM)などが添付されて
いるのを拡張子で判断してブロックしたり警告したりする。
未知ウィルス対策としては有効だが、ブロックしてしまうのも不便
なので警告まで(D_PASS)とする。
それと、アーカイブされたものはそのまま通すこととする。
設定は /usr/local/etc/amavisd.conf で
 $banned_filename_re = new_RE
 ### BLOCK THE FOLLOWING, EXCEPT WITHIN ARHIVES:
  [ qr'^\.(zip|lha|rar|arc|arj|zoo)$'=> 0 ],  # allow any within these archives
  [ qr'^\.(gz|bz2)$'             => 0 ],  # allow any in gzip or bzip2
  [ qr'^\.(rpm|cpio|tar)$'       => 0 ],  # allow any in Unix-type archives
 ### BLOCKED ANYWHERE
  qr'^\.(exe-ms|dll)$',                   # banned file(1) types, rudimentary
  qr'.\.(pif|scr)$'i,                     # banned extensions - rudimentary
 ### BLOCK THE FOLLOWING, EXCEPT WITHIN ARHIVES:
  qr'^application/x-msdownload$'i,        # block these MIME types
  qr'^application/x-msdos-program$'i,
  qr'^application/hta$'i,
 # block certain double extensions in filenames
  qr'\.[^./]*[A-Za-z][^./]*\.\s*(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)[.\s]*$'i,
 #
  qr'.\.(exe|vbs|pif|scr|cpl|bat|cmd|com|bat)$'i, # banned extension - basic+cmd
 );
といった感じにしておいた。
ルールの適用は早い者順。

::その他
 $hdr_encoding = 'iso-2022-jp';  # MIME charset 
 $bdy_encoding = 'iso-2022-jp';  
でデフォルトを日本語にしておくと良いか?


::Postfixの場合
Portsでamavisd-newをインストールするとvscanというユーザが
登録されるので、確認。

/usr/local/etc/postfix/master.cf に
 smtp-amavis unix -      -       n     -       2  smtp
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
    -o max_use=20

 127.0.0.1:10025 inet n  -       n     -       -  smtpd
    -o content_filter=
    -o smtpd_restriction_classes=
    -o smtpd_delay_reject=no
    -o smtpd_client_restrictions=permit_mynetworks,reject
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o smtpd_data_restrictions=reject_unauth_pipelining
    -o smtpd_end_of_data_restrictions=
    -o mynetworks=127.0.0.0/8
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000
    -o smtpd_client_connection_count_limit=0
    -o smtpd_client_connection_rate_limit=0
    -o smtpd_milters=
    -o local_header_rewrite_clients=
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

/usr/local/etc/postfix/main.cf に
 # AmaVisd-new
 content_filter=smtp-amavis:[127.0.0.1]:10024
を追加する。(新しいのはフィルタ名がsmtp-amavisになってるのに注意)

!STMP-AUTH設定(SSL/TLS)
::Cyrus SASL
security/cyrus-sasl2とsecurity/cyrus-sasl2-saslauthd
をインストールして
/etc/rc.conf に
 saslauthd_enable="YES"
 saslauthd_flags="-a pam"
を追加して
 # service saslauthd start
で起動

::SSL/TLSの設定(オレオレ証明書)
秘密鍵作成 
 // # openssl genrsa -des3 -out smtps.key 1024 <= 秘密鍵作成
 # openssl genrsa -des3 -out smtps.key 2048 <= 時代は2048bit? 
 Enter pass phrase for smtps.key: <= パスフレーズ
パスフレーズを抜く 
 # openssl rsa -in smtps.key -out smtps.key
 Enter pass phrase for smtps.key: <= 秘密鍵作成時のパスフレーズ
公開鍵作成
 # openssl req -new -key smtps.key -out smtps.csr -days 3650
色々聞いてくるので入力する。
Common Nameはホスト名でよい。challenge passwordは空で良い。

サーバ用証明書の作成
 # openssl x509 -in smtps.csr -out smtps.pem -req -signkey smtps.key -days 3650
とりあえず10年で。
/usr/local/etc/postfix/ssl を掘って、 *.key, *.csr, *.pem を置く。

::Postfixのインストール
portsでSASL2とTLSが有効になっているか確認 

::Postfixの設定
/usr/local/etc/postfix/master.cf を修正してsubmissionポートとSMTPSを開ける
 submission inet n       -       n       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
 smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

/usr/local/etc/postfix/main.cfに以下を追加
 smtpd_sasl_auth_enable = yes
 smtpd_sasl_type = cyrus
 smtpd_sasl_security_options = noanonymous, noplaintext
 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
 smtpd_client_restrictions=permit_mynetworks,warn_if_reject,permit
 smtpd_tls_cert_file = /usr/local/etc/postfix/ssl/smtps.pem
 smtpd_tls_key_file = /usr/local/etc/postfix/ssl/smtps.key
 smtpd_tls_session_cache_database = hash:/usr/local/etc/postfix/ssl/smtpd_scache
 smtpd_use_tls = yes
smtpd_tls_CAfile については
security/nss の /usr/local/share/certs/ca-root-nss.crt
を使うこともあるみたいだが、とりあえずこれで。
パスワード認証は暗号化を指定。
 smtpd_sender_restrictions = reject_unknown_sender_domain
で送信者ドメイン(From設定)の制限もしたほうが良い?

/usr/local/lib/sasl2/smtpd.conf  に以下を追加
 pwcheck_method: auxprop

送信用のアカウントを生成
 saslpasswd2 -c -u ドメイン名 ユーザID
パスワードを設定する。
システムのアカウントは別らしいので、共通の送信アカウントで良いか?
送信の認証においては、ユーザID@ドメイン名をユーザIDとして用いる。
(GMailと似た感じ)

 # service postfix restart
と再起動してやると、STARTTLS(587), SSL/TLS(465)で認証が可能となる

!Postfixで忘れがちなこと

/usr/local/etc/postfix/virtual バーチャルドメインの設定を記述し、
(空文でも良い)
 postmap hash:/usr/local/etc/postfix/virtual
しておく。そうしないと、ログにワーニングが出続ける。
 # /usr/local/bin/newaliases
も忘れないように。
!SPFレコード
迷惑メール大作として送信ドメイン認証が普及してきているので、対策として Sender Policy Framework(SPF)レコードをDNSの正引きデータベースに追加する。
 lebra.nihon-u.ac.jp.    IN      TXT     "v=spf1 +mx +ip4:***.***.***.***/25  ~all"
といった具合。IPの指定はもう少し狭くした方が良いか? allについては認証失敗の処置は弱めにしておく。

!amavisd-newによるDKIM
amavisd-newを用いて、送信ドメイン認証(DKIM)の署名を有効にしておく。
 # mkdir /var/db/dkim/
 # chgrp vscan:vscan /var/db/dkim/
 # amavisd genrsa /var/db/dkim/exampe-foo.key.pem
などとして、キーを作成。(example, fooは適当に変える)

amavisd.confを編集して
 $enable_dkim_verification = 1;  # enable DKIM signatures verification
 $enable_dkim_signing = 1;    # load DKIM signing code, keys defined by dkim_key
 dkim_key('domain.example.jp', 'hostname', '/var/db/dkim/exampe-foo.key.pem');
 @dkim_signature_options_bysender_maps = (
 { '.' => { ttl => 21*24*3600, c => 'relaxed/simple' } } );
を加える。
 # amavisd showkeys
とすると、DNSのTXTレコードに加えるべきものが表示される。メールを出すドメインの正引きデータベースに
 ******._domainkey.***.***.**.jp.   3600 TXT (
 "v=DKIM1; p="
 "***************************************************************"
 "***************************************************************"
 "***************************************************************"
 "**********************")
を追加する。確認として、
 # amavisd testkeys
を実行して、TESTING#1 ***  => pass  となればOK。