iptables設定

其實這是突然想到要補上的文章,因之前搞這也搞了一陣子,想說記錄下來方便健忘的我查詢。

其實網路上有很多前輩寫好得範本,我只是拿過來修改一下?讓他合乎我的使用方式罷了。不多說,下面就是我的設定方式。

  1. 先列出iptables目前的 table 的規則,若有設定且需要保留,請先記錄下來。
     sudo iptables -L 
  2. 在/home/user下面開一個資料夾,取名叫iptables(要不要開這資料夾都可以)。
     mkdir iptables   
  3. 然後建立iptables.sh的檔案,將所有設定放進來。
     cd iptables
    vim iptables.sh
  4. 設定檔如下
    iptables -F
    iptables -X
    iptables -Z
    

    -F:清除所有的已訂定的規則
    -X:殺掉所有使用者 自訂 的 chain(應該說的是 tables)
    -Z:將所有的 chain 的計數與流量統計都歸零

    iptables -P INPUT   DROP
    iptables -P OUTPUT  ACCEPT
    iptables -P FORWARD ACCEPT
    


    -P:定義政策( Policy ),設定連入的全部擋住,連外全部開放

    INPUT:主要與想要進入我們 Linux 本機的封包有關
    OUTPUT:主要與我們 Linux 本機所要送出的封包有關
    FORWARD:(可不設)這與 Linux 本機比較沒有關係, 他可以『轉遞封包』到後端的電腦中,與nat table 相關性較高。

    #eth0/ppp0
    iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A INPUT -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT#localhost
    iptables -A INPUT -i lo -j ACCEPT
    
    #intranet
    iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j ACCEPT
    

    -A:新增加一條規則,該規則增加在原本規則的最後面。
    -i:封包所進入的那個網路介面,例如 eth0, lo 等介面。需與 INPUT 鏈配合。
    -o:封包所傳出的那個網路介面,需與 OUTPUT 鏈配合。
    -j:後面接動作,主要的動作有接受(ACCEPT)、丟棄(DROP)、拒絕(REJECT)及記錄(LOG)
    -m:一些 iptables 的外掛模組,主要常見的有:

    state:狀態模組。
    mac:網路卡硬體位址 (hardware address)。
    –state:一些封包的狀態,主要有:
    INVALID:無效的封包,例如資料破損的封包狀態。
    ESTABLISHED:已經連線成功的連線狀態。
    NEW:想要新建立連線的封包狀態。
    RELATED :這個最常用!表示這個封包是與我們主機發送出去的封包有關

    針對 eth0 這張網卡、localhost、ppp0 (撥號連線)、區域網路,設定主動發出去的回應都予放行。

    #ssh
    iptables -A INPUT -i ppp0 -p tcp --dport xx -j ACCEPT
    
    #webmin
    iptables -A INPUT -i ppp0 -p tcp --dport xx -j ACCEPT
    
    #Apache2
    iptables -A INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT
    
    #Proftpd
    iptables -A INPUT -i ppp0 -p tcp --dport 21 -j ACCEPT
    #iptables -A OUTPUT -o ppp0 -p tcp --dport 20 -j ACCEPT
    iptables -A INPUT -m multiport -p tcp --dport 49152:65534 -j ACCEPT
    
    #noip2
    iptables -A OUTPUT -o ppp0 -p tcp --dport 8245 -j ACCEPT
    


    –sport 埠口範圍:限制來源的埠口號碼,埠口號碼可以是連續的,例如 1024:65535

    –dport 埠口範圍:限制目標的埠口號碼。

    針對需要的程式開放,一般來說常用的就是apache的port:80,ftp的port:21,ssh的port:22。如果有另外變更port的,就不是以上的port了,要自行將port置換。上面打xx的部份就是我置換的port,所以用xx代替。完整的設定如下:

    #!/bin/bash
    iptables -F
    iptables -X
    iptables -Z
    iptables -P INPUT   DROP
    iptables -P OUTPUT  ACCEPT
    iptables -P FORWARD ACCEPT
    
    #eth0/ppp0
    iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A INPUT -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT
    
    #localhost
    iptables -A INPUT -i lo -j ACCEPT
    
    #intranet
    iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j ACCEPT
    
    #ssh
    iptables -A INPUT -i ppp0 -p tcp --dport xx -j ACCEPT
    
    #webmin
    iptables -A INPUT -i ppp0 -p tcp --dport xx -j ACCEPT
    
    #Apache2
    iptables -A INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT
    
    #Proftpd
    iptables -A INPUT -i ppp0 -p tcp --dport 21 -j ACCEPT
    #iptables -A OUTPUT -o ppp0 -p tcp --dport 20 -j ACCEPT
    iptables -A INPUT -m multiport -p tcp --dport 49152:65534 -j ACCEPT
    
    #noip2
    iptables -A OUTPUT -o ppp0 -p tcp --dport 8245 -j ACCEPT
    

    輸入完畢後,將iptables.sh存檔。

  5. 將iptables.sh權限修改為755,並將檔案建立捷徑到init.d下面
    chmod 755 iptables.sh
    sudo ln -s /home/user/iptables/iptables.sh /etc/init.d/iptables.sh
    
  6. 加入啟動指令。
    sudo update-rc.d -f iptables.sh defaults
    
  7. 重開機後,輸入
     sudo iptables -L 

    確認iptables已完成設定、啟動成功。有的話,應該會看到這樣的畫面。

要記得,設定iptables時,最好是在主機前面或附近,不然一但設定錯誤,就會被檔在外面。

—–2015/5/21更新—–

因為把server移到Dray Tek Vigor 2925後面,所以撥接的任務就是交給他了,所以開放的對口就不是ppp0了,因此做了更新。

另外,因為LSB(Linux標準規範, Linux Standard Base),當初設定有做修正。

#!/bin/bash
### BEGIN INIT INFO
# Provides: iptables.sh
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: iptables
### END INIT INFO

iptables -F
iptables -X
iptables -Z
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

#eth0/ppp0
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
#iptables -A INPUT -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

#localhost
iptables -A INPUT -i lo -j ACCEPT

#intranet
iptables -A INPUT -i eth0 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -i eth1 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -i bond0 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -i eth2 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -i eth3 -s 192.168.1.0/24 -j ACCEPT

#ssh
iptables -A INPUT -i eth0 -p tcp --dport xx -j ACCEPT

#webmin
iptables -A INPUT -i eth0 -p tcp --dport xx -j ACCEPT

#Apache2
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT

#https
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

#Proftpd
iptables -A INPUT -i eth0 -p tcp --dport xx -j ACCEPT
#iptables -A OUTPUT -o eth0 -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -m multiport -p tcp --dport xxxx:xxxx -j ACCEPT

#noip2
#iptables -A OUTPUT -o eth0 -p tcp --dport xx -j ACCEPT

#xrdp
iptables -A INPUT -i eth0 -p tcp --dport xx -j ACCEPT

#Subsonic
iptables -A INPUT -i eth0 -p tcp --dport xx -j ACCEPT

#plex media server
#iptables -A INPUT -i eth0 -p tcp --dport xx -j ACCEPT

#Deluge WebUI
#iptables -A INPUT -i eth0 -p tcp --dport xx -j ACCEPT

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料