2022-01-27 · 7

サーバー構築 2

serverlinux

この記事は公開から2年以上経過しています。

知っておくべき内容:

もっと見る

**[機能班学習/ネットワーク] - [ネットワーク] NAT について**](https://nabomhalang.tistory.com/entry/네트워크-NAT에-대해서) [[ネットワーク] NAT について — NAT は内部ネットワークから外部へ出るとき、内部 ip アドレスを別の ip に変換して外部へ出られるようにします。① NAT Static:送信元と宛先の ip を事前にマッピングして固定した NAT ② NAT Dynamic:送信元や宛先 — nabomhalang.tistory.com


Client が外部サーバー main_srv、slave_srv とは通信可能で、外部サーバーが client とは通信できないように設定しますが、これに NAT を使います。masquerade という機能を使います。

vim /etc/sysctl.conf

28 行目の net.ipv4.ip_forward=1 がコメントアウトされているはずなので、# を消してコメントを外し、:wq で出ます。

echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ip4.ip_forward = 1

上の 2 つのコマンドのうち通るものでやります。

iptables -A FORWARD -o ens33 -j ACCEPT
iptables -A FORWARD -o ens37 -j ACCEPT
iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE

ens33(内部)ens37(外部)で接続できるよう全部 ACCEPT します。そして上の 3 つのコマンドを順に入力します。すると今度は Windows Client から main_server へ ping が送られます。

windows Client → main-server

次に Windows Client から ssh が接続できるよう設定します。main-server で行います。

apt install openssh-server
sudo systemctl status ssh

install openssh-server で ssh をインストールします。

※ openssh がインストールされない場合は ifconfig を打ってみて、ens33 がオフか、ens37 がオンかを確認しましょう。 ens33 は仮想ネットワークなのでパッケージをダウンロードするときはオフでなければならず、パッケージを受け取るには ens37 がオンでなければなりません。

インストール後、2 番目のコマンドを入力して実行中か確認しましょう。

実行中なのが確認できます。これで windows client から ssh で接続できるはずです。main で作ったので、私の場合は main-server の hostname が main なので ssh [email protected] で接続可能です。

windows terminal から main-server に接続した状況

次に root で一度に接続できるようにします。もし ssh [email protected] でいけると思うなら、一度やってみてください。たぶんダメです。では root で接続できるよう設定してみましょう。

※ もし Windows Client から ssh で接続できない場合、main-server で 22 番ポートが開いていない場合があります。その場合は main-server で ufw allow ssh または ufw allow 22 を入力してポートを再度開けてみましょう。

vim /etc/ssh/sshd_config

上のパスに vim で入って変えればよいです。

Port 22

- ssh が使う基本ポートを指定します。

AllowUsers user1 root

- ログインを許可するアカウントを記録します。

LoginGraceTime 600

- ユーザーのログインが正常に完了しなかったとき、この時間の後にサーバーが接続を切る時間です。

- デフォルト値は 600 秒です。

PermitRootLogin no

- root ログインの許可可否を決めるものです。 yes、no、without-password を使えます。

PasswordAuthentication yes

- パスワード認証を許可する。 このオプションはプロトコルバージョン 1 と 2 の両方に適用されます。

認証時にパスワードベースの認証方法を使うかどうかを決めます。

強力なセキュリティのため、このオプションは常に no に設定されているべきです。

ここで root ログインを許可するには PermitRootLogin を yes に変えれば ssh [email protected] で接続可能になります。ポート番号も変えたいなら Port 22 の 22 を好きなポートに変えればよいです。その場合は ssh [email protected] -p [ポート] で接続します。

設定

上の例では 22000 ポートで開き、RootLogin を許可しました。

ssh [email protected] -p 22000

上のように root できちんと接続できるのが分かります。次は apache で Web サービスをやってみます。

apt install apache2

上のコマンドを入力すると apache2 がインストールされます。

※ これ以降、ens33 と ens37 をオフ・オンする類のことは自分でやる必要があります。

apache が正常にインストールされたら、windows client に行ってブラウザ窓を開き、main-server の IP を入力してみましょう。すると apache2 の基本的なサイト画面が出ます。では基本テンプレートを消して "Hello World" を入力してみましょう。すると下のような画面が出ます。

22.1.24.10

きちんと出るのが確認できます。次に slave-server には nginx をインストールして、apache で設定したのと同様に設定します。

apt install nginx
vim /var/www/html/index.nginx-debian.html

これもインストールが完了すれば、apache と同様に IP で接続できるようになります。

vim /var/www/html/index.nginx-debian.html

上のようにきちんと変えたら、再び windows client に移動して今度は slave-server の IP をブラウザ窓に入れると、apache で設定したのと同様に画面に表示されるのが確認できます。

Apache2 と Nginx のルートディレクトリ変更

apache2

apache2 は合計 2 つのファイルを変える必要があります。まず /var/www/html/ が基本ディレクトリですが、これを /home/main/server/ に変えてみましょう。

vim /etc/apache2/apache2.conf
vim /etc/apache2/sites-available/000-default.conf

上の 2 ファイルで修正する必要があります。

vim /etc/apache2/apache2.conf

164 行目にある /var/www/html/ と書かれた所を /home/main/server/ に変えます。

vim /etc/apache2/sites-available/000-default.conf

DocumentRoot に書かれた /var/www/html/ ファイルを /home/main/server/ に変えます。その後 /home/main/server ディレクトリ内に index.html を作成して基本的な html ファイルを作ります。その後 apache2 を再起動します。

systemctl restart apache2
service apache2 restart

2 つのうち 1 つだけできればよいです。

適用後

適用後、とてもよく変わったのが分かります。

nginx

nginx は非常に簡単です。たった 1 つのファイルを変えればよいです。

vim /etc/nginx/sites-enabled/default

vim /etc/nginx/sites-enabled/default

server で root にある /var/www/html/ を /home/slave-server/server/ に変えます。その後再起動すると正常に動作するのが分かります。

適用後

IPTABLES の使い方

テーブル(Table)

  • filter、nat、mangle、raw
  • 明示しなければ基本的に filter です。

アクション(Action)

  • -A(--append):ポリシー追加、他のポリシーがあれば一番下に追加します。
  • -I(--insert):挿入、他のポリシーがあれば一番上に追加します。
  • -D(--delete):ポリシー削除
  • -R(--replace):ポリシー交換
  • -F(--flush):すべてのポリシー削除
  • -P(--policy):基本ポリシーを設定
  • -L(--list):ポリシー列挙

チェイン(Chain)

  • INPUT
  • OUTPUT
  • FORWARD
  • PREROUTING
  • POSTROUTING

マッチ(Match)

  • -s(--source, --src):送信元マッチング、ドメイン、IP アドレス、ネットマスク値を用いて表記
  • -d(--destination, --dst):宛先マッチング、ドメイン、IP アドレス、ネットマスク値を用いて表記
  • -p:プロトコルとマッチング、TCP、UDP、ICMP のような名前を使い、大文字小文字は区別しない
  • -i(--in-interface):入力インターフェイスとマッチング
  • -o(--out-interface):出力インターフェイスとマッチング
  • -j(--jump):マッチするパケットをどう処理するか指定

ターゲット(target)

  • ACCEPT:パケットを許可します。
  • DROP:パケットを捨てます(パケットが送信されたことがないかのように)
  • REJECT:パケットを捨て、同時に適切な応答パケットを送信する(ICMP-PORT-UNREACHABLE)
  • LOG:パケットを syslog に記録する。
  • SNAT --to [アドレス]:ソース IP を変換(NAT)する。
  • DNAT --to [アドレス]:宛先 IP を変換(NAT)する。
  • RETURN:呼び出しチェイン内でパケット処理を続ける。

上のものをうまく活用すれば、ほとんどすべてのポリシーを設定できるはずです。簡単な問題です。ルーターで main-server から来る 80port を遮断してみましょう。遮断に成功すれば、windows client から 22.1.24.10 の apache サーバーで開いたものが入れなくなりますよね?

全部やりましたか… 正解を公開します。

iptables -I FORWARD -d 22.1.24.10 -p tcp --dport 80 -j DROP

上のコードをルーターに入力した後、windows client から 22.1.24.10 に接続してみると

では再び iptables -F を入力した後、もう一度接続してみましょう。

再びきちんと接続される様子が確認できます。もしルーターではなく main-server 自体で 80 ポートを塞ぎたいなら

iptables -I INPUT -p tcp --dport 80 -j DROP

のように書けば、同様に windows client からは接続できません。

今日はここまでです。


原文(韓国語): tistory — 2022-01-27 公開、当ブログへ移行。この翻訳は AI の協力で作成されました。

コメント

コメントを削除しますか?

関連記事

サーバー構築 2 · 나봄하랑