##############

## 네트워크 ##

##############

1. ifconfig


- 네트워크를 설정할 때 필요한 IP, netmask, broadcast 값을 설정할 수 있는 명령어, 디바이스를 사용하거나 중지할 목적으로 사용함.



2. system-config-network



- 네트워크과 관련된 대부분의 작업을 이 명령어를 통해서 수행할 수 있음. 


- 4가지 파일을 직접 편집하면 동일하게 네트워크를 설정할 수 있음


   1) /etc/sysconfig/network : 네트워크의 기본적인 정보가 설정되어 있는 파일


   2) /etc/sysconfig/network-script/ifcfg-eth0 : 'eth0' 장치에 설정된 네트워크 정보 파일


   3) /etc/resolv.conf : DNS 서버의 정보 및 호스트 이름이 설정되어 있는 파일


   4) /etc/hosts : 현재 컴퓨터의 호스트 이름 및 FQDN(Fully Qualified Domain Name ; 정규환된 도메인 이름)이 들어있는 파일


- service network restart 를 통해서 설정한거 등록


 


3. ifup <장치이름> / ifdown <장치이름>


- 네트워크 장치가 작동하고 있지 않거나 해당되는 장치를 작동시켜 줄 때는 'ifup' 명령어를 사용하고, 작동하고 있는 장치에 대해서 작동을 멈추게 할 때는 'ifdown' 명령어를 사용


 


4. ping <IP주소 또는 URL>


- 네트워크 상에서 상대방과의 통신이 원활하게 이루어지고 있는지를 테스트 하기 위한 명령어


 


5. nslookup <호스트네임 또는 DNS>


- 호스트 네임 또는 DNS 서버의 작동을 테스트하고자 할 경우에 사용.




===========================================================

LAB> ifconfig 를 이용해서 IP alias 를 설정해보자.


# ifconfig eth1:1 192.168.56.200

# ifconfig eth1:ksw 192.168.56.150 netmask 255.255.255.128

# ifconfig eth1:ksw

eth1:ksw  Link encap:Ethernet  HWaddr 08:00:27:0C:5A:E9  

          inet addr:192.168.56.150  Bcast:192.168.56.255  Mask:255.255.255.128

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1



===========================================================


ifconfig eth1:1 up

ifconfig eth1:1 down

ifconfig lo up

ifconfig lo down



**** 본딩 **** 



# mii-tool 

eth0: no autonegotiation, 100baseTx-FD, link ok

eth1: no autonegotiation, 100baseTx-FD, link ok



# mii-tool 

eth0: no autonegotiation, 100baseTx-FD, no link <-- 케이블 

eth1: no autonegotiation, 100baseTx-FD, link ok



(mii-tool 대신 ethtool eth0 을 많이 사용)



ifup/ifdown <-- 쉘스크립트 



- loopback interface 를 up/down

# ifdown lo  <-- ifconfig lo down

# ifup lo    <-- ifconfig lo up


- loopback interface 를 up/down

# ifconfig lo down

# ifconfig lo up



유동IP : dhcp 서버 , dhcp 클라이언트



IP address, GW, Network, broadcast, subnetmask, 


DNS 주소 : /etc/resolv.conf


IP, network, broadcast, subnetmask : 

/etc/sysconfig/network-scripts/ifcfg-eth[0-9]


GATEWAY : /etc/sysconfig/network


========================================================

LAB> 아래 설정조건을 이용해서 고정IP로 서버를 세팅해보자.

!!!

!!! CentOS에서 고정IP로 설정하는 방법 

!!! 1. 명령어를 이용 (old : netconfig,new : system-config-network)

!!! 2. 편집기를 이용 (vi)

!!!


-- 설정조건 --

eth0 : addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0

eth1 : addr:192.168.56.101  Bcast:192.168.56.255  Mask:255.255.255.0

GATEWAY : 10.0.2.2 


nameserver : 168.126.63.1 , 168.126.63.2


-- 순서 --

1. GATEWAY 주소 세팅

2. IP 주소 세팅

3. DNS 서버 세팅

4. 네트워크 재시작

5. 확인 


1. GATEWAY 주소 세팅

# vi /etc/sysconfig/network

