防火墻概念
防火墻的核心是資料報文過濾
網路模塊由內核實作,而過濾的實作必須在內核中,而用戶是 無法直接訪問內核,更別說把過濾規則放置到內核中,因此在TCP/IP協議堆疊上,選取了幾個不同的位置,開放給用戶空間的應用程式,該應用程式可以通過系統呼叫將規則發送到指定的內核位置,
作業流程:網口資料包由底層的網卡NIC接收,通過資料鏈路層的解包之后(去除資料鏈路幀頭),就進入了TCP/IP協議堆疊 (本質就是一個處理網路資料包的內核驅動)和Netfilter混合的資料包處理流程中了,資料包的接收、處理、轉發流程構成 一個有限狀態向量機,經過一些列的內核處理函式、以及Netfilter Hook點,最后被轉發、或者本次上層的應用程式消化 掉,
作業在主機或者網路的邊緣,對進出的資料報文進行檢查,監控,并且能夠根據事先定義的匹配條件和規則做出相應的動作的 組件,機制或者系統
防火墻分類
1. 從軟、硬體形式上分為軟體防火墻和硬體防火墻以及芯片級防火墻,
2.從防火墻技術分為 “包過濾型”和“應用代理型”兩大類,
3.從防火墻結構分為 < 單一主機防火墻、分布式防火路由器集成式防火墻和墻三種,
4. 按防火墻的應用部署位置分為 邊界防火墻、個人防火墻和混合防火墻三大類,
5. 按防火墻性能分為 百兆級防火墻和千兆級防火墻兩類,
常見的訪問控制包括:哪些ip可以訪問服務器、可以使用哪些協議、哪些介面,是否通過資料包進行修改等
防火墻的功能
1.可以保護易受攻擊服務;
2.控制內外網之間網路系統的訪問;
3.集中管理內網的安全性,降低管理成本;
4.提高網路的保密性和私有性;
5.記錄網路的使用狀態,為安全規劃和網路維護提供依據
包過濾防火墻
包過濾防火墻原理

包過濾防火墻的配置
第一,管理員必須明確企業網路的安全策略;
第二,必須用邏輯運算式清楚地表述數 據包的型別;
第三,必須用設備提供商可支持的語法重寫這些運算式,
包過濾防火墻分類
靜態包過濾防火墻:
利用靜態包過濾規則建立的防火墻叫靜態包過濾型防火墻
對于靜態包過濾防火墻來說,決定接識訓是拒絕一個資料包,取決于對資料包中IP頭和協 議頭等特定域的檢查和判定,這些特定域包括:
1)資料源地址;2)目的地址;3)應用或協議;4)源埠號; 5)目的 埠號,
主要實作3個主要功能
1、接收每個到達的資料包;
2、對資料包采用過濾規則,對資料包的IP頭和傳輸欄位內容進行檢 查,如果資料包的頭資訊與一組規則匹配,則根據該規則確定是轉發還是丟棄該資料包,
3、如果沒有規則與資料包頭資訊 匹配,則對資料包施加默認規則,默認規則可以丟棄或者接收所有資料包,默認丟棄資料包規則更加嚴格,而默認接收數 據包規則更加開放,通常,防火墻首先默認丟棄所有資料包,然后再逐個執行過濾規則,以加強對資料包的過濾,
靜態包過濾防火墻的安全性:
無法區分真實的IP地址和偽造的IP地址,即無法防御IP地址欺騙攻擊;由于靜態包過濾防 火墻僅檢查那些特定的協議頭資訊:1)源/目的IP地址;2)源/目的埠號(服務型別),因此黑客可能將惡意的命令或 資料隱藏在那些未經檢查的頭資訊中,即“隱信道攻擊”;缺少狀態感知能力:一些需要動態分配埠的服務需要防火墻 打開許多埠,即管理員必須為靜態包過濾規則打開所有的埠,因此增大了網路的安全性風險,
動態包過濾防火墻
動態包過濾防火墻是就是后來的包狀態監測(Stateful Inspection)技術,監控每一個連接,自動臨時增加適當的規則,

iptables
命令格式

