8장. 서버 네트워크 기본

장동민·2022년 6월 8일

1. 서버의 네트워크 설정 및 확인

1-1. 리눅스 서버 네트워크

CentOS의 네트워크 설정

CentOS의 네트워크 설정 파일 경로 : /etc/sysconfig/network-scripts

					네트워크 설정 경로에는 다양한 네트워크 설정용 파일이 존재

						인터페이스 파일(ex. ifcfg-enp0s3) 설정 예
  • 인터페이스 설정 파일에서 사용되는 주요 항목

    • ONBOOT : 부팅 시 인터페이스를 활성화시킬 것인지 결정(yes/no)
    • BOOTPROTO : 부팅 시 사용할 프로토콜(none, dhcp, static)
    • IPADDR : IP 주소
    • NETMASK : 서브넷 마스크 (ex. 255.255.255.0)
    • PREFIX : 서브넷 마스크(비트 값으로 표기) (ex. 24)
    • GATEWAY : 게이트웨이 주소
    • DNS1 : 주 DNS 정보 입력
    • DNS2 : 보조 DNS
  • 네트워크 서비스 재시작(수정한 인터페이스뿐만 아니라 다른 인터페이스를 포함한 전체 네트워크 서비스 재시작)

# systemctl restart network.service
  • 특정 인터페이스 다운/업(재시작)
# ifdown ifcfg-enp0s3
# ifup ifcfg-enp0s3
  • 현재 네트워크 인터페이스 정보(ifconfig 명령어)

  • ip 명령어에 address 오브젝트를 사용하여 ifconfig 명령어와 유사한 네트워크 정보를 확인

  • link 오브젝트를 사용하여 인터페이스로 송수신되는 패킷 정보 확인, 정상적으로 입력(RX), 출력(TX)된 패킷 수, 에러 패킷, 폐기된 패킷 수 등을 확인 가능

1-2. 윈도 서버 네트워크

  • 명령 프롬프트 창에서 ipconfig /all 옵션을 사용해 네트워크 어댑터에서 상세 정보 확인

  • netsh 명령은 GUI 환경이 제공되지 않는 환경이나 노트북을 이용 할 때, 고정 IP를 사용하는 장소를 자주 옮겨 다닐 때, 스크립트를 만들어 네트워크 설정을 손쉽게 바꾸는 데 유용하게 사용

  • 네트워크 어댑터 설정을 위한 netsh 명령

netsh interface ipv4 set address name="인터페이스명" static IP 주소 서브넷 게이트웨이
  • 윈도 어댑터 비활성화
netsh interface set interface name="인터페이스명" admin=disabled
  • 윈도 어댑터 활성화
netsh interface set interface name="인터페이스명" admin=enabled

2. 서버의 라우팅 테이블

2-1. 서버의 라우팅 테이블

  • 서버 라우팅 테이블 항목

    • 목적지(Destination)
    • 서브넷(Genmask)
    • 게이트웨이(Gateway)
    • 인터페이스(Iface)
    • 우선순위(Metric)
  • 목적지 네트워크와 서브넷은 서버가 통신하려는 목적지 IP 주소에 맞는 라우팅을 선택하는 기준

  • 게이트웨이는 선택된 목적지로 가기 위해 서버에서 선택하는 넥스트 홉

  • 인터페이스는 서버의 네트워크 카드를 말하고 라우팅에서 어떤 물리적인 경로로 패킷을 내보낼지 설정

  • 우선순위(매트릭)는 동일한 라우팅 테이블이 두 개 이상 존재할 때 어떤 라우팅 테이블을 선택할지 정하는 값

2-2. 리눅스 서버의 라우팅 확인 및 관리

  • 리눅스 서버에서 라우팅 테이블을 확인하기 위해 ip route 명령어를 사용

								라우팅 테이블 출력 예제 1
  • 리눅스 서버의 네트워크 상태를 확인할 수 있는 명령어인 netstat에 r 옵션을 추가하면 라우팅 테이블 편하게 확인 가능

								라우팅 테이블 출력 예제 2
                                
  • 위의 옵션에 n 옵션을 추가로 사용하면 화면 표기 시, 실제 IP 정보가 표기되어 좀 더 직관적인 라우팅 테이블 확인 가능

								라우팅 테이블 출력 예제 3
  • 리눅스 서버에서 라우팅 테이블을 추가
