Quản lý Mạng (Networking)
Mô hình Network trong Linux
Xem cấu hình mạng
Network Interface
# ip addr — xem địa chỉ IP
ip addr # tất cả interface
ip addr show eth0 # interface cụ thể
ip -4 addr # chỉ IPv4
ip -6 addr # chỉ IPv6
# ip link — trạng thái layer 2
ip link # tất cả interface
ip link show eth0 # interface cụ thể
ip link set eth0 up # bật interface
ip link set eth0 down # tắt interface
# ifconfig (cũ hơn, cần net-tools)
ifconfig
ifconfig eth0
# Đọc output ip addr:
# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc ...
# link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
# inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
# └── IP/prefix └── broadcast
Routing
ip route # bảng routing
ip route show # tương đương
ip route get 8.8.8.8 # route sẽ dùng để đến 8.8.8.8
# Thêm/xoá route (tạm thời)
sudo ip route add 10.0.0.0/8 via 192.168.1.1
sudo ip route del 10.0.0.0/8
DNS
# Xem DNS đang dùng
cat /etc/resolv.conf # DNS server
cat /etc/hosts # local hostname mapping
# Tra cứu DNS
nslookup google.com # DNS lookup cơ bản
dig google.com # chi tiết hơn
dig google.com +short # chỉ IP
dig @8.8.8.8 google.com # hỏi server DNS cụ thể
dig google.com MX # MX record
dig google.com AAAA # IPv6 record
host google.com # đơn giản nhất
resolvectl status # trạng thái systemd-resolved (Ubuntu)
Kiểm tra kết nối
# ping — kiểm tra ICMP
ping google.com # ping liên tục
ping -c 4 google.com # chỉ 4 lần
ping -i 0.5 192.168.1.1 # mỗi 0.5 giây
ping -s 1400 192.168.1.1 # kiểm tra MTU (gói 1400 bytes)
# traceroute — theo dấu đường đi
traceroute google.com
tracepath google.com # không cần root
mtr google.com # real-time, kết hợp ping + traceroute
curl — HTTP Client (thiết yếu cho DevOps)
# GET request
curl https://api.example.com
# Chỉ xem header
curl -I https://example.com
# POST với JSON body
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer TOKEN" \
-d '{"key": "value"}' \
https://api.example.com/endpoint
# Download file
curl -o file.zip https://example.com/file.zip
curl -L https://example.com # follow redirect
curl -v https://example.com # verbose (debug)
curl -s https://example.com # silent (không hiện progress)
curl --connect-timeout 5 -m 30 https://api.example.com # timeout
# Kiểm tra status code
curl -o /dev/null -s -w "%{http_code}" https://example.com
# Output: 200
wget — Download
wget https://example.com/file.tar.gz
wget -O myfile.tar.gz https://example.com/file.tar.gz
wget -q https://example.com/file.tar.gz # quiet
wget -c https://example.com/bigfile.tar.gz # tiếp tục download bị gián đoạn
wget -r https://example.com # download cả website
nc (netcat) — Network Swiss Army Knife
nc -zv 192.168.1.1 80 # kiểm tra port 80 có mở không
nc -zv 192.168.1.1 80-100 # kiểm tra range port
nc -l 8080 # lắng nghe port 8080 (test)
echo "hello" | nc 192.168.1.1 1234 # gửi dữ liệu raw
Xem kết nối và Port
# ss — socket statistics (thay thế netstat, nhanh hơn)
ss -tulpn # TCP/UDP listening với process name
ss -tn # TCP connections (established)
ss -s # tóm tắt thống kê
ss -tp # TCP với process info
ss -tulpn | grep :80 # ai đang dùng port 80?
# netstat (cũ hơn ss, cần net-tools)
netstat -tulpn # tương tự ss
netstat -an | grep ESTABLISHED # kết nối đang hoạt động
netstat -i # network interface statistics
# lsof — xem port qua process
lsof -i :80 # process dùng port 80
lsof -i :80 -i :443 # port 80 và 443
lsof -i TCP # tất cả TCP connections
# Đếm connection đến web server
ss -tn dst :80 | wc -l
ss -tn state ESTABLISHED dst :443 # HTTPS connections
Firewall
ufw — Ubuntu Firewall (dễ dùng)
sudo ufw status # trạng thái + rules
sudo ufw status verbose # chi tiết hơn
sudo ufw enable # bật firewall
sudo ufw disable # tắt firewall
# Cho phép
sudo ufw allow 22 # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow from 192.168.1.0/24 # cho phép subnet
sudo ufw allow from 10.0.0.5 to any port 5432 # PostgreSQL từ IP cụ thể
# Chặn
sudo ufw deny 23 # chặn telnet
sudo ufw deny from 1.2.3.4 # chặn IP
# Xoá rule
sudo ufw delete allow 80/tcp
sudo ufw delete 3 # xoá rule số 3 (theo ufw status numbered)
# Reset
sudo ufw reset # xoá tất cả rules
iptables — Low-level (mạnh hơn)
sudo iptables -L # liệt kê rules
sudo iptables -L -n -v # verbose với số liệu
sudo iptables -L --line-numbers # kèm số dòng
# Thêm rule
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # cho phép HTTP in
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # cho phép SSH
sudo iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT # cho phép HTTPS out
sudo iptables -P INPUT DROP # mặc định DROP input (cẩn thận!)
# Xoá rule
sudo iptables -D INPUT -p tcp --dport 80 -j ACCEPT
# Lưu rules (Ubuntu)
sudo iptables-save > /etc/iptables/rules.v4
Cấu hình mạng tĩnh (Static IP)
Netplan (Ubuntu 18.04+)
# /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
sudo netplan apply # áp dụng cấu hình
sudo netplan try # thử 120 giây rồi rollback
Bảng tổng kết lệnh Network
| Tác vụ | Lệnh |
|---|---|
| Xem IP | ip addr |
| Xem routing | ip route |
| Kiểm tra DNS | dig domain.com |
| Ping | ping -c 4 host |
| Theo dõi route | traceroute host |
| Kiểm tra port | nc -zv host port |
| Xem port mở | ss -tulpn |
| Ai dùng port 80 | lsof -i :80 |
| HTTP request | curl -I https://site |
| Download | wget url |
| Firewall status | sudo ufw status |