Sunday, 17 March 2013

[cmd] cấu hình và quản lý mạng trên Linux

Mục tiêu: 
cung cấp các câu lệnh cơ bản để người đọc biết cách cài đặt, cấu hình, quản
lý, trouble shooting (giải quyết sự cố) khi có các vấn đề về mạng.

Cách đọc:
Nên đọc từ từ và thử luôn trên máy của mình để tránh tẩu hỏa nhập ma

Từ khóa:
network card interface (NIC) : giao diện mạng. Là một thể hiện trên máy tính, thường đại diện cho một card mạng vật lý, là thứ để người dùng tương tác , cài đặt, cấu hình, điều khiển thiết bị mạng đó. Trong bài này sẽ gọi tắt là interface hay iface
Ví dụ : một máy laptop thường có 2 interface, 1 interface đại diện cho card mạng dây (thường là eth0), 1 interface đại diện cho card mạng wifi (thường là wlan0) .
eth là viết tắt của ethernet.
wlan là viết tắt của wireless lan.

hình ảnh một card ethernet

I. ip 
thay thế hoàn toàn cho lệnh ifconfig đã lỗi thời. ip có các lệnh con để điều khiển , cấu hình các interface mạng. Chương trình ip nằm trong gói iproute:
hvn@lappy: ~ () $ dpkg -S `which ip`
iproute: /bin/ip
Các lệnh của ip có thể rút ngắn tối đa chỉ cần không gây ra nhầm lẫn với các câu lệnh khác.

Ví dụ:

ip link set -> ip li se
ip addr add -> ip a a
ip route -> ip ro
ip rule -> ip ru
1. ip link 
Liệt kê, thay đổi trạng thái (bật / tắt) các interface

hvn@lappy: ~ () $ ip link # lệnh ngắn gọn cho ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether bc:ae:c5:15:44:fb brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 48:5d:60:80:e5:5f brd ff:ff:ff:ff:ff:ff

Tắt interface wlan0:
hvn@lappy: ~ () $ sudo ip link set wlan0 down

Bật interface wlan0:
hvn@lappy: ~ () $ sudo ip link set wlan0 up

2. ip addr 
Liệt kê, thêm, xóa địa chỉ ip cho các interface

hvn@lappy: ~ () $ ip addr # lệnh ngắn gọn cho ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether bc:ae:c5:15:44:fb brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 48:5d:60:80:e5:5f brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.103/24 brd 192.168.0.255 scope global wlan0
    inet6 fe80::4a5d:60ff:fe80:e55f/64 scope link
       valid_lft forever preferred_lft forever

Đặt địa chỉ ip cho eth0:
hvn@lappy: ~ () $sudo ip addr add 123.30.12.23/24 dev eth0
hvn@lappy: ~ () $ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether bc:ae:c5:15:44:fb brd ff:ff:ff:ff:ff:ff
    inet 123.30.12.23/24 scope global eth0

Xóa địa chỉ vừa đặt:

hvn@lappy: ~ () $ ip add del 123.30.12.23/24 dev eth0

3. ip route (nâng cao)
quản lý routing table (tương đương với lệnh route)
hvn@lappy: ~ () $ ip route # ngắn hơn cho ip route show
default via 192.168.0.1 dev wlan0  metric 100
169.254.0.0/16 dev wlan0  scope link  metric 1000
192.168.0.0/24 dev wlan0  proto kernel  scope link  src 192.168.0.103
192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1

Xóa 1 route:
hvn@lappy: ~ () $ sudo ip route del 169.254.0.0/16 dev wlan0
Xóa route mặc định
hvn@lappy: ~ () $ ip route del default dev wlan0

Sau khi xóa
hvn@lappy: ~ () $ ip route
192.168.0.0/24 dev wlan0  proto kernel  scope link  src 192.168.0.103
192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1

Thêm route mặc định
hvn@lappy: ~ () $ sudo ip route add default via 192.168.0.1 dev wlan0
Sau khi thêm:
hvn@lappy: ~ () $ ip ro
default via 192.168.0.1 dev wlan0
192.168.0.0/24 dev wlan0  proto kernel  scope link  src 192.168.0.103
192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.
1

4. ip rule (nâng cao)
hvn@lappy: ~ () $ ip rule # ngắn gọn cho ip rule show
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default