route add {-host | -net} Target[/prefix] [gw Gw] [metric M] [[dev] If]
  • 라우팅 추가 설정 예제
# route add -host 10.10.10.10 gw 10.1.1.1
-> 특정 10.10.10.10 서버가 목적지인 경우, 10.1.1.1로 라우팅
# route add -net 10.10.10.0/24 dev enp0s3
-> 10.10.10.0/24 네트워크 대역이 목적지인 경우, enp0s3 인터페이스로 라우팅
# route add -net 10.10.10.0/24 gw 10.1.1.6 metric 20
-> 10.10.10.0/24 네트워크 대역이 목적지인 경우, 10.1.1.6으로 라우팅, 이 라우팅 경로의 metric 값을 20으로 설정
  • 라우팅 테이블 삭제
route del {-host|-net} Target[\prefix] [gw Gw] [metric M] [[dev] If]
  • 라우팅 삭제 설정 예제
# route del -host 10.10.10.10 gw 10.1.1.1
# route del -net 10.10.10.0/24 dev enp0s3
# route del -net 10.10.10.0/24 gw 10.1.1.6 metric 20

CentOS의 영구적 라우팅 설정

  • CentOS에서 다음과 같이 별도 파일을 만들어 라우팅 설정
/etc/sysconfig/network-scripts/route-장치명

우분투의 영구적 라우팅 설정

  • 네트워크 설정에서 사용했던 interfaces 파일에 라우팅 설정
up route add [-net|-host] <host/net> / <mask> gw <host/IP> dev <Interface>

2-3. 윈도 서버의 라우팅 확인 및 관리

원도 서버에서 route 명령은 4가지 옵션을 사용

  • PRINT(라우팅 테이블 확인)

    • '*'와 '?'를 이용해 특정 패턴에 맞는 네트워크 대역을 확인
      • '*' : 전체 문자열을 대체
      • '?' : 특정 문자 하나를 대체
    • 10.10.10.0/16에 대한 전체 라우팅 테이블을 확인하고 싶을 때
      -> route print 10.10.*
    • 10.10.10.0/24 ~ 10.10.19.0/24에 대한 라우팅 테이블을 확인하고 싶을 때
      -> route print 10.10.1?.0
    • 10.10.10.0 ~ 10.10.19.0에 대한 라우팅을 확인하거나 목적지 네트워크가 24비트 이하로 나누어진 세부 라우팅 테이블을 확인할 때
      -> route print 10.10.1?.*
  • ADD(라우팅 테이블 추가)

ROUTE [-p] ADD [dest] [MASK netmask] [gateway] [METRIC metric] [IF interface]
  • 라우팅 테이블 추가 설정 예제
C:\>route add 192.168.1.0 mask 255.255.255.0 10.0.0.1
# 목적지 192.168.1.0/24에 대해 10.0.0.1을 게이트웨이로 라우팅 추가
C:\>route add 192.168.1.0 mask 255.255.255.0 10.0.1.1 metric 100
# 목적지 192.168.1.0/24에 대해 10.0.1.1을 게이트웨이로 하고 매트릭을 100으로 설정한 라우팅 추가
C:\>route add -p 172.16.0.0 mask 255.255.240.0 10.0.0.1
# 목적지 172.16.0.0/12에 대해 10.0.0.1을 게이트웨이로 하는 라우팅을 영구 경로에 등록
  • DELETE(라우팅 테이블 삭제)
ROUTE DELETE [dest] [MASK netmask] [gateway] [METRIC metric] [IF interface]
  • 라우팅 테이블 삭제 예제
C:\>route delete 192.168.1.0 mask 255.255.255.0 10.0.0.1
# 목적지 192.168.1.0/24에 대해 10.0.0.1을 게이트웨이로 하는 라우팅 삭제
C:\>route delete 192.168.1.0 mask 255.255.255.0
# 목적지 192.168.1.0/24에 대한 모든 라우팅 삭제(서로 다른 게이트웨이를 바라보는 라우팅이 있는 경우, 모두 삭제)
C:\>route delete 192.168.1.0
# 목적지 네트워큭가 192.168.1.0인 모든 라우팅 삭제(서브넷 마스크의 크기가 다르더라도 네트워크 주소가 192.168.1.0인 라우팅이 있는 경우, 모두 삭제)
  • CHANGE(라우팅 테이블 변경)