-m:extend matches,這個選項用于提供更多的匹配引數,如:
- -A:新增一條規則,到該規則鏈串列的最后
- -I:插入一條規則,原本該位置上的規則會往后順序移動,沒有指定編號則為2
- -D:從規則鏈中洗掉一條規則,要么輸入完整的規則,或者指定規則編號加以洗掉
- -R:替換某條規則,規則替換不會改變順序,而且必須指定編號,
- -P:設定某條規則鏈的默認動作
- -nL:-L、-n,查看當前運行的防火墻規則串列
- -F : 清除所有規則
- [-i|o 網卡名稱]:i是指定資料包從哪塊網卡進入,o是指定資料包從哪塊網卡輸出
- [-p 協議型別]:可以指定規則應用的協議,包含tcp、udp和icmp等
- -p tcp --tcp-flags mask comp: 只檢查mask指定的標志位,是以逗號分隔的標志位串列;comp:此串列中出
- 現的標記位必須為1,comp中沒有出現,而mask中出現的必須為1(--tcp-flags SYN,FIN,ACK,RST SYN=--syn)
- [-s 源IP地址]:源主機的IP地址或子網地址
- [--sport 源埠號]:資料包的IP的源埠號
- [-d目標IP地址]:目標主機的IP地址或子網地址
- [--dport目標埠號]:資料包的IP的目標埠號
- -m state --state NEW ESTABLISHED,RELATED
-
#iptables -A INPUT -s 192.168.153.131 -p tcp --dport 22 -m state --state NEW -j DROP
-
ACCEPT(當前已經連接其他主機可以連接我當前主機,但是在開一個新的鏈接就不可以)
-
#iptables -I INPUT -p tcp -s 172.16.30.160 --dport 22 -j REJECT
-m tcp --dport 22
- -m multiport --dports 80,8080
iptables安裝
#yum install iptables-services
案例
1、搭建web服務,并且能夠訪問
#開放web服務埠
防火墻默認執行動作改為DROP
[root@localhost ~]# iptables -P INPUT DROP
[root@mail html]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
#列出規則表中的編號
#iptables -L --line-numbers
#洗掉剛剛添加的規則,并進行測驗
[root@mail html]# iptables -D INPUT 1
2、禁止所有人ssh遠程登陸該服務器
[root@mail html]# iptables -I INPUT -p tcp --dport 22 -s 192.168.24.0/24 -j REJECT
#洗掉剛剛添加的規則,并進行測驗
[root@mail html]# iptables -D INPUT 1
3、禁止某個主機地址ssh遠程登陸該服務器
#拒絕144主機訪問服務器的22埠
[root@mail ~]# iptables -I INPUT -p tcp -s 172.24.8.144 --dport 22 -j REJECT
#開啟服務器的web服務,并用144客戶端進行訪問
[root@mail html]# iptables -I INPUT -p tcp -s 192.168.171.144 --dport 80 -j ACCEPT
#查看所有規則
Iptables -t filter -P INPUT DROP
Iptables -A INPUT -s 172.16.30.128 -d 172.16.30.200 -p tcp --dport 22 -j ACCEPT
Netstat -lntup | grep 80 查看開放的埠
| [root@localhost ~]# iptables-save > /etc/sysconfig/iptables [root@localhost ~]# systemctl restart iptables.service [root@localhost ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination REJECT tcp -- 192.168.24.0/24 anywhere tcp dpt:ssh reject-with icmp-port-unreachable --------------------------------------------------------------------------------------------------------------------------- [root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -s 192.168.24.0/24 -j DROP [root@localhost ~]# iptables-save > /etc/sysconfig/iptables [root@localhost ~]# iptables [root@localhost ~]# iptables-restore < /etc/sysconfig/iptables [root@localhost ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP tcp -- 192.168.24.0/24 anywhere tcp dpt:ssh REJECT tcp -- 192.168.24.0/24 anywhere tcp dpt:ssh reject-with icmp-port-unreachable REJECT tcp -- 192.168.24.0/24 anywhere tcp dpt:ssh reject-with icmp-port-unreachable Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination |
練習
1、添加iptables規則禁止用戶訪問域名為www.baidu.com的網站
iptables -I FORWARD -d www.baidu.com -j DROP
2、添加iptables規則禁止用戶訪問ip地址為20.20.20.20的網站
iptables -I FORWARD -D 20.20.20.20 -j DROP
3、添加iptables規則禁止IP地址為192.168.171.144的客戶機上網
iptables -I FORWARD -s 192.168.171.144 -j DROP
4、添加iptables規則禁止192.168.171.0子網所有的客戶機上網
iptables -I FORWARD -s 192.168.171.0/24 -j DROP
5、禁止192.168.171.0子網所有客戶機使用ftp協議下載
iptables -I FORWARD -s 192.168.171.0/24 -p tcp --dport 21 -j DROP
6、禁止192.168.171.0子網所有客戶機使用telnet協議連接遠程計算機
iptables -I FORWARD -s 192.168.171.0/24 -p tcp --dport 23 -j DROP
7、強制所有的客戶機訪問192.168.171.1這臺web服務器
iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.171.1:80
將內網轉為公網將源地址轉為公網地址111.112.113.114
Iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth1 -j SNAT --to-source 111.112.113.114
8、禁止internat上的計算機通過ICMP協議ping到nat服務器的ppp0介面,但允許內網的客戶機通過ICMP協議ping通
iptables -I INPUT -i ppp0 -p icmp -j DROP
-i eth0:從這塊網卡流入的資料
流入一般用在INPUT和PREROUTING上
-o eth0:從這塊網卡流出的資料
流出一般在OUTPUT和POSTROUTING上
9、發布內網192.168.171.143主機的web服務,internet用戶通過訪問防火墻的IP地址即可訪問該主機的web服務
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.171.143:80
10、發布內網192.168.171.143主機的終端服務,internat用戶通過訪問防火墻的IP地址訪問該主機的終端服務
iptables -t nat -I PREROUTING -p tcp --dport 3389 -j DNAT --to-destination 192.168.171.143:3389
#開放常用的埠
iptables -A INPUT -p TCP --dport 80 -j ACCEPT
iptables -A INPUT -p TCP --sport 80 -j ACCEPT
iptables -A INPUT -p TCP --dport 25 -j ACCEPT
iptables -A INPUT -p TCP --sport 25 -j ACCEPT
iptables -A INPUT -p TCP --dport 110 -j ACCEPT
iptables -A INPUT -p TCP --sport 110 -j ACCEPT
iptables -A INPUT -p TCP --dport 143 -j ACCEPT
iptables -A INPUT -p TCP --sport 143 -j ACCEPT
#SSH
iptables -A INPUT -p TCP --dport 59687 -j ACCEPT
iptables -A INPUT -p TCP --dport 9900 -j ACCEPT
iptables -A INPUT -p UDP --sport 53 -j ACCEPT
iptables -A INPUT -p TCP --sport 53 -j ACCEPT
#antispam
iptables -A INPUT -p TCP --sport 6220 -j ACCEPT
iptables -A INPUT -p TCP --sport 6610 -j ACCEPT
iptables -A INPUT -p TCP --sport 6611 -j ACCEPT
#SSL
iptables -A INPUT -p TCP --dport 995 -j ACCEPT
iptables -A INPUT -p TCP --dport 993 -j ACCEPT
iptables -A INPUT -p TCP --dport 465 -j ACCEPT
iptables -A INPUT -p TCP --dport 443 -j ACCEPT
#NTP date
iptables -A INPUT -p UDP --sport 123 -j ACCEPT
#snmp
iptables -A INPUT -i eth0 -p udp -s 125.76.229.215 --dport 161 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s 60.195.249.83 --dport 161 -j ACCEPT
iptables -P FORWARD DROP
iptables -A INPUT -j REJECT
iptables -P OUTPUT ACCEPT
#防止同步包洪水(Sync Flood)
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
#防止各種埠掃描
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
#Ping洪水攻擊(Ping of Death)
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
#屏蔽 SYN_RECV 的連接
iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT
FirewallD 使用服務(service) 和區域(zone)來代替 iptables 的規則(rule)和鏈(chain),
firewalld的認識
1、firewalld提供了支持網路/防火墻區域(zone)定義網路鏈接以及介面安全等級的動態防火墻管理工具,
2、firewalld將網卡分為不同的區域(區域),這些區域的區別在于對待來訪的用戶及傳輸的資料包的默認動作的不同,通過制定一 些安全 策略從而保證系統在被訪問或傳輸資料時的安全,
/usr/lib/firewalld service ssh.xml

