一、iptables filter表小案例linux
具體操做以下,輸入命令 vi /usr/local/sbin/iptables.sh ,回車,見下圖,vim
輸入以下的內容:bash
#! /bin/bash網絡
ipt="/usr/sbin/iptables"tcp
$ipt -F測試
$ipt -P INPUT DROP命令行
$ipt -P OUTPUT ACCEPTrest
$ipt -P FORWARD ACCEPTblog
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -i ACCEPTip
$ipt -A INPUT -s 192.168.218.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT
這邊的IP地址要注意,輸入本身機子上的IP,跟着前面PPT的截圖操做的話,遠程鏈接就會斷開,須要回到虛擬機上從新接受,才能夠繼續使用遠程登陸。
保存後退出。而後使用 vim 命令登陸進入,vim 命令自帶顏色顯示,看起來比較清楚。輸入 vim /usr/local/sbin/iptables.sh ,回車,見下圖,
上圖中,ipt 定義了一個變量,變量要寫絕對路徑,這樣纔不會被環境變量所影響。而後使用 -F 命令清空規則,-P 是定義默認的策略,-A 增長規則。這邊用腳本執行命令,就是由於第一條命令會使遠程鏈接斷開,因此不能一條一條的執行命令。腳本後面纔會說到,這邊先用一下。
w 命令能夠看到使用狀況,接着使用命令 iptables -nvL 查看,見下圖,
幾個增長的規則都能看到,而後重啓服務,見下圖,
接着在Windows上查看網絡可不能夠鏈接,見下圖
能看到,網絡是能夠鏈接的。接着在 PuTTY 上輸入命令 iptables -I INPUT -p icmp --icmp-type 8 -j DROP ,回車,見下圖,
操做完畢,能夠看到網絡是能夠鏈接外網的,接着在 Windows 上操做,見下圖,
能夠看到,網絡不能鏈接。
以上就是 icmp 的做用。
二、iptables nat 表應用
上圖的操做,說白了就是要作一個路由器,路由器能夠上網,電腦就能夠上網。
先操做一下前期準備,打開虛擬機,將兩個Linux窗口打開,而後分別拍一張快照,命名爲「iptables 小實驗前」。此舉是方便實驗過程出現不可挽回的錯誤,能夠經過快照恢復,而後從新作實驗。lyslinux-02 是以前克隆的虛擬機。
右擊上圖紅色框框 「編輯虛擬機設置」 的位置 ,跳出彈框,選擇「添加」,網絡適配器,下一步,見下圖,
保持默認,點擊「完成」,見下圖,
接着按下圖箭頭指示操做,見下圖,
這邊選擇「LAN 區段」,至關於給這個網卡連到了一個內網的交換機上,Windows機器和這個交換機是連不上的。這樣的話,這臺機器和另外一臺的機器連上同一個內網的交換機,它們二者之間就能夠通訊了。
接着在「LAN 區段」上選擇剛剛設置的區段,見下圖,
這個機器的網卡就添加好了。
接着操做另外一臺機器的網卡,右擊上圖紅色框框 lyslinux-02 的位置 ,選擇「設置」,跳出彈框,選擇「添加」,網絡適配器,下一步,見下圖,
操做完畢,點擊「完成」,見下圖,
而後往下操做,選擇「網絡適配器2」,在「LAN 區段」這邊選擇剛剛設置的 LYS ,再點擊「肯定」,見下圖,
以上操做就是爲了讓這兩臺機器,選擇同一個交換機。
準備工做作好了,下面就是啓動這兩臺機器。啓動完成以後,使用 PuTTY 遠程登陸lyslinux-01,輸入命令 ifconfig ,回車,見下圖,
上圖紅色框框的內容,就是剛剛增長的網卡,如今要給 ens37 這個網卡配置一個 IP。咱們能夠經過命令行給 ens37 添加 IP ,也能夠設置配置文件,設置配置文件和設置虛擬網卡的步驟是同樣的。將 ens33 的網卡配置文件複製一份到 ens37 裏面,而後進入配置文件修改 IP、NETMASK 就能夠,不用設置 DNS 和網關這些。更改配置文件的方式比較複雜,這邊演示比較簡單的方法,輸入命令 ifconfig ens37 192.168.100.1/24 ,回車,見下圖,
能夠看到,成功的給網卡 ens37 配置了 IP 。固然這個 IP 一重啓就會失效,要想 IP 永久生效,就須要編輯配置文件。
對於另外一臺機器,由於剛剛把網絡鏈接關閉了,沒法遠程登陸,因此要回到虛擬機上操做,見下圖,
使用 ifconfig 命令還能夠看到 ens33 這個網卡的 IP,它雖然在,但仍是不能鏈接網絡的,爲了保險起見,使用命令 ifdown ens33 來關閉掉,見下圖,
這樣就看不到 ens33 的 IP 了。一樣的方法,如今給這臺機器的 ens37 網卡設置 IP,見下圖,
IP 設置成功。如今來測試一下,鏈接一下lyslinux-01 這臺機器的網絡,輸入命令 ping 192.168.100.1 ,回車,見下圖,
上圖顯示網絡沒有鏈接成功,應該是 lyslinux-01 這臺機器的網絡有點問題,回到 PuTTY 上查看一下,見下圖,
發現 ens37 的IP地址又不見了,這時候要從新給它配置 IP ,見下圖,
而後再回到虛擬機上去鏈接網絡,見下圖,
能夠看到網絡鏈接成功了。
接着去 lyslinux-01 這臺機器上鍊接 lyslinux-02的網絡,輸入命令 ping 192.168.100.100 ,回車,見下圖,
也能夠鏈接網絡了。
如今總結一下,這個nat表應用的準備工做:
01機器兩塊網卡 ens33(192.168.218.128)、ens37(192.168.100.1),ens33 能夠上外網,ens37僅僅是內部網絡,02機器只有ens37(192.168.100.100),和01機器ens37能夠通訊互聯。
如今來檢查一下,Windows 的 cmd 能不能鏈接這兩個 IP,見下圖,
能夠看到,都是不能鏈接的。如今來看一下 lyslinux-02 機器不能鏈接 192.168.218.128,也不能鏈接 192.168.218.1 ,也不能上外網,見下圖,
能夠看到也都是不行的。
爲了實現需求1:可讓02機器鏈接外網。
在01機器上操做,這個文件 /proc/sys/net/ipv4/ip_forward 裏面的內容,默認是 0,表示它沒有開啓內核轉發,須要改爲 1 。打開路由轉發,輸入命令 echo "1">/proc/sys/net/ipv4/ip_forward ,回車,便可將文件更改成 1 。見下圖,
以上操做叫作打開端口轉發。
接着在01機器上增長一條規則,執行命令 iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE ,回車,見下圖,
有了這條規則,才能夠實現 192.168.100.0 這個網段上網。
接下來在02機器上設置網關爲 192.168.100.1 ,輸入命令 route add default gw 192.168.100.1,回車,見下圖,
設置完成後,也能夠實現鏈接 192.168.218.1 這個網卡。這意味02機器能夠跟外網相通了。
接着設置一下 DNS,看看能不能聯網,輸入命令 vi /etc/resolv.conf ,回車,見下圖,
輸入上圖紅色框框的內容,保存後退出。119.29.29.29 是公共的 DNS,而後來看一下能不能鏈接,見下圖,
發現是能夠鏈接的,也能夠鏈接外網。
到這邊,咱們的目的就達到了,讓02機器也能夠鏈接外網。如今在Windows上面使用cmd來查看一下,見下圖,
發現Windows仍是不能鏈接 192.168.100.100 。這邊能夠將01機器理解爲路由器,02機器是手機、電腦等能夠聯網的機器。
需求2:03機器只能和01機器通訊,讓03機器能夠直接連通02機器的22端口。這步操做叫 端口映射。
目前爲止,02機器還只能在虛擬機上操做,不能遠程登陸。如今來實現02機器的遠程登陸,01機器上打開路由轉發,一樣的, echo "1">/proc/sys/net/ipv4/ip_forward 這個命令上面已經操縱過,因此這一步省略。接着往下操做,咱們須要把以前的規則刪除掉,以避免影響到後面的操做,輸入命令 iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE ,回車,見下圖,
接着在01機器上增長兩條規則,執行命令 iptables -t nat -A PREROUTING -d 192.168.218.128 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22,回車。這個命令作一個端口轉發,將目標IP 192.168.218.128 和端口 1122,轉到IP 192.168.100.100 和端口 22,這邊操做的是進去的包。還有一個回來的包,執行命令 iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.218.128 ,回車。這個命令將原IP 192.168.100.100 改爲目標IP 192.168.218.128 。見下圖,
以上操做完成以後,還須要在02機器上設置網關爲 192.168.100.1,這一步前面也操做過了,這邊也能夠省略。
以上操做完成以後,就能夠通訊了。如今來驗證一下,新建一個PuTTY回話窗口,具體操做見下圖,
做爲測試的窗口,其餘地方就不作設置了。接着打開新的PuTTY窗口 test100,見下圖,
這邊選擇「是(Y)」,接着登陸上去,查看IP,見下圖,
能夠看到ens37的IP是 192.168.100.100 ,接着看看能不能鏈接外網,見下圖,
此時的Windows仍是不能鏈接 192.168.100.100 ,見下圖,
三、iptables 規則備份和恢復
正常狀況下,使用命令 service iptables save ,會把規則保存到 iptables 的配置文件中 /etc/sysconfig/iptables 。若是不想保存在配置文件中,可使用重定向命令,將規則重定向到一個文件中,文件名能夠隨意命名。見下圖,輸入命令 iptables-save > /tmp/ipt.txt ,回車,
上面保存成功以後,能夠看到nat表裏面纔有規則,filter表裏面是空的。
先將規則清除掉,輸入命令 iptables -t nat -F,回車,見下圖,
恢復剛纔的備份,使用命令 iptables-restore < /tmp/ipt.txt ,restore 和 save 正好是相反的。
要想重啓系統以後,就能立刻加載規則,最好仍是把規則保存在配置文件 /etc/sysconfig/iptables 中。