概述
背景說明
在運維工作中,Iptables是一個不可或缺的工具,它提供了強大的網絡流量控制和管理能力。
問題呈現
- iptables是一個不可獲取的工具,你對其了解多少?
- 該工具你是否真的會用?
- 詳細功能對應的應用場景你是否知曉?
具體呈現
1. 訪問控制
iptables最核心功能是控制網絡流量的進出,允許或拒絕特定的流量,可通過定義規則從而實現:
-
允許或拒絕特定IP地址:
- 允許特定IP地址訪問服務器:
iptables -A input -s 192.168.1.100 -j ACCEPT
- 拒絕特定IP地址訪問服務器:
iptables -A input -s 1.2.3.4 -j drop
- 允許特定IP地址訪問服務器:
-
端口訪問控制
- 允許特定端口的流量(如SSH、HTTP、HTTPS)
iptables -A input -p tcp --dport 22 -j accept iptables -A input -p tcp --dport 80 -j accept iptables -A input -p tcp --dport 443 -j accept
- 拒絕所有未明確允許的流量:
iptables -A input -j drop
- 允許特定端口的流量(如SSH、HTTP、HTTPS)
-
基于協議的訪問控制
- 允許ICMS(ping)流量:
iptables -A input -p imcp -j accept
- 拒絕所有upd流量:
iptables -A input -p udp -j drop
2. NAT(網絡地址轉換)
iptables支持NAT功能,主要用于實現私有網絡與公網之間的通信。
- SNAT(源地址轉換)
- 將內網流量轉換為公網IP
適用于家庭或企業網絡的出口網關。iptables -t nat -A postrouting -s 192.168.1.0/24 -o eth0 -j masquerade
- 將內網流量轉換為公網IP
- DNAT(目標地址轉移)
- 將外部流量轉發到內網服務器
適用于將公網流量轉發到內網的web服務器。iptables -t nat -A prerouting -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
- 將外部流量轉發到內網服務器
3. 防止網絡攻擊
iptables可以通過規則限制來防范常見的網絡攻擊。
- 防止SYN Flood攻擊
- 限制每秒的 SYN數據包數量
iptables -A input -p tcp --syn -m limit --limit 1/sec -j accept
- 限制每秒的 SYN數據包數量
- 防止端口掃描
- 限制對特定端口的掃描行為:
iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH --rsource iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 5 --name SSH --rsource -j DROP
- 限制對特定端口的掃描行為:
- 防止暴力破解
- 限制失敗登錄嘗試的頻率:
iptables -A input -p tcp --dport 22 -m fail12ban-ssh -j drop
- 限制失敗登錄嘗試的頻率:
4. 流量監控與統計
iptables可以記錄和統計流量信息,幫助運維人員了解網絡使用情況
- 日志記錄
- 將匹配的流量記錄到日志文件
iptables -A input -p tcp --dport 22 -j log --log-prefix "ssh sccess:"
- 將匹配的流量記錄到日志文件
- 流量統計
- 統計特定流量:
iptables -A input -p tcp --dport 80 iptables -L -v -n
- 統計特定流量:
5. 負載均衡
iptables可以簡單的輪詢算法實現負載均衡功能,將流量分發到多個后端服務器。
- 簡單輪詢負載均衡
- 將http流量分發到多個后端服務器
iptables -t nat -A PREROUTING -p tcp --dport 80 -m nth --counter 0 --every 2 --packet 0 -j DNAT --to-destination 192.168.1.100:80 iptables -t nat -A PREROUTING -p tcp --dport 80 -m nth --counter 0 --every 2 --packet 1 -j DNAT --to-destination 192.168.1.101:80
- 將http流量分發到多個后端服務器
6. 透明代理
iptables可以將流量重定向到本地的代理服務器,實現透明代理功能。
- 將http流量重定向到本地代理服務器
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
7. 數據包修改
將進入的數據包的 TTL 值修改為特定值:
iptables -t mangle -A prerouting -j ttl --ttl-set 64
8. 連接跟蹤
iptables 可以跟蹤連接狀態,并根據連接狀態進行操作。
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
9. 限制特定IP的下載速度
iptables -A FORWARD -s 192.168.1.100 -p tcp --dport 80 -m quota --quota 1000000 -j ACCEPT
iptables -A FORWARD -s 192.168.1.100 -p tcp --dport 80 -j DROP
使用腳本管理規則
#!/bin/bash# 清空現有規則
iptables -F
iptables -X# 設置默認策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT# 允許已建立的連接
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT# 允許 SSH 和 HTTP 訪問
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT# 日志記錄
iptables -A INPUT -j LOG --log-prefix "Blocked: "# 保存規則
iptables-save > /etc/iptables/rules.v4
總結
iptables 能夠實現以下功能:
- 訪問控制:允許/拒絕特定流量。
- NAT功能:實現私有網絡與公網的通信。
- 安全防護:防止網絡攻擊,如 SYN Flood 和端口掃描。
- 負載均衡:將流量分發到多個后端服務器。
- 透明代理:將流量重定向到代理服務器。
- 數據包修改:修改 TTL/IP地址。
- 連接跟蹤:根據連接狀態進行操作。
- 流量統計與監控:記錄和分析流量信息。
- 帶寬限制:控制特定流量的帶寬。