03. 네트워크 보안

네트워크

IP 스푸핑 방지

/etc/host.conf 파일의 내용을 아래와 같이 수정한다.

order bind,hosts
nospoof on

multi on 옵션은 지운다.

네트워크 계층 보안

/etc/sysctl.conf 파일에 아래와 같은 내용이 들어가도록 수정하고 sudo sysctl -p 명령어로 서비스를 재시작한다.

# IP Spoofing protection
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Ignore ICMP broadcast requests
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Disable source packet routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0 
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0

# Ignore send redirects
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# Block SYN attacks
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5

# Log Martians
net.ipv4.conf.all.log_martians = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Ignore ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0 
net.ipv6.conf.default.accept_redirects = 0

# Ignore Directed pings
net.ipv4.icmp_echo_ignore_all = 1

ufw 설정

리눅스 커널의 iptables 대신에 우분투에서 제공하는 간단한 방화벽 ufw(Uncomplicated Firewall)을 사용한다.

세밀한 방화벽 구축을 위해서는 iptables를 써야겠지만 일반적인 웹 서비스를 위한 방화벽 구성에는 ufw도 충분하다고 판단된다.

들어가기 전에 주요 기본 포트는 다음과 같다.

  • ftp: 20, 21
  • ssh: 22
  • smtp: 25
  • dns: 53(TCP/UDP)
  • http: 80
  • pop3: 110
  • ntp: 123
  • imap4: 143
  • https: 443
  • smtps: 465
  • submission: 587
  • oracle: 1521
  • mysql: 3306
  • postgresql: 5432

ufw 활성화

우분투에서는 기본적으로 ufw가 비활성화되어 있다. 따라서 먼저 활성화해야 한다.

$ sudo ufw enable

사전 정의 규칙 확인

우분투에서는 서버를 설치하면 기본 포트로 필요한 규칙을 정의하고 있다. 이와 같이 사전 정의된 규칙 목록을 확인할 수 있다.

$ sudo ufw app list
Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

예시 화면에서는 Nginx Full, Nginx HTTP, Nginx HTTPS, OpenSSH 규칙이 정의되어 있는데 Nginx Full 규칙은 HTTP, HTTPS 모두 허용하기 위한 규칙 정의이다.

포트 허용

사전 정의 포트 허용

사전 정의 규칙 Nginx Full, OpenSSH, Bind9 등을 아래와 같이 허용할 수 있다.

$ sudo ufw allow OpenSSH
$ sudo ufw allow 'Nginx Full'
$ sudo ufw allow Bind9

임의 포트 허용

만약에 OpenSSH TCP 포트를 22번이 아닌 다른 포트 12345를 사용하고자 할 경우 아래와 같이 포트 번호로 접근 허용할 수 있다. 굳이 UDP 포트를 허용할 필요는 없으므로 tcp 포트를 명시한다.

$ sudo ufw allow 12345/tcp

특정 IP에서만 접속 허용

80, 443 웹 서비스 포트 이외에 SSH나 데이터베이스는 특정 IP의 컴퓨터에서만 접속 허용하는 것이 보안상 좋다.

192.168.0.100 IP만 12345/TCP 포트로 접속허용하는 명령어는 아래와 같다.

$ sudo ufw allow from 192.168.0.100 to any port 12345 proto tcp

규칙 제거

혹시 OpenSSH 규칙 22/tcp 포트를 허용했었다면 ufw delete 명령어로 다음과 같이 규칙을 제거할 수 있다.

$ sudo ufw delete allow OpenSSH
Rule deleted
Rule deleted (v6)

만약에 임의 포트 허용 규칙을 제거하고 싶다면 마찬가지로 아래와 같이 명령한다.

$ sudo ufw delete allow 12345/tcp
Rule deleted
Rule deleted (v6)

방화벽 설정 내역 확인

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
80,443/tcp (Nginx Full)    ALLOW IN    Anywhere
53 (Bind9)                 ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)
80,443/tcp (Nginx Full (v6)) ALLOW IN    Anywhere (v6)
53 (Bind9 (v6))            ALLOW IN    Anywhere (v6)

Fail2ban

설치

sudo apt-get install fail2ban

전역 설정이 아닌 지역 설정

로컬 설정을 위한 파일을 만든다.

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

주요 설정 변경

[DEFAULT]
bantime  = 10800

[sshd]
enabled = true
port = 22222

최종 수정일시: 2019-01-06 02:01

blog comments powered by Disqus