ROUTE CHANGE [dest] [MASK netmask] [gateway] [METRIC metric] [IF interface]
  • 라우팅 테이블 변경 예제
C:\>route change 192.168.1.0 mask 255.255.255.0 10.0.10.1
# 목적지 192.168.1.0/24에 대한 라우팅에 대해 게이트웨이를 10.0.10.1로 변경
C:\>route change 192.168.1.0 mask 255.255.255.0 10.10.10.1 metric 10
# 목적지 192.168.1.0/24에 대한 라우팅에 대해 게이트웨이를 10.10.10.1, 메트릭을 10으로 변경

3. 네트워크 확인을 위한 명령어

3-1. ping(Packet InterNet Groper)

  • IP 네트워크를 통해 특정 목적지까지 네트워크가 잘 동작하고 있는지 확인하는 네트워크 명령어
  • 두 호스트 간의 통신을 위한 경로, 라우팅 경로가 정상적으로 구성되어 있는지 체크
  • ICMP(Internet Control Message Protocol)라는 인터넷 프로토콜 사용

✍ ICMP(Internet Control Message Protocol) : TCP/IP에서 IP 패킷을 처리할 때 발생되는 문제를 알려주는 프로토콜

  • ping 명령
ping [옵션] 목적지_IP 주소
  • 별도 옵션 없이 ping을 체크하는 방법을 보통 '기본 ping'이라고 하며 옵션을 사용해 ping을 체크하는 방법을 '확장 ping'이라 함

  • 리눅스 ping 명령어 옵션

    • -c count : ping을 보내는 패킷을 몇 번 보내고 종료할 것인지 지정
    • -i interval : 패킷을 보내는 시간 간격, 기본 설정값은 1초
    • -i interface : 패킷을 보낼 때, 출발지 주소를 지정
    • -s packetsize : 패킷 크기를 지정
  • 윈도 ping 명령어 옵션

    • -n count : ping을 보내는 패킷을 몇 번 보내고 종료할 것인지 지정, 기본 설정은 4회 전송
    • -t : 중지할 때까지 지정한 호스트로 ping을 지속적으로 전송
    • -S srcaddr : 사용할 원본 IP 주소
    • -l size : 패킷 크기를 지정
    • -r count : count 홉의 경로 기록
  • ping 사용 예제

리눅스에서 ping을 사용해 목적지 8.8.8.8(google dns)로 100바이트 크기의 ping 패킷을 2회 보내는 예제

3-2. tcping(윈도)

  • tcping을 통해 ping을 확인하듯이 서비스 포트가 정상적으로 열려 있는지 확인 가능
  • tcping 사용법
tcping [옵션] 목적지_IP 주소
  • tcping 명령 옵션(리눅스)
    • -n count : tcping을 전송하는 횟수(기본 5회)
    • -t : 중지될 때 까지 지정한 호스트로 ping을 지속적으로 전송
    • -i interval : tcping을 전송하는 시간 간격
    • serverport : tcping으로 확인하려는 서비스 포트이며 미 설정 때는 80이 기본값

3-3. traceroute(리눅스) / tracert(윈도)

  • traceroute : 출발지부터 통신하거나 목적지까지의 네트워크 경로를 확인할 때 사용하는 네트워크 명령어

  • traceroute 또는 tracert 사용법

    • 리눅스: traceroute [옵션] 목적지_IP 주소
    • 윈도: tracert [옵션] 목적지_IP 주소
  • 리눅스 traceroute 명령어 옵션

    • -l, --icmp : ICMP 기반으로 traceroute 수행
    • -T, --tcp : TCP SYN으로 traceroute를 수행하면 기본 서비스 포트는 80
    • -n : IP 주소를 도메인이 아닌 숫자 형식으로 표시
    • p port, --port=port : 특정 포트를 지정해 traceroute 수행
    • -s src_addr : 패킷이 나가는 인터페이스가 아닌 별도 IP로 출발지 IP를 지정
  • 윈도 tracert 명령 옵션

    • -d : 도메인이 아닌 숫자 형식으로 IP 주소를 표시
    • -h maximum_hops : 대상 검색을 위한 최대 홉 수
  • tracert를 이용해 Google DNS까지의 경로 추적 예

							Google DNS(8.8.8.8)까지의 경로 추적
  • 보안상의 이유로 traceroute icmp 메시지에 대해 응답하지 않을 때는 응답 시간이 아닌 ***로 표기

