其實這是突然想到要補上的文章,因之前搞這也搞了一陣子,想說記錄下來方便健忘的我查詢。
其實網路上有很多前輩寫好得範本,我只是拿過來修改一下?讓他合乎我的使用方式罷了。不多說,下面就是我的設定方式。
- 先列出iptables目前的 table 的規則,若有設定且需要保留,請先記錄下來。
sudo iptables -L
- 在/home/user下面開一個資料夾,取名叫iptables(要不要開這資料夾都可以)。
mkdir iptables
- 然後建立iptables.sh的檔案,將所有設定放進來。
cd iptables vim iptables.sh
- 設定檔如下
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存檔。
- 將iptables.sh權限修改為755,並將檔案建立捷徑到init.d下面
chmod 755 iptables.sh sudo ln -s /home/user/iptables/iptables.sh /etc/init.d/iptables.sh
- 加入啟動指令。
sudo update-rc.d -f iptables.sh defaults
- 重開機後,輸入
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