1. 程式人生 > >linux初學者-iptables篇

linux初學者-iptables篇

source 時間 過濾規則 再次 sftp gravity client div 被拒絕

linux初學者-iptables篇

iptables是防火墻的一種,是用來設置、維護和檢查linux內核的IP過濾規則的,可以完成封包過濾、封包重定向和網絡地址轉換(NAT)等功能。

iptables包含3張表和5條鏈。3張表分別是:filter、mangle、nat。5條鏈分別是:INPUT、FORWARD、OUTPUT、PREROUTING、POSTROUTING。

3張表分別代表:

filter: 一般的過濾功能

mangle: 用於對特定數據包的修改

nat : 用於nat功能(端口映射,地址映射等)

現階段還加入了raw表,一般是為了不再讓iptables做數據包的連接跟蹤處理,提高性能。

5條鏈分別代表:

INPUT :通過路由表後,目的地為本機

FORWARD :通過路由表後,目的地不為本機

OUTPUT :由本機產生,向外轉發

PREROUTING :數據包進入路由表之前

POSTROUTING :發送到網卡接口之前

1、iptables的基本命令和設置

"iptables -t filter -nL"。查看filter表的信息。如下圖所示,可以看到filter表中包含了哪幾條鏈,各有什麽策略。同理也可以看到其他表的。

技術分享圖片技術分享圖片技術分享圖片

"iptables -t filter -F"。清空這個表裏面的全部策略,這只是臨時清空,在重啟iptables後還會出現,所以還需要輸入命令"service iptables save"來保存。

技術分享圖片技術分享圖片技術分享圖片

"iptables -t filter -P INPUT ACCEPT|DROP"。改變filter表中改變INPUT模式,ACCEPT接受,DROP表示丟棄數據包。例如設置成DROP以後,其他主機無法通過ssh服務連接這臺主機。

技術分享圖片技術分享圖片

"iptables -t filter -A INPUT -j REJECT"。"-A"表示在最後添加一個策略,該策略是拒絕所有數據。如下圖所示,client主機無法連接,請求被拒絕。

技術分享圖片技術分享圖片

"iptables -t filter -I INPUT 1 -i lo -j ACCEPT"。"-I"表示插入,插在後面數字之前,該策略表示本機的數據可以通過,如下圖所示,本機可以通過ssh連接本機,但是其他主機不行。

技術分享圖片技術分享圖片技術分享圖片

"iptables -t filter -I INPUT 2 -s 172.25.254.102 -p tcp --dport 22 -j ACCEPT"。這條策略表示,172.25.254.102的主機的數據可以通過本機的22號端口,22號端口是sshd服務的端口。

技術分享圖片

"iptables -t filter -I INPUT 3 -p tcp --dport 80 -j ACCEPT"。這條策略表示80號端口的數據都可以通過。

技術分享圖片

"iptables -t filter -D INPUT 3"。刪除第3條策略。

技術分享圖片

"iptables -t filter -D INPUNT -p tcp --dport 80 -j ACCEPT"。也可以通過後面的條件來刪除策略。

技術分享圖片

"iptables -t filter -R INPUT 2 -s 172.25.254.102 -p tcp --dport 22 -j REJECT"。"-R"表示改變策略,將之前設置的策略中的"ACCEPT"改為"REJECT"。

技術分享圖片

"iptables -t filter -N WE"。添加一個"WE"鏈。

技術分享圖片

"iptables -t filter -E WE REDHAT"。改變自定義鏈的名稱,需註意,只有自定義鏈可以改變名稱。

技術分享圖片

"iptables -x REDHAT"。刪除自定義的鏈。

技術分享圖片

2、策略舉例

數據包進入後讀取策略是從上到下逐條讀取,如果有很多的策略,一個數據包再次進入顯然會因為讀取策略占用較長的時間,所以可以設置策略,數據包第一次進入需要讀取是否允許進入的策略,再次進入則直接通過。以此為例簡要介紹策略應用。

如下圖所示,因為策略讀取是逐條的,所以將再次進入的策略寫在第一個可以大大縮短讀取時間。第一條輸入"iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT",這條策略表示再次進入的數據包直接通過。然後添加"iptables -t filter -A INPUT -m state --state NEW -i lo -j ACCEPT",該條策略表示本機的數據都可以直接通過。在後面就可以添加圖中所示的首次進入的數據包的各種策略了。

技術分享圖片技術分享圖片

這就是策略的一個簡單的應用。

但是,需要註意的是,在設置的策略中,ftp的策略是特殊的,因為ftp的被動模式在連接時會隨機開啟一個大於1024的端口,端口不固定,所以策略也有所不同。

技術分享圖片

具體步驟如下:

編輯ftp的配置文件"/etc/vsftpd/vsftpd.conf",在其中輸入"pasv_max_port=1025"和"pasv_min_port=1025",即將端口固定在1025上,也可以是大於1024的其他端口。重啟服務後輸入"iptables -t filter -I INPUT 3 -p tcp --dport 1025 -j ACCEPT"添加通過這個端口的策略。完成配置後就可以使用ftp了。

技術分享圖片技術分享圖片技術分享圖片

3、路由策略

現有3臺主機,分別是一臺有兩個卡的主機server,IP分別為"172.25.254.202"、"172.25.2.202",一臺client的主機IP為"172.25.2.102",網關是"172.25.2.202",一臺主機的IP為"172.25.254.2"。

技術分享圖片技術分享圖片

"2"網段的client主機現在想通過ssh連接"254"網段的主機,在不做任何配置的情況下,這是不可能的。先在可以以server主機為路由器,配置iptablse,使得可以實現。

技術分享圖片

在server主機上的配置如下:

a、"sysctl -a | grep forward"。通過這個命令查看內核路由功能"net.ipv4.ip_forward"是否開啟,0為關閉,1為開啟。

技術分享圖片

b、"vim /etc/sysctl.conf"。如果沒有開啟,編輯這個文件,在其中寫入"net.ipv4.ip_forward = 1"。完成後輸入"sysctl -p"加載。

技術分享圖片技術分享圖片

c、"iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.102"。添加策略,使得所有通過eth0網卡的數據包封裝為"172.25.254.102"的數據包。

技術分享圖片

完成上述策略後,"2"網段的client主機就可以連接到"172.25.254.2"的主機了。

技術分享圖片技術分享圖片

但是,因為數據包是封裝過的,在"172.25.254.2"的主機上只能看到連接的是"172.25.254.202"的主機,並不知道有client主機的存在。這時候可以在server主機上加入策略,使得"172.25.254.2"的主機連接看到的IP時,直接連到"2"網段的主機client上。使得server主機完成路由的功能。

技術分享圖片

在server主機上加入策略"iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-dest 172.25.2.102"。加入後"172.25.254.2"的主機連接server主機就會自動連接到"2"網段的client主機上了。

技術分享圖片

技術分享圖片

以上只是iptables的一些命令和應用,如果讀者有興趣也可以研究。

linux初學者-iptables篇