# UFW와 OpenSSH 설정

#### UFW 개요

**UFW**(Uncomplicated Firewall)는 Ubuntu 및 다양한 리눅스 배포판에서 자주 사용되는 방화벽 설정 도구이다. UFW는 방화벽 규칙 설정을 간편하게 만들어 사용자가 복잡한 `iptables` 명령어 대신 직관적인 명령어를 사용할 수 있게 해준다. UFW는 기본적으로 규칙을 추가하고 제거하는 방법을 제공하며, OpenSSH 같은 서비스의 포트 접근을 제어하는 데 유용하다.

UFW는 기본적으로 허용된 포트만 외부 접근이 가능하도록 설정할 수 있으며, OpenSSH를 통한 SSH 접속을 허용하는 규칙을 추가하여 안전하게 서버 관리가 가능한다.

#### UFW 설치 및 활성화

먼저 UFW가 설치되어 있지 않은 경우, 패키지 관리자를 사용하여 설치한다. Ubuntu에서 UFW 설치는 다음과 같이 진행한다:

```bash
sudo apt-get install ufw
```

설치 후 UFW를 활성화하려면 다음 명령어를 입력한다:

```bash
sudo ufw enable
```

UFW는 기본적으로 아웃바운드 트래픽을 허용하고 인바운드 트래픽을 차단하는 방식으로 동작한다. 따라서, OpenSSH 서비스를 위해 필요한 포트를 허용하는 규칙을 추가해야 한다.

#### OpenSSH 포트 허용

기본적으로 OpenSSH는 TCP 22번 포트를 사용하여 SSH 접속을 처리한다. 이를 UFW에 허용 규칙으로 추가하려면 다음과 같이 명령어를 입력한다:

```bash
sudo ufw allow ssh
```

혹은 TCP 22번 포트를 명시적으로 지정하려면 다음 명령을 사용한다:

```bash
sudo ufw allow 22/tcp
```

이 명령어를 실행하면 OpenSSH가 사용하는 포트 22번을 통해 외부에서 SSH 접속이 가능해진다.

#### UFW 상태 확인

OpenSSH 포트를 허용한 후, 현재 UFW 규칙과 방화벽 상태를 확인하려면 다음 명령어를 사용할 수 있다:

```bash
sudo ufw status
```

이 명령을 실행하면 방화벽이 활성화되어 있는지, 그리고 현재 허용된 서비스와 포트 목록이 표시된다. 예를 들어, SSH 포트가 허용된 상태에서는 다음과 같은 출력이 나올 수 있다:

```bash
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
```

여기서 "ALLOW"는 SSH 포트로의 접속을 허용한다는 의미이며, "Anywhere"는 모든 IP 주소에서 해당 포트로의 접근이 가능함을 의미한다.

#### 특정 IP에만 SSH 허용

만약 모든 IP에서의 SSH 접속을 허용하는 것이 아닌, 특정 IP에서만 접속을 허용하고자 한다면 UFW 규칙을 제한할 수 있다. 이를 위해서는 SSH 접속을 허용할 IP 주소를 명시해야 한다.

예를 들어, 192.168.1.100 IP 주소에서만 SSH 접속을 허용하려면 다음 명령어를 사용한다:

```bash
sudo ufw allow from 192.168.1.100 to any port 22
```

이렇게 하면 특정 IP 주소만 SSH 포트에 접속할 수 있게 된다.

#### OpenSSH 포트 변경 시 UFW 설정

보안상 이유로 SSH 포트를 기본 포트인 22번이 아닌 다른 포트로 변경하고자 할 수 있다. SSH 포트를 변경하면 UFW 규칙에도 해당 포트를 허용해야 한다.

예를 들어, SSH 포트를 2222로 변경하려면 `/etc/ssh/sshd_config` 파일에서 다음 항목을 수정한다:

```bash
Port 2222
```

변경 후, UFW에 새 포트를 허용하는 명령어를 추가한다:

