iptables的基礎操做

iptables的基礎操做

1、查看防火牆操做

iptables -L -n #這裏沒有加-t指定表,因此默認就是查看filter表。這裏-L後面沒有跟鏈名稱,因此默認就是查看filter表上的全部鏈設置。加-n的做用前面已經說了,通常是配合使用的web

iptables -L INPUT -n #這裏就是隻查看filter表的INPUT鏈的規則。通常若是是指常規的防火牆設置,不會再別的表上面定義鏈的。服務器

#iptables -L -n -t nat #這裏就是用-t指定表名,查看nat表上面的全部鏈設置。併發

#iptables -L -n -v #用-v顯示更詳細的信息,會顯示數據包啊,數據量啊等。ssh

#iptables -V #查看iptables的版本tcp

#iptables -L -n --line-numbe #顯示規則的序列號,方便咱們刪除和插入ide

#iptables -S #打印默認filter表中的全部鏈規則,# iptables -S -t nat 就是打印nat表的全部鏈規則了。測試

#iptables -S INPUT #打印INPUT鏈的規則,這個-S的目的主要是若是你不是想將添加的全部規則都保存起來的話,能夠用這種方式打印出規則,而後本身手工將規則粘貼到配置文件裏面去。命令行

#service iptables status #查看防火牆的狀態,若是是存活狀態就會把全部的表和全部的鏈都顯示出來ip

#cat /etc/sysconfig/iptables #這是iptables的配置文件,設置的規則若是想要重啓依舊有效的話,就要執行# iptables-save>/etc/sysconfig/iptables,或者#service iptables save 就會保存到此文件中。web服務器

2、清空防火牆設置

#iptables -F #這步咱們通常在初始設置iptables的時候設置,若是是雲主機什麼的在線機器要慎重操做,由於若是限制了IP的SSH鏈接,一清空全部設置的規則,會致使鏈接斷開。清空指定表的規則。

#iptables -X #刪除指定表中的自定義規則鏈,默認是filter表,若是要清空別的表的自定義規則鏈用-t指定表名。通常也不會涉及到這步操做。

#iptables -Z #這個是將全部表的全部鏈的字節和數據包計數器清零。通常也是緊跟着iptables -F作的一步操做。

3、禁ping設置:

#iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP #-p 指定icmp協議,--icmp-type 8是Echo request——回顯請求(Ping請求),也能夠理解爲0爲響應報文,8爲請求報文,-s 0/0是指定原地址爲0.0.0.0/0,-j DROP 是不給予應答

#iptables -A INPUT -p icmp --icmp-type echo-request -s 0/0 -j DROP #這樣也能夠,跟上面同樣,只不過是把8變爲了echo-request

#echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all #固然這種臨時生效的方法也能夠,#echo net.ipv4.icmp_echo_ignore_all=1 >>/etc/sysctl.conf 這是永久生效的方法

容許某個IP可以ping咱們的主機:

#iptables -I INPUT -p icmp --icmp-type 8 -s 192.168.1.102 -j ACCEPT #這裏主要注意這個-I,這是在規則的上面添加也就是添加到禁止全部IPping咱們主機規則的上方,不能用-A。由於防火牆匹配規則是自上而下的過程,若是用-A添加到尾部的話,當匹配到禁止全部的主機ping本主機的規則後,其餘的容許ping的規則也就不生效了。-j ACCEPT就是容許經過的意思

4、刪除一條規則

#iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT #好比我添加了這樣一條規則,我如今想刪除這條規則。

#iptables -D INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT #這是一種方法,-D後面跟鏈名稱,而後是咱們的匹配條件以及處理結果

#iptables -L -n --line-number #先來查看,發現上面添加的規則在INPUT鏈的序列號爲4的位置。固然也能夠用# iptables -L -n --line。

#iptables -D INPUT 4 #顯然這種-D後面指定規則鏈名稱,而後指定規則所在的序列號,刪除的方式更好一點

指定序列號添加:

#iptables -I INPUT 2 -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT #這樣就能夠將咱們的這條規則插入到INPUT鏈的序列號爲2的位置

指定序列號修改(這裏最好是全命令的替換,用到的模塊少還好,若是用到了不少其餘模塊,若是這裏只是填寫了須要替換的內容,而不須要替換的內容沒有填寫的話,哪些不該該被替換的規則也會變爲空。因此替換不只要將替換後的內容寫上,哪些不須要替換的也要寫上,要全規則命令行。):

#iptables -R INPUT 2 -j DROP #這裏就是指定將序列號爲2的規則,所在的位置爲INPUT鏈,-R就是替換,-j DROP就是要改變成的內容

