網絡環境配置
使用3個新的虛擬機【配置好軟件倉庫和網絡的】
F1
192.168.150.133
NAT
F2
192.168.150.134
192.168.10.20
NAT
HOST-ONLY ???網絡適配僅主機
F3
192.168.10.30
HOST-ONLY ???網絡適配僅主機
1?~]# hostnamectl hostname?double1.timinglee.org?????【更改虛擬機姓名】
[root@double2 ~]# hostnamectl hostname double2.timinglee.org
[root@double3?~]# hostnamectl hostname double3.timinglee.org
2 ~]# vmset.sh ens192 192.168.10.20????????【使用# ip a查看地址ens后面數字再更改】
3 ~]# vmset.sh ens160?192.168.10.30
# vim /etc/NetworkManager/system-connections/ens160.nmconnection?????【修改網關】
# nmcli connection reload????????????????【重啟】
# nmcli connection up ens160?????????????【啟動ens160】
# route -n???查看結果:
什么是防火墻
從功能角度來講
????????防火墻是位于內部網和外部網之間的屏障,它按照系統管理員預先定義好的規則來控制數據包的進出
從功能實現角度來講,
????????火墻是系統內核上的一個模塊netfilter(數據包過濾機制)
????????通過netfiler來管理kernelspace中的策略
netfilter簡介
????????Netfilter是Linux2.4.x引入的一個子系統
????????它作為一個通用的、抽象的框架,提供一整套的hook函數的管理機制,使得諸如數據包過濾、網絡地址轉換(NAT)和基于協議類型的連接跟蹤等等
????????netfilter分析OSI七層協議的2、3、4層
????????onetfiler可以直接分析數據包頭部數據,包括硬件地址,軟件地址、TCP、UDP、ICMP等數據包的信息都可以進行過濾分析
????????oInux的netfilter機制可以進行的工作有:
????????????????。拒絕讓Internet的數據包進入主機的某些端口
????????????????。拒絕讓某些來源ip的數據包進入
????????????????。拒絕讓帶有某些特殊標志(flag)數據包進入,最常拒絕的是帶SYN主動連接標志的包
????????????????。分析硬件地址(MAC)來決定連接與否
????????????????。地址轉換
????????防火墻并不能有效阻擋病毒或木馬程序,并且防火墻對于內部LAN的攻擊無能為力
netfiler策略管理工具
????????onetfilter這個內核網絡棧過濾框架的使用需要通過iptables或nftables來進行與netfilter進行交互工具常用種類
????????oiptables服務使用iptables交互RHEL6之前系統默認使用此服務,管理手段豐富,配置比較復雜
????????ofirewalld服務使用nftables交互RHEL6及之后的版本中默認使用此服務,配置類似windows火墻,功能模塊度高,使用簡單。
netfilter的五類hook函數及iptables的默認表和鏈
NF_IP_PRE_ROUTING【將要進入的】:位于路由之前,報文一致性檢查之后(報文一致性檢查包括:報文版本、報文長度和checksum
NF_IP_LOCAL_IN【進入主機的數據包】:位于報文經過路由之后,并且目的是本機的
NF_IP_FORWARD【經過的數據包】:位于在報文路由之后,目的地非本機的。
NF_IP_LOCAL_OUT【進入主機的數據包】:由本機發出去的報文,并且在路由之前。
NF_IP_POST_ROUTING【將要離開的】:所有即將離開本機的報文
內核空間的iptables
????????oIptables是基于Netfilter框架實現的報文選擇系統
????????oiptables用于報文的過濾、網絡地址轉換和報文修改等功能
????????oIptables本質上是包含了5個規則表,而規則表則包含了一些列的報文的匹配規則以及操作目標
1、raw表:
????????第一優先級的表,設置raw表規則后,不會對數據包進行鏈接跟蹤和NAT轉換,使用于
PREROUTING和OUTPUT鏈,對應的動作為NOTRACK。
2、mangle表:
????????第二優先級的表,根據規則,修改數據包的TOS(Typeofservice,服務類型)、TTL(TimeToLive,生存周期)以及設置Mark標記,以實現Qos以及策略路由等。
3、nat表:
????????第三優先級的表,網絡地址轉換表,用于修改源和目的的地址,分SNAT(源目的地址轉換)和DNAT(目的地址轉換)。
4、filter表:
????????第四優先級的表,用于控制到達鏈(forward鏈、input鏈、output鏈)上的數據包,是放行(accepte)、丟棄(drop)或者拒絕(reject)。
5、security表:
????????最不常用的表(通常,我們說iptables只有4張表,security表是新加入的特性),用于在數據包上應用SELinuxo
iptables服務
????????iptables服務是用戶管理內核空間的iptables的管理工具,通過iptables書寫內核空間的iptables策略。
????????iptables的規則是至上而下的讀取方式,遇到與數據包信息匹配的規則后直接采用。
????????iptables的規則默認保存在內存中,如果需要永久保存需要把策略以字符的形式保存 到/etc/sysconfig/iptables中。
啟動iptables 服務
2 ~]# dnf install iptables-nft-services.noarch -y ??????????【下載】
# systemctl disable --now firewalld??????????????????【開火墻】
# systemctl mask firewalld
# systemctl enable --now iptables.service
# iptables -L??????????????????【列出iptables表】
# iptables -F???????????????【刷新iptables表】
再次 # iptables -L?刷新結果:
# cat /etc/sysconfig/iptables?????????【查看iptables文件內容】
# service iptables save????????【保存當前火墻狀態】
# cat /etc/sysconfig/iptables???運行結果:
iptables命令參數
2 ~]# systemctl enable --now nginx
1/3 ~]# curl 192.168.(150/10).(134/20)可以訪問到F2了
????????-t ?對指定的表進行操作,table必須是raw,nat,filter,mangle中的一個。默認是filter表。
????????-p ?指定要匹配的數據包協議類型
????????-s ?--source?address/mask:把指定的一個或者一組地址作為源地址,按此規則進行過濾。當后面沒有mask時,address是一個地址,比如:192.168.1.1;當mask指定時,可以表示一組范圍內的地址,比如:192.168.1.0/255.255.255.0
????????-d ?--destination?address/mask:地址格式同上,但指定地址為目的地址,按此進行過濾
????????-i ?--in-interface?name:指定數據包的來自來自網絡接口,比如最常見的etho。注意:它只對INPUT,FORWARD,PREROUTING這三個鏈起作用。如果沒有指定此選項,說明可以來自任何一個網絡接口。同前面類似,"!"表示取反
2 ~]# iptables -A INPUT -i lo -j ACCEPT????【允許本機環回接口訪問】
????????-O??--out-interface?name:指定數據包出去的網絡接口。只對OUTPUT,FORWARD,POSTROUTNG三個鏈起作用
????????-L ?--list[chain]列出鏈chain上的所有規則,如果沒有指定鏈,列出表上所有鏈的所有規則
????????-A ?--append?chain?rule-specification:在指定鏈chain的末尾插入指定的規則,也就是說,這條規則會被放到最后,最后才會被執行。規則是由后面的匹配來指定INPUT【限制對方進來】 ??FORWARD ??OUTPUT【限制對方出去】
2 ~]# iptables -t filter -A INPUT -p tcp --dport 80 -s 192.168.150.133 -j REJECT
【不允許80接口被133訪問】
# iptables -t filter -A INPUT -p tcp --dport 80 ! -s 192.168.10.128?-j REJECT
【僅允許128訪問80接口】
# iptables?-nL???查看結果:
????????-I ?--insert?chain?[rulenum]?rule-specification:在鏈chain中的指定位置插入條或多條規則。如果指定的規則號是1,則在鏈的頭部插入。這也是默認的情況,如果沒有指定規則號
注意:火墻讀取策略是從第一條開始讀取的
# iptables -I INPUT 1 -i lo -j ACCEPT????【添加到第一條,允許本機環回接口訪問】
????????-D ?--delete?chain?rule-specification-D,--delete?chain?rulenum:在指定的鏈chain中刪除一個或多個指定規則
# iptables -D INPUT 1???????【刪除第一條規則】
????????-R ?Replays替換/修改第幾條規則
# iptables -R INPUT 1 -p tcp --dport 22 -s 192.168.150.133 -j ACCEPT?????【替換端口為22】
? ? ? ? -P ?--policy?chain?target:為指定的鏈chain設置策略target。注意,只有內置的鏈才允許有策略,用戶自定義的是不允許的
????????-F ?--flush?[chain]清空指定鏈chain上面的所有規則。如果沒有指定鏈,清空該表上所有鏈的所有規則
????????-N ?--new-chain?chain用指定的名字創建一個新的鏈
# iptables -N lee???????【新建鏈表lee】
????????-E ?--rename-chain?old-chain?new-chain:用指定的新名字去重命名指定的鏈。這并不會對鏈內部照成任何影響
# iptables -E lee LEE?????????【更改lee鏈表名字】
????????-X ?--delete-chain?[chain]:刪除指定的鏈,這個鏈必須沒有被其它任何規則引用,而且這條上必須沒有任何規則。如果沒有指定鏈名,則會刪除該表中所有非內置的鏈
# iptables -X LEE?????????????【刪除鏈表LEE】
????????-Z ?--zero?[chain]:把指定鏈,或者表中的所有鏈上的所有計數器清零
????????-j ?--jump?target<指定目標>:即滿足某條件時該執行什么樣的動作。target可以是內置的目標,比如ACCEPT,也可以是用戶自定義的鏈
????????-h ?顯示幫助信息
snat地址轉換
2 ~]# iptables -F???????【刪除所有策略】
# iptables -t nat -A POSTROUTING -o ens160?-j SNAT --to-source 192.168.150.134
【將所有從ens160出去的網址都把地址改為2?~]的150.134,用# ip a 查看自身ens的號碼】
# iptables -t nat -nL??查看結果:
3?~]# ip route add default via 192.168.10.20?????????【添加網關】
# route -n?查看結果:
在做nat實驗時需要開啟雙網卡主機的內核路由功能,否則雙網卡主機的兩個網卡如果不在同一個洪范范圍是無法通信的。
2 ~]# vim /etc/sysctl.conf??????????【配置內核路由功能】
# sysctl -p ?查看結果:
現在3?~]10.128可以訪問到1?~]150.133了
dnat地址轉換
2?~]# iptables -t nat -A PREROUTING -i?ens160?-j DNAT --to-dest 192.168.10.128
【將所有從ens160進入(訪問)的網址都把地址改為3 ~]的10.128】
# iptables -t nat -nL?查看結果:
1?~]# ssh -l root 192.168.150.134??訪問結果:
firewalld管理
frewallid服務管理萬式與iptables的管理方式區別
????????? iptables是基于Linux內核的Netfiten子系統構建的,直接操作Netfilter;
libnftables庫與Netfilter交互,提供了一個更高的抽象層
????????? iptables使用基于表的規則集,包括filter、nat、mangle、raw及securty五個表;firewalld采用基于區域的規則集,包括default、public、internal、external和dmz五個區域
????????? iptables的配置較為復雜,需要用戶掌握特定的命令行語法;firewalld提供了更直觀和靈活的配置方式,支持命令行和圖形界面
????????? 由于firewalld通過libnftables庫與Netfilter交互,其性能相對于直接操作Netfilter的iptables來說較低
firewalld域
2?~]#?iptables -t nat -F??????????【清空指定nat表策略】
# systemctl disable --now iptables.service?????????【火墻】
# systemctl mask iptables.service
# systemctl unmask firewalld.service
# systemctl enable --now firewalld
# firewall-cmd --list-all??查看結果:
環境配置
2?~]# vim /etc/firewalld/firewalld.conf?????????【修改firewalld默認管理底層】
# systemctl restart firewalld????????????????【重啟】
firewalld中默認使用的域是pubic
firewalld默認提供的九個zones的調用文件都保存在"/usr/lib/firewalld/zones/"目錄下
firewall-cmd命令
2?~]# firewall-cmd --get-default-zone?????【查詢默認區域】
# firewall-cmd --set-default-zone=trusted?????【更改默認區域為trusted】
# firewall-cmd --state???????????【查看當前狀態】
# firewall-cmd --reload ?????????【刷新】
# firewall-cmd --list-all????????????【查看默認區域】
# firewall-cmd --set-default-zone=public
# firewall-cmd --get-services???????????【查看可執行服務】
# firewall-cmd --add-service=dns??????????【臨時添加允許dns訪問】
# firewall-cmd --list-all?查看結果:
# firewall-cmd --permanent --add-service=dns??????????【永久更改】
# cat /etc/firewalld/zones/public.xml?查看結果:
# firewall-cmd --remove-service=dns
# firewall-cmd --reload???????????????????【重啟才會有效】
# firewall-cmd --permanent --remove-service=dns?????【刪除dns訪問】
# firewall-cmd --reload
# firewall-cmd --list-all?查看結果:
# firewall-cmd --add-source=192.168.10.128/24 --zone=trusted?????【默認允許10.128訪問】
# firewall-cmd --remove-source=192.168.10.128/24 --zone=trusted?????【刪除訪問策略】
# firewall-cmd --get-active-zones ????????【查看活躍域】
# firewall-cmd --list-all-zones?????????????【顯示所有網卡配置】
# vim /etc/nginx/nginx.conf ?????????????【配置網站端口】
# nginx -s reload ??????????????????????【重啟】
# netstat -antlupe | grep nginx ?查看修改:
# firewall-cmd --add-service=http?????????【開啟http也無法生效】
# firewall-cmd --add-port=8080/tcp????????【允許8080端口訪問】
# firewall-cmd --remove-port=8080/tcp??????【刪除端口】
firewalllld高級規則
Direct Rules
通過 firewall-cmd 工具,可以使用--direct選項在運行時間里增加或者移除鏈。如果不熟悉 iptables,使用直接接口非常危險,因為您可能無意間導致防火墻被入侵。
I直接端口模式適用于服務或者程序,以便在運行時間內增加特定的防火墻規則。直接端口模式添加的規則優先應用。
2?~]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 80 ! -s 192.168.10.128/24 -j ACCEPT????????【禁止10.128訪問】
# firewall-cmd --direct --get-all-rules?????????【查看規則】
地址偽裝與端口轉發
3?~]# ip route add default via 192.168.10.20
# route -n?查看結果:
2?~]# firewall-cmd --permanent --add-masquerade????【開啟雙網卡主機路由器】
# firewall-cmd --reload????????????????????????【reload完后F3就可以訪問F1了】
2?~]# firewall-cmd --permanent?--add-forward-port=port=22:proto=tcp:toport=22:toaddr=
192.168.10.128??????????????【訪問22端口都轉到10.128】
# firewall-cmd --reload
1?~]# ssh -l root 192.168.150.134??訪問結果: