第十單元-防火牆配置
#####三大表五大鏈#####
filter: INPUT, OUTPUT, FORWARD
nat: INPUT, OUTPUT, PREROUTING, POSTROUTING
mangle:INPUT, OUTPUT, PREROUTING, POSTROUTING, FORWARD
INPUT:進來的數據包應用此規則鏈中的策略
OUTPUT:外出的數據包應用此規則鏈中的策略
FORWARD:轉發數據包應用此規則中的策略
PREROUTING:對數據包作路由選擇前一共用此鏈中的策略(所有的數據包進來的時候都有這個鏈處理)
POSTROUTING:對數據包作路由選擇後應用此鏈中的策略(所有的數據包出來的時候都由這個鏈處理)
#####初始設置#####
雙網卡主機IP分別設置爲不同網段
此處實驗:
server主機:172.25.254.244和172.25.98.244
desktop主機:172.25.254.198
服務狀態:
server主機:
systemctl stop firewalld
systemctl disable firewalld
systemctl start iptables
systemctl enable iptables
一、iptables 【linux防火牆的管理工具】
-t ##指定表名稱,若未指定表,則默認爲filter表-n ##不做解析
-L ##列出指定表中的策略
-A ##增加策略
-p ##網絡協議
--dport ##端口
-s ##數據來源
-j ##動作
ACCEPT ##允許
REJECT ##拒絕
DROP ##丟棄,不拒絕訪問,但是不予理睬,會一直在保持接收的狀態
-N ##增加鏈
-E ##修改鏈名稱
-X ##刪除鏈
-D ##刪除指定策略
-I ##插入
-R ##修改策略
-P ##修給默認策略
1.參數實例:
iptables -t filter -nL ##查看filter表中的策略
示圖1
示圖2
iptables -A INPUT -i lo -j ACCEPT ##允許lo
iptables -A INPUT -p tcp --dport 22 -j ACCEPT ##允許訪問22端口
iptables -A INPUT -s 172.25.254.98 -j ACCEPT ##允許98主機訪問主機所有端口
iptables -A INPUT -j REJECT ##拒絕所有主機的數據來源
示圖:當前filter表中策略
示圖:在該server主機安裝http服務,用98主機訪問該主機22端口的http服務,訪問結果爲允許
示圖:用非98主機的其他主機訪問22端口的http服務,被拒絕
iptables -N redhat ##增加鏈redhat
示圖3
iptables -E redhat westos ##修改redhat的鏈的名字爲westos
示圖4
iptables -X westos ##刪除鏈westos
示圖5
iptables -D INPUT 2 ##刪除INPUT鏈中第二條策略
示圖6
iptables -I INPUT 2 -p tcp --dport 80 -j REJECT ##插入策略到INPUT的第二條
示圖7
iptables -R INPUT 2 -p tcp --ddport 22 -j ACCEPT ##修改INPUT鏈中的第二條策略
示圖8
示圖:非98主機用戶的22端口訪問成功檢測
iptables -P INPUT DROP ##把INPUT表中的默認策略改爲drop
示圖:未修改之前默認狀態,policy爲ACCEPT
2.標識策略實例:
iptables -A INPUT -i lo -m state --state NEW -j ACCEPT ##只檢測第一次使用lo用戶的訪問,其他用lo已經訪問成功的會直接允許訪問
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT ##只檢測第一次使用端口22用戶的訪問,其他訪問22端口成功的用戶會直接訪問
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
iptables -A INPUT -j REJECT ##除上以外全部拒絕
示圖:當前策略狀態
3.網關配置:
sysctl -a | grep forward
echo "net.ipv4.ip_forward = 1">>/etc/sysctl.conf
sysctl -p
iptables -t nat -A PREROUTING -i eth1 -j DNAT --to-dest 172.25.98.244
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.244
測試:
desktop修改網絡配置文件:
vim /etc/sysconfig/network-scripts/ifcfg-eth0
示圖:修改結果
示圖:desktop主機網關測試結果
ping 172.25.254.244
ping 172.25.98.244
二、firewalld
1.啓用服務
systemctl start firewalld ##開啓防火牆
systemctl mask iptables ##將iptables服務凍結
firewall-config ##firewall的圖形管理界面
ZONE:【一般默認public】
block【限制】 ##拒絕所有網絡
dmz【非軍事區】 ##僅接受ssh服務連接
drop【丟棄】 ##任何接收的網絡數據包都被丟棄,沒有任何回覆
external【外部】 ##出去的ipv4網絡連接通過此區域僞裝和轉發僅接收ssh服務連接
home【家庭】 ##用於家庭網絡,僅接收ss,mdns,ipp-client,或dhcpv6-client服務連接
internal【內部】 ##用於內部網絡,僅接受ssh、mdns、ipp-client、samba-client、dhcpv6-client服務連接
public【公共】 ##在公共區域內使用,僅接受ssh或dhcpv6-client服務連接,爲firewalld的默認區域
ROL【】
trusted【信任】 ##可接受所有的網絡連接
work【工作】 ##用於工作區,僅接受ssh、ipp-client或dhcpv6-client服務連接
Configuration配置設置方式:permanent永久式,和臨時式 ##用命令操作時若無指定臨時或永久時,則默認臨時,設置結束後需要reload使設置的內容生效
內容:
services ##firewalld提供的服務
ports ##端口
masquerading ##僞裝
port forwarding ##端口轉發
ICMP filter ##ICMP協議提供的filter表
rich rules ##rich rules是一種類似iptables的設置
interfaces ##接口
sources ##指定源地址
2.基本參數設置
##查看型
firewall-cmd --state ##查看firewall當前活動狀態
firewall-cmd --get-active-zones ##查看當前活動的工作區域
firewall-cmd --get-default-zone ##查看當前默認的工作區域
firewall-cmd --get-zones ##查看所有擁有的工作區域
firewall-cmd --get-services ##查看所有可設置的服務
firewall-cmd --list-all-zones ##查看當前默認區域的內容【未特定指定時爲public】
firewall-cmd --zone=trusted --list-all ##查看trusted區的內容
##設置型
firewall-cmd --set-default-zone=trusted ##設置默認區域爲trusted
firewall-cmd --permanent --add-source=172.25.254.98 ##永久添加可接收數據包來源,有permanent永久參數,添加後必須通過reload來執行,添加的數據包來源的執行權限和所在工作區域的執行權限相同
firewall-cmd --permanent --remove-source=172.25.254.98 ##永久移除可接受數據包來源
firewall-cmd --permanetnt --zone=trusted --add-source=172.25.254.98 ##永久在trusted區域添加數據包來源
firewall-cmd --permanetnt --zone=trusted --remove-source=172.25.254.98 ##移除
firewall-cmd --zone=public --remove-interface=eth0 ##在public區域移除eth0接口
firewall-cmd --zone=trusted --add-interface=eth0 ##在trusted區域添加eth0接口
firewall-cmd --add-service=ssh ##在默認區域添加服務ssh,移除用remove,永久設置須添加--permanent,指定區域添加--zone=所指定區域名稱
firewall-cmd --add-port=22/tcp ##在默認區域添加可訪問端口22,協議使用tcp
firewall-cmd --reload ##每次執行的是永久設置的命令時,需要生效,必須執行reload,【注意:這並不會中斷已經建立的連接,如果打算中斷,可以使用 --complete-reload選項】
3.direct參數設置【在運行時間裏增加或者移除鏈】
firewall-cmd --direct --get-all-rules ##查看當前所有的direct rules
firewall-cmd --direct --get-all-rule ipv4 filter INPUT 0 '!' -s 172.25.254.98 -p tcp --dport 22 -j ACCEPT ##添加direct rules ,設置爲ipv4,在filter表中第一條(第一條即0),除了98主機不可以訪問以外其他都可以,使用協議爲tcp,添加訪問端口22,和iptables相似設定方法
示圖:direct參數示範
4.rich rules
通過“ rich language”語法,可以用比直接接口方式更易理解的方法建立複雜防火牆規則。此外,還能永久保留設置。這種語言使用關鍵詞值,是 iptables 工具的抽象表示。這種語言可以用來配置分區,也仍然支持現行的配置方式。
firewall-cmd --zone=指定區域 --remove-rich-rule='rule' ##移除一項規則
firewall-cmd --zone=指定區域 --query-rich-rule='rule' ##這將複查是否已經爲區域增加一個多語言規則 。如果可用,屏幕會顯示 yes,退出狀態爲0; 否則,屏幕顯示 no ,退出狀態爲 1。如果省略 zone,默認區域將被使用。
firewall-cmd --list-rich-rules ##列出所有多語言規則
##添加規則##
firewall-cmd --add-rich-rule='rule family="ipv4" source address="172.25.0.10" accept' ##允許172.25.0.10主機所有連接
firewall-cmd --add-rich-rule='rule service name=ftp limit value=2/m accept' ##每分鐘允許2個新連接訪問ftp服務
firewall-cmd --add-rich-rule='rule service name=ftp log limit value="1/m" audit accept' ##同意新的 IP v4 和 IP v6 連接 FT P ,並使用審覈每分鐘登錄一次
firewall-cmd --add-rich-rule='rule family="ipv4" source address="172.25.0.0/24" service name=ssh log prefix="ssh" level="notice" limit value="3/m" accept' ##允許來自172.25.0.0/24地址的新 IPv4連接連接TFTP服務,並且每分鐘記錄一次
firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop' ##丟棄所有icmp包
firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.25.0.0/24 reject' --timeout=10 ##當使用source和destination指定地址時,必須有family參數指定ipv4或ipv6。如果指定超時,規則將在指定的秒數內被激活,並在之後被自動移除
firewall-cmd --add-rich-rule='rule family=ipv6 source address="2001:db8::/64" service name="dns" audit limit value="1/h" reject' --timeout=300 ##拒絕所有來自2001:db8::/64子網的主機訪問dns服務,並且每小時只審覈記錄1次日誌
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source
address=172.25.0.0/24 service name=ftp accept' ##允許172.25.0.0/24網段中的主機訪問ftp服務
firewall-cmd --add-rich-rule='rule family="ipv6" source address="1:2:3:4:6::" forward-portto-addr="1::2:3:4:7" to-port="4012" protocol="tcp" port="4011"' ##轉發來自ipv6地址1:2:3:4:6::TCP端口4011,到1:2:3:4:7的TCP端口4012
5.僞裝和端口轉發
僞裝:
firewall-cmd --permanent --zone=< ZONE > --add-masquerade ##添加僞裝
firewall-cmd --permanent --zone=< ZONE > --add-rich-rule='rule family=ipv4 source address=172.25.254.244/24 masquerade' ##172.25.98.11在出站後僞裝爲172.25.254.244
示圖:僞裝設置結果
示圖:測試【172.25.98.11僞裝爲172.25.254.244用ssh登陸172.25.254.98,成功後用w
-i查看到登陸98主機的ip是244,達到僞裝效果】
端口轉發:
firewall-cmd --permanent --zone=< ZONE > --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.98.10 ##將所有訪問22端口的主機全部轉發到172.25.98.10主機的22端口處
示圖:轉發設置結果
示圖:測試轉發【用ssh在172.25.254.98ssh連接172.25.98.11,結果會轉發連接到172.25.98.10處】
firewall-cmd --permanent --zone=< ZONE > --add-rich-rule='rule family=ipv4 source address=172.25.254.98/24 forward-port port=22 protocol=tcp to-port=22' ##在rich ruels中的操作命令