1. 程式人生 > >linux iptables常用命令之配置生產環境iptables及優化

linux iptables常用命令之配置生產環境iptables及優化

檢視當前配置:iptables -L

防火牆配置檔案:
vi /etc/sysconfig/iptables

開放80埠:
/*-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT經測試無效/

iptables -A INPUT -p tcp -s 0/0 --dport 8180 -j ACCEPT

重啟服務:
/etc/rc.d/init.d/iptables restart

啟動和停止服務分別用start、stop

chkconfig –level 2345 iptables off
service iptables stop不推薦關閉防火牆

1) 重啟後生效
開啟: chkconfig iptables on
關閉: chkconfig iptables off

2) 即時生效,重啟後失效
開啟: service iptables start
關閉: service iptables stop

  在瞭解iptables的詳細原理之前,我們先來看下如何使用iptables,以終為始,有可能會讓你對iptables瞭解更深

所以接下來我們以配置一個生產環境下的iptables為例來講講它的常用命令

第一步:清空當前的所有規則和計數

iptables -F  #清空所有的防火牆規則
iptables -X  #刪除使用者自定義的空鏈
iptables 
-Z #清空計數

第二步:配置允許ssh埠連線

iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT  #22為你的ssh埠, -s 192.168.1.0/24表示允許這個網段的機器來連線,其它網段的ip地址是登陸不了你的機器的。 -j ACCEPT表示接受這樣的請求

第三步:允許本地迴環地址可以正常使用

iptables -A INPUT -i lo -j ACCEPT  #本地圓環地址就是那個127.0.0.1,是本機上使用的,它進與出都設定為允許
iptables -A OUTPUT -o lo -j ACCEPT

第四步:設定預設的規則

(由於在生產上,我們設定預設的入與轉發都不允許,出的允許)

iptables -P INPUT DROP #配置預設的不讓進
iptables -P FORWARD DROP #預設的不允許轉發
iptables -P OUTPUT ACCEPT #預設的可以出去

第五步:配置白名單

iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT  #允許機房內網機器可以訪問
iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT  #允許機房內網機器可以訪問
iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT #允許183.121.3.7訪問本機的3380埠

第六步:開啟相應的服務埠

iptables -A INPUT -p tcp --dport 80 -j ACCEPT #開啟80埠,因為web對外都是這個埠
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT #允許被ping
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #已經建立的連線得讓它進來

第七步:儲存規則到配置檔案中

因為剛剛的所有的規則都還是在記憶體中的,如果重啟機器或者執行service iptables restart都會讓其它失效,所以我們要把它儲存在檔案中,讓它重啟的時候能夠被載入到。

複製程式碼
[root@zejin238 ~]# cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak #任何改動之前先備份,請保持這一優秀的習慣
[root@zejin238 ~]# iptables-save > /etc/sysconfig/iptables 
[root@zejin238 ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Wed Sep 28 18:06:07 2016
*filter
:INPUT DROP [8:632]  
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [4:416]
-A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -s 192.168.1.0/24 -j ACCEPT 
-A INPUT -s 192.168.140.0/24 -j ACCEPT 
-A INPUT -s 183.121.3.7/32 -p tcp -m tcp --dport 3380 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A OUTPUT -o lo -j ACCEPT 
COMMIT
# Completed on Wed Sep 28 18:06:07 2016
複製程式碼

至次,我們完成了生產環境iptables的配置

iptables檔案說明

前面四行

複製程式碼
*filter #代表接下來的配置都是在filter表上的。我們預設的配置都在filter表上的,當然還有其它表,如raw,mangle,nat

:INPUT DROP [8:632]   #代表filter表上預設的input chain為drop ,對應上面的命令iptables -P INPUT DROP,中括號裡面的兩個數字代表的是這條鏈上已經接受到的包的數量及位元組數量[包的數量:包的總位元組數]
:FORWARD DROP [0:0]   #代表filter表上預設的forward chain為drop ,對應上面的命令iptables -P FORWARD DROP,中括號裡面的兩個數字代表的是這條鏈上已經接受到的包的數量及位元組數量[包的數量:包的總位元組數]
:OUTPUT ACCEPT [4:416] #代表filter表上預設的forward chain為drop ,對應上面的命令iptables -P OUTPUT ACCEPT,中括號裡面的兩個數字代表的是這條鏈上已經接受到的包的數量及位元組數量[包的數量:包的總位元組數]
複製程式碼

接下來的部分到commit結束前,都是我們剛剛執行的配置命令

複製程式碼
-A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -s 192.168.1.0/24 -j ACCEPT 
-A INPUT -s 192.168.140.0/24 -j ACCEPT 
-A INPUT -s 183.121.3.7/32 -p tcp -m tcp --dport 3380 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A OUTPUT -o lo -j ACCEPT 
複製程式碼

input chain與output chain分開,其它的順序與我們配置時的順序一致。

iptables優化

當伺服器收到一條請求時,它會把iptables從上往下,一條條匹配定製的規則,那麼假如機器收到一個正常的web請求,要走80埠,它需要先去檢驗前面5條規則,發現都不符合,直到第六條滿足條件,那麼這樣的話防火牆的工作效率就低了很多。

所以我們優化的思路是:請求最頻繁的放在最上面,請求頻率較小的放在最後面。

我們此時可以直接去修改檔案:vi /etc/sysconfig/iptables

調整後順序大概為:

複製程式碼
# Generated by iptables-save v1.4.7 on Wed Sep 28 18:06:07 2016
*filter
:INPUT DROP [8:632]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [4:416]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 192.168.135.0/24 -j ACCEPT
-A INPUT -s 192.168.140.0/24 -j ACCEPT
-A INPUT -s 183.121.3.7/32 -p tcp -m tcp --dport 3380 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT
# Completed on Wed Sep 28 18:06:07 2016
複製程式碼

因為web伺服器,肯定是80埠訪問最頻繁,那為什麼不是放第一條呢?

在這裡,我們把已經有狀態的聯接放在第一條是因為在請求連線中,有很多都是在建立在已經聯接的基礎上通訊的,譬如有可能你第一次連線的3380埠,狀態是new,但在後續的聯接都為ESTABLISHED,第一條就可以匹配到了。

理解iptables格式

我們在上面的iptables檔案中,最開始接觸會發現格式蠻奇怪的,不知道什麼回事

其實iptables就是定義一些規則,滿足相應的規則則進行ACCEPT、DROP、REJECT、DNAT、SNAT......

那麼怎麼定義匹配規則:

通用匹配

  -s 指定源地址

  -d 指定目標地址

  -p 指定協議

  -i 指定資料報文流入介面

  -o 指定資料報文流出介面

擴充套件匹配

  指定-m選項,表示用什麼模組來匹配,如:

  -m state --state

           NEW,ESTABLISHED,RELATED  表示用state模組來匹配當前連線狀態為這三種狀態的連線

  -m iprange

       --src-range 用iprange模組匹配來源的ip地址範圍

       --dst-range 用iprange模組匹配目的的ip地址範圍

   -m multiport

        --source-ports  用multiport模組來匹配來源的埠範圍

        --destination-ports 用multiport模組來匹配目的的埠範圍

我們看如下一條例子來解讀:

-A INPUT -p tcp -m iprange --src-range 121.21.30.36-121.21.30.100 -m multiport --destination-ports 3326,3327,3328 -m state --state NEW -j ACCEPT

這表示來自121.21.30.36-121.21.30.100這個地址範圍的,請求埠為3326,3327,3328並且是新建的連線,都給予放行。

模組有很多,引數有很多,有些沒看過怎麼辦?

man iptables

轉自:

http://www.cnblogs.com/zejin2008/p/5917654.html

http://www.cnblogs.com/saptechnique/archive/2012/04/08/2437883.html