ラベル CentOS の投稿を表示しています。 すべての投稿を表示
ラベル CentOS の投稿を表示しています。 すべての投稿を表示

2016年5月6日金曜日

CentOS 6.x インストール後の初期設定

個人的にインストール直後によくやる設定をまとめてみた。
用途はサーバ一般。vimのインストールは好みで。

システムアップデート


# yum update

vim インストール


# yum install vim

管理者ユーザ追加


# useradd [ユーザ名]

追加したユーザにパスワードを設定する

# passwd [ユーザ名]

追加したユーザに sudo 権限を付与する

# visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
[ユーザ名]    ALL=(ALL)       ALL

root ユーザによる ssh ログインの禁止


# vim /etc/ssh/sshd_config

PermitRootLogin の値を "no" にする
#PermitRootLogin yes
PermitRootLogin no

SELinux無効化


vim /etc/selinux/config

"SELINUX=enforcing" を削除して、下記設定を追記
SELINUX=disabled

再起動


# reboot

SElinux と sshd の設定変更が反映される

2016年5月3日火曜日

iptables にルールを追加する

サーバの設定をしていると、iptablesの設定変更はよく行うが、結構簡単に忘れてしまうので、メモ。
  1. 設定のバックアップ
    # cp -a /etc/sysconfig/iptables{,.`date +%Y%m%d`}
    # ll /etc/sysconfig/iptables*
    -rw-------. 1 root root  476  4月 30 07:17 2016 /etc/sysconfig/iptables
    -rw-------. 1 root root 1974  7月 24 11:10 2015 /etc/sysconfig/iptables-config
    -rw-------. 1 root root  476  4月 30 07:17 2016 /etc/sysconfig/iptables.20160503
    -rw-------. 1 root root  476  4月 30 07:17 2016 /etc/sysconfig/iptables.old
    
  2. iptablesの起動
    # service iptables start
    iptables: ファイアウォールルールを適用中:                  [  OK  ]
    
  3. 現在のルールを確認する
    # iptables -L --line-numbers
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination
    1    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
    2    ACCEPT     icmp --  anywhere             anywhere
    3    ACCEPT     all  --  anywhere             anywhere
    4    ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
    5    REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
    (以下略)
    
  4. 新ルールを追加
    下記コマンドで新ルールを追加する。
    # iptables -I [チェインの種類] [ルール番号] -p [プロトコル] -m [プロトコル] --dport [ポート番号] -j ACCEPT
    
    今回は、ルール番号5に80番ポートを開放するルールを追加する。
    # iptables -I INPUT 5 -p tcp -m tcp --dport 80 -j ACCEPT
    
  5. 新ルールを確認
    # iptables -L --line-numbers
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination         
    1    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
    2    ACCEPT     icmp --  anywhere             anywhere            
    3    ACCEPT     all  --  anywhere             anywhere            
    4    ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
    5    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http 
    6    REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
    (以下略)
    
  6. 設定を保存
    このままでは、iptablesを再起動すると設定が消えてしまう。下記コマンドを実行し、設定を保存する。
    # service iptables save
    iptables: ファイアウォールのルールを /etc/sysconfig/iptable[  OK  ]中:
    
  • ルールを削除する時は
    # iptables -D [チェインの種類] [ルール番号]
    

2015年3月5日木曜日

【CentOS6.5】【Postfix】【Dovecot】メールサーバのクイックセットアップ②

その①から続いて、

③ Dovecotの設定


/etc/dovecot/conf.d/10-mail.conf

     mail_location = maildir:~/Maildir

       (/etc/postfix/main.cfの設定がMailboxだった場合は、
    mail_location = mbox:~/mail:INBOX=/var/mail/%u
         その場合、/var/mail/%uのアクセス権限を変更する必要あり)

/etc/dovecot/conf.d/10-auth.conf

     disable_plaintext_auth = no

       平文でのパスワード認証を禁止するか設定
       テストの段階では、暗号化はしないのでとりあえずnoに設定