#iptables -R INPUT 2 -s 192.168.1.0/32 -j ACCEPT #經過和上面兩個例子能夠看出,就是讓咱們從新指定的規則或者處理方法去替換舊的規則或者內容

5、稍微正規點的iptables設置

上面已經說過了iptables的增刪改查,咱們主要的仍是用到的通常是禁止全部的INPUT,可是在此規則之上會放開咱們指定的INPUT規則進來,嚴格點的話OUTPUT規則也會作限制

#cat /etc/sysconfig/iptables #我這裏就是對icmp的請求作了限制,對INPUT和OUTPUT的請求也作了嚴格的限制
#ptables-save v1.4.7 on Wed Jan 13 00:12:06 2016
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
-A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp -s 192.168.1.0/24 --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp -s 192.168.1.2/32,192.168.1.3/32 --dport 873 -j ACCEPT
-A INPUT -p tcp -m tcp -s 192.168.1.4/32 --dport 5666 -j ACCEPT
-A INPUT -p udp -m udp -s 192.168.1.5/32 --dport 161 -j ACCEPT
-A INPUT -p tcp -m tcp -s 192.168.1.6 --dport 111 -j ACCEPT
-A INPUT -p udp -m udp -s 192.168.1.6 --dport 111 -j ACCEPT
-A INPUT -p tcp -m tcp -s 192.168.1.7 --dport 30001:30004 -j ACCEPT
-A INPUT -p udp -m udp -s 192.168.1.7 --dport 30001:30004 -j ACCEPT
-A INPUT -p udp -m udp --dport 123 -j ACCEPT
-A INPUT -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -p tcp -m tcp -m state --sport 53 --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p icmp -s 192.168.1.0/24 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j DROP
-A INPUT -p tcp -m tcp --dport 873 -j DROP
-A INPUT -p tcp -m tcp --dport 80 -j DROP
-A INPUT -p tcp -m tcp --dport 3306 -j DROP
-A INPUT -p tcp -m tcp --dport 5666 -j DROP
-A INPUT -p tcp -m tcp --dport 143 -j DROP
-A INPUT -p udp -m udp --dport 161 -j DROP
-A OUTPUT -p tcp -m tcp -d 192.168.1.0/24 --sport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 25 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 110 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 143 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A OUTPUT -p udp -m udp --sport 161 -j ACCEPT
-A OUTPUT -p tcp -m tcp -d 192.168.1.4/32 --sport 5666 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 873 -j ACCEPT
-A OUTPUT -p udp -m udp --sport 123 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -d 192.168.1.0/24 -p tcp -m tcp --sport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp -d 192.168.1.6 --sport 111 -j ACCEPT
-A OUTPUT -p udp -m udp -d 192.168.1.6 --sport 111 -j ACCEPT
-A OUTPUT -p tcp -m tcp -d 192.168.1.7 --sport 30001:30004 -j ACCEPT
-A OUTPUT -p udp -m udp -d 192.168.1.7 --sport 30001:30004 -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -p tcp -m tcp -j DROP
-A OUTPUT -p udp -m udp -j DROP
COMMIT

#從上面的規則能夠看出,咱們基本用到的就是 -p 後面跟tcp或者udp協議,而後就是--sport源端口或者--dport目的端口,還有就是 -s 源IP,-d目的IP,而後IP是能夠指定IP段,多IP或者多段的話用逗號隔開,多端口也是用逗號隔開,連續端口範圍的話用:來指定。而後就是 -m 後面就是跟咱們各類模塊了,可是若是不是用到多端口指定模塊啊等等的一些其餘的複雜點的設置也不用加-m。

6、 練習iptables規則配置命令

1 ssh的設置

一般咱們對ssh的限制仍是比較嚴格的,通常機器只會對跳板機或者個別的機器進行ssh開放,通常不會對幾個段之類的開放,若是對IP段作設置的話在交換機上面進行ACL的設置會好一點
iptables -A INPUT -s 192.168.1.102 -p tcp --dport 22 -j ACCEPT #咱們先設置讓咱們的電腦可以鏈接此服務器
iptables -A INPUT -j DROP #而後咱們將全部的INPUT請求都給禁止掉
iptables -A OUTPUT -d 192.168.1.102 -p tcp --sport 22 -j ACCEPT
iptables -A OUTPUT -j DROP #若是還要精細的話應該某個端口的DROP信息直接在某個端口的ACCEPT下方,
這樣能快速的匹配到拒毫不能規則自上而下過濾一遍,可是通常設iptables的服務器併發並請求並不會那麼大,如多是比較重要的管理機等,
因此這樣設置通常就能夠了。