3-4. tcptraceroute

  • tcptraceroute : 서비스에 문제가 생겼을 시 중간 경로에서 차단되었는지, 최종 목적지에서 차단되었는지, 목적지 단말에서 서비스를 제대로 오픈하지 못했는지 확인할 수 있는 명령어

  • tcptraceroute 명령어 사용법

    • 리눅스 : tcptraceroute [옵션] 목적지_IP 주소 [서비스 포트]
    • 윈도 : tcproute [옵션] 목적지_IP 주소
  • 리눅스 tcptraceroute 명령어 옵션

    • -n : ICMP 기반으로 traceroute 확인
    • -s source address : 출발지 IP 주소를 지정
    • destination : 도메인이 아닌 숫자 형식으로 IP 주소를 표시
  • 윈도 tcproute 명령 옵션

    • p PORT : 목적지 서비스 포트 지정
    • -d : 도메인이 아닌 숫자 형식으로 IP 주소를 표시
    • -i INT# : 특정 인터페이스로 출발지 인터페이스를 지정
    • --http : HTTP Request를 보내 접속 확인

3-5. netstat(network statistics)

  • netstat : 서버의 다양한 네트워크 상태를 확인하는 데 사용하는 명령어
  • netstat 명령어 사용법
netstat [옵션]
  • 리눅스 netstat 명령어 옵션
    - -a, --all : 모든 연결과 수신 대기 포트 표시
    - -n, --numeric : 주소와 포트 번호를 숫자 형식으로 표시
    - -r, --route : 라우팅 테이블 표시
    - -i, --interfaces : 인터페이스별 입출력 패킷 통계
    - -s, --statistics : 네트워크에 통계 데이터 출력
    - -p, --programs : PID와 프로그램 이름 출력
    - -t, --tcp : TCP만 출력(TCP, TCPv6)
    - -4/-6 : IPv4나 IPv6에 대해 출력

  • 윈도 netstat 명령어 옵션

    • -a : 모든 연결과 수신 대기 포트 표시
    • -n : 주소와 포트 번호를 숫자 형식으로 표시
    • -r : 라우팅 테이블 표시
    • -e : 이더넷 통계를 표시
    • -s : 프로토콜 통계를 표시
    • -p proto : proto로 지정한 프로토콜의 연결을 표시
  • 리눅스 netstat 사용 예제

  • 윈도 netstat 사용 예제

3-6. ss(socket statistics)

  • 소켓 정보를 확인할 수 있는 네트워크 명령어
  • ss 명령어 사용법
ss [옵션] [필터]
  • ss 명령어 옵션

    • -a : 화면에 전체 소켓을 표시
    • -l : 화면에 LISTENING 상태의 소켓만 표시
    • -i : 소켓에 대한 자세한 정보
    • -p : 현재 소켓에서 사용 중인 프로세스 표시
    • -n : 서비스 명이 아닌 실제 포트 번호로 서비스 포트를 표기
    • -4, -6, --ipv4, --ipv6 : IPv4, IPv6에 대한 소켓만 각각 화면에 표시
    • -s : 프로토콜별 통계 표시
    • -t, -u : TCP/UDP에 대한 소켓만 각각 화면에 표시
  • ss 사용 예시