-- /etc/sysconfig/network --

NETWORKING=yes

NETWORKING_IPV6=no

NOZEROCONF=yes

HOSTNAME=www.boaniyagi.com

GATEWAY=10.0.2.2

-- /etc/sysconfig/network --



2. IP 주소 세팅

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

-- /etc/sysconfig/network-scripts/ifcfg-eth0 --

DEVICE=eth0

BOOTPROTO=static

IPADDR=10.0.2.15

NETWORK=10.0.2.0 

BROADCAST=10.0.2.255

NETMASK=255.255.255.0

ONBOOT=yes

HWADDR=08:00:27:f7:b2:b7

-- /etc/sysconfig/network-scripts/ifcfg-eth0 --



# vi /etc/sysconfig/network-scripts/ifcfg-eth1

-- /etc/sysconfig/network-scripts/ifcfg-eth1 --

DEVICE=eth1

BOOTPROTO=static

IPADDR=192.168.56.101

NETWORK=192.168.56.0

BROADCAST=192.168.56.255

NETMASK=255.255.255.0

ONBOOT=yes

HWADDR=08:00:27:0c:5a:e9

-- /etc/sysconfig/network-scripts/ifcfg-eth1 --


3. DNS 서버 세팅

# vi /etc/resolv.conf 

-- /etc/resolv.conf --

nameserver 168.126.63.1

nameserver 168.126.63.2

-- /etc/resolv.conf --



4. 네트워크 재시작

# /etc/init.d/network restart



5. 확인 

# ifconfig  <-- eth0, eth1 확인



# route -n  <-- default gw 확인



# ping -c 3 kr.yahoo.com  <-- 인터넷이 되는지 확인



========================================================

========================================================

LAB> routing table 에 설정되어 있는 네트워크 삭제/추가


# route -n

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0

192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1

0.0.0.0         10.0.2.2        0.0.0.0         UG    0      0        0 eth0



- 네트워크 삭제

# route del default gw 0.0.0.0

# route del -net 192.168.56.0 netmask 255.255.255.0

# route del -net 10.0.2.0 netmask 255.255.255.0



- 네트워크 추가

# route add -net 10.0.2.0 netmask 255.255.255.0 dev eth0

# route add -net 192.168.56.0 netmask 255.255.255.0 dev eth1

# route add default gw 10.0.2.2 dev eth0



# route add -net 10.0.2.0/24 dev eth0

# route add -net 192.168.56.0/24 dev eth1

========================================================


========================================================

LAB> GATEWAY MAC 주소를 정적으로 설정/삭제 하기

!!! arpspoofing 공격을 방지할 수 있다. !!!

!!! 주의 : 

!!! 


windows :

arp -s IP MAC



linux :

arp -s IP MAC



- static 으로 설정하기

# arp -n

# arp -s 192.168.56.1 08:00:27:00:E0:B9

# echo arp -s 192.168.56.1 08:00:27:00:E0:B9 >> /etc/rc.local

# arp -n

Address                  HWtype  HWaddress           Flags Mask            Iface

10.0.2.2                 ether   52:54:00:12:35:02   CM                    eth0

192.168.56.1             ether   08:00:27:00:E0:B9   CM                    eth1



- 삭제하기

# arp -d 10.0.2.2

# arp -n

Address                  HWtype  HWaddress           Flags Mask            Iface

10.0.2.2                         (incomplete)                              eth0

192.168.56.1             ether   08:00:27:00:E0:B9   CM                    eth1



# arp -d 192.168.56.1

# arp -n

Address                  HWtype  HWaddress           Flags Mask            Iface

10.0.2.2                         (incomplete)                              eth0

192.168.56.1             ether   08:00:27:00:E0:B9   C                     eth1




# ping kr.yahoo.com -c 3

PING sg-rc.g01.yahoodns.net (106.10.165.51) 56(84) bytes of data.


--- sg-rc.g01.yahoodns.net ping statistics ---

1 packets transmitted, 0 received, 100% packet loss, time 0ms


# arp -n

Address                  HWtype  HWaddress           Flags Mask            Iface

10.0.2.2                 ether   52:54:00:12:35:02   C                     eth0

