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 aip 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 ssnetstat

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:

  1. Layer 1-2: ip link show — interface có UP không?
  2. Layer 3: ip addr show — có IP không? Đúng subnet không?
  3. Default gateway: ip route show — có default route không?
  4. Ping gateway: ping -c 3 [gateway_ip]
  5. Ping DNS: ping -c 3 8.8.8.8
  6. DNS resolution: dig google.com hoặc nslookup google.com
  7. Port có mở không: ss -tlnp | grep [port]
  8. Firewall: sudo ufw status hoặc sudo iptables -L -n
  9. 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.

Biên Tập Viên
Biên Tập Viên

Tác giả tại Pioneer — nền tảng kiến thức thực chiến về Công nghệ & Tài chính.

Bình luận (0)

Chưa có bình luận nào. Hãy là người đầu tiên!