```bash
sudo ufw allow 2222/tcp
```

변경 사항을 적용한 후 SSH 데몬을 재시작한다:

```bash
sudo systemctl restart ssh
```

이제 SSH 접속은 포트 2222에서 가능해지며, 방화벽에서도 해당 포트를 허용한 상태가 된다.

#### 특정 IP 대역에만 SSH 접근 허용

보안을 강화하기 위해 OpenSSH를 통해 특정 IP 대역에서만 SSH 접근을 허용할 수 있다. 예를 들어, 회사 내부 네트워크에서만 SSH 접속을 허용하고 싶다면, UFW에 다음 규칙을 추가할 수 있다:

```bash
sudo ufw allow from 192.168.1.0/24 to any port 22
```

이 명령어는 `192.168.1.0/24` 대역의 IP 주소에서만 OpenSSH를 통해 서버에 접근할 수 있도록 설정한다. 이 외부 네트워크에서의 접근을 차단할 수 있는 방법은 회사의 보안 정책에 따라 유연하게 변경 가능한다.

#### OpenSSH 포트 변경

보안을 강화하는 방법 중 하나는 OpenSSH에서 사용하는 기본 포트 22번을 다른 포트로 변경하는 것이다. 이 변경을 위해서는 OpenSSH 설정 파일에서 포트를 변경해야 한다.

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

설정 파일에서 `Port 22` 라인을 찾아 원하는 포트 번호로 변경한다. 예를 들어, 포트를 2222번으로 변경하려면 다음과 같이 수정한다:

```
Port 2222
```

이 후 OpenSSH 서비스를 재시작한다:

```bash
sudo systemctl restart sshd
```

이제 UFW에서 새로 설정한 포트를 허용해야 한다:

```bash
sudo ufw allow 2222/tcp
```

이 명령어는 새로 설정한 2222번 포트를 통해 SSH 접속이 가능하게 해준다. 동시에 기존 22번 포트를 차단하여 공격을 예방할 수 있다:

```bash
sudo ufw delete allow 22/tcp
```

#### UFW 상태 확인

현재 UFW의 설정 상태를 확인하려면 다음 명령어를 사용할 수 있다:

```bash
sudo ufw status
```

이 명령어는 UFW에 설정된 모든 규칙을 나열하며, 각 서비스와 포트에 대한 허용/차단 상태를 보여준다. 예시 출력은 다음과 같다:

```
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
2222/tcp                   ALLOW       Anywhere
```

이와 같이 현재 허용된 포트가 표시되며, OpenSSH를 위해 설정된 규칙을 확인할 수 있다.

#### 비밀번호 기반 인증 비활성화

SSH 접근 보안을 더욱 강화하려면 비밀번호 기반 인증을 비활성화하고 공개키 기반 인증을 사용하는 것이 좋다. OpenSSH 설정 파일에서 다음과 같이 변경한다:

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

설정 파일에서 `PasswordAuthentication` 옵션을 `no`로 설정한다:

```
PasswordAuthentication no
```

이 설정을 통해 비밀번호로 SSH 접속을 시도하는 공격을 차단할 수 있으며, 공개키 기반 인증만 허용하게 된다. 설정을 적용하려면 OpenSSH 서비스를 재시작한다:

```bash
sudo systemctl restart sshd
```

#### 비밀번호 인증 비활성화 후 UFW 설정

비밀번호 인증을 비활성화한 후, UFW에서 OpenSSH를 위해 설정된 포트를 점검하고 접근을 허용해야 한다. 공개키 인증을 사용하는 서버에 적절한 접근 제어를 설정하는 것이 중요하다. 다음과 같이 설정할 수 있다:

```bash
sudo ufw allow 2222/tcp from 192.168.1.0/24
```

이 명령어는 `192.168.1.0/24` 네트워크 대역에서만 SSH 접속을 허용하며, 비밀번호 인증을 차단한 상태에서 추가적인 보안 계층을 제공한다.