#cat /etc/sysconfig/iptables #查看一下配置文件,文件中多了新添加的兩行規則命令
如今測試的話,會發現只有192.168.1.102這個IP能能ssh到咱們這臺服務器了。

若是更好點的話,應該是將state狀態都加入進來。下面是修改的步驟:
iptables -R INPUT 1 -p tcp -s 192.168.1.102 -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -R OUTPUT 1 -p tcp -d 192.168.1.102 -m tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

2 對80和443端口作限制

有些web服務器咱們可能只須要公司內網訪問或者指定的一些服務器訪問,自己web軟件配置文件裏面能夠設置的,若是要保證文件統一性的話,仍是在iptables上面作設置好一點。這個序列號是有講究的,由於iptables是自上而下搜索,因此最經常使用的序列號要越小。

iptables -L -n --line-number #首先咱們要查看咱們設置的全部INPUT或者全部OUTPUT鏈在哪一個位置,咱們要將內容插在他們前面。
iptables -I INPUT 2 -p tcp -m iprange --src-range 192.168.1.102-192.168.1.109 -m multiport --destination-ports 80,443 -j ACCEPT
iptables -I OUTPUT 2 -p tcp -m iprange --dst-range 192.168.1.102-192.168.1.109 -m multiport --source-ports 80,443 -j ACCEPT

#上面就是加了一條INPUT和一條OUTPUT。
#首先用到了iprange模塊,它就兩個功能,--src-range指定源地址的IP範圍,--dst-range指定目標地址的IP範圍,這樣咱們若是指定多IP的時候,就不用寫多條了。
#multiport而後這個模塊是用來指定多端口,或者端口的範圍的,若是是逗號分開的多端口,最可能是支持15個的,
--destination-ports 80,443,1024:65535若是這樣就是目標端口除了80.443之外還有1024端口到65535
#這裏沒有用-m dports和sports是由於他們若是指定多端口的話,只能指定一個端口範圍,而不能指定多個分散的端口。

若是你不想指定IP的範圍,只是像指定單純的某幾個IP呢,顯然用iprange就不太合適了,用下面的方式:
iptables -I INPUT 2 -p tcp -s 192.168.1.102,192.168.1.109 -m multiport --dports 80,443 -j ACCEPT
iptables -I OUTPUT 2 -p tcp -d 192.168.1.102,192.168.1.109 -m multiport --sports 80,443 -j ACCEPT

#可是用 -s 這種加逗號指定IP的形式,寫入到配置文件中會把IP分開,每一條IP是一條內容。

3 關於NFS的防火牆設置
#NFS默認的一些mount端口等是隨機的,這裏對這些隨機端口進行了固定,將其固定爲30001-3004.

iptables -I INPUT 4 -p tcp --dport 111 -j ACCEPT
iptables -I INPUT 5 -s 127.0.0.1 -p udp --sport 111 -j ACCEPT
iptables -I INPUT 6 -s 127.0.0.1 -p udp --dport 111 -j ACCEPT
iptables -I OUTPUT 4 -p tcp --dport 111 -j ACCEPT
iptables -I OUTPUT 5 -d 127.0.0.1 -p udp --sport 111 -j ACCEPT
iptables -I OUTPUT 6 -d 127.0.0.1 -p udp --dport 111 -j ACCEPT
iptables -I INPUT 7 -s 192.168.1.109,192.168.1.112 -p tcp -m multiport --dports 2049,30001:30004 -j ACCEPT
iptables -I OUTPUT 7 -d 192.168.1.109,192.168.1.112 -p tcp -m multiport --sports 2049,30001:30004 -j ACCEPT

#固然關於127.0.0.1的開放,也沒有必要像上面似得那麼麻煩,直接用下面的方法:
iptables -I INPUT 6 -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -I OUTPUT 6 -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

#固然要以爲sport和dport還要寫兩條麻煩的話,能夠直接下面哪一種寫法:
iptables -I INPUT 5 -p udp -s 127.0.0.1 -d 127.0.0.1 -m multiport --ports 111 -j ACCEPT
iptables -I OUTPUT 5 -p udp -s 127.0.0.1 -d 127.0.0.1 -m multiport --ports 111 -j ACCEPT

#上面開放tcp的111端口是爲了讓其餘的服務器能夠訪問RPC的111端口,固然這裏也能夠指定IP進行限制。

#這裏爲了測試效果就制定了只容許哪兩個IP能夠訪問nfs並進行掛載,固然nfs配置文件裏面也能夠進行IP的限制。

相關文章
相關標籤/搜索