##############
## 네트워크 ##
##############
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--