Dovecot を起動(既に動いていれば、再起動)する。
# service dovecot start

④ telnetで接続して動作確認してみる。


Dovecot(POPサーバ)への接続

→ ログイン&受信メールの確認をしてみる。
→ 予め『testuser』というユーザ用のアカウントを作成し、パスワードも付与。
  # useradd testuser
    # passwd testuser

 $ telnet localhost 110
 Trying ::1...
 Connected to localhost.
 Escape character is '^]'.
 +OK Dovecot ready.
 USER testuser  (←『 USER サーバのユーザアカウント』 を入力)
 +OK
 PASS xxxxxx  (←『 PASS アカウントのパスワード』 を入力)
 +OK Logged in.
 LIST (←受け取ったメールを確認する)
 +OK 3 messages: (← 予めメールを送っておけば、届いているのが確認できる)
 1 1060 (← 3通のメールが届いている)
 2 1113
 3 1852.
 TOP 1 (←1番目のメールのヘッダを表示)
 (省略)
 RETR 1 (←1番目のメールのボディを表示)
 (省略)
 QUIT  (← telnet から抜ける。)
 +OK Logging out.
 Connection closed by foreign host.

Postfix(SMTPサーバ) への接続

→ メールを送信してみる。

 $ telnet localhost 25
 Trying ::1...
 Connected to localhost.
 Escape character is '^]'.
 220 mail.xxx.mydns.jp ESMTP Postfix
 EHLO mail.xxx.mydns.jp (← 『EHLO ホスト名』を入力)
 250-mail.xxx.mydns.jp
 250-PIPELINING
 250-SIZE 10240000
 250-VRFY
 250-ETRN
 250-ENHANCEDSTATUSCODES
 250-8BITMIME
 250 DSN
 MAIL FROM:<testuser@xxx.mydns.jp> (← 『MAIL FROM:<送信元アドレス>』を入力) 
 250 2.1.0 Ok
 RCPT TO:<送信先のメールアドレス> (← 『RCPT TO:<送信先のメールアドレス>』を入力)
 250 2.1.5 Ok
 DATA
 354 End data with <CR><LF>.<CR><LF>
 Test (←メール本文を入力する)
 . (←メール本文を終了する)
 250 2.0.0 Ok: queued as 860ADBF609
 QUIT  (← telnet から抜ける。)
 221 2.0.0 Bye
 Connection closed by foreign host.

⑤ MUA(Thunderbird)を使って送受信してみる。


ツール > アカウント設定 > アカウント操作 > メールアカウントを追加

メールアドレスは、『 ユーザアカウント@mydomain 』
パスワードは、アカウントのパスワード


続けるを押下した後、手動設定


サーバのホスト名等を入力して、再テスト → 完了


セキュリティ警告が出てくるが、取り敢えず了解しておく。

試しに他のメールアカウントと送受信してみる。 

受信は問題なく行えるはずだが、送信に関しては、私の様にVPSを使って外部のネットワーク
から接続している場合、“Relay access denied” となって、送信に失敗する。

これは、/etc/postfix/main.cf がデフォルトで

smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
(この設定はmain.cfには記入されていないが、postconf -d コマンドで確認できる)

と設定されており、外部ネットワークからのリレーを許可しないからだ。
送信メール認証の設定後、下記の様に設定変更すれば、送信可能になる。

smtpd_recipient_restrictions = permit_mynetworks,
                                                  permit_sasl_authenticated,
                                                  (認証を通過すればリレーを許可)
                                                  reject_unauth_destination

※VPSではなく自宅のサーバでも同様の事象が起こったので、上記の説明は誤っている可能性が高い。但し、自宅サーバでも認証設定後には正常に送信できた。(2016/05/06追記)

この段階で、どうしても送信テストしたい場合は、main.cf のmynetworks に、MUAを使うクライアントのIPアドレスを追加してやれば送信できる。ただし、ダイナミックIPアドレスの場合、IPアドレスが変わってしまうので、一時的なテストに留めておいた方が良いと思う。