192.168.56.1             ether   08:00:27:00:E0:B9   C                     eth1


========================================================


- ip 사용하기 

# ip

Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }

       ip [ -force ] [-batch filename

where  OBJECT := { link | addr | addrlabel | route | rule | neigh | ntable | tunnel |

                   maddr | mroute | monitor | xfrm }

       OPTIONS := { -V[ersion] | -s[tatistics] | -r[esolve] |

                    -f[amily] { inet | inet6 | ipx | dnet | link } |

                    -o[neline] | -t[imestamp] }



# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000

    link/ether 08:00:27:f7:b2:b7 brd ff:ff:ff:ff:ff:ff

    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000

    link/ether 08:00:27:0c:5a:e9 brd ff:ff:ff:ff:ff:ff

    inet 192.168.56.101/24 brd 192.168.56.255 scope global eth1



# ip route

10.0.2.0/24 dev eth0  proto kernel  scope link  src 10.0.2.15 

192.168.56.0/24 dev eth1  proto kernel  scope link  src 192.168.56.101 



default via 10.0.2.2 dev eth0 

# ip link

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000

    link/ether 08:00:27:f7:b2:b7 brd ff:ff:ff:ff:ff:ff

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000

    link/ether 08:00:27:0c:5a:e9 brd ff:ff:ff:ff:ff:ff




- 도메인 질의 명령어


nslookup : linux, windows

dig : linux


- nslookup

 nslookup

> naver.com

Server: 168.126.63.1

Address: 168.126.63.1#53


Non-authoritative answer:

Name: naver.com

Address: 202.131.30.11

Name: naver.com

Address: 202.131.30.12

Name: naver.com

Address: 125.209.222.141

Name: naver.com

Address: 125.209.222.142



> daum.net          

Server: 168.126.63.1

Address: 168.126.63.1#53


Non-authoritative answer:

Name: daum.net

Address: 114.108.157.50

Name: daum.net

Address: 61.111.62.173

Name: daum.net

Address: 110.45.215.23

Name: daum.net

Address: 114.108.157.19



> server 8.8.8.8

Default server: 8.8.8.8

Address: 8.8.8.8#53

> daum.net

Server: 8.8.8.8

Address: 8.8.8.8#53


Non-authoritative answer:

Name: daum.net

Address: 114.108.157.19

Name: daum.net

Address: 114.108.157.50

Name: daum.net

Address: 110.45.215.23

Name: daum.net

Address: 61.111.62.173



> set type=soa

> naver.com

Server: 8.8.8.8

Address: 8.8.8.8#53


Non-authoritative answer:

naver.com

origin = ns1.naver.com

mail addr = webmaster.naver.com

serial = 2014042203

refresh = 21600

retry = 1800

expire = 604800

minimum = 300


Authoritative answers can be found from:



> set type=mx

> naver.com

Server: 8.8.8.8

Address: 8.8.8.8#53


Non-authoritative answer:

naver.com mail exchanger = 10 mx2.naver.com.

naver.com mail exchanger = 10 mx3.naver.com.

naver.com mail exchanger = 10 mx4.naver.com.


Authoritative answers can be found from:



> set type=a

> naver.com

Server: 8.8.8.8

Address: 8.8.8.8#53


Non-authoritative answer:

Name: naver.com

Address: 125.209.222.141

Name: naver.com

Address: 202.131.30.11

Name: naver.com

Address: 202.131.30.12

Name: naver.com

Address: 125.209.222.142




# dig naver.com mx +short

10 mx3.naver.com.

10 mx4.naver.com.

10 mx2.naver.com.

# dig mx2.naver.com +short

125.209.238.138



- dig 을 이용한 인버스도메인 질의

# dig -x 125.209.238.138 +short

mx2.naver.com.

# dig mx3.naver.com +short

125.209.222.14



# dig -x 125.209.222.14 +short

mx3.naver.com.




- netstat

참고 : http://coffeenix.net/board_print.php?bd_code=44


netstat의 State 필드에 표시되는 TCP 상태표시가 갖는 의미 

RFC 793 문서에 있는 TCP 기본 연결, 종료 과정을 보면 이해가 더 빠를 거라 생각한다.

  

----------------------------------------------------------- 

# netstat -atn

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address          Foreign Address       State

... 생략 ... 

tcp        0      0 0.0.0.0:25             0.0.0.0:*             LISTEN      <-- 포트가 열렸음

tcp        0      0 192.168.123.10:32799   207.46.106.141:1863   ESTABLISHED <-- 서로 연결중

tcp        0      0 192.168.123.10:32794   218.xxx.xx.xx:22      ESTABLISHED

tcp        0      0 192.168.123.10:32802   207.46.108.46:1863    CLOSE_WAIT  <-- 종료 대기중

tcp        0      0 192.168.123.10:33244   211.xxx.xx.x:80       ESTABLISHED

... 생략 ...

-----------------------------------------------------------



1) TCP 연결관련 상태 

  

