Linux_IPtables防火墻詳解
目錄
目錄
iptables結構
規則表
規則鏈
iptables指令用法詳解
綜合案例
SNAT 策略
DNAT 策略
Iptables規則的備份和還原
iptables 練習
Iptables
iptables(linux package filter firewall (network layer))是linux內核集成的IP信息包過濾系統,該系統有利于在Linux系統上更好地控制IP信息包過濾和防火墻配置。防火墻在做信息包過濾決定時,有一套規則,這些規則存儲在專用的信息包過濾表中,而這些表集成在Linux內核中。在信息包過濾表中,規則被分組放在我們所謂的鏈(chain)中。而netfilter/iptables IP信息包過濾系統是一款功能強大的工具,可用于添加、編輯和移除規則。雖然netfilter/iptables IP信息包過濾系統被稱為單個實體,但它實際上由兩個組件netfilter和iptables組成。
netfilter組件:也稱為內核空間(kernelspace),是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。
iptables 組件:是一種工具,也稱為用戶空間(userspace),它使插入、修改和除去信息包過濾表中的規則變得容易。除非您正在使用Red Hat Linux 7.1或更高版本,否則需要下載該工具并安裝使用它。
Iptables結構
表內有若干條鏈,鏈內有若干條規則。
規則表
表的作用:容納各種規則鏈
表的劃分依據:防火墻規則的作用
4個規則表:
nat表:修改數據包中的源、目標IP地址或端口(網絡地址轉換)
filter表:確定是否修改數據包(過濾)解決放同行的數據包
raw表:確定是否對該數據包進行狀態跟蹤
mangle表:為數據包設置標記
表內訪問鏈的順序:
nat表:PREROUTING->POSTROUTING->OUTPUT
filter表:INPUT->FORWARD->OUTPUT
規則鏈
規則的作用:對數據包進行處理和過濾
鏈的作用:容納各種防火墻規則
5種規則鏈:
INPUT:處理入站數據包
output:處理出戰數據包
FORWARD(forward轉發):處理轉發數據包
POSTROUTING(post routing路由選擇后):在進行路由選擇后處理數據包 post 之后
PREROUTING(pre routing路由選擇前):在進行路由選擇錢處理數據包 pre 之前
Attention:數據包處理流程
數據包入站:
nat:PREROUTING->路由選擇->filter:INPUT->本地應用程序
數據包轉發:
nat: PREROUTING->路由選擇->filter:FORWARD->nat:POSTROUTING->轉發走
數據包出站:
nat: 本地應用程序->路由選擇->filter:OUTPUT->nat:POSTROUTING->出站
iptables command use:
iptables指令用法詳解
iptables [-t tableName] 選項 [鏈名] [條件] [-j 控制類型] #example: iptables -t filter -I INPUT -p icmp -j REJECT #reject ping protocols.
1
2
3
注意:
a. 不指定表,默認是filter表
b. 不指定鏈名,默認是指表的所有鏈
c. 除非設置了鏈的默認策略,否則必須指定匹配條件
常見的控制類型: -j
1. ACCEPT:允許通過
2. DROP:直接丟棄,不給予回應
3. REJECT:拒絕通過,給予回應
4. LOG:記錄日志的信息
選項:
-A add 在鏈的末尾追加新的規則 -I insert 在鏈的開頭插入規則 -L list 列出所有的規則條目 -n number 以數字的形式顯示地址、端口的信息 --line-number 序號
1
2
3
4
5
查看iptables規則一般使用:
iptables -nvL -D 刪除鏈內指定序號的一條規則 -F 清空一個表的多有規則 -X 刪除自定義鏈規則 -p 指定鏈設置默認規則DROP or ACCEPT
1
2
3
4
5
條件匹配:
-P protocol 協議名 -s source 源IP -d destination 目的IP -i input 入站網卡 -o output 出站網卡 --sport source port 源端口 --dport destination port 目的端口 --tcp-flags TCP標記 --icmp-type ICMP 類型 8:請求 0:回應 3:不可達 #example: iptables -A FORWARD -s 192.168.4.0/24 -p udp -dport 52 -j ACCEPT --icmp-type 8 -m multiport --sports 源端口列表 -m multiport --dports 目的端口列表 -m iprange --src-range -m state --start ESTANLISHED,RELATED
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
綜合案例
iptables -I INPUT -s 172.16.1.2 -d -i eth2 -p icmp --icmp-type 8 -j DROP iptables -P FORWARD DROP --> FORWARD table default rule is DROP. iptables -I FORWARD -s 172.16.1.0/24 -p tcp -m multiport --dport 21,25,80 -j ACCEPT iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT #established已經確定的,related相關的 有關的鏈接參數
1
2
3
4
Load Module:
modprobe ip_conntrack_ftp #FTP為需要2個端口的特殊的模塊,所以需要加載模塊 lsmod | grep ip #查看模塊
1
2
SNAT 策略
Source Network Transform:私網內主機IP都共享一個公網IP,實現私網內主機使用同一個公網IP上網。
Attention:一定是路由轉發后轉換IP,且只有一個 -O(出站網卡)
數據包出站:
nat: 本地應用程序->路由選擇->filter:OUTPUT->nat:POSTROUTING->出站
Example:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 218.29.30.31(防火墻公網IP) iptables -t nat -I POSTROUTING -s 192.168.8.0/24 -p tcp -m multiport --dport 80.21.25 -j SNAT -to 172.16.1.1
1
2
外網地址非固定時的共享動態IP地址上網:
MASQUERADE –> 地址偽裝 –> 撥號
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
1
DNAT 策略
Destination Network Transform:將使用私網IP的服務器發布到公網上,使得公網上的主機可以訪問此服務器
原理:目標地址轉換
iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp -dport 80 -j DNAT -to -destination 192.168.1.6
1
目標地址轉換
iptables -t nat -I PREROUTING -d 172.16.1.1 -p tcp -m multiport --dport 21,22,80 -j DNAT --to-destination 192.168.8.171 #一條DNAT規則只能指定一個服務器 iptables -I FROWARD -d 192.168.8.171 -p tcp -m multiport --dport 21,25,80 -j Accept
1
2
3
轉換目標端口
iptables -t nat -I PREROUTING -d 172.16.1.1 -p tcp --dport 2222 -j DNAT --to 192.128.8.171:22 iptables -I FORWARD -d 192.168.8.171 -p tcp --dport 22 -j Accept #Test: ssh root@172.16.1.1 -p 2222 #在生產環境中,一般先SSH到Iptables Server,然后在從Server SSH 到目標主機中。
1
2
3
4
Iptables規則的備份和還原
導出規則:
iptables-save > /opt/iptables_all.txt #iptables-save用來把當前的規則存入一個文件里以備iptables-restore使用
1
備份:
service iptables save
1
還原:
iptables_all.txt > /etc/sysconfig/iptables #or iptables-restore << /opt/iptables_all.txt
1
2
3
iptables 練習
將filter table 中的INPUT 鏈的默認規則設為DROP
iptables -P OUTPUT DROP
1
iptables server可以ping到任何人,任何人不可以ping到iptables server
iptables -A OUTPUT -s 10.10.10.1 -o eth1 -p icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -d 10.10.10.1 -i eth1 -p icmp --icmp-type 0 -j ACCEPT #or iptables -A OUTPUT -s 192.168.100.1 -o eth0 -p icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -d 192.168.100.1 -i eth0 -p icmp --icp-type 0 -j ACCEPT
1
2
3
4
5
HOST2可以通過防火墻訪問HOST1的各種服務,HOST2的DNS要指向HOST1
SNAT 私網IPHOST可以訪問公網IPHOST,轉換源IP地址
iptables -A FORWARD -s 192.168.100.0/24 -p tcp -m multiport --dports 80,25,21 -j ACCEPT iptables -A FORWARD -s 192.168.100.0/24 -p udp --dport 53 -j ACCEPT iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -p tcp -m multiport --dport 80,25,21 -o eth1 -j SNAT --to 10.10.10.1 iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -p udp --dport 53 -o eth1 -j SNAT --to 10.10.10.1 iptables -A FORWARD -m state --state RELATED,ESTABLISHED # 設定FORWARD鏈的全局狀態為:自動匹配數據包的狀態,可以無須關心包回來的方法 modprobe ip_conntrcak_ftp #加載ftp模塊, iptables 自身不帶有 modprobe ip_nat_ftp
1
2
3
4
5
6
7
用iptables防火墻發布于內網的HOST2上的各種服務,是HOST1可以通過域名訪問HOST2上的各種服務
DNAT 將私網中的服務器發布出去,讓公網上的HOST可以訪問,轉換公網IP 主機的目的地址。
iptables -t nat -A PREROUTING -d 10.10.10.1 -i eth1 -p tcp -m multiport --dports 80,25,21 -j DNAT --to 192.168.100.2 iptables -t nat -A PREROUTING -d 10.10.10.1 -i eth1 -p udp --dport 53 -j DNAT --to 192.168.100.2 iptables -A FORWARD -d 192.168.100.2 -i eth1 -p tcp -m multiport --dport 80,25,21 -j ACCEPT iptables -A FORWARD -d 192.168.100.2 -i eth1 -p udp --dport 53 -j ACCEPPT
1
2
3
4
HOST1訪問遠程管防火墻
iptables -A INPUT -d 10.10.10.1 -i eth1 -p tcp --dport 22 -j ACCEPT iptables --A OUTPUT -S 10.10.10.1 -P TCP ---SPORT 22 -j ACCEPT
1
2
當HOST1訪問iptables外網的2222端口時,會轉發到HOST2的主機中(DNAT的端口轉發)
iptables -t nat -A PREPOUTONG -d 10.10.10.1 -i eth1 -p dport 2222 -j DNAT --to 192.168.100.2:22 iptablws -A FORWARD -d 192.168.100.2 -i eth0 -p dport 22 -j ACCEPT
1
2
Linux NAT
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。