■目次
SSHで接続日本語を使えるようにファイヤーウォール(iptables)を設定ホスト名を設定タイムゾーンを設定スワップ領域を設定パッケージ管理システム設定各種ツールをインストールユーザSSHのポート番号rootになるroot宛メールを転送するログ保存期間を設定不要な機能を無効にする(今は不要?)
■SSHで接続
■接続に使うソフトウェア Poderosa https://ja.osdn.net/projects/sfnet_poderosa/ 「ファイル → 新規Telnet/SSH接続」から接続できる 「ホスト」に接続先を設定 「プロトコル」は基本的に「SSH2」を選択 「ポート」は基本的に「22」だが、変更されていることも多い SSHパラメータの「アカウント」と「パスフレーズ」を入力して認証。公開鍵で認証することも多い ターミナルの「種類」は「xterm」を選択 好みによるが、Poderosaで画面の配色を設定する場合の参考に http://nrok81.hatenablog.com/entry/2013/04/23/230000 http://ethanschoonover.com/solarized ※Poderosaはバージョン4まではオープンソースだったが、バージョン5からは有償となっている。ただし無期限に試用できる http://ja.poderosa-terminal.com/ ■xterm と kterm xterm X Window Systemの標準的なターミナルエミュレータ http://ja.wikipedia.org/wiki/Xterm kterm xtermからの派生ターミナルエミュレータの1つであり、多言語の表示をサポートしている http://ja.wikipedia.org/wiki/Kterm xtermでは日本語を表示できなかったらしいが、それは昔の話かも?今は問題なく表示される また、ktermでは ・topコマンドが使えない(何故か「top -b -d 1 -n 5」のようにすれば使える) ・lessコマンドが使えない ・vimでの色分けもされない といった問題があるので、特別な理由がなければxtermを使う方が良さそう ■補足 基本的にCentOS6環境での操作となっている CentOS7など他の環境では、設定方法やコマンドが変わることがある vi を使っている箇所は vim でも問題ない また、大抵の環境では vi を実行すると vim が呼び出される 以降のサーバ設定手順は、以下も参考になる http://centossrv.com/ http://nekopunch.hatenablog.com/entry/2015/01/16/112402 http://qiita.com/shojimotio/items/79264678e9ea10b6fd19
■日本語を使えるように
# vi /etc/sysconfig/i18n … 言語を設定
#LANG="C" LANG=ja_JP.UTF-8 … 日本語を有効化
設定は次回ログイン時に有効になるので、一旦ログアウトして確認する ■CentOS7の場合 # localectl set-locale LANG=ja_JP.UTF-8 … 設定 # localectl status … 確認
■ファイヤーウォール(iptables)を設定
※不要なアクセスを遮断する ※諸々の初期設定を行っている最中に侵入される可能性があるので、早い段階で設定する ※AWSではセキュリティーグループを使用するので設定不要 ■ファイヤーウォールを確認 参考:さくらのVPS を使いはじめる 3 - iptables を設定する http://akabeko.me/blog/2010/09/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEvps-%E3%82%92%E4%BD%BF%E3%81%84%E... 参考:iptablesの設定 http://www.nina.jp/server/redhat/iptables/iptables.html 参考:ファイアウォール構築(iptables) http://centossrv.com/iptables.shtml 参考:【丁寧解説】Linuxファイアウォール iptablesの使い方 https://eng-entrance.com/linux-firewall # yum list installed | grep iptables … iptablesがインストールされていることを確認 iptables.x86_64 1.3.5-5.3.el5_4.1 installed … インストールされている iptables-ipv6.x86_64 1.3.5-5.3.el5_4.1 installed # iptables -L … iptablesの設定を確認 Chain INPUT (policy ACCEPT) … 何も設定されていない target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination ■ファイヤーウォールを設定 # vi /etc/sysconfig/iptables … ファイヤーウォールを設定
############################## #テーブル ############################## #パケットフィルタリングではfilterテーブルを使用 *filter ############################## #デフォルトポリシー ############################## #受信はすべて破棄 :INPUT DROP [0:0] #経由はすべて破棄 :FORWARD DROP [0:0] #送信はすべて許可 :OUTPUT ACCEPT [0:0] #Ping of Death 攻撃対策 :LOG_PINGDEATH - [0:0] #プライベートアドレスを拒否 -A INPUT -s 10.0.0.0/8 -j DROP -A INPUT -s 172.16.0.0/12 -j DROP -A INPUT -s 192.168.0.0/16 -j DROP #ローカルアドレスや例示用アドレスなどを拒否 -A INPUT -s 127.0.0.0/8 -j DROP -A INPUT -s 169.254.0.0/12 -j DROP -A INPUT -s 192.0.2.0/24 -j DROP -A INPUT -s 198.51.100.0/24 -j DROP -A INPUT -s 203.0.113.0/24 -j DROP -A INPUT -s 224.0.0.0/4 -j DROP -A INPUT -s 240.0.0.0/5 -j DROP #デフォルトルートとブロードキャストアドレスを拒否 -A INPUT -d 0.0.0.0/8 -j DROP -A INPUT -d 255.255.255.255 -j DROP #Ping of Death 攻撃対策(1秒間に4回を超えるpingはログを記録して破棄) -A LOG_PINGDEATH -m limit --limit 1/sec --limit-burst 4 -j ACCEPT -A LOG_PINGDEATH -j LOG --log-prefix "[IPTABLES PINGDEATH]: " -A LOG_PINGDEATH -j DROP ############################## #ユーザ定義ポリシー ############################## #ユーザ定義チェーン :MY-FIREWALL - [0:0] #よく見かける RH-Firewall-1-INPUT という名前である必要はない #受信と経由は「MY-FIREWALL」の設定に従う -A INPUT -j MY-FIREWALL -A FORWARD -j MY-FIREWALL #インタフェースが lo(ループバック / 自分自身に対してのデータ送信)なら通信を許可 -A MY-FIREWALL -i lo -j ACCEPT #プロトコルが icmp(ICMP / 互いの状態を確認)なら通信を許可 -A MY-FIREWALL -p icmp --icmp-type any -j ACCEPT #プロトコル番号が 50(ESP / パケットが改ざんされていないか認証を行う。パケットの暗号化を行う)なら通信を許可 -A MY-FIREWALL -p 50 -j ACCEPT #プロトコル番号が 51(AH / パケットが改ざんされていないか認証を行う。パケットの暗号化はできない)なら通信を許可 -A MY-FIREWALL -p 51 -j ACCEPT #プロトコルが udp かつ送信先ポートが 5353(Multicast DNS / 数字のアドレスを名前に変換)かつ送信先アドレスが 224.0.0.251 なら通信を許可 -A MY-FIREWALL -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT #プロトコルが udp かつ送信先ポートが 631(Internet Printing Protocol / 印刷データのやりとりを行う)なら通信を許可 #-A MY-FIREWALL -p udp -m udp --dport 631 -j ACCEPT #印刷を使う場合に有効化する #プロトコルが tcp かつ送信先ポートが 631(Internet Printing Protocol / 印刷データのやりとりを行う)なら通信を許可 #-A MY-FIREWALL -p tcp -m tcp --dport 631 -j ACCEPT #印刷を使う場合に有効化する #内部から行ったアクセスに対する外部からの返答アクセスを許可 -A MY-FIREWALL -m state --state ESTABLISHED,RELATED -j ACCEPT #SSHを許可(IP制限あり) -A MY-FIREWALL -m state --state NEW -m tcp -p tcp --dport 22 -s 203.0.113.0 -j ACCEPT -A MY-FIREWALL -m state --state NEW -m tcp -p tcp --dport 10022 -s 203.0.113.0 -j ACCEPT #以上のチェックにかからなかったパケットを /var/log/messages に記録。ただし記録は1秒間に1回まで -A MY-FIREWALL -j LOG --log-level info --log-prefix "[IPTABLES REJECT]: " -m limit --limit 1/s #以上のチェックにかからなかったパケットは、ICMPパケット host-prohibited を返して接続を拒否 -A MY-FIREWALL -j REJECT --reject-with icmp-host-prohibited ############################## #以上の内容を登録 ############################## COMMIT
# service iptables restart … ファイヤーウォールを再起動 ※fail2banを導入している場合、続けて以下を実行しないとfail2banの設定が消えたままになるみたい? ファイヤーウォールを再起動する場合は注意する # service fail2ban restart ■CentOS7の場合 iptablesではなくfirewalldコマンドで設定する 内部的にはiptablesが使われているが、共存はできない コマンドで操作してXMLに記録されるのが基本的な操作方法 参考:【丁寧解説】Linuxのファイアウォール firewalld の使い方 https://eng-entrance.com/linux-centos-firewall firewall-cmd ... コマンド。これに続けて様々な指定を行う --permanent ... 恒久的な設定を行う。反映には「firewall-cmd --reload」が必要。省略すると即時反映だが、再起動とともに消える --zone=public ... 操作対象のゾーン。省略すると、デフォルトのpublicゾーンが対象になる 以下にサービスやゾーンの初期設定の定義ファイルがある /usr/lib/firewalld/services /usr/lib/firewalld/zones 以下にユーザによってカスタマイズされた定義ファイルがある /etc/firewalld/services /etc/firewalld/zones 以下にダイレクトルールの定義ファイルがある /etc/firewalld/direct.xml 以下にfirewallの設定ファイルがある /etc/firewalld/firewalld.conf # firewall-cmd --list-all … firewalldの設定内容を確認 public (active) … publicゾーンが設定されている target: default icmp-block-inversion: no interfaces: eth0 … eth0が対象になっている sources: services: ssh dhcpv6-client … SSH(22番ポート)のみ空いている ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: # firewall-cmd --direct --get-all-rules … ダイレクトルールを確認 80番、443番、10022番ポートを開ける場合 # firewall-cmd --permanent --add-service=http # firewall-cmd --permanent --add-service=https # firewall-cmd --permanent --add-port=10022/tcp # firewall-cmd --list-all … firewalldの設定内容を確認 public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: ssh dhcpv6-client http https … HTTPとHTTSのポートが空いた ports: 10022/tcp … 10022番ポートが空いた protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: 設定をリセットする場合(一般的な方法かどうかは不明) # cp /usr/lib/firewalld/zones/public.xml /etc/firewalld/zones/public.xml # firewall-cmd --reload 以下、具体的な設定方法 # firewall-cmd --permanent --add-service=http … 80番ポートへのアクセスを許可 # firewall-cmd --permanent --add-service=https … 443番ポートへのアクセスを許可 # firewall-cmd --permanent --add-port=22/tcp … 22番ポートへのアクセスを許可 # firewall-cmd --permanent --add-port=10022/tcp … 10022番ポートへのアクセスを許可 # firewall-cmd --permanent --add-source=203.0.113.1/32 … 203.0.113.1からのアクセスを許可 # firewall-cmd --permanent --add-source=203.0.113.0/24 … 203.0.113.0/24の範囲からのアクセスを許可 # firewall-cmd --permanent --set-log-denied all … アクセスを拒否したらログに記録 # firewall-cmd --permanent --remove-service=https … 443番ポートへのアクセス許可を削除する場合 # firewall-cmd --permanent --remove-port=10022/tcp … 10022番ポートへのアクセスを許可を削除する場合 # firewall-cmd --permanent --remove-source=203.0.113.1/32 … 203.0.113.1からのアクセスを許可 # firewall-cmd --permanent --add-service=ftp … 21番ポートへのアクセスを許可する場合 # firewall-cmd --permanent --add-port=60000-60030/tcp … 60000〜60030番ポートへのアクセスを許可する場合 # firewall-cmd --permanent --remove-port=60000-60030/tcp … 60000〜60030番ポートへのアクセス許可を削除する場合 # firewall-cmd --permanent --add-rich-rule='リッチルール' … より複雑なルール(リッチルール)を設定 # firewall-cmd --permanent --list-rich-rules … 設定されているリッチルールの確認(ルールの削除時などに使用できる) # firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=203.0.113.1/32 service name=http accept' # firewall-cmd --permanent --remove-rich-rule='rule family=ipv4 source address=203.0.113.1/32 service name=http accept' … 特定IPから特定サービスへのアクセスを許可&削除例 # firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=203.0.113.1/32 service name=http accept' # firewall-cmd --permanent --remove-rich-rule='rule family=ipv4 source address=203.0.113.1/32 service name=http accept' … 特定IPから特定ポートへのアクセスを許可&削除例 # firewall-cmd --reload … firewalldの設定を再読込 # systemctl restart firewalld … firewalldを再起動 # firewall-cmd --list-all-zones … firewalldの設定内容を確認(すべてのゾーン) # firewall-cmd --get-default-zone … デフォルトで使用されるゾーン # firewall-cmd --set-default-zone=block … デフォルトで使用されるゾーンを変更する場合 # firewall-cmd --get-services … 設定時に使用できるサービス一覧 # ll /usr/lib/firewalld/services … 直接確認する場合 # firewall-cmd --state … 動作状況を確認 参考:CentOS7でfirewalld(ファイアウォール)の設定。firewall-cmd -list-allでports(ポート番号)の指定をお忘れなく! - エコテキブログ https://e-yota.com/webservice/post-2563/ SSHのポートを変更している場合、 「--add-port=10022/tcp」と指定する…よりも、以下のようにサービスのポート番号を変える方が良さそう # cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh.xml # vi /etc/firewalld/services/ssh.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 protocol="tcp" port="22"/> … SSHのポート番号に合わせて変更 </service>
# firewall-cmd --permanent --add-service=ssh 参考:firewalld初心者のメモ - Qiita https://qiita.com/T_Shinaji/items/b3ba400feb3c6adebd27 参考:CentOS7でのFirewalld設定(ほぼコマンド例) - Qiita https://qiita.com/t-morisoba/items/d8702015f92a0dcb7280 参考:CentOS7 ダイレクトルールを使ったFirewallの強化(iptables) http://www.yam-web.net/centos7/direct-rule/index.html 参考:firewalldでソースを指定して通信を遮断する方法 | server-memo.net http://www.server-memo.net/centos-settings/firewalld/source-drop.html 参考:自分なりにあちこちからかき集めて作ったセキュアなCentOS7サーバ - Qiita https://qiita.com/KurokoSin/items/51e79657f1f2104cf607 参考:firewall-cmdコマンドの使い方 - Qiita https://qiita.com/hana_shin/items/bd9ba363ba06882e1fab 以下に設定すべき内容をまとめ中 # cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh.xml # vi /etc/firewalld/services/ssh.xml … 必要に応じて、SSHのポート番号を変更する # firewall-cmd --permanent --remove-service=ssh … 通常のSSHポートを塞ぐ(特定IPからの接続のみ許可する場合) # firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i eth0 -s 10.0.0.0/8 -j DROP # firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i eth0 -s 172.16.0.0/12 -j DROP # firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i eth0 -s 192.168.0.0/16 -j DROP … プライベートアドレスを拒否 # firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i eth0 -s 127.0.0.0/8 -j DROP # firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i eth0 -s 169.254.0.0/12 -j DROP # firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i eth0 -s 192.0.2.0/24 -j DROP # firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i eth0 -s 198.51.100.0/24 -j DROP # firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i eth0 -s 203.0.113.0/24 -j DROP # firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i eth0 -s 224.0.0.0/4 -j DROP # firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i eth0 -s 240.0.0.0/5 -j DROP … ローカルアドレスや例示用アドレスなどを拒否 # firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i eth0 -s 0.0.0.0/8 -j DROP # firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i eth0 -s 255.255.255.255 -j DROP … デフォルトルートとブロードキャストアドレスを拒否 # firewall-cmd --permanent --direct --add-chain ipv4 filter LOG_PINGDEATH # firewall-cmd --permanent --direct --add-rule ipv4 filter LOG_PINGDEATH 0 -m limit --limit 1/sec --limit-burst 4 -j ACCEPT # firewall-cmd --permanent --direct --add-rule ipv4 filter LOG_PINGDEATH 0 -j LOG --log-prefix "[IPTABLES PINGDEATH]: " # firewall-cmd --permanent --direct --add-rule ipv4 filter LOG_PINGDEATH 0 -j DROP … Ping of Death 攻撃対策(1秒間に4回を超えるpingはログを記録して破棄) # firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=203.0.113.1/32 service name=ssh accept' … 特定IPからSSHへのアクセスを許可(必要に応じて) # firewall-cmd --permanent --add-service=http … HTTPへのアクセスを許可 # firewall-cmd --permanent --add-service=https … HTTPSへのアクセスを許可 # firewall-cmd --set-log-denied all … アクセスを拒否したらログに記録 # firewall-cmd --reload … firewalldの設定を再読込
■ホスト名を設定
※サーバを区別するための名前を付ける ※名前はサーバからのアラートメールなどにも使われるので、 サーバが複数台構成の場合は web1.refirio.net のように区別できる名前にするといい ■ホスト名を確認 # hostname localhost.localdomain ■ホスト名を変更 参考:CentOS 6 - ホスト名を設定する http://www.server-world.info/query?os=CentOS_6&p=hostname 参考:CentOS6 インストール後の設定 http://centos.server-manual.com/centos6_setup.html 参考:Linuxのホスト名を変更する http://www.searchman.info/tips/1360.html ※ホスト名は、サーバ作成時に設定することもある(さくらのクラウドなど) ※hostnameでホスト名が即座に変更されるが、サーバを再起動すると戻ってしまう /etc/hosts と /etc/sysconfig/network を編集することで、恒久的にホスト名を変更できる 早い段階で変更して、サーバの再起動テストもしておくといい # hostname refirio.net … refirio.net に変更 # vi /etc/hosts
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 127.0.0.1 localhost refirio.net localhost4 localhost4.localdomain4 … refirio.net に変更 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# vi /etc/sysconfig/network
NETWORKING=yes #HOSTNAME=localhost.localdomain HOSTNAME=refirio.net … refirio.net に変更 NETWORKING_IPV6=yes IPV6_DEFAULTDEV=eth0 IPV6_DEFAULTGW=fe80::1
※適当なホスト名を付ける場合、「test」のような名前より「test.localdomain」のようにした方がいいみたい 参考:sendmail の newaliases が遅い http://bmath.org/wordpress/?p=1691 ■CentOS7の場合 # hostnamectl set-hostname refirio.net … 設定 # vi /etc/hosts … 設定(編集箇所はCentOSと同じ) # vi /etc/sysconfig/network … 設定(編集箇所はCentOSと同じ) # hostnamectl status … 確認 参考:CentOS 7 の Hostname を変更する - Qiita https://qiita.com/n-oshiro/items/d18ab37bce2b25b2d5b0
■タイムゾーンを設定
※タイムゾーンが日本時間になっていない場合に設定する(AWSなど) 参考:Amazon EC2のタイムゾーンを日本時間に変更する方法 http://qiita.com/drapon/items/2fc5b21a9cdc31ddb152 参考:EC2のタイムゾーンがyum updateで変わる? http://blog.shuffleee.com/2265/ # date … タイムゾーンを確認 2015年 3月 8日 日曜日 14:19:26 UTC … JSTになっていない場合に以下を設定 # ls /usr/share/zoneinfo/ … インスタンスで使用する時間帯を検索(Japanがあることを確認する) # vi /etc/sysconfig/clock … clockファイルを編集
#ZONE="UTC" ZONE="Japan" … Japanに設定 UTC=true
# ln -sf /usr/share/zoneinfo/Japan /etc/localtime … 時間帯ファイルにシンボリックリンク 再度dateを実行し、日本時間になっていることを確認する(反映されなければ、システムを再起動してみる) ■CentOS7の場合 # timedatectl set-timezone Asia/Tokyo … 設定 # timedatectl status … 確認
■スワップ領域を設定
※メモリ不足の際に、ハードディスクの一部をメモリとして扱えるようにする ※スワップ領域がない場合、メモリ不足になるとOOM Killerによって早々にプロセスを終了させられる スワップ領域がある場合、メモリ不足になるとスワップが使われるため、プロセスの強制終了が発生しにくくなる ただしハードディスクの読み書きはメモリに比べて遅いので、処理速度は大幅に落ちる 可能なら十分な量の実メモリを搭載することが望ましいが、保険として設定しておくといい ※スワップ領域が割り当てられていない場合に設定する(AWSなど) ※スワップのサイズは、一般的にメモリサイズの2倍にする。ただし、設定した分だけストレージの容量を消費するので注意 参考:Amazon EC2(Linux)のswap領域ベストプラクティス http://dev.classmethod.jp/cloud/ec2linux-swap-bestpractice/ 参考:AWS Amazon Linux スワップファイル作成によりSwap領域のサイズを増やす http://qiita.com/na0AaooQ/items/278a11ed905995bd16af 参考:EC2 Amazon Linux を立ち上げた時にする初期設定 http://qiita.com/shojimotio/items/79264678e9ea10b6fd19 ■スワップ領域を確認 # free … swap領域を確認 total used free shared buffers cached Mem: 1017260 137336 879924 60 9192 76784 -/+ buffers/cache: 51360 965900 Swap: 0 0 0 … swap領域が割り当てられていない場合に以下を設定 ■スワップ領域を設定 # dd if=/dev/zero of=/mnt/swapfile bs=1M count=2048 … swap用のファイルを作成(count=2048 なので、この場合2Gのswapを作成) 2048+0 レコード入力 2048+0 レコード出力 2147483648 バイト (2.1 GB) コピーされました、 125.385 秒、 8.6 MB/秒 # mkswap /mnt/swapfile … swap用ファイルをswap領域にセット スワップ空間バージョン1を設定します、サイズ = 4194300 KiB ラベルはありません, UUID=4bfaa823-0227-43ca-aab1-f7dbb788fb03 # swapon /mnt/swapfile … swap領域を有効化 swapon: /mnt/swapfile: 安全でない権限 0644 を持ちます。 0600 がお勧めです。 # chmod 0600 /mnt/swapfile … パーミッションを設定 # vi /etc/fstab … 再起動してもswap領域がアクティブになるようにする
LABEL=/ / ext4 defaults,noatime 1 1 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 /mnt/swapfile swap swap defaults 0 0 … 追加
# free … swap領域を確認 total used free shared buffers cached Mem: 1017260 956900 60360 60 9376 870244 -/+ buffers/cache: 77280 939980 Swap: 2097148 0 2097148 … swap領域が割り当てられている ■スワップ領域を解除 # swapoff /mnt/swapfile … 設定し直す際に実行する(スワップ領域を無効にする)
■パッケージ管理システム設定
# yum -y install yum-fastestmirror … インストールパッケージダウンロード時の最適ミラーサイトを自動選択させる # yum -y update … インストール済パッケージの一括アップデート # yum -y install yum-cron … cronをインストール # service yum-cron start … パッケージ自動更新起動 # chkconfig yum-cron on … パッケージ自動更新自動起動設定 # chkconfig --list … 自動起動を確認する ■CentOS7の場合 サービスの操作はsystemctlコマンドで行うように変更されている ただし現時点ではserviceを使うとsystemctlに転送されるため、serviceでも操作できる サービス操作 # systemctl (start|stop|restart|status ...etc) (サービス名).service # systemctl start yum-cron.service … 実例 サービス自動起動設定 # systemctl (enable|disable) (サービス名).service # systemctl enable yum-cron.service … 実例 サービスを確認 # systemctl | grep nginx サービスの状態を確認 # systemctl list-unit-files
■各種ツールをインストール
# yum -y groupinstall "Base" "Development tools" … gccなどの開発ツールを一括インストール # yum -y install sysstat … システムの状態を監視するツール # yum -y install dstat … リソースを監視するツール # yum -y install iotop … I/Oプロセスを監視するツール
■ユーザ
※必要に応じて追加する ※AWSの Amazon Linux では、はじめから ec2-user が作成されている ■ユーザを作成 # useradd refirio … 一般ユーザ「refirio」を作成 # passwd refirio … 「refirio」のパスワードを設定 # cat /etc/passwd … ユーザ一覧を確認する場合 # groups refirio … 「refirio」ユーザが属するグループを確認する場合 refirio : refirio wheel # su - refirio … 「refirio」になる場合 # su -s /bin/bash - refirio … シェルを指定して「refirio」になる場合 # userdel -r refirio … 「refirio」を削除する場合 $ passwd … 一般ユーザが自身のパスワードを変更する場合 オプションを指定することで、有効期限やログインシェルを指定してアカウントを作成したりもできる 参考:useraddコマンドについて詳しくまとめました 【Linuxコマンド集】 https://eng-entrance.com/linux-command-useradd 参考:Linuxコマンド【 passwd 】ユーザーのパスワードを変更 - Linux入門 - Webkaru https://webkaru.net/linux/passwd-command/ ■鍵で認証できるように設定 ・Poderosaなどで鍵(公開鍵・秘密鍵)を作成する 鍵はRSAの2048で作成するといい ・パスワードなしの鍵を作成することもできる 参考:WindowsからSSHサーバーへリモート接続(Poderosa鍵方式ログイン編) http://fedorasrv.com/poderosa-public.shtml ・rootユーザで、作成した公開鍵をサーバにセットアップする # mkdir -p /home/refirio/.ssh … 公開鍵格納用ディレクトリを作成 # chmod 700 /home/refirio/.ssh … 公開鍵格納用ディレクトリのパーミッションを変更 # vi /home/refirio/.ssh/authorized_keys … 公開鍵をauthorized_keysに保存
ssh-rsa xxxxxxxxxx … 作成した公開鍵の内容を全てコピーして貼り付ける
# chmod 600 /home/refirio/.ssh/authorized_keys … authorized_keysのパーミッションを変更 # chown -R refirio:refirio /home/refirio … ユーザディレクトリの所有者を変更 ■rootになれるユーザを管理者のみにする # usermod -G wheel refirio … 「wheel」グループ(rootになれるユーザのグループ)にユーザを追加 # vi /etc/pam.d/su
#auth required pam_wheel.so use_uid auth required pam_wheel.so use_uid … コメント解除
■作業用ユーザで sudo ができるようにする ・visudoコマンドは「vi /etc/sudoers」と同じ ただし /etc/sudoers は読み取り専用ファイルで、ファイル内にも「visudoコマンドで編集すべき」と書かれている ・root操作に関わる設定なので、気軽に編集できないようにされていると思われる # visudo
# %wheel ALL=(ALL) ALL %wheel ALL=(ALL) ALL … コメント解除
参考:CentOSでuserをsudo可能にする - Qiita https://qiita.com/Esfahan/items/a159753d156d23baf180 参考:sudoの権限を設定するvisudoコマンド【Linuxコマンド集】 https://eng-entrance.com/linux-command-visudo ■rootでの直接ログインを禁止・パスワード無しのログインを禁止 # vi /etc/ssh/sshd_config
#PermitRootLogin yes PermitRootLogin no … noに設定 #PermitEmptyPasswords no PermitEmptyPasswords no … コメント解除
# service sshd restart … SSHを再起動 ■ホームディレクトリより上層へのアクセスを禁止 ※未検証 ・chrootを使う ・/etc/ssh/sshd_config で「特定ユーザに対して ChrootDirectory が実行されるようにする」と設定する ・ただしそれだけだと対象ユーザがコマンドを参照できなくなるので、あらかじめユーザ領域にコマンドをコピーする という流れで設定する 以下が参考になりそう 参考:chroot【コマンド】とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 http://wa3.i-3-i.info/word13814.html 参考:chroot環境の作成 - Qiita https://qiita.com/yan16/items/ffb8c791405f5e8eac25 参考:特定のユーザのみSFTPでchrootする | Developers.IO https://dev.classmethod.jp/cloud/aws/sftp-chroot/ 参考:WindowsからSSHサーバーへファイル転送(WinSCP) - CentOSで自宅サーバー構築 http://centossrv.com/winscp.shtml 参考:SSHサーバー構築(OpenSSH) - CentOSで自宅サーバー構築 http://centossrv.com/openssh.shtml
■SSHのポート番号
※22番ポートは一番狙われやすいので変更しておく ■SSHのポート番号を変更 # vi /etc/ssh/sshd_config
#Port 22 Port 10022 … ポート番号を変更
# service sshd restart … SSHを再起動 ■SSHのポート番号を変更(iptablesを使用している場合の設定) # vi /etc/sysconfig/iptables … ファイヤーウォールを設定(22ポートを閉じる)
#SSHを許可(IP制限あり) #-A MY-FIREWALL -m state --state NEW -m tcp -p tcp --dport 22 -s 203.0.113.0 -j ACCEPT … コメントアウト -A MY-FIREWALL -m state --state NEW -m tcp -p tcp --dport 10022 -s 203.0.113.0 -j ACCEPT
# service iptables restart … ファイヤーウォールを再起動
■rootになる
$ su … ホームディレクトリは作業ユーザのままで、シェルや環境変数も引き継ぐ $ su - … ホームディレクトリが /root になり、rootの環境変数を使用する $ sudo su - … ユーザパスワードでrootになる(sudoを許可されている必要がある) # exit … rootからログアウト
■root宛メールを転送する
# sed -i '/^root:/d' /etc/aliases … 旧root宛メール転送設定削除 # echo "root: refirio@example.com" >> /etc/aliases … root宛メールを普段使用しているメールアドレス宛に転送する # newaliases … 転送設定反映 # yum -y install mailx … mailコマンドインストール # echo test|mail root … テストメールをroot宛に送信する 以下で設定されているホスト名に差異がある場合、メールが送信されない模様。正しく設定する hostname /etc/hosts /etc/sysconfig/network
■ログ保存期間を設定
参考:logrotate.confファイルを読み解くメモ http://masasuzu.hatenablog.jp/entry/20111117/1321512757 # vi /etc/logrotate.conf
#rotate 4 rotate 12 … 3ヶ月(12周間)残す場合(※restartなどは不要と思われるが要検証)
■不要な機能を無効にする(今は不要?)
※余計な機能が動いていると、セキュリティホールになりかねないので無効にする ■不要なデーモンをストップ(EC2では不要?) # chkconfig acpid off # chkconfig auditd off # chkconfig autofs off … さくらVPSでは「そのようなファイルやディレクトリはありません」となる # chkconfig avahi-daemon off … さくらVPSでは「そのようなファイルやディレクトリはありません」となる # chkconfig bluetooth off … さくらVPSでは「そのようなファイルやディレクトリはありません」となる # chkconfig cups off … さくらVPSでは「そのようなファイルやディレクトリはありません」となる # chkconfig firstboot off … さくらVPSでは「そのようなファイルやディレクトリはありません」となる # chkconfig gpm off … さくらVPSでは「そのようなファイルやディレクトリはありません」となる # chkconfig haldaemon off # chkconfig hidd off … さくらVPSでは「そのようなファイルやディレクトリはありません」となる # chkconfig isdn off … さくらVPSでは「そのようなファイルやディレクトリはありません」となる # chkconfig kudzu off … さくらVPSでは「そのようなファイルやディレクトリはありません」となる # chkconfig lvm2-monitor off # chkconfig mcstrans off … さくらVPSでは「そのようなファイルやディレクトリはありません」となる # chkconfig mdmonitor off # chkconfig messagebus off # chkconfig netfs off # chkconfig nfslock off … さくらVPSでは「そのようなファイルやディレクトリはありません」となる # chkconfig pcscd off … さくらVPSでは「そのようなファイルやディレクトリはありません」となる # chkconfig portmap off … さくらVPSでは「そのようなファイルやディレクトリはありません」となる # chkconfig rawdevices off … さくらVPSでは「そのようなファイルやディレクトリはありません」となる # chkconfig restorecond off # chkconfig rpcgssd off … さくらVPSでは「そのようなファイルやディレクトリはありません」となる # chkconfig rpcidmapd off … さくらVPSでは「そのようなファイルやディレクトリはありません」となる # chkconfig smartd off # chkconfig xfs off … さくらVPSでは「そのようなファイルやディレクトリはありません」となる # chkconfig yum-updatesd off … yum-updatesd を削除したら「Nそのようなファイルやディレクトリはありません」となる ■不要なコンソールを無効にする(今は不要?) ※ttyというのは TeleTYpewriter(テレタイプライター)に由来する テレタイプライターとは、今日ではほとんど使われなくなった電動機械式タイプライターのこと # vi /etc/inittab
#2:2345:respawn:/sbin/mingetty tty2 #3:2345:respawn:/sbin/mingetty tty3 #4:2345:respawn:/sbin/mingetty tty4 #5:2345:respawn:/sbin/mingetty tty5 #6:2345:respawn:/sbin/mingetty tty6
■SELinuxを無効にする(今は不要?) ※SELinuxはシステムのセキュリティを強固にする仕組み 難解なため無効に設定されることが多かったが、現在はSELinuxに由来するトラブルは非常に少なくなったため、導入は有効らしい そのうちに調べる # getenforce … SELinuxの状態を確認 Enforcing … SELinuxが有効 # setenforce 0 … SELinuxを無効化 # getenforce … SELinuxの状態を確認 Permissive … SELinuxが無効 # vi /etc/sysconfig/selinux
SELINUX=enforce SELINUX=disabled … システム起動時にSELinuxを無効化