Lệnh này ngoài tầm của bài viết, người đọc tự tìm hiểu.


II. dhclient
Dùng để yêu cầu được cấp địa chỉ ip trong một mạng có DHCP server
Ví dụ: xin cấp ip động cho interface wlan0

hvn@lappy: ~ () $ sudo dhclient wlan0

III. tcpdump
Liệt kê các gói tin ra vào một interface

hvn@lappy: ~ () $ sudo tcpdump -ni wlan0 -c 3
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes
13:30:29.860695 IP 192.168.0.103.46529 > 8.8.8.8.53: 46841+ A? dantri.com. (28)
13:30:29.949126 IP 8.8.8.8.53 > 192.168.0.103.46529: 46841 1/0/0 A 123.30.53.12 (44)
13:30:29.949504 IP 192.168.0.103 > 123.30.53.12: ICMP echo request, id 22142, seq 1, length 64
3 packets captured
3 packets received by filter
0 packets dropped by kernel
các options:
-n : number - hiện số thay vì tên (ip - domain)
-i:  interface - chỉ định interface sử dụng
-c: count N - chỉ hiện N gói tin

IV. nmap

ping scan xem có máy nào phản hồi ping trong mạng được chỉ định:
hvn@lappy: ~ () $ nmap -sP 192.168.0.103/24

Starting Nmap 5.21 ( http://nmap.org ) at 2013-03-17 13:31 ICT
Nmap scan report for 192.168.0.1
Host is up (0.0027s latency).
Nmap scan report for 192.168.0.103
Host is up (0.00010s latency).
Nmap done: 256 IP addresses (2 hosts up) scanned in 8.91 seconds


quét xem cổngTCP  nào mở ở một địa chỉ ip xác định:
hvn@lappy: ~ () $ nmap -sT 192.168.0.1

Starting Nmap 5.21 ( http://nmap.org ) at 2013-03-17 13:31 ICT
Nmap scan report for 192.168.0.1
Host is up (0.012s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 6.86 seconds
Các options:
-sP: Ping Scan
 -sT (TCP connect scan)
 -sU (UDP scans) .

V. ss
tương đương với lệnh netstat (nhưng nhanh hơn)
Liệt kê thông tin liên quan đến socket (port)

Liệt kê các TCP socket đang listen:
hvn@lappy: ~ () $ sudo ss -nltp
Liệt kê các UDP socket đang listen:
hvn@lappy: ~ () $ ss -nlu
Liệt kê các TCP / UDP socket đang listen:

hvn@lappy: ~ () $ sudo ss -nltup
Kiểm tra ssh server có chạy không:

hvn@lappy: ~ () $ ss -nltp | grep 22
LISTEN     0      5             192.168.122.1:53                       *:*    
LISTEN     0      128                      :::22                      :::*    
LISTEN     0      128                       *:22                       *:*   

...

Kểm tra web server có listen ở port 80 không:
hvn@lappy: ~ () $ ss -nltp | grep 80
các option đã sử dụng:
-n : hiện số thay vì tên của socket. VD: (cổng 25 - smtp) thì sẽ hiện số 25 thay vì smtp
-l : hiện socket đang listen (các server chạy socket ở chế độ listen, chờ client kết nối)
-t : tcp
-u: udp
-p: hiện tên program sử dụng socket ấy, cần có quyền sudo.

VI: iptables
cấu hình, quản lý tường lửa.

Liệt kê các rule ở table chính (filter):
hvn@lappy: ~ () $ sudo iptables -vnL
Chain INPUT (policy ACCEPT 17082 packets, 8661K bytes)
 pkts bytes target     prot opt in     out     source               destination        
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination        
   10   904 ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24     state RELATED,ESTABLISHED
   10   670 ACCEPT     all  --  virbr0 *       192.168.122.0/24     0.0.0.0/0          
    0     0 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0          
    0     0 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 18849 packets, 4057K bytes)
 pkts bytes target     prot opt in     out     source               destination        
Tìm hiểu thêm:
man tên_chương_trình.

PS:
bài viết thực hiện trên:
hvn@lappy: ~ () $ lsb_release -d
Description:    Ubuntu 12.04.2 LTS

nmap không cài sắn trên máy, cần cài thêm bằng lệnh:
hvn@lappy: ~ () $ sudo apt-get install nmap