# Para sa pagpapatibay ng iyong server

## Ikonfigura ang remote access gamit ang SSH keypair

#### Mag-generate ng SSH key pair

Sa iyong client machine (halimbawa, ang iyong laptop), buksan ang iyong terminal (sa Mac) o Windows Powershell (sa Windows) at patakbuhin ang sumusunod:

```sh
ssh-keygen -t ed25519 -C ethnode
```

Pindutin ang `Enter` at mag-set ng isang password upang i-encrypt ang iyong SSH private key.

**Ang inaasahang output:**

<figure><img src="/files/dkrTSSaBr6P33nsKDK0O" alt=""><figcaption></figcaption></figure>

#### Idagdag ang SSH pubkey sa iyong Node

Samantalang nananatili ang pribadong bahagi ng SSH keypair sa iyong laptop, kailangan nating idagdag ang pampublikong bahagi ng key sa iyong Node.

{% tabs %}
{% tab title="Ipaglipat ng Malayo" %}
Sa iyong laptop, patakbuhin ito:

```sh
ssh-copy-id -i ~/.ssh/id_ed25519.pub <username>@<node_IP_address>
```

Ilagay ang password ng iyong NUC device kapag hiningi.
{% endtab %}

{% tab title="Ipaglipat Nang Malayo" %}
Ilabas ang string ng SSH pubkey at kopyahin ito. Sa iyong laptop, patakbuhin ito:

```
cat ~/.ssh/id_ed25519.pub
```

Makikita mo ang kahalintulad na output sa ibaba:

```
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBKRXS4XpZoBcuqvXVN2sRNNolKL+ZHy2Xnzx27Op3uY ethnode
```

SSH papunta sa iyong NUC at ipasok ang iyong password kapag hiningi:

```
ssh <username>@<node_IP_address> -v
```

Lumikha ng authorized SSH key file manu-mano.

```
sudo mkdir -p ~/.ssh
sudo nano ~/.ssh/authorized_keys
```

I-paste ang iyong kinopyang string ng SSH pubkey sa loob ng file ng `authorized_keys`at pindutin ang `CTRL + O, enter, CTRL + X` upang i-save ang file at lumabas.
{% endtab %}
{% endtabs %}

### Baguhin ang port ng SSH at i-disable ang remote password login

Maaari mong gawing mas mahirap para sa mga attacker na ma-access ang iyong node sa pamamagitan ng pagbabago ng iyong SSH port mula sa default na port 22.

Pumili ng isang bilang ng port sa pagitan ng 1024–49151 at suriin na hindi ito ginagamit sa pamamagitan ng pagpapatupad ng:

```bash
sudo ss -tulpn | grep <Chosen_SSH_Port_Number>
```

**Inaasahang output:** Wala. Halimbawa, Kung walang output, ibig sabihin na ang iyong piniling port ay malaya gamitin.

**Susunod, babaguhin natin ang numero ng iyong SSH port at patitigilin ang remote password login nang sabay.**

I-takbo ang sumusunod na command upang buksan ang file ng konfigurasyon ng SSH server.

```bash
sudo nano /etc/ssh/sshd_config
```