* RFC 793문서에 나온 기본적인 TCP 연결 과정


      TCP A                                                      TCP B


  1.  CLOSED                                                     LISTEN

  2.  SYN-SENT    --> < SEQ=100>< CTL=SYN>                   --> SYN-RECEIVED

  3.  ESTABLISHED <-- < SEQ=300>< ACK=101>< CTL=SYN,ACK>     <-- SYN-RECEIVED

  4.  ESTABLISHED --> < SEQ=101>< ACK=301>< CTL=ACK>         --> ESTABLISHED

  5.  ESTABLISHED --> < SEQ=101>< ACK=301>< CTL=ACK>< DATA>  --> ESTABLISHED


LISTEN      : 데몬이 요청을 발을 수 있도록 연결 요구를 기다리는 상태

  즉, 포트가 열려있음을 의미. http(80), mail(25), ftp(21), telnet(23) 등

  위에서 포트 25(mail)이 메일을 받을 수 있도록 열려 있는 상태

  윈도우즈에서는 LISTENING으로 표시

SYN_SENT    : 로컬에서 원격으로 연결 요청(SYN 신호를 보냄)을 시도한 상태

SYN_RECV    : 원격으로 부터 연결 요청을 받은 상태

  요청을 받아 SYN+ACK 신호로 응답은 한 상태이지만 ACK는 받지 못했다.

  netstat로 확인할 때 SYN_RECV가 상당히 많다면 TCP SYN 플러딩(Flooding) 공격일

  가능성이 있다.

  윈도우즈와 솔라리스에서는 SYN_RECEIVED으로, FreeBSD는 SYN_RCVD으로 표시

ESTABLISHED : 서로 연결이 되어 있는 상태

  위에서 192.168.123.10의 포트 32794과 218.xxx.xx.xx의 포트 22(ssh)이 서로

  연결되어 있는 상태


2) TCP 종료관련 상태


* 정상적인 연결 종료 과정


      TCP A                                                   TCP B


  1.  ESTABLISHED                                             ESTABLISHED

  2.  (Close)

      FIN-WAIT-1  --> < SEQ=100>< ACK=300>< CTL=FIN,ACK>  --> CLOSE-WAIT

  3.  FIN-WAIT-2  <-- < SEQ=300>< ACK=101>< CTL=ACK>      <-- CLOSE-WAIT

  4.                                                         (Close)

      TIME-WAIT   <-- < SEQ=300>< ACK=101>< CTL=FIN,ACK>  <-- LAST-ACK

  5.  TIME-WAIT   --> < SEQ=101>< ACK=301>< CTL=ACK>      --> CLOSED 

  6.  (2 MSL)

      CLOSED                                                      


FIN_WAIT1   : 소켓이 닫히고 연결이 종료되고 있는 상태. 원격의 응답은 받을 수 있다.

  솔라리스에서는 FIN_WAIT_1로 표시

FIN_WAIT2   : 로컬이 원격으로 부터 연결 종료 요구를 기다리는 상태

  솔라리스에서는 FIN_WAIT_2로 표시

CLOSE_WAIT  : 원격의 연결 요청을 받고 연결이 종료되기를 기다리는 상태 

  원격으로 부터 FIN+ACK 신호를 받고 ACK 신호를 원격에 보냈다.

