TCP/IP模型:html
應用層===傳輸層===網絡層===數據鏈裏層===物理層node
數據封裝:mysql
MAC幀頭+IP報頭+TCP/UDP報頭===HTTP請求web
數據幀sql
TCP/UDP報頭:vim
隨機產生一個大於1024的端口服務器
目的端口:80網絡
IP報頭:tcp
源IP地址函數
目的IP地址
MAC幀頭:
源MAC地址
目的MAC地址
做用:標識不一樣應用程序
數字:0---65535,小於1024端口爲著名端口
經常使用端口:
http tcp/80 https tcp/443 SSH tcp/22 telnet tcp/23 ftp tcp/21(命令鏈接),tcp/20(數據鏈接) mysql tcp/3306 smtp tcp/25 pop3 tcp/110 dns tcp/53,udp/53 dhcp udp/67(服務端),udp/68(客戶端) SAMBA tcp/139,tcp/445,udp/137.udp/138 ntp udp/123 zabbix tcp/10050(agent),tcp/10051(server)
ARP-----Address Resolution Protocol 地址解析協議
做用:根據已知的IP地址獲取對應的MAC地址
做用:
進行數據過濾:入方向,出方向,轉發穿過服務器的
爲數據打標記
網絡地址轉換
Linux防火牆
內核集成的模塊netfilter
iptables工具:實現添加,刪除,修改,查看防火牆規則
鉤子函數,用來鉤數據的
input:處理進來的數據
output:處理出去的數據
forward:處理轉發的數據
prerouting:截獲路由前的操做,數據處理沒進網卡前
postrouting:截獲路由後的操做,數據處理完了,從網卡流出去後
五條鏈
存規則的:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING
iptables四表:
filter(實現實現數據過濾):INPUT,OUTPUT,FORWARD
nat (實現實現網絡地址轉換,換ip的):PREROUTING,OUTPUT,POSTROUTING
mangle(爲數據打標記):INPUT,FORWARD,OUTPUT,PREROUTING,POSTROUTING
raw(數據跟蹤的)PREROUTING,OUTPUT
# iptales <command> <chain> <rule>
命令command
查看類:
-L:顯示指定表中得規則
-n:以數字的格式顯示IP及端口號
-v:顯示規則相關的詳細信息
-x:顯示計數器顯示精確的數字
--line-numbers:顯示規則的號碼
-t:<table>:指定表名,默認爲filter表
# iptables -nL --line-numbers -v
1)添加規則
-A:追加一條規則,添加到鏈的尾部
-I CHAI【number】:插入一條規則,插入爲CHAIN的第number條;number不寫表示插入到第一條。-I INPUT
2)刪除規則
-D CHAIN【number】:刪除指定鏈的第number條規則
3)修改規則
-R CHAIN【number】:替換指定的規則
4)清空全部規則
-F CHAIN
5)修改鏈的默認規則
-P CHAIN <處理方法>
1)源IP地址
-s address
! -s 192.168.1.1
-s 192.168.1.0/24
2)目的IP地址
-d address
!-d 10.1.1.1
-d 10.1.1.0/24
3)協議
-p tcp -sport port1[:port2]
-p tcp --dport port1[:port2]
-p udp --sport port1[:port2]
-p udp --dport port1[:port2]
-p icmp
--icmp-type 8 echo-request
--icmp-type 0 echo-reply
4)匹配數據包進行的網卡接口
-i eth0
5)匹配數據包流出的網卡接口
-o eth1
數據包的處理行爲 -j target
ACCEPT 容許
REJECT 拒絕
DROP 丟棄
LOG 記錄日誌
先堵後通
主機IP是192.168.150.163d
實例1:容許客戶端訪問SSH服務 -P(修改某一條鏈的默認規則)
[root@node1 ~]# iptables -P INPUT DROP
[root@node1 ~]# iptables -P OUTPUT DROP
[root@node1 ~]# iptables -P FORWARD DROP
[root@node1 ~]# iptables -A INPUT -s 192.168.122.1 -d 192.168.122.135 -p tcp --dport 22 -j ACCEPT
[root@node1 ~]# iptables -A OUTPUT -s 192.168.122.135 -d 192.168.122.1 -p tcp --sport 22 -j ACCEPT
實例2:容許全部客戶端訪問web服務器
[root@node1 ~]# iptables -I INPUT -d 192.168.122.135 -p tcp --dport 80 -j ACCEPT
[root@node1 ~]# iptables -I OUTPUT -s 192.168.122.135 -p tcp --sport 80 -j ACCEPT
實例3:容許客戶端10.1.2.101 ping服務器
[root@node1 ~]# iptables -A INPUT -s 192.168.122.1 -d 192.168.122.135 -p icmp --icmp-type 8 -j ACCEPT
[root@node1 ~]# iptables -A OUTPUT -s 192.168.122.135 -d 192.168.122.1 -p icmp --icmp-type 0 -j ACCEPT
實例4:容許服務器ping其餘主機
[root@node1 ~]# iptables -A OUTPUT -s 192.168.122.135 -p icmp --icmp-type 8 -j ACCEPT
[root@node1 ~]# iptables -A INPUT -d 192.168.122.1 -p icmp --icmp-type 0 -j ACCEPT
實例5:容許服務器ping本機
[root@node1~]# iptables -A INPUT -i lo -j ACCEPT
[root@node1~]# iptables -A OUTPUT -o lo ACCEPT
實例6:容許DNS服務器解析全部主機名
[root@node1~]# iptables -A INPUT -d 192.168.122.135 -p udp --dport 53 -j ACCEPT
[root@node1~]# iptables -A OUTPUT -s 192.168.122.135 -p udp --sport 53 -j ACCEPT
[root@node1~]# iptables -A INPUT -s 192.168.122.135 -p udp --dport 53 -j ACCEPT
[root@node1~]# iptables -A INPUT -d 192.168.122.135 -p udp --sport 53 -j ACCEPT
[root@node1~]# iptables -A INPUT -d 192.168.122.135 -p tcp --dport 53 -j ACCEPT
[root@node1~]# iptables -A OUTPUT -s 192.168.122.135 -p tcp -sport 53 -j ACCEPT
[root@node1~]# iptables -A INPUT -s 192.168.122.135 -p tcp --dport 53 -j ACCEPT
[root@node1~]# iptables -A OUTPUT -d 192.168.122.135 -p tcp --sport 53 -j ACCEPT
保存防火牆規則
Centos 6:
[root@node1~]# service iptables save
iptables:將防火牆規則保存到 /etc/sysconfig/iptables: [肯定]
Centos 7:
[root@node1~]# iptables-save > /iptables.rule
恢復規則
[root@node1~]# iptables-restore < /iptables.rule
實例7:刪除規則
[root@node1~]# iptables -D INPUT 3
實例8:修改規則
[root@node1~]# iptables -R INPUT 7 -d 192.168.122.135 -p icmp --icmp-type 0 -j ACCEPT
一、multiport 離散多端口
-m multiport
--sports port1,port2,port3
--dports port1,port2,port3
[root@node01 ~]# iptables -I INPUT -s 192.168.122.1 -d 192.168.122.135 -p tcp -m multiport --dports 80,139,445,22 -j ACCEPT
二、iprange
-m iprange
--src-range IP1[-IP2] 連續寫多個連續的源ip
--dst-range IP1[-IP2] 連續寫多個連續的目的ip
[root@node01 ~]# iptables -A INPUT -m iprange --src-range 192.168.1.1-192.168.1.10 -d 192.168.122.135 -p tcp --dport 80 -j ACCEPT
常說的加入白名單
三、state 狀態,用鏈接的狀態進行數據過濾
-m state --state <狀態> 決定什麼樣狀態接收,什麼樣狀態拒絕,像ftp根據端口放行就很麻煩,使用-m state --state模塊就簡單不少
state狀態:
NEW狀態
針對某個服務的首次訪問
ESTABLISHED狀態
一、某服務的後續全部訪問狀態
二、表示服務器的響應數據
RELATED狀態
相關聯的鏈接,給ftp用的。好比ftp服務器,只有命令鏈接完成,才能進行創建數據鏈接
ftp兩種工做模式
主動鏈接:
20/tcp:數據鏈接
21/tcp:命令鏈接
當客戶端向服務端經過21端口創建命令鏈接,命令鏈接就是傳輸命令的,像get,put等,命令鏈接建立好後會經過20號端口主動向客戶端創建數據鏈接
被動鏈接:
當客戶端訪問ftp服務器時候,經過21號端口創建命令鏈接後,ftp服務器會在本地隨機產生一個大於1024的隨機端口,完了告訴客戶端,客戶端在經過那個隨機端口創建數據鏈接
INVALID狀態
無效的鏈接
一、就不用每條都寫OUTPUT的規則了,有一條ESTABLISHED就能所有能出去(響應)OUTPUT
[root@node01 ~]# iptables -I OUTPUT -s 192.168.122.135 -m state --state ESTABLISHED -j ACCEPT
二、保證首次訪問和後續的全部訪問均可以正常
[root@node01 ~]# iptables -I INPUT -d 192.168.122.135 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
[root@node01 ~]# iptables -I INPUT -d 192.168.122.135 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
實例:容許ftp服務的訪問
首先要卸載ip_nat_ftp和ip_conntrack_ftp
[root@node01 ~]# yum install -y iptables-services
# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"
# systemctl restart iptables
[root@node01 ~]# iptables -I INPUT -d 192.168.122.135 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
[root@node01 ~]# iptables -I INPUT 2 -d 192.168.122.135 -m state --state RELATED,ESTABLISHED -j ACCEPT