iptables學習筆記

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.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章