TIME_WAIT   : 연결은 종료되었으나 원격의 수신 보장을 위해 기다리고 있는 상태

  이 상태를 특히 자주 보게되는 Apache에서 KeepAlive를 OFF로 해둔 경우,

  Tomcat 서버를 쓰는 경우 등

LAST_ACK    : 연결은 종료되었고 승인을 기다리는 상태

CLOSED      : 완전히 연결이 종료된 상태


※ 위의 FIN_WAIT1, FIN_WAIT2, CLOSE_WAIT 3개 상태는 연결 종료를 위해 서로간에 

   신호를 주고받는 과정에 나타나는 상태로 이해하면 된다. 

   종료 요청을 한 곳에서는 FIN_WAIT1, FIN_WAIT2, TIME_WAIT 상태가

   종료 요청을 받는 곳에서는 CLOSE_WAIT, LAST_ACK 상태가 표시된다.


3) 기타 


CLOSING     : 연결은 종료되었으나 전송도중 데이타가 분실된 상태

UNKNOWN     : 소켓의 상태를 알 수 없음


솔라리스의 netstat 명령에서는 다음 2개의 상태를 더 표시한다.


IDLE        : 소켓이 열렸지만 binding 되지 않은 상태

BOUND       : listen이나 연결을 위한 준비 상태


※ 참고 문서  

- netstat 맨페이지(linux, solaris)

- RFC 793 ( http://www.ietf.org/rfc/rfc0793.txt )


===========================================================

실습> SYN_SENT, SYN_RECV netstat 로 확인해보자.


- SYN_SENT 출력

A# iptables -F

A# iptables -A INPUT -i lo -j DROP


B# nc localhost 22

      ~~~~~~~~~

         lo

B# netstat -nat 


      SYN

A X <-------- B



A# netstat -nat


- SYN_RECV 출력

A# iptables -F


B# iptables -F

B# iptables -A INPUT -p tcp --sport 22 -j DROP


B# nc localhost 22


A# netstat -nat 


    SYN

A <-------- B

  ------> X 

   SYN,ACK


===========================================================



/usr/include/netinet/tcp.h 

/usr/include/netinet/udp.h 










Centos 6.5


/etc/resolv.conf --> DNS정보 6.5에선 /etc/sysconfig/network-scripts/ifcfg-eth[0-1] 에 써야함 (중요)

/etc/sysconfig/network 에서 게이트 웨이쓰는거 /etc/sysconfig/network-scripts/ifcfg-eth0 에 써야함 (중요)


network 에 NOZEROCONF 는 네트워크 작동안할때 예비 네트워크 주소 안쓸꺼냐 물어보는거 5.8 에선 yes 해주지만

6.5에선 안써도 안썻음 (static이라 그럴수도)


밑에처럼 하지않고

eth 에 IPADDR , BROADCAST , NETWORK , NETMASK 만 써주고 dhcp 를 static 으로

eth0 엔 GATEWAY 써주고 eth1 엔 DNS 랑 DOMAIN(생략해도될듯) 써주면 됨




--network--


NETWORKING=yes

HOSTNAME=localhost.localdomain

NOZEROCONF=yes


--network--


--eth0--


DEVICE=eth0

TYPE=Ethernet

UUID=2464793a-8074-4bd5-ba11-1a1965b44424

ONBOOT=yes

BOOTPROTO=static

IPADDR=10.0.2.15

NETWORK=10.0.2.0

BROADCAST=10.0.2.255

NETMASK=255.255.255.0

HWADDR=08:00:27:F4:0A:2C

IPV6INIT=no

NAME="System eth0"

DNS1=168.126.63.1

DNS2=168.126.63.2

GATEWAY=10.0.2.2


--eth0--


--eth1--


DEVICE=eth1

TYPE=Ethernet

UUID=0ab14f9b-8689-42c2-aa0b-21c0f0ab452a

ONBOOT=yes

BOOTPROTO=static

IPADDR=192.168.56.101

NETWORK=192.168.56.0

BROADCAST=192.168.56.255

NETMASK=255.255.255.0

HWADDR=08:00:27:C1:F3:C2

IPV4_FAILURE_FATAL=yes

IPV6INIT=no

NAME="System eth1"


DNS1=168.126.63.1

DNS2=168.126.63.2

DOMAIN=local


--eth1--