[Ubuntu] 네트워크와 방화벽
서버를 운영하면서 IP주소, 서브넷 마스크, DNS 등과 같은 네트워크 기본 용어를 이해하는 것은 매우 중요합니다. 기본 용어에 대한 이해가 없을 경우 실무 개발자간의 의사소통에 문제가 있을 수 있기 때문입니다.
이 포스팅에서는 기본적인 네트워크 용어에 대한 정의를 소개합니다.
#01. 네트워크의 이해
1. TCP/IP
- 네트워크 전송 프로토콜로서 인터넷 표준 프로토콜(=규약)임
- Transmission Control Protocol 의 줄임말로서 Internet Protocol 이라고도 함
구분 | 설명 |
---|---|
TCP 프로토콜 | 전송 데이터를 일정 단위(패킷)으로 나누고 포장하는 것에 관한 규약 |
IP 프로토콜 | 직접 데이터를 주고 받는 것에 관한 규약 |
2. IP주소
- 네트워크상에 존재하는 컴퓨터의 고유번호
- IPv4 방식과 IPv6 방식이 존재 (IPv6는 잘 사용하지 않음)
- 숫자 네 개로 IP주소를 표현하는데, 각 숫자는 0번부터 255번까지 범위를 갖음
- 로컬 컴퓨터의 주소를 의미하는 IP는
127.0.0.1
로 고정되어 있음
1) 공인 IP
- 공인 기관에서 할당받아 사용함
- 네트워크상에 공개된 유일한 IP 번호로서, 공인 IP를 알면 누구나 쉽게 접속이 가능함
- 일반적으로 고정 아이피로 알려져 있음
- 상용 서비스를 운영하기 위해서는 공인 IP가 필요함
2) 사설 IP
- 주로 공유기 등의 장비를 통해 할당받는 아이피
- 내부적으로만 사용하기 때문에 내부 IP라고도 함.
- 외부로부터의 접근이 불가능함
- 사설 IP의 대역은 정해져 있음
- 10.0.0.1 ~ 10.255.255.254
- 172.16.0.1 ~ 172.31.255.254
- 192.168.0.1 ~ 192.168.255.254
3. 호스트 이름과 도메인 이름
4. 서브넷 마스크
하나의 네트워크를 구분하는 단위로서 255
와 0
으로만 이루어진 값을 말함
IP주소는 네트워크 주소와 호스트 주소로 나눌 수 있는데 네트워크 주소가 같은 IP는 동일 네트워크에 속해 있는 컴퓨터로 서로 통신이 가능한 상태임.
서브넷 마스크는 IP주소에서 네트워크 주소와 호스트 주소를 구분하는 값으로 사용되는데 255로 표시된 자리가 네트워크 주소를 의미하고 0으로 표시된 자리는 호스트 주소를 의미함
네트워크주소가 같음 = 같은 공유기로부터 발급된 주소를 의미
호스트 주소: 네트워크 상에서 해당 컴퓨터에 발급된 고유 번호
5. 게이트웨이(Gateway)
- 외부 네트워크로 통신을 하기 위한 통로.
- 내부 네트워크에서 외부 네트워크로 연결되는 컴퓨터 혹은 라우터가 게이트웨이 역할을 함.
- 라우터 : 네트워크 트래픽을 포워딩 해야 하는 최적 경로를 결정하는 장비 (공유기)
6. DNS
- IP주소를 호스트와 도메인 이름으로 변환해 주는 서비스를 제공하는 서버
- KT가 운영하는 DNS의 경우
168.126.63.1
,168.126.63.2
임
#02. 네트워크 관련 명령어
1) IP 주소 확인하기
ifconfig
명령으로 IP주소를 확인할 수 있지만 이 명령을 사용하기 위해서는 net-tools
를 설치해야 한다.
$ sudo apt-get update
$ sudo apt-get install net-tools
설치가 완료되면 아래의 명령으로 IP주소를 확인할 수 있다.
$ ifconfig
ifconfig 장치명
형식으로 특정 장치에 대한 정보만 확인할 수 있다
$ ifconfig enp0s5
2) 네트워크 접속 가능 여부 확인하기
- 1초마다 목적지 컴퓨터로 패킷을 전송하고 다시 수신함으로서 대상 컴퓨터가 네트워크에 접속 되어있는지를 확인하는 명령
- ping에 응답한다는 것은 접속 가능하다는 의미이며 이는 해킹이 가능하다는 의미로 해석될 수 있기 때문에 최근에는 방화벽을 통해 ping에 응답하지 않도록 설정하는 것이 일반적임
$ ping 접속대상주소
명령어가 동작하거나 대기중인 상태에서 Ctrl+C
를 눌러 동작을 중단해야 한다.
ping에 정상적으로 응답하는 경우
Ctrl+C
를 눌러 ping을 종료하고 나면 5패킷을 보냈지만 5패킷을 수신했으므로 0% 손실되었다는 내용이 출력됨
ping에 응답이 없는 경우
Ctrl+C
를 눌러 ping을 종료하고 나면 22패킷을 보냈지만 0패킷을 수신했으므로 100% 손실되었다는 내용이 출력됨
3) DNS 상태 점검 명령
DNS 서버에 접속하여 동작이 잘 되는지 검사하는 명령이다. DNS로 부터 특정 도메인에 대한 IP주소를 조회할 수 있다.
$ nslookup 조회할도메인
#04. 방화벽
미리 정의된 보안 규칙에 기반한, 들어오고 나가는 네트워크 트래픽을 모니터링하고 제어하는 네트워크 보안 시스템으로서 방화벽 또는 FireWall이라고 한다.
일반적으로 신뢰할 수 있는 내부 네트워크, 신뢰할 수 없는 외부 네트워크 간의 장벽을 구성한다.
우분투 리눅스에서의 방화벽은 ufw라는 서비스가 담당하며 우분투 설치시 기본으로 설치된다.
1. 방화벽 시작 및 종료
1) 방화벽 활성화
$ sudo ufw enable
2) 방화벽 비활성화
$ sudo ufw disable
3) 방화벽 상태 확인
$ sudo ufw status
4) 모든 외부 접속 차단하기
효율적인 방화벽 운용방법은 모든 외부 접근을 차단한 상태에서 외부 접근을 허용하고자 하는 포트만 부분적으로 오픈하는 것이다.
$ sudo ufw default deny
5) 모든 외부 접속 허용하기
만약 모든 외부 접속을 허용할 경우 아래의 명령을 사용한다.
$ sudo ufw default allow
4) 특정 포트 접근 허용하기
아래 항목 중에서 22번에 대한 포트번호 접근 허용은 실습합니다. 그렇지 않을 경우 앞에서 모든 외부 접근을 차단하도록 설정하였으므로 이후 실습이 불가능해 집니다.
ufw는 기본적으로 모든 port에 대해 외부 접근을 차단한다. ufw allow 명령어를 사용하면 서버의 특정 port로의 접근을 허용할 수 있다. 허용할 port의 범위를 지정할 수도 있다.
명령어 형식
$ sudo ufw allow [port_number]
사용 예시
$ sudo ufw allow 22 # SSH를 위한 22번 port 접근 허용
$ sudo ufw allow 2222 # 2222번 port 접근 허용
$ sudo ufw allow 2222/tcp # 2222번 port tcp 접근 허용
$ sudo ufw allow 3000:3010/tcp # 3000~3010 port tcp 접근 허용
5) 특정 IP 접근 허용하기
port 뿐만 아니라 ip를 통한 접근 권한 부여도 가능하다. 똑같이 ufw allow 명령어를 사용하여 해당 동작을 수행할 수 있다.
명령어 형식
$ sudo ufw allow from IP주소
사용 예시
$ sudo ufw allow from 123.4.56.7 # 123.4.56.7 ip에서 모든 port 접근 허용
6) 특정 IP 접근 제한하기
특정 IP로부터 공격이 들어오는 경우 ufw deny 명령어를 통해 특정 IP를 차단할 수 있다.
명령어 형식
$ sudo ufw deny from IP주소
사용 예시
$ sudo ufw deny from 123.45.6.78 # 123.45.6.78 IP에 대해 모든 port 접근 제한
7) 방화벽 규칙 삭제
ufw delete 명령어를 사용하여 ufw rule을 삭제할 수 있다.
명령어 형식
$ sudo ufw delete [rule]
사용 예시
$ sudo ufw delete allow 2222/tcp # 2222/tcp 접근 허용 rule을 제거
8) 방화벽 규칙 다시 로드하기
설정한 규칙을 적용하기 위해서는 반드시 수행해야 한다.
$ sudo ufw reload
접근을 허용하도록 설정한 22번 포트가 잘 구성되었는지 확인한다.
$ sudo ufw status
9) 방화벽 규칙 리셋하기
$ sudo ufw reset
10) ping 차단하기
ufw는 기본적으로 ping 요청을 허용한다. 보안을 위해서는 ping 요청을 차단하는 것이 좋다.
/etc/ufw/before.rules
파일을 vi편집기로 연다.
$ sudo vi /etc/ufw/before.rules
아래와 같은 부분을 찾아 맨 마지막의 ACCEPT
를 DROP
으로 변경한다.
변경전
변경후
방화벽 재로드
처리가 완료되면 방화벽을 다시 로드한다.
$ sudo ufw reload
결과확인
Mac, Window 등의 호스트 운영체제에서 Ubuntu로 ping접속을 시도하여 ping 응답이 없음을 확인한다.