1. Hanapin ang linya na `Port 22` sa file. Baguhin ito sa iyong napiling numero ng port at pagkatapos tanggalin ang `#` prefix (kung mayroon) upang i-uncomment ang linya.
2. I-uncomment ang `#AuthorizedKeysFile` kung ito ay naka-comment (sa pamamagitan ng pagtanggal ng # sa unahan nito)
3. Baguhin ang `KbdInteractiveAuthentication yes` sa `KbdInteractiveAuthentication no` at i-uncomment (sa pamamagitan ng pagtanggal ng `#` sa unahan nito)
4. Baguhin ang `PasswordAuthentication yes` sa `PasswordAuthentication no` at i-uncomment (sa pamamagitan ng pagtanggal ng `#` sa unahan nito)
5. Baguhin ang `#PermitRootLogin prohibit-password` sa `PermitRootLogin no`, tanggalin ang `#` prefix.

Kapag tapos ka na, i-save gamit ang `Ctrl+O` at `Enter`, pagkatapos mag-exit gamit ang `Ctrl+X`.

Ngayon ay i-restart natin ang SSH server upang ma-register ang bagong mga setting:

```bash
sudo systemctl restart sshd
```

Ngayon ay maaari mo nang ma-access ang iyong node sa malayo gamit ang iyong SSH private key lamang.

Ang command para sa iyong SSH connection ay babaguhin nang kaunti mula noon sa:

```
ssh <username>@<node_IP_address> -p <new_port_no.> -i .ssh/id_ed25519 -v
```

### I-konfigure ang mga patakaran ng firewall

Ang mga pangunahing patakaran na ipapatupad natin ay ang mga sumusunod:

1. I-deny ang lahat ng papasok na trapiko bilang default
2. Payagan ang lahat ng lumalabas na trapiko bilang default
3. Payagan ang papasok na trapiko sa pamamagitan ng port \<iyong\_piniling\_SSH\_port> para sa SSH access
4. Payagan ang papasok na trapiko sa pamamagitan ng port 30303 para sa Nethermind upang makakonekta sa iba pang mga node
5. Payagan ang papasok na trapiko sa pamamagitan ng port 9000 para sa Teku upang makakonekta sa iba pang mga node
6. Payagan ang papasok na trapiko sa pamamagitan ng port 3000 para sa Grafana upang maipakita ang mga monitoring dashboard para sa iyong node

```bash
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow <your_chosen_SSH_port>/tcp
sudo ufw allow 30303
sudo ufw allow 9000
sudo ufw allow 3000
```

Sa mga konfigurasyong ito, mabibigyan mo ng harang ang lahat ngunit apat na posibleng bukas para sa mga potensyal na attacker na pumasok.

* Ang mga Port 30303 at 9000 ay gagamitin ng Nethermind at Teku. Gagawa tayo ng mga account ng user na may disabled na root access para sa mga serbisyong ito.
* Ang Port 3000 ay ma-access lamang sa loob ng iyong lokal na network (halimbawa, hindi ito inilalantad sa pampublikong internet).
* Ang iyong piniling SSH port ay naka-seguro ng iyong SSH private key kaya't halos imposibleng buwagin ang access.

#### Paganahin ang firewall sa pamamagitan ng mga sumusunod na hakbang:

Pagkatapos paganahin ang firewall, suriin ang mga konfigurasyon bago magpatuloy.

```bash
sudo ufw enable
sudo ufw status numbered
```

You should see something similar to the screenshot below:

<figure><img src="/files/LKsc4WVEnUR63ItQwHc8" alt=""><figcaption></figcaption></figure>

### Mag-set up ng proteksyon laban sa brute force

Kahit na ang pagkakaroon natin ng SSH key access ay nangangahulugang kailangan ng isang mananalakay ng 25 milyong taon upang masubukan ang lahat ng mga kombinasyon, halina’t gumawa ng mas mahirap pa para sa kanila - sa pamamagitan ng pag-limit sa bilang ng mga pagtatangka sa bawat IP address sa 5 subok at pag-block sa kanila pagkatapos.

***Mag-install ng software:***

```bash
sudo apt install -y fail2ban
```

***Buksan ang configuration file:***

```bash
sudo nano /etc/fail2ban/jail.d/ssh.local
```

***Idagdag ang sumusunod na nilalaman sa configuration file:***

```bash
[sshd]
enabled = true
banaction = ufw
port = <your_chosen_SSH_port>
filter = sshd
logpath = %(sshd_log)s
maxretry = 5
```

Kapag tapos ka na, i-save at i-exit gamit ang `Ctrl+O`at `Enter`, pagkatapos `Ctrl+X`.

***Sa wakas, i-restart ang service:***

```bash
sudo systemctl restart fail2ban
```

### Paganahin ang mga awtomatikong update para sa seguridad

```bash
sudo apt update
sudo apt install -y unattended-upgrades update-notifier-common
sudo nano /etc/apt/apt.conf.d/20auto-upgrades
```

***Idagdag ang sumusunod na nilalaman sa configuration file:***

```
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "7";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "02:00";
```

Kapag tapos ka na, i-save at i-exit gamit ang `Ctrl+O`at `Enter`, pagkatapos `Ctrl+X`.

***Sa wakas, i-restart ang service:***

```bash
sudo systemctl restart unattended-upgrades
```

#### Siguraduhing suriin ang mga talaan para sa anumang babala:

```sh
sudo cat /var/log/unattended-upgrades/unattended-upgrades.log
```

Kung nakakita ka ng mga sumusunod na babala, magpatuloy sa susunod na hakbang.

```
2024-02-01 04:48:24,012 WARNING System is on battery power, stopping
2024-02-01 06:19:01,972 WARNING System is on battery power, stopping
2024-02-01 17:53:48,650 WARNING System is on battery power, stopping
```

Kung ang iyong aparato ay tiyak na konektado sa isang pinagmumulan ng kuryente, baguhin ang file na `50unattended-upgrades` nang direkta.

```
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
```

Hanapin ang sumusunod na linya at alisin ang `//` na nasa unahan upang ito ay maging epektibo.

```
// Unattended-Upgrade::OnlyOnACPower "false";
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bitskwela.gitbook.io/bitskwela-x-lido-cs-fleet-eth-home-staking-guide/setup-ng-hardware-at-os/para-sa-pagpapatibay-ng-iyong-server.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
