トップ 差分 一覧 ソース 検索 ヘルプ 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

を実行してオレオレ証明書を作っておく。

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 がプライマリスキャナーとなる。

@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とSophosのsweepコマンド)うまく設定できれば /var/log/maillog にamavis[***]: Using primary internal av scanner code for Sophos SAVIamavis[***]: Found secondary av scanner ClamAV-clamscan at /usr/local/bin/clamscanamavis[***]: : Found secondary av scanner Sophos Anti Virus (sweep) at /usr/local/bin/sweepというログを吐く。

処理としては例えば、

$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 <= 秘密鍵作成
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/smtpds.pem
smtpd_tls_key_file = /usr/local/etc/postfix/ssl/smtpds.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)で認証が可能となる