# Linux中iptables常用方法有哪些
## 一、iptables基礎概念
### 1.1 什么是iptables
iptables是Linux系統內置的防火墻工具,用于配置、維護和檢查IPv4數據包過濾規則表。它通過內核中的netfilter框架實現對網絡數據包的控制,能夠執行包過濾、網絡地址轉換(NAT)和數據包修改等操作。
### 1.2 iptables與netfilter的關系
- **netfilter**:Linux內核中的框架,實際執行過濾功能
- **iptables**:用戶空間工具,用于配置netfilter規則
### 1.3 四表五鏈結構
#### 四個表(table):
1. **filter表**:默認表,用于包過濾
2. **nat表**:網絡地址轉換
3. **mangle表**:修改數據包內容
4. **raw表**:決定數據包是否被狀態跟蹤
#### 五個鏈(chain):
1. **INPUT**:處理進入本機的數據包
2. **OUTPUT**:處理本機發出的數據包
3. **FORWARD**:處理轉發數據包
4. **PREROUTING**:路由前處理
5. **POSTROUTING**:路由后處理
## 二、iptables基本語法
### 2.1 命令格式
```bash
iptables [-t 表名] 命令選項 [鏈名] [規則匹配條件] [-j 目標動作]
| 選項 | 說明 |
|---|---|
| -A | 追加規則到鏈尾 |
| -I | 插入規則到指定位置 |
| -D | 刪除指定規則 |
| -R | 替換指定規則 |
| -L | 列出規則 |
| -F | 清空鏈中規則 |
| -N | 新建用戶自定義鏈 |
| -X | 刪除用戶自定義鏈 |
| -P | 設置鏈的默認策略 |
| -Z | 計數器清零 |
# 允許來自192.168.1.0/24的SSH連接
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
# 拒絕所有ICMP請求
iptables -A INPUT -p icmp -j DROP
# 允許本地回環接口
iptables -A INPUT -i lo -j ACCEPT
# 允許已建立的連接和相關的連接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允許新的HTTP連接
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
# 將80端口轉發到8080端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
# 源地址NAT(SNAT)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
# 目標地址NAT(DNAT)
iptables -t nat -A PREROUTING -p tcp -d 203.0.113.1 --dport 80 -j DNAT --to-destination 192.168.1.100:80
# 設置默認策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 允許已建立的連接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允許SSH訪問
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允許HTTP/HTTPS訪問
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允許PING
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# 限制單個IP的連接數
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j REJECT
# 限制SYN洪水攻擊
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
# 限制ICMP洪水
iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
# 啟用IP轉發
echo 1 > /proc/sys/net/ipv4/ip_forward
# 設置NAT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 轉發SSH到內部服務器
iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 192.168.1.100:22
iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 22 -j ACCEPT
# 保存規則(Ubuntu/Debian)
iptables-save > /etc/iptables.rules
# 恢復規則
iptables-restore < /etc/iptables.rules
# CentOS/RHEL保存規則
service iptables save
# 查看所有規則(帶行號)
iptables -L -n -v --line-numbers
# 查看NAT表規則
iptables -t nat -L -n -v
# 查看規則匹配統計
iptables -L -n -v
# 重置計數器
iptables -Z
# 創建日志鏈
iptables -N LOGGING
iptables -A INPUT -j LOGGING
# 記錄被拒絕的包
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP
# 檢查是否啟用了連接跟蹤
lsmod | grep conntrack
# 檢查是否有其他防火墻工具(如firewalld)沖突
systemctl status firewalld
# 確認IP轉發已啟用
cat /proc/sys/net/ipv4/ip_forward
# 臨時啟用IP轉發
echo 1 > /proc/sys/net/ipv4/ip_forward
# 永久啟用(在/etc/sysctl.conf中)
net.ipv4.ip_forward = 1
sysctl -p
# 創建自定義鏈
iptables -N CUSTOM_CHN
# 將流量跳轉到自定義鏈
iptables -A INPUT -j CUSTOM_CHN
# 在自定義鏈中添加規則
iptables -A CUSTOM_CHN -s 192.168.1.100 -j DROP
# 只在工作時間(9-18點)允許SSH
iptables -A INPUT -p tcp --dport 22 -m time --timestart 09:00 --timestop 18:00 -j ACCEPT
# 允許特定MAC地址訪問
iptables -A INPUT -m mac --mac-source 00:1A:2B:3C:4D:5E -j ACCEPT
nftables是iptables的替代品,提供更簡潔的語法和更好的性能:
# 基本nftables規則示例
nft add table ip filter
nft add chain ip filter input { type filter hook input priority 0 \; }
nft add rule ip filter input tcp dport 22 accept
# 將iptables規則轉換為nftables
iptables-save > iptables.rules
iptables-restore-translate -f iptables.rules > nftables.rules
nft -f nftables.rules
firewalld是Red Hat開發的動態防火墻管理器,提供更高級的抽象:
# 基本firewalld命令
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
iptables作為Linux系統中最強大的防火墻工具之一,雖然學習曲線較陡峭,但掌握其核心概念和常用方法后,能夠實現靈活高效的網絡流量控制。隨著nftables等新技術的出現,建議新系統可以考慮使用更現代的替代方案,但在現有環境中,iptables仍然是不可或缺的重要工具。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。