トップ 差分 一覧 ソース 検索 ヘルプ PDF 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.asphttp://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 が作られる。

年1回更新の必要(8月末〜9月初め頃)古いのは mkcert.sh の実行前に削除する必要

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(デーモン化AMaVisの新しいやつ)

スキャナー設定

ウイルススキャナーにSophosを用いる場合は/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は適当に変える)

Updateの際、pemファイルのオーナーがrootになって読めない場合があるので、

chown vscan /var/db/dkim/exampe-foo.key.pem

としておく。(2022/08/26)

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。

BINDのupgrade(9.16->9.18) (20220827)

BINDのバージョンを9.16->9.18と上げると、named.confの書式が変わるので注意

具体的には、設定ファイルを置くディレクトリ名が

master -> primary
slave -> secondary

というポリコレ的変更。修正しなくてもnamedが立ち上がってしまうので気づきにくいが、ゾーンの設定読み込みに失敗するので、ネームサーバーとして機能しない。