默認情況下,有以下的區域(zone)可用:
firewalld分為九個區域,含義如下:
trust(信任):可接受所有的網路連接;
home(家庭):用于家庭網路,僅接受ssh、mdns、ipp-client、samba-client或dhcpv6-client服務連接;
internal(內部):用于內網路,僅接受ssh、ipp-client、mdns、samba-client或dhcpv6-client服務連接;
work(作業區):用于作業區,僅接受ssh、ipp-client、dhcpv6-client服務連接;
public(公共):用于公共區域的使用,僅接受ssh、dhcpv6-client服務,為firewalld的默認區域;
external(外部區域):出去的ipv4的網路連接經過此區域的偽裝和轉發,只支持ssh服務;
dmz(隔離區):僅接受ssh服務;
block(限制):拒絕所有的網路服務;
drop(丟棄):任何訪問的網路資料包都會被丟棄,沒有任何回應,
預定義服務/添加埠
1 直接編輯組態檔/etc/firewalld/
2 使用firewall-config圖形工具
通過這個圖形工具,可以更改和檢查firewalld記憶體中的配置(Runtime),也可以修改磁盤上的持久配置(Permanent)
3 使用firewall-cmd命令
預定義服務
使用firewall-config來啟動圖形界面查看預定義服務,在有條件的情況下推薦使用
預定義服務可以通過查看firewalld.service(5)man手冊
也可以通過查看目錄了解更詳細,該目錄下面的禁止編輯
[root@localhost ~]# ls /usr/lib/firewalld/services/
也可以查看該目錄下的,該目錄下的可以編輯
[root@localhost ~]# ls /etc/firewalld/services/
#使用命令查看所有支持的服務
[root@localhost ~]# firewall-cmd --get-services
#添加服務
[root@mail ~]# firewall-cmd --add-service=http
#設定服務超時時間,即服務的開啟時間,單位秒
[root@mail ~]# firewall-cmd --add-service=http --timeout=10
熟練和習慣使用tab進行選項補全和引數補全
#啟用緊急模式(所有的 規則出入都拒絕)
[root@mail ~]# firewall-cmd --panic-on
#禁用緊急模式
[root@mail ~]# firewall-cmd --panic-off
#查詢緊急模式狀態
[root@mail ~]# firewall-cmd --query-panic
#查看當前區域
[root@mail ~]# firewall-cmd --get-default-zone
#查看所有支持的區域
[root@mail ~]# firewall-cmd --get-zones
#設定trusted區域為當前區域
[root@mail ~]# firewall-cmd --set-default-zone=trusted
#根據介面查詢區域
[root@mail ~]# firewall-cmd --get-zone-of-interface=eno16777736
#添加當前源地址
[root@mail ~]# firewall-cmd --add-source=192.168.171.1/24
#添加一個埠
[root@mail ~]# firewall-cmd --add-port=8080/tcp
#洗掉源地址
[root@mail ~]# firewall-cmd --remove-source=192.168.171.1/24
#洗掉埠
[root@mail ~]# firewall-cmd --remove-port=8080/tcp
#以上都為運行時生效
#永久生效
#添加規則
[root@mail ~]# firewall-cmd --permanent --add-service=http
#重新加載
[root@mail ~]# firewall-cmd --reload
#列出所支持的ICMP型別
[root@mail ~]# firewall-cmd --get-icmptypes
#列出所有區域的詳細資訊
[root@mail ~]# firewall-cmd --list-all-zones
#添加ssh服務進行測驗
[root@mail ~]# firewall-cmd --permanent --add-service=ssh
--add-source=目標ip
--remove-source=目標ip
--add-source=ip --zone=drop (指定不同區域對當前區域不生效)
#列出指定區域的規則
[root@mail ~]# firewall-cmd --zone=trusted --list-all
#啟用偽裝功能,但因為內核限制,只支持ipv4
[root@mail ~]# firewall-cmd --add-masquerade
#添加禁止icmp報文
[root@mail ~]# firewall-cmd --add-icmp-block=echo-request
永久模式不直接影響運行時狀態,只有在重啟服務或者多載時生效
運行模式,直接模式不保存規則,在多載或者重啟服務后必須再次提交,傳遞的引數和iptable一致
#添加一個串列
[root@mail ~]# firewall-cmd --direct permanent --add-chain ipv4 raw blacklist
#給串列添加一個規則
[root@mail ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING 0 -s 192.168.171.0/24 -j blacklist
#定義串列的動作
[root@mail ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 1 -j DROP
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/301922.html
標籤:其他
上一篇:一文弄懂 RPC 通信流程全程序
下一篇:使用Nmap檢測漏洞