最小限の設定は以上。
ここから、暗号化や認証等の設定を追加していく。

【CentOS6.5】【Postfix】【Dovecot】メールサーバのクイックセットアップ①

メールサーバの再セットアップも、ひと通り終わったので、設定についてメモしておく事にした。

(※2016/05/06 一部加筆)


まずは最小限の設定で、『これだけやっておけば外部とメールが送受信できる』というところまで、
設定する。

ここまでできれば、ネットワークやiptables等の、メールソフト以外の設定には問題ない事が分かるので、後ほど認証や暗号化等の設定を追加した際にも、問題の切り分けがしやすい、はず。

環境は以下の通り。

OS : CentOS6.5
MTA : postfix2.6.6
MRA : dovecot2.0.9
MUA : Thunderbird
DNS : myDNS

ドメイン名(例) = xxx.mydns.jp (xxxは伏せ字
ホスト名(例) = mail.xxx.mydns.jp (xxxは伏せ字


  • 名前解決にはダイナミックDNSサービスの MyDNS を使っているので、下記のMXレコードの設定前に、登録と初期設定を行っておく必要がある。
  • また、ポート開放についてもここでの説明は割愛しているが、適宜サーバのiptablesやファイアウォールの設定を事前に行う必要がある。


① myDNSの設定


MXレコードとAレコードに、メールサーバのホスト名を入力する。
(他に、IPアドレスの設定は事前にやっておく)

※MXレコードの欄は、FQDNで登録しないとうまく動作しなかった。



② postfixの設定

postfixの設定ファイル 『/etc/postfix/main.cf』 の下記項目を編集する。
なお、デフォルト値はpostconf -d で確認できる。

myhostname = mail.xxx.mydns.jp

        メールサーバのホスト名(FQDN)を記入。
        DNSのMXレコード、Aレコードの設定と一致させる。

      myorigin = $mydomain (行頭の"#(コメントアウト)"を外す)

        送信メールに付加される送信元アドレスの@以降の形式を指定
        (myhostname か mydomain)。
        mydomainに設定することで、送信元メールアドレスは、foo@xxx.mydns.jpになる。

inet_interfaces = all

        外部のメールサーバから送られてくるメールを受け取る。

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

        他のメールサーバに転送を行わない(=このメールサーバが受信する)ホスト、ドメイン
        を指定する。$mydomain を含めておくことで、foo@xxx.mydns.jp宛のメールを受信できる。

      home_mailbox = Maildir/ (または Mailbox)を指定

        メールを保存する場所を設定。
        Mailbox 形式は、全てのメールを1つのファイルに保存する。
        Maildir/ 形式は、1つのメール=1つのファイルになる。パフォーマンスやセキュリティ等、
        Maildir/ の方が優れている、らしい。

         Mailbox を指定した場合は、さらにメールスプールディレクトリを指定する。
         → (mail_spool_directory = /var/mail または /var/spool/mail)

   ※Maildir/ ディレクトリは、各ユーザのホームディレクトリ配下に自動で生成される。   

以下は基本的にはデフォルト値のままでもいいが、場合によっては変更する。

      mydomain = xxx.mydns.jp

        何も指定しなければ、myhostnameの最初の".(ドット)"までが削除された値が指定される。
        myhostname = mail.xxx.mydns.jp であれば自動的に mydomain = xxx.mydns.jp となる。
        (ホスト名がaaa.bbb.xxx.mydns.jp のような場合は変更する)
      

      mynetworks_style = subnet

      mynetworks = aaa.bbb.ccc.0/dd(自ホストのネットワーク), 127.0.0.0/8(自ホスト)

        メールサーバを利用可能なクライアントのネットワークを設定。
        上記は両者とも自ホストと、自ホストのネットワークを指定している。
        両方記載した場合には、mynetworks が優先される。
        (自ホストのネットワークを明示したい場合には、mynetworksに記載する。)



inet_interfaces を変更した際はreloadではなく再起動が必要。
main.cf の編集後、忘れずにpostfixを再起動させる。

# service postfix restart

長くなってきたので、次回に続く

2015年3月3日火曜日

【CentOS6.5】@myhostname宛のメールは受信できるが、@mydomain宛のメールが受信できない その②

昨日の続きです。

怪しそうな設定箇所を見なおしても特に問題なく、Postfixのログをみて、ググったりしても良く分からなかった(受け取り拒否しているような痕跡もない)。

「ネットワークの設定に問題があるのかな?」と思いネットワークの設定ファイルを少しづつ変えてトライし続ける。起こっている事象から原因を特定できればいいのだが、私の様な未熟者は、取り敢えず手当たり次第に引っ掻き回して、上手くいったら、そこから理由を逆算するしかない。

私が使っているVPS 『ConoHa』は、スナップショット機能があるので、変な設定になっても一発で元に戻せる。こういう実験をする時には便利だ。

/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth
/etc/resolv.confi

あたりを書いたり消したり、、、

挙動は変わらない。

やっぱり何かDNSの設定がおかしいのかも?と思い、myDNSの設定を変えてトライしてみる事にした。

DOMAIN INFO

myDNSの設定項目は上の通りだ。

私の設定では

Domain:hoge.mydns.jp(hogeは適当な文字列)
MXレコード : mail(メールサーバのホスト名)
Aレコード : server(サーバのホスト名)
Aレコード : www(ウェブサーバのホスト名)
Aレコード : mail(メールサーバのホスト名)

としていた。

ここで、

MXレコードをホスト名でなく、FQDNで指定してみた。 ⇒ @mydomainで届く。解決!
MXレコードを未指定(自動補完)にしてみた。 ⇒ @mydomainで届く。解決!

という訳で、MXレコードの記載が問題だったようだ。

具体的には、MXレコードにホスト名を記載すると、ホスト名の後にドメインが自動補完されると思っていたが、実際にはされていなかった?ようだ。

と、いうわけで、解決法は、MXレコードには、FQDNで記載するという事になる。

しかしmyDNSの設定について解説しているサイトでは、ホスト名だけの指定で解説されているし、設定項目の説明にも"hostname"と書かれている。私自身、以前はホスト名だけの指定で問題なかった。

何か変更があったのか、他の人にも起こっている事なのか、いつからそうなのか、謎である。

=====

ここから先は、自分の頭の整理のために、今回のトラブルの際に、名前解決で何が起こっていたのかを推測して書いていく。

ケース1 foo@hoge.mydns.jp 宛の場合


① foo@hoge.mydns.jp 宛にメールを送る。

② DNSサーバがMXレコードを参照して、メールサーバのFQDNを調べる。

 ③-A MXレコードに[mail.hoge.mydns.jp]と記載していた場合

  Aレコードを参照して、ホスト名がmail=FQDNが[mail.hoge.mydns.jp]が見つかる。

  Aレコードに記録されている[mail.hoge.mydns.jp]のIPアドレスへ配送する。

 ③-B MXレコードに[mail]と記載していた場合

  Aレコードを参照するが、FQDNが[mail]は見つからないので、配送できない。


ケース2 foo@mail.hoge.mydns.jp 宛の場合


① foo@mail.hoge.mydns.jp 宛にメールを送る。

② DNSサーバがMXレコードを参照して、メールサーバのFQDNを調べる。

 ③-A MXレコードに[mail.hoge.mydns.jp]と記載していた場合

  ケース1と同じ

 ③-B MXレコードに[mail]と記載していた場合

  Aレコードを参照するが、FQDNが[mail]は見つからないので、配送できない。

④ MXレコードからの参照とは別に、Aレコードを参照。
  @以下(mail.hoge.mydns.jp)と一致するAレコードが見つかり、指定のIPアドレスへ配送される。


ケース3 MXレコードを未指定(自動補完)の場合

① MXレコードには、ドメイン名(hoge.mydns.jp)が記述される。

② ドメイン名は、IPアドレスに紐付けられている。

② foo@hoge.mydns.jp宛のメールは、ドメイン名と紐付けられているIPアドレスへ配送される。
 (Aレコード未記載でも届くので、Aレコードは参照されていない?)
 (foo@XXX.hoge.mydns.jp 宛のメールは、Aレコードにホスト名XXXが記録されていれば届く。)



あくまで推測です。













【CentOS6.5】@myhostname宛のメールは受信できるが、@mydomain宛のメールが受信できない その①

現在、メールサーバの再構築中。

昨年夏にメールサーバをつくった時のメモ書きが残っているので、それに従えば概ねうまくいっている。

それでも、思いがけないトラブルが現れるもので、表題の通り

@myhostname宛のメールは受信できるが、@mydomain宛のメールが受信できない

という状況に陥った。

詳しい状況は次のとおりだ。

使っているソフトは、
postfix : 2.6.6
dovecot : 2.0.9

ドメイン名についてはmydnsを使っていて、下記の例の用に設定している。

domain : hoge.mydns.jp
hostname : mail.hoge.mydns.jp

既存の他のメールアドレスから新規メールを送信したとき、

foo@mail.hoge.mydns.jp ⇒ 届く ◯
foo@hoge.mydns.jp ⇒ 届かない ✕

という状況だ。
この状況で一番考えられそうなのは、

postfix の /etc/postfix/main.cf 内の設定項目 mydestination の設定を間違っていることだ。

しかし、

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

としていて、この設定には問題無い。

送信元の MAILER-DAEMON から返ってきたメッセージを見てみる。

(一部抜粋)
=====
<foo@hoge.mydns.jp>: host mail[xxx.xxx.xxx.xxx] said: 554 5.4.0
    Error: too many hops (in reply to end of DATA command)
=====

中継が多すぎるとの事で、ちゃんと配送されずに、どっかで堂々巡りになっている?ようだ。

mydns の設定がまずくて、ちゃんと名前解決されていないという可能性も考えたが、mydnsの設定はややこしいものではないし、前回、上手くいっていた時と同様に設定できたいたので、サーバー内のソフトやネットワークの設定ファイルの見直しにとりかかった。

そしてドハマりした。

続く




2015年2月27日金曜日

【CentOS 6.5】SSHの設定

CentOSサーバーを再インストールトした。

このブログを自分のサーバーに移行しようと目論んでおり、設定等についてもう一度確認・勉強したかったからだ。

SSHの設定について、入門書やネット上の解説等をいくつか参考にして、『これだけやっとけば概ね大丈夫だろう』という設定に辿り着いた(つもり)なのでまとめておく。

『/etc/ssh/sshd_config』を編集

① SSH用のポート番号を変更する。  


 不正なアクセスを防止するため。

 デフォルト: #Port 22
 変更後  : Port 任意のポート番号

 変更後のポート番号は、プライベート ポート番号(49152~65535)の中から選ぶのが良さげそう。

 なお、変更後のポートを開くのを忘れると、アクセスできなくなってしまうので注意。

  『/etc/sysconfig/iptables 』を編集して、ポートを開く。 
  iptablesは、ssh用としてデフォルトで22番ポートが開かれているので、この番号を変更する。

   デフォルト:-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
   変更後  :-A INPUT -m state --state NEW -m tcp -p tcp --dport 任意のポート番号 -j             ACCEPT

② rootのログインを禁止する。


 rootでの操作を必要最小限にするため。

 デフォルト: #PermitRootLogin yes
 変更後  : PermitRootLogin no

③ パスワード認証を禁止する。


 よりセキュアな公開鍵認証での接続を強制するため。
 あらかじめ、公開鍵認証での接続の設定をしておかないと、SSHでログインできなくなるので注意。

 デフォルト: #PasswordAuthentication yes
 変更後  : PasswordAuthentication no

④ SSH接続を許可するユーザを制限する。


 不正なアクセスを防止するため。

 追記   : AllowUsers ユーザ名

⑤ SSHのバージョンを2に限定(デフォルト)


 脆弱性が確認されているSSHバージョン1の使用を避けるため。

 デフォルト: Protocol 2

以上