關於iptables的配置,參見官方資料:http://wiki.ubuntu.org.cn/IptablesHowTo 最好。html
進入iptablesweb
# sudo iptables -L
列出目前的ip策略. 若是您剛剛配置好服務器,您是沒有設置ip規則的,您要本身設置。ubuntu
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
使用命令centos
# sudo iptables -L
查看現有的iptables防火牆規則。若是您剛架設好服務器,那麼規則表應該是空的,您將看到以下內容安全
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
We can allow established sessions to receive traffic:bash
可使用下面的命令,容許已創建的鏈接接收數據:服務器
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
lllsession
You could start by blocking traffic, but you might be working over SSH, where you would need to allow SSH before blocking everything else.app
To allow incoming traffic on port 22 (traditionally used by SSH), you could tell iptables to allow all TCP traffic on port 22 of your network adapter.ssh
剛開始時您不妨阻斷全部通訊,但考慮到您未來可能要使用SSH,那麼您要讓iptables在使用默認規則丟棄報文以前,容許SSH報文經過。
要開放端口22(SSH的默認端口),您要告訴iptables容許接受到的全部目標端口爲22的TCP報文經過。
# iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT
Specifically, this appends (-A) to the table INPUT the rule that any traffic to the interface (-i) eth0 on the destination port for ssh that iptables should jump (-j), or perform the action, ACCEPT.
執行上面的命令,一條規則會被追加到INPUT規則表的末尾(-A表示追加)。根據這條規則,對全部從接口eth0(-i指出對經過哪一個接口的報文運用此規則)接收到的目標端口爲22的報文,iptables要執行ACCEPT行動(-j指明當報文與規則相匹配時應採起的行動)。
Lets check the rules: (only the first few lines shown, you will see more)
咱們來看看規則表中的狀況:(這裏只列出了開始的幾行,您應該會看到更多內容)
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
Now, let's allow all web traffic
如今咱們開放端口80:
# iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT
Checking our rules, we have
此時的規則表中的內容以下:
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ACCEPT tcp -- anywhere anywhere tcp dpt:www
We have specifically allowed tcp traffic to the ssh and web ports, but as we have not blocked anything, all traffic can still come in.
經過上述命令,咱們已經代開了SSH和web服務的相應的端口,但因爲沒有阻斷任何通訊,所以全部的報文都能經過。
ubuntu iptables 配置腳本
#!/bin/bash case "$1" in start) echo -n "Staring to write your Iptbales:..." /sbin/iptables -F /sbin/iptables -X /sbin/iptables -Z /sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP /sbin/iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT /sbin/iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT /sbin/iptables -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT /sbin/iptables -P INPUT DROP echo "OK" ;; stop) echo -n "Stop iptables...." /sbin/iptables -P INPUT ACCEPT /sbin/iptables -F /sbin/iptables -X /sbin/iptables -Z echo "OK" ;; *) echo "Usage: $0 {start|stop}" ;; esac
參見:http://www.netingcn.com/ubuntu-iptables-config.html
阿里雲服務器上使用iptables設置安全策略
公司的產品一直運行在雲服務器上,從而有幸接觸過aws的ec2,盛大的雲服務器,最近準備有使用阿里雲的彈性計算(雲服務器)。前兩種雲服務器在安全策略這塊作的比較好,提供簡單明瞭的配置界面,並且給了默認的安全策略,反觀阿里雲服務器,安全策略須要本身去配置,甚至centos機器上都沒有預裝iptables(起碼咱們申請兩臺上都沒有),算好可使用yum來安裝,安裝命令以下:
yum install -y iptables
iptables安裝好後就能夠來配置規則了。因爲做爲web服務器來使用,因此對外要開放 80 端口,另外確定要經過ssh進行服務器管理,22 端口也要對外開放,固然最好是把ssh服務的默認端口改掉,在公網上會有不少人試圖破解密碼的,若是修改端口,記得要把該端口對外開發,不然連不上就悲劇了。下面提供配置規則的詳細說明:
第一步:清空全部規則 當Chain INPUT (policy DROP)時執行/sbin/iptables -F後,你將和服務器斷開鏈接 全部在清空全部規則前把policy DROP該爲INPUT,防止悲劇發生,當心當心再當心 /sbin/iptables -P INPUT ACCEPT 清空全部規則 /sbin/iptables -F /sbin/iptables -X 計數器置0 /sbin/iptables -Z 第二步:設置規則 容許來自於lo接口的數據包,若是沒有此規則,你將不能經過127.0.0.1訪問本地服務,例如ping 127.0.0.1 /sbin/iptables -A INPUT -i lo -j ACCEPT 開放TCP協議22端口,以便能ssh,若是你是在有固定ip的場所,可使用 -s 來限定客戶端的ip /sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT 開放TCP協議80端口供web服務 /sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT 10.241.121.15是另一臺服務器的內網ip,因爲之間有通訊,接受全部來自10.241.121.15的TCP請求 /sbin/iptables -A INPUT -p tcp -s 10.241.121.15 -j ACCEPT 接受ping /sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT 這條規則參看:http://www.netingcn.com/iptables-localhost-not-access-internet.html /sbin/iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT 屏蔽上述規則覺得的全部請求,不可缺乏,不然防火牆沒有任何過濾的功能 /sbin/iptables -P INPUT DROP 可使用 iptables -L -n 查看規則是否生效
至此防火牆就算配置好,可是這是臨時的,當重啓iptables或重啓機器,上述配置就會被清空,要想永久生效,還須要以下操做:
/etc/init.d/iptables save 或 service iptables save 執行上述命令能夠在文件 /etc/sysconfig/iptables 中看到配置
如下提供一個乾淨的配置腳本:
/sbin/iptables -P INPUT ACCEPT /sbin/iptables -F /sbin/iptables -X /sbin/iptables -Z /sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT /sbin/iptables -A INPUT -p tcp -s 10.241.121.15 -j ACCEPT /sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT /sbin/iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT /sbin/iptables -P INPUT DROP
最後執行 service iptables save ,先確保ssh鏈接沒有問題,防止規則錯誤,致使沒法連上服務器,由於沒有save,重啓服務器規則都失效,不然就只有去機房才能修改規則了。也能夠參考:ubuntu iptables 配置腳本來寫一個腳本。
最後再次提醒,在清空規則以前必定要當心,確保Chain INPUT (policy ACCEPT)。