3-7. nslookup(name server lookup)

  • DNS(Domain Name Server)에 다양한 도메인 관련 내용을 질의해 결괏값을 전송받을 수 있는 네트워크 명령어
  • 운영체제에 설정했던 네트워크 설정 정보를 이용해 DNS 서버 주소로 질의를 보내지만 필요한 경우, 옵션값으로 질의하려는 DNS 서버를 변경 가능
  • nslookup을 직접 실행하는 방법과 대화형 모드로 실행할 때의 사용 방법
    • nslookup [옵션] : 기본 네임 서버를 사용한 대화형 모드
    • nslookup [옵션] : 기본 네임 서버를 server로 지정한 대화형 모드
    • nslookup [옵션] host : 기본 네임 서버를 사용한 host 질의
    • nslookup [옵션] host server : 기본 네임 서버를 server로 지정한 host 질의
  • nslookup 대화형 방식 사용 예

									도메인의 IPv4주소 정보 확인
                                    

									도메인의 네임 서버(NS) 정보 확인

3-8. telnet(tele network)

  • 원격지 호스트에 터미널 연결을 위해 사용되는 매우 오래된 표준 프로토콜
  • 평문을 사용하므로 네트워크에 접근 가능한 해커에 의해 통신 내용을 감청당할 수 있어 보안을 중시하는 최근 요구사항을 충족시키지 못함
  • 서버 접근 관리 용도로는 암호화되어 통신 내용을 감청할 수 없는 SSH 사용 권고
  • 서비스 확인을 위한 텔넷 사용법
telnet 목적지 IP 서비스 포트
  • 텔넷으로 서비스를 테스트할 때 접근이 불가능한 이유(출발지 네트워크 설정이나 연결이 올바르다고 가정)
    • 도착지 단말이 꺼져 있거나 네트워크에 정상적으로 연결되어 있지 않은 경우
    • 도착지 단말의 네트워크 설정에 문제가 있는 경우

3-9. ipconfig

  • DHCP 환경에서 할당받은 현재 IP 주소를 해제(release)하고 갱신(renew)하는 옵션
네트워크 주소 해제 : ipconfig /release
네트워크 주소 갱신 : ipconfig /renew
  • 현재 서버에서 도메인에 대한 로컬 캐시 정보를 지우기 위해 사용하는 옵션
C:\>ipconfig /flushdns
  • 현재 로컬에 저장된 도메인 캐시 정보를 확인하는 옵션
C:\>ipconfig /displaydns

3-10. tcpdump

  • 네트워크 인터페이스로 오가는 패킷을 캡처해 보는 기능의 명령어
  • 패킷 분석이나 장애 처리가 필요할 때 자주 사용
  • tcpdump에서 주로 사용하는 옵션
    • -i 인터페이스 : 패킷을 캡처할 인터페이스
    • src IP 주소 : 출발지 IP 주소를 지정해 필터링
    • dst IP 주소 : 목적지 IP 주소를 지정해 필터링
    • host IP 주소 : 출발지/목적지와 상관없이 IP 주소를 지정해 필터링
    • -n : 이름으로 표기되는 호스트 네임을 실제 IP 주소로 표기
    • -nn : 이름으로 표기되는 서비스 포트를 실제 포트 번호로 표기
    • src port 포트 번호 : 출발지 포트를 지정해 필터링
    • dst port 포트 번호 : 목적지 포트를 지정해 필터링
    • port 포트 번호 : 출발지/목적지와 상관없이 tcp 포트를 지정해 필터링
    • tcp 또는 udp : tcp 또는 udp만 필터링
    • -c 출력 수 : tcpdump로 출력할 결과의 갯수
    • -w 파일명 : tcpdump의 결과를 화면에 출력하지 않고 파일명으로 저장
    • -r 파일명 : 파일로 저장한 tcpdump 파일을 화면에 출력
  • tcpdump 사용 예제
    • HTTP 서비스 패킷 캡처
      tcpdump -i eth0 tcp port 80

    • 172.16.10.10이 출발지 또는 목적지이면서 HTTP 서비스 패킷 캡처
      tcpdump -i eth0 tcp port 80 and host 172.16.10.10

    • ssh(22번 포트)를 제외한 전체 패킷 캡처
      tcpdump -i eth0 not tcp port 22

    • tcpdump 결과를 dumpfile.pcap 파일로 출력
      tcpdmp -i eth0 -w dumpfile.pcap
profile
나만의 데이터베이스

0개의 댓글