Networking cơ bản: Kết nối, kiểm tra và bảo vệ
Sau khi đã nắm được process và monitoring ở bài trước, hôm nay chúng ta đi vào một chủ đề không thể thiếu trong công việc thực chiến: networking trên Linux. Từ
Networking cơ bản: Kết nối, kiểm tra và bảo vệ
Sau khi đã nắm được process và monitoring ở bài trước, hôm nay chúng ta đi vào một chủ đề không thể thiếu trong công việc thực chiến: networking trên Linux. Từ việc kiểm tra IP, troubleshoot kết nối, đến cấu hình firewall và SSH hardening — đây là những kỹ năng bạn sẽ dùng hàng ngày khi vận hành server hoặc làm DevSecOps.
1. Kiểm tra thông tin mạng với ip
Lệnh ip là công cụ hiện đại thay thế cho ifconfig (đã bị deprecated). Đây là lệnh bạn cần biết đầu tiên:
# Xem tất cả network interfaces và địa chỉ IP
ip addr show
ip a # viết tắt
# Xem routing table
ip route show
ip r
# Xem ARP cache (MAC address của các host trong mạng LAN)
ip neigh
# Bật/tắt interface
ip link set eth0 up
ip link set eth0 down
# Thêm IP tạm thời (mất sau reboot)
ip addr add 192.168.1.100/24 dev eth0
Output của ip a trông như thế này:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP
link/ether 00:1a:2b:3c:4d:5e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0
inet6 fe80::21a:2bff:fe3c:4d5e/64 scope link
SecOps note: Khi incident response, ip a và ip r là hai lệnh đầu tiên để xác định vị trí máy trong mạng, kiểm tra có interface lạ nào không (ví dụ attacker tạo tunnel interface).
2. Kiểm tra kết nối và port với ss và netstat
ss (socket statistics) nhanh hơn netstat và là lựa chọn ưu tiên trên hệ thống hiện đại:
# Xem tất cả TCP connections đang LISTEN
ss -tlnp
# Xem tất cả UDP
ss -ulnp
# Xem tất cả connections (TCP + UDP)
ss -tunap
# Lọc theo port
ss -tlnp sport = :80
# netstat tương đương (nếu máy chưa có ss)
netstat -tlnp
netstat -an | grep ESTABLISHED
Giải thích các flags: -t TCP, -u UDP, -n không resolve hostname (nhanh hơn), -a tất cả state, -p hiện process đang dùng socket, -l chỉ listening.
SecOps note: ss -tlnp là lệnh kinh điển để phát hiện backdoor. Nếu có port lạ đang LISTEN mà bạn không biết là service gì — red flag ngay. Kết hợp với lsof -i :[port] để xem process nào đang dùng port đó.
3. Ping, traceroute và kiểm tra DNS
Ping — test connectivity cơ bản
# Ping 5 gói tin
ping -c 5 google.com
# Ping với interval 0.2s (flood test, cần root)
ping -i 0.2 -c 100 192.168.1.1
# Ping IPv6
ping6 ::1
Traceroute — theo dõi đường đi của packet
# traceroute dùng UDP (default)
traceroute google.com
# traceroute dùng ICMP (giống Windows tracert)
traceroute -I google.com
# mtr — kết hợp ping + traceroute, realtime
mtr google.com
mtr --report google.com # output 1 lần, dùng cho scripting
dig — kiểm tra DNS như pro
# Query A record
dig google.com A
# Query MX record (mail server)
dig google.com MX
# Query từ DNS server cụ thể
dig @8.8.8.8 google.com
# Query ngắn gọn
dig +short google.com
# Reverse lookup (IP → hostname)
dig -x 8.8.8.8
# Trace toàn bộ DNS resolution
dig +trace google.com
File cấu hình DNS của hệ thống:
# DNS server hệ thống dùng
cat /etc/resolv.conf
# Override hostname resolution (ưu tiên hơn DNS)
cat /etc/hosts
# Thứ tự lookup: /etc/nsswitch.conf
grep hosts /etc/nsswitch.conf
SecOps note: Attacker thường sửa /etc/hosts để redirect traffic hoặc bypass DNS. Kiểm tra file này khi điều tra incident. Cũng cần monitor /etc/resolv.conf — DNS hijacking sẽ thay đổi file này.
4. curl — HTTP từ command line
curl là công cụ đa năng để làm việc với HTTP, HTTPS, FTP và nhiều protocol khác:
# GET request đơn giản
curl https://example.com
# Chỉ lấy headers
curl -I https://example.com
# POST với JSON body
curl -X POST https://api.example.com/data
-H "Content-Type: application/json"
-d '{"key": "value"}'
# Kèm authentication
curl -u username:password https://api.example.com
curl -H "Authorization: Bearer TOKEN" https://api.example.com
# Download file
curl -O https://example.com/file.tar.gz
curl -L -o output.html https://example.com # theo redirect
# Verbose output để debug
curl -v https://example.com
# Test SSL/TLS
curl -v --tlsv1.2 https://example.com 2>&1 | grep "SSL connection"
# Ignore certificate errors (KHÔNG dùng trong production)
curl -k https://example.com
SecOps note: Khi kiểm tra API endpoint nội bộ hay điều tra một service, curl -v cho thấy đầy đủ request/response headers — rất hữu ích khi debug auth issues hoặc kiểm tra security headers (HSTS, CSP, X-Frame-Options).
5. Firewall: iptables, nftables và UFW
Hiểu kiến trúc: iptables và nftables
Linux firewall hoạt động ở kernel level thông qua Netfilter. Có hai frontend chính:
- iptables: tool truyền thống, vẫn phổ biến rộng rãi
- nftables: thay thế hiện đại, syntax sạch hơn, Ubuntu 20.04+ dùng mặc định
- UFW (Uncomplicated Firewall): wrapper đơn giản cho iptables/nftables, dễ dùng
UFW — firewall đơn giản cho người mới
# Kiểm tra trạng thái
sudo ufw status verbose
# Bật UFW
sudo ufw enable
# Allow/deny port
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw deny 23/tcp # block telnet
# Allow từ IP cụ thể
sudo ufw allow from 192.168.1.0/24 to any port 5432
# Xóa rule
sudo ufw delete allow 80/tcp
# Default policy: deny inbound, allow outbound
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Xem numbered rules (để xóa theo số)
sudo ufw status numbered
sudo ufw delete 3 # xóa rule số 3
iptables — kiểm soát chi tiết hơn
# Xem rules hiện tại
sudo iptables -L -v -n
# Xem NAT rules
sudo iptables -t nat -L -v -n
# Block một IP
sudo iptables -A INPUT -s 1.2.3.4 -j DROP
# Allow SSH chỉ từ một subnet
sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
# Lưu rules (Ubuntu/Debian)
sudo iptables-save > /etc/iptables/rules.v4
# Restore rules
sudo iptables-restore < /etc/iptables/rules.v4
SecOps note: Luôn có rule “allow established connections” trước khi block để không tự lock-out khỏi SSH:
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
6. tcpdump — bắt packet để phân tích
tcpdump là công cụ bắt network packet ngay trên command line — không cần GUI như Wireshark:
# Bắt packet trên interface eth0
sudo tcpdump -i eth0
# Bắt packet liên quan đến port 80
sudo tcpdump -i eth0 port 80
# Bắt packet từ/đến một IP
sudo tcpdump -i eth0 host 192.168.1.100
# Lọc HTTP GET requests
sudo tcpdump -i eth0 -A 'tcp port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420)'
# Lưu ra file để phân tích bằng Wireshark
sudo tcpdump -i eth0 -w capture.pcap
# Đọc file pcap
tcpdump -r capture.pcap
# Bắt với output dễ đọc hơn (-n: không resolve hostname, -X: hex+ASCII)
sudo tcpdump -i eth0 -nX port 443
# Bắt ICMP (ping)
sudo tcpdump -i any icmp
SecOps note: tcpdump rất hữu ích khi điều tra data exfiltration hoặc C2 communication. Bắt traffic từ một process cụ thể:
# Lấy PID của process
ss -tlnp | grep :4444
# Dùng cgroup hoặc kết hợp với strace để correlate
sudo tcpdump -i any -n 'host [ip_suspicious]' -w suspicious.pcap
7. SSH: Kết nối an toàn và cấu hình đúng chuẩn
SSH cơ bản
# Kết nối SSH
ssh user@192.168.1.10
ssh -p 2222 user@hostname # port khác
# Tạo SSH key pair
ssh-keygen -t ed25519 -C "your_email@example.com"
# Ed25519 là thuật toán hiện đại, an toàn hơn RSA 2048
# Copy public key lên server
ssh-copy-id user@hostname
# Kết nối dùng key cụ thể
ssh -i ~/.ssh/id_ed25519 user@hostname
SSH config file — tiết kiệm thời gian gõ lệnh
# ~/.ssh/config
Host myserver
HostName 192.168.1.10
User admin
Port 2222
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
# Sau đó chỉ cần gõ:
ssh myserver
SSH ProxyJump — kết nối qua bastion host
# Kết nối đến internal-server qua bastion
ssh -J user@bastion.example.com user@internal-server
# Trong ~/.ssh/config
Host internal-server
HostName 10.0.0.50
User admin
ProxyJump bastion
Host bastion
HostName bastion.example.com
User ubuntu
IdentityFile ~/.ssh/id_ed25519
SSH Hardening — cấu hình /etc/ssh/sshd_config
Đây là phần quan trọng nhất cho SecOps. File cấu hình SSH server nằm tại /etc/ssh/sshd_config:
# === CIS Benchmark SSH Hardening ===
# Tắt login bằng root trực tiếp
PermitRootLogin no
# Chỉ dùng key, tắt password auth
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM yes
# Chỉ cho phép user/group cụ thể
AllowUsers deploy admin
# AllowGroups sshusers
# Port không phải 22 (security by obscurity, nhưng giảm noise)
Port 2222
# Giới hạn thời gian login
LoginGraceTime 30
MaxAuthTries 3
MaxSessions 5
# Disable các feature không cần
X11Forwarding no
AllowAgentForwarding no
AllowTcpForwarding no # Bật nếu cần port forward
PermitTunnel no
# Banner cảnh báo
Banner /etc/issue.net
# Protocol version (chỉ dùng SSH2)
# Protocol 2 # Không cần thiết trên OpenSSH hiện đại, mặc định là 2
# Logging
LogLevel VERBOSE # Log fingerprint của key khi login
# Timeout inactive sessions
ClientAliveInterval 300
ClientAliveCountMax 2
Sau khi sửa, test config trước khi restart:
# Test config hợp lệ không
sudo sshd -t
# Restart SSH (giữ session hiện tại, chỉ áp dụng cho connection mới)
sudo systemctl reload sshd
Quan trọng: Trước khi tắt password auth, hãy đảm bảo đã copy public key lên server và test đăng nhập được bằng key. Nếu tắt password mà chưa có key, bạn sẽ bị lock out hoàn toàn.
8. SSH Port Forwarding
# Local port forwarding: truy cập service nội bộ qua tunnel
# Truy cập PostgreSQL (port 5432) trên server qua local port 15432
ssh -L 15432:localhost:5432 user@server
# Kết nối local: psql -h localhost -p 15432
# Remote port forwarding: expose local port ra ngoài qua server
ssh -R 8080:localhost:3000 user@server
# Dynamic port forwarding: SOCKS proxy
ssh -D 1080 user@server
# Dùng với browser hoặc proxychains
9. Troubleshooting nhanh: Checklist kết nối
Khi không kết nối được, làm theo thứ tự sau:
- Layer 1-2:
ip link show— interface có UP không? - Layer 3:
ip addr show— có IP không? Đúng subnet không? - Default gateway:
ip route show— có default route không? - Ping gateway:
ping -c 3 [gateway_ip] - Ping DNS:
ping -c 3 8.8.8.8 - DNS resolution:
dig google.comhoặcnslookup google.com - Port có mở không:
ss -tlnp | grep [port] - Firewall:
sudo ufw statushoặcsudo iptables -L -n - Xem log:
journalctl -u [service] --since "5 min ago"
Tổng kết
Bài này đã đi qua toàn bộ bộ công cụ networking thiết yếu trên Linux:
- ip, ss: xem interface và connections đang chạy
- ping, traceroute, dig: test connectivity và DNS
- curl: tương tác với HTTP/HTTPS từ terminal
- UFW, iptables: kiểm soát traffic vào/ra
- tcpdump: bắt và phân tích packet
- SSH hardening: bảo vệ điểm vào quan trọng nhất của server
Từ góc nhìn SecOps, networking là nơi attacker thao túng nhiều nhất — từ reconnaissance bằng port scan, pivot qua mạng nội bộ, đến data exfiltration. Nắm vững các công cụ này giúp bạn vừa vận hành tốt, vừa phát hiện bất thường kịp thời.
Bài tiếp theo chúng ta sẽ đi vào Package Management — cách cài phần mềm đúng cách, verify integrity và hiểu rủi ro supply chain trong môi trường Linux. Đây là chủ đề nóng trong bảo mật hiện đại khi các cuộc tấn công vào chuỗi cung ứng phần mềm ngày càng phổ biến.
Bình luận (0)
Vui lòng đăng nhập để tham gia thảo luận.
Đăng nhập ngayChưa có bình luận nào. Hãy là người đầu tiên!