netfilter //netfilter是防火牆的名字,工具的名字叫iptables。
#Netfilter與iptables的關係
#我們常聽說Linux防火牆叫做“iptables”,其實這樣的稱呼並不是很正確,什麼是iptables呢?
Netfilter所需要的規則是存放在內存中的,但問題是防火牆管理人員該如何將規則存放到內存呢?
因此,防火牆管理人員會需要一個規則編輯工具,通過這個工具來對內存中的規則執行添加、刪除
及修改等操作,這個工具就是iptables以及ip6tables,其中iptables是在IPV4網絡環境中使用,
而ip6tables是在IPV6網絡環境中使用,因此,Linux防火牆比較正確的名稱應該是Netfilter/iptables。
table--->chain //表-->鏈
iptables -t filter -nvL //查看filter表。
-t //-t選項去指定表,filter是防火牆三個表之一。
-nvL //查看錶的內容。
#filter下默認有三個chain:INPUT,OUTPUT,FORWARD.
iptables -t nat -nvL //查看nat表,nat是防火牆三個表之一。
#nat下默認有三個chain:PREROUTING,POSTROUTING,OUTPUT.
iptables -t mangle -nvL //查看mangle表,mangle是防火牆三個表之一。
#mangle下默認有五個chain:PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD.
filter //這個表用來過濾進出網卡的包。
iptables -t filter -I INPUT -p tcp --dport 80 -s 源IP -j ACCEPT
-I //-I類似於insert.(可以設置兩條同樣的規則。)
#增加規則後,從瀏覽器去訪問虛機地址,然後在虛機上用iptables -nvL去查看情況。
--dport //目的端口。(端口可以不指定。)
-j //如何處理這個包:DROP //不會去看,而是直接扔掉。 REJECT //研究一下這個包後,才拒絕。
ACCEPT //表示接受
iptables -nvL //在不用-t指定表的情況,默認就是filter表。
iptables -t filter -D INPUT -p tcp --dport 80 -s 源IP -j //清除這個規則。
-D //-D類似於delete.
iptables -t filter -A INPUT -p tcp --dport 80 -s 源IP -j //增加一條規則。
-A //-A類似於ADD.用-A選項,規則會增加到chain的最下層。用-I選項,規則會增加到chain的最下層。
#每一條chain中的規則像一條條柵欄,最上邊的柵欄先起作用。
技巧:用ip138.com查看自己的公網IP。
#關於規則生效問題,與ACL控制訪問列表相似,當第一條規則匹配到後,不去管後面的規則是如何規定的,不會出現規則相互矛盾的現象。
iptables -Z //把包的數據置零。默認爲filter,對別的表進行操作,需要加-t.
-Z //把規則裏關於包的記數置零。
iptables -F //把所有規則清空。默認爲filter,對別的表進行操作,需要加-t.
-F //把所有規則清空
service iptables restart //重啓防火牆。(之前插入的規則如果不保存,重啓iptables之後,會被清空。)
service iptables save //保存規則。規則會被寫到/etc/sysconfig/iptables
iptables-save >1.ipt //把規則備份到1.ipt裏去。
iptables -F ;iptables-restore < 1.ipt //清除規則之後,通過反向重定向把規則恢復。
iptables -F ;service iptables save //清除原有規則並保存。
iptables -t filter -I OUTPUT -d 192.168.31.105 -j DROP
-s //-s選項,引出源IP.
-d //-d選項,引出目標IP.
FORWARD鏈作用於與本機無關的包,即把包轉發到別的主機。
nat表用於網絡地址轉換。
PREROUTING //作用於要到達防火牆的包,把目標IP由公網IP轉換爲私網IP.
POSTROUTING //作用於包在從防火牆出去的時候,把包的源IP由私網IP轉換爲公網IP.
OUTPUT //改變本地產生的包的目標IP.
mangle表 //用於給包打標記,然後根據這些標記去做一些操作。
PREROUTING
POSTROUTING
OUTPUT
INPUT
FORWARD
#對於系統工程師來說,filter表和它的INPUT鏈是最重要的,可以把帶有不可信源IP的包擋住防火牆外面。
iptables -P INPUT ACCEPT //用iptables -nvL去查看 ,會發現INPUT (policy 後的策略變爲ACCEPT.)
#另外,不要輕易去設置DROP,因爲一旦設置了DROP,那麼SSH的22端口也是不通的。如果設置了DROP,只能去
機房或通過帶外管理界面去補救。
-P //即策略,設置的策略相當於鏈的總開關。EG:如果設置爲ACCEPT(默認),即所有的包都是允許通過狀態。可以增加規則去限制不想要的包。
如果設置爲DROP,即所有的包都是丟棄狀態。可以增加規則去匹配想要的包。
iptables -nvL --line-numbers //先顯示規則序號。
iptables -D INPUT/OUTPUT 序號 //之後用這條命令,就可以刪除該序號所對應的規則了
EG:INPUT DROP; 192.168.0.0/24 22 accept;all 80 accpet;all 21 accept;
vim 12.ipt.sh //通過腳本去添加規則
#!/bin/bash
ipt="iptables" //因爲iptables要使用多次,所以設置成變量。
$ipt -F //每次執行這腳本,都會增加新的規則。 爲了防止和之前的規則混淆,先把之前的規則清空,然後再添加新的規則。可以執行多次。
$ipt -P INPUT DROP //儘量不要去設置DROP,測試時改爲ACCEPT去測試。
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -A INPUT -s 192.168.31.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -s 192.168.0.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
$ipt -A INPUT -p tcp --dport 22 -j DROP //剩下的IP全部DROP掉。
# $是對之前定義的變量進行引用的。
執行腳本時,出現以下報錯信息。
[root@sunlocalhost ~]# sh !$
sh 12.ipt.sh
Bad argument `22'
Try `iptables -h' or 'iptables --help' for more information.
Bad argument `80'
Try `iptables -h' or 'iptables --help' for more information.
Bad argument `21'
Try `iptables -h' or 'iptables --help' for more information.
造成這個報錯的原因,是因爲我把--dport寫成-dport.