Linux下的iptables詳解及配置mysql
一.防火牆簡介web
可以確保信息安全的一種設備,設備上有一些特定的規則,容許或拒絕數據包經過。經過防火牆能夠隔離風險區域與安全區域的鏈接,同時不會妨礙風險區域的訪問。固然須要注意的是世界上沒有絕對的安全,防火牆也只是啓到必定的安全防禦。大多數的安全風險仍是在內網當中!sql
二.防火牆分類安全
(1)軟件防火牆:件防火牆須要運行在特定的計算機上,並且須要計算機的操做系統的支持。網絡
(2)硬件防火牆:硬件防火牆其實就是一個普通pc機的架構,而後上面跑有專門的操做系統。架構
(3)芯片級防火牆:這種防火牆基於專門的硬件平臺,沒有操做系統,專有的ASIC芯片使它們比其餘類的防火牆速度更快,處理能力極強,性能更高,可是價格昂貴。ssh
三.Iptables簡介tcp
(1)用戶空間:由管理員制定規則(netfilter組件)ide
(2)內核空間:規則會題交給內核空間,內核就按照這些規則去過濾數據包。(iptables組件)oop
四.Iptables的表和鏈
(1)filter 默認的,可以實現數據包的過濾,該表還包含三條鏈:
@1.INPUT:到達本機的數據包
@2.OUTPUT:從本機出去的數據包
@3.FORWARD:通過本機的數據包
(2)nat 網絡地址轉換,
SNAT 源地址轉換
DNAT 目的地址轉換
PANT跟SNAT 差很少,不同的是SNAT的源地址是固定的,而PNAT的源地址是不固定的,當使用ppp或pppoe的方式鏈接互聯網的時候通常適應這個
(3)mangle 打標記,表主要是修改數據包頭部信息的
@1.PREROUTING鏈,
在數據包進入防火牆以後,也稱爲路由前,
@2.POSTROUTING鏈,
在數據包肯定目標地址後,也稱爲路由後,
@3.OUTPUT鏈
從本機出去的時間包路由前
@4.INPUT鏈
數據包進入本機後,路由後
@5.FORWARD鏈
第一次路由判斷以後,最後一次路由判斷以前改變數據包
五.Iptables的狀態
1.NEW狀態
NEW狀態的數據包說明這個數據包是收到的第一個數據包。
2.ESTABLISHED狀態
只要發送並接到應答,一個數據包的狀態就從NEW變爲ESTABLEISHED,並且該狀態會繼續匹配這個鏈接後繼數據包。
3.RELATED狀態
當一個數據包的狀態處於ESTABLSHED狀態的鏈接有關係的時候,就會被認爲是RELATED,也就是說一個連接想要是RELATED狀態,首先要有一個ESTABLISHED的鏈接。
4.INVALID狀態
不能被識別屬於哪一個鏈接狀態或沒有任何關係的狀態,通常這中數據包要被拒絕的。
六.Iptables的命令使用
1.命令:
-A 順序添加,添加一條新規則
-I 插入,插入一條新規則 -I 後面加一數字表示插入到哪行
-R 修改, 刪除一條新規則 -D 後面加一數字表示刪除哪行
-D 刪除,刪除一條新規則 -D 後面加一數字表示刪除哪行
-N 新建一個鏈
-X 刪除一個自定義鏈,刪除以前要保證次鏈是空的,並且沒有被引用
-L 查看
@1.iptables -L -n 以數字的方式顯示
@2. iptables -L -v顯示詳細信息
@3. iptables -L -x 顯示精確信息
-E 重命名鏈
-F 清空鏈中的全部規則
-Z 清除鏈中使用的規則
-P 設置默認規則
2.匹配條件:
隱含匹配:
-p tcp udp icmp
--sport指定源端口
--dport指定目標端
-s 源地址
-d 目的地址
-i 數據包進入的網卡
-o 數據包出口的網卡
擴展匹配:
-m state --state 匹配狀態的
-m mutiport --source-port 端口匹配 ,指定一組端口
-m limit --limit 3/minute 每三分種一次
-m limit --limit-burst 5 只匹配5個數據包
-m string --string --algo bm|kmp --string"xxxx" 匹配字符串
-mtime--timestart 8:00 --timestop 12:00 表示從哪一個時間到哪一個時間段
-mtime--days 表示那天
-m mac --mac-sourcexx:xx:xx:xx:xx:xx 匹配源MAC地址
-m layer7 --l7proto qq 表示匹配騰訊qq的 固然也支持不少協議,這個默認是沒有的,須要咱們給內核打補丁並從新編譯內核及iptables纔可使用 -m layer7 這個顯示擴展匹配
3.動做:
-j
DROP 直接丟掉
ACCEPT 容許經過
REJECT 丟掉,可是回覆信息
LOG --log-prefix"說明信息,本身隨便定義" ,記錄日誌
SNAT 源地址轉換
DNAT 目標地址轉換
REDIRECT 重定向
MASQUERAED 地址假裝
六.具體實例
1.常見服務的端口號及協議
ssh tcp 22
dhcp udp 67 68
DNS tcp/udp 53
http tcp 80
samba udp 137 138 tcp 139 445
nfs 2049 111 /etc/sysconfig/nfs
ftp tcp 20 21 >1024
squid tcp 3128
mysql tcp 3306
smtp 25
pop3 110
imap 143
2.應用實例
(1)開啓22端口.
[root@tx1 ~]# service iptables start
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: filter [ OK ]
Unloading iptables modules: [ OK ]
[root@tx1 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@tx1 ~]# iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT(若是OUTPUT鏈默認爲DROP這條就必定要加上,如下相同)
只開放一我的的遠程鏈接:
[root@tx1 ~]# iptables -A INPUT -p tcp --dport 22 -s 192.168.8.71 -j ACCEPT
(2)若是咱們只開設了web服務
[root@tx1 ~]# iptables -P INPUT DROP #咱們用-P來攔截主機上全部通信
[root@tx1 ~]#iptables -A INPUT -p tcp --dport 80 -j ACCEPT#打開80端口的tcp協議
[root@tx1 ~]# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:http
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@tx1 ~]# /etc/init.d/iptables save
Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
(3)不容許ping
[root@tx1 ~]# iptables -A INPUT -p icmp -j DROP
(4)刪除3號規則
[root@tx1 ~]# iptables -L --line-number
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.8.71 anywhere tcp dpt:ssh
2 DROP icmp -- anywhere anywhere
3 ACCEPT tcp -- 192.168.8.71 anywhere tcp dpt:ssh
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@tx1 ~]# iptables -D INPUT 3
[root@tx1 ~]# iptables -L --line-number
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.8.71 anywhere tcp dpt:ssh
2 DROP icmp -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
(5)防止廣播包進入局域網:
[root@tx1 ~]# iptables -A INPUT -s 255.255.255.255 -i eth0 -j DROP
[root@tx1 ~]# iptables -A INPUT -s 224.0.0.0/224.0.0.0 -i eth0 -j DROP
[root@tx1 ~]# iptables -A INPUT -d 0.0.0.0 -i eth0 -j DROP
(6)修改第3條規則:
[root@tx1 ~]# iptables -R INPUT 3 -s 192.168.8.72 -j ACCEPT
(7)在第3條規則上面插入一條新的規則:
[root@tx1 ~]# iptables -I INPUT 3 -s 192.168.8.73 -j ACCEPT
(8)把ping的信息定向到日誌:
[root@tx1 ~]# iptables -A INPUT -p icmp -s 172.16.13.13 -j LOG
[root@tx1 ~]# tail -0f /var/log/messages
(9)連續端口的寫法:25:110
iptables -A INPUT -p tcp --dport 25:110 -j ACCEPT
(10)容許loopback!(否則會致使DNS沒法正常關閉等問題)
[root@tx1 ~]# iptables -A INPUT -i lo -p all -j ACCEPT
[root@tx1 ~]# iptables -A OUTPUT -o lo -p all -j ACCEPT(output鏈爲DROP的狀況下)
(11)減小不安去的端口鏈接
有些些特洛伊***會掃描端口31337到31340(即***語言中的 elite 端口)上的服務。既然合法服務都不使用這些非標準端口來通訊,因此拒絕這些端口的鏈接是有必要的
[root@tx1 ~]# iptables -A OUTPUT -p tcp --sport 31337:31338 -j DROP
[root@tx1 ~]# iptables -A OUTPUT -p tcp --sport 31339:31340 -j DROP
3.FORWARD鏈實例(要開啓轉發功能,有兩塊網卡)
注:在作NAT時,FORWARD默認規則是DROP時,必須要作的:
[root@tx1 ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@tx1 ~]# iptables -A FORWARD -i eth1 -o eh0 -j ACCEP
(1)丟棄壞的TCP包
[root@tx1 ~]# iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
(2)處理IP碎片數量,防止***,容許每秒100個
[root@tx1 ~]# iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
(3)設置ICMP包過濾,容許每秒1個包,限制觸發條件是10個包.
[root@tx1 ~]# iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
[root@tp rc.d]# iptables -t nat -L
若是你想清除,命令是
[root@tx1 ~]# iptables -F -t nat
[root@tx1 ~]# iptables -X -t nat
[root@tx1 ~]# iptables -Z -t nat
(4)添加規則
[root@tx1 ~]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
[root@tx1 ~]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
[root@tx1 ~]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
(5)禁用FTP(21)端口
[root@tx1 ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP
(6)拒絕非法鏈接
[root@tx1 ~]# iptables -A INPUT -m state --state INVALID -j DROP
[root@tx1 ~]# iptables -A OUTPUT -m state --state INVALID -j DROP
[root@tx1 ~]# iptables -A FORWARD -m state --state INVALID -j DROP
(7)接收已經創建的鏈接
[root@tx1 ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@tx1 ~]# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
注:本文部份內容爲轉載