linux——Firewalld与iptables的基本配置
Firewalld
Firewalld概述
- 動態防火墻后臺程序 firewalld 提供了一個動態管理的防火墻,用以支持網絡 “ zones” ,以分配對一個網絡及其相關鏈接和界面一定程度的信任。它具備對 IP v4 和 IP v6 防火墻設置的支持。它支持以太網橋,并有分離運行時間和永久性配置選擇。它還具備一個通向服務或者應用程序以直接增加防火墻規則的接口
系統提供了圖像化的配置工具firewall-config、system-config-firewall,提供命令行客戶端firewall-cmd,用于配置firewalld永久性或非永久性運行時間的改變:它依次用 iptables工具與執行數據包篩選的內核中的 Netfilter通信
firewalld和iptables service 之間最本質的不同是:
1、iptables service 在 /etc/sysconfig/iptables 中儲存配置,而 firewalld將配置儲存在/usr/lib/firewalld/ 和 /etc/firewalld/ 中的各種XML文件里
2、使用 iptables service每一個單獨更改意味著清除所有舊有的規則和從/etc/sysconfig/iptables里讀取所有新的規則,然而使用 firewalld卻不會再創建任何新的規則;僅僅運行規則中的不同之處。因此,firewalld可以在運行時間內,改變設置而不丟失現行連接
基于用戶對網絡中設備和交通所給與的信任程度,防火墻可以用來將網絡分割成不同的區域NetworkManager通知firewalld一個接口歸屬某個區域,新加入的接口被分配到默認區域。
| trusted(信任) | 可接受所有的網絡連接 |
| home(家庭) | 用于家庭網絡,僅接受ssh、mdns、ipp-client、samba-client、或dhcpv6-client服務連接 |
| internal(內部) | 用于內部網絡,僅接受ssh、mdns、ipp-client、samba-client、dhcpv6-client服務連接 |
| work(工作) | 用于工作區,僅接受ssh、ipp-client或dhcpv6-client服務連接 |
| public(公共) | 在公共區域內使用,僅接受ssh或dhcpv6-client服務連接,為firewalld的默認區域 |
| external(外部) | 出去的ipv4網絡連接通過此區域偽裝和轉發,僅接受ssh服務連接 |
| dmz(非軍事區) | 僅接受ssh服務接連 |
| block(限制) | 拒絕所有網絡連接 |
| drop(丟棄) | 任何接收的網絡數據包都被丟棄,沒有任何回復 |
管理防火墻
1、安裝防火墻軟件
- yum install firewalld firewalld-config -y
- [root@client Desktop]# firewalld-config & firewalld的圖形化管理
2、啟動和禁止防火墻
- systemctl start firewalld
- systemctl enable firewalld
- systemctl stop firewalld
- systemctl disable firewalld
3、使用命令行接口配置防火墻
查看firewalld的狀態
查看當前活動的區域,并附帶一個目前分配給它們的接口列表
查看默認網絡區域
查看所有可用區域
列出指定域(public)的所有設置
列出指定域(block)的所有設置
列出所有預設服務
列出所有區域的設置
[root@client Desktop]# firewall-cmd --list-all-zones
設置默認區域
設置網絡地址到指定的區域
- firewall-cmd -permanent --add-source=172.25.254.27 --zone=trusted
- firewall-cmd -permanent --add-source=172.25.254.27/24 --zone=trusted
–permanent參數表示永久生效設置
如果沒有指定–zone參數,那么會加入默認區域
172.25.254.27(IP指定)、172.25.254.27/24(網絡位相同即可) 刪除指定區域中的網絡地址
- firewall-cmd -permanent --remove-source=172.25.254.27 --zone=trusted
添加、改變、刪除網絡接口
查看指定級別的接口
[root@client Desktop]# firewall-cmd --list-interfaces eth0查看指定接口的 Zone 信息
[root@client Desktop]# firewall-cmd --get-zone-of-interface=eth0 trusted添加網絡接口
[root@client Desktop]# firewall-cmd --add-interface=eth1 --zone=public success [root@client Desktop]# firewall-cmd --get-zone-of-interface=eth1 public改變某接口至某信任等級,譬如改變 eth0 至 public
[root@client Desktop]# firewall-cmd --change-interface=eth0 --zone=public success [root@client Desktop]# firewall-cmd --get-zone-of-interface=eth0 public [root@client Desktop]# firewall-cmd --get-zone-of-interface=eth1 public刪除指定接口eth1
[root@client Desktop]# firewall-cmd --remove-interface=eth1 --zone=trusted success [root@client Desktop]# firewall-cmd --get-zone-of-interface=eth1 no zone添加、刪除服務
添加
[root@client ~]# firewall-cmd --zone=public -add-service=http success [root@client ~]# firewall-cmd --list-all public (default, active)interfaces: eth0 eth1sources: services: dhcpv6-client http sshports: masquerade: noforward-ports: icmp-blocks: rich rules:刪除
[root@client ~]# firewall-cmd --remove-service=http success [root@client ~]# firewall-cmd --reload ##不完全刷新 success [root@client ~]# firewall-cmd --list-all [root@client ~]# firewall-cmd --list-all public (default, active)interfaces: eth0 eth1sources: services: dhcpv6-client sshports: masquerade: noforward-ports: icmp-blocks: rich rules:列出、添加、刪除端口
- firewall-cmd --zone=public -list-ports
- firewall-cmd --add-port=8080/tcp --zone=public
firewall-cmd --remove-port=8080/tcp --zone=public
重新加載防火墻
注意:這并不會中斷已經建立的連接,如果打算中斷,可以使用 –complete-reload選項)firewalld的規則被保存在/etc/firewalld目錄下的文件中,你也可以直接編輯這些文件達到配置防火墻的目的。/usr/lib/firewalld目錄下的內容是不可以被編輯的,但可以用做默認模板
4、Direct Rules
通過 firewall-wall-cmd 工具,可以使用 --direct 選項在運行時間里增加或者移除鏈。 如果不熟悉 iptables ,使用直接接口非常危險,因為可能會無意間導致防火墻被入侵。 直接端口模式適用于服務或者程序,以便在運行時間內增加特定的防火墻規則。 直接端口模式添加的規則優先應用 firewall-cmd –-direct –get-all-rules ##列出規則 firewall-cmd –-direct –add-rule ipv4 filter INPUT 1 -p tcp –dport 80 -s 172.25.254.50 -j ACCEPT ##添加規則 firewall-cmd –-direct –remove-rule ipv4 filter INPUT 1 -p tcp –dport 80 -s 172.25.254.50 -j ACCEPT ##刪除規則例如:不讓50主機訪問80端口的請求響應:
5、端口轉發與地址偽裝
在防火墻服務器上將偽裝打開:
當50從端口登陸主機時,將50偽裝
當訪問本機22端口時,將其轉到227這個主機上
刷新
IP為172.25.254.50的主機連接主機172.25.254.127時,將其轉到主機172.25.254.227
測試
用50主機ssh連接136主機:
登陸的是227主機:
查看登陸者,登陸者是127。50主機被偽裝起來了
Iptables
首先得保持一個純凈的環境,將firewalld關閉。安裝iptables,并啟動
- yum install iptables-services -y 安裝iptables
(1)理論基礎:當主機收到一個數據包后,數據包先在內核空間中處理,若發現目的地址是自身,則傳到用戶空間中交給對應的應用程序處理,若發現目的不是自身,則會將包丟棄或進行轉發。
(2)iptables實現防火墻功能的原理是:在數據包經過內核的過程中有五處關鍵地方,分別是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,稱為鉤子函數,iptables這款用戶空間的軟件可以在這5處地方寫規則,對經過的數據包進行處理,規則一般的定義為“如果數據包頭符合這樣的條件,就這樣處理數據包”。
iptables中定義有表,分別表示提供的功能,有filter表(實現包過濾)、nat表(實現網絡地址轉換)、mangle表(實現包修改)、raw表(實現數據跟蹤),這些表具有一定的優先級:raw–>mangle–>nat–>filter
下面是數據包流向圖:
數據包先經過PREOUTING,由該鏈確定數據包的走向:
目的地址是本地,則發送到INPUT,讓INPUT決定是否接收下來送到用戶空間,流程為①—>②
若滿足PREROUTING的nat表上的轉發規則,則發送給FORWARD,然后再經過POSTROUTING發送出去,流程為: ①—>③—>④—>⑥
主機發送數據包時,流程則是⑤—>⑥
(3)iptables的規則書寫:
基本語法:iptables [-t 表] [操作命令] [鏈][規則匹配器][-j 目標動作]
常用操作命令:
-A 在指定鏈尾部添加規則
-D 刪除匹配的規則
-R 替換匹配的規則
-I 在指定位置插入規則
其他操作命令:
-L/S 列出指定鏈或所有鏈的規則
-F 刪除指定鏈或所有鏈的規則
-N 創建用戶自定義鏈
-X 刪除指定的用戶自定義鏈
-P 為指定鏈設置默認規則策略,對自定義鏈不起作用
-Z 將指定鏈或所有鏈的計數器清零
-E 更改自定義鏈的名稱
-n ip地址和端口號以數字方式顯示
常見規則匹配器說明:
-p tcp|udp|icmp|all 匹配協議,all會匹配所有協議
-s addr[/mask] 匹配源地址
-d addr[/mask] 匹配目標地址
–sport port1[:port2] 匹配源端口(可指定連續的端口)
–dport port1[:port2] 匹配目的端口(可指定連續的端口)
-o interface
匹配出口網卡,只適用FORWARD、POSTROUTING、OUTPUT。
匹配入口網卡,只使用PREROUTING、INPUT、FORWARD。
目標動作說明:
ACCEPT 允許數據包通過
DROP 丟棄數據包
REJECT 丟棄數據包,并且將拒絕信息發送給發送方
實驗
- 顯示filter表所有鏈的規則,默認為filter表
如上,可以看到filter三條鏈 - 查看nat表的
- 注意一點:火墻設置的策略好壞會影響到傳輸速率的快慢,因為火墻規則讀取是有先后順序的。
- NAT (Net Address Trancelate:網絡地址轉換)
- SNAT(源地址轉換)是指在數據包從網卡發送出去的時候,把數據包中的源地址部分替換為指定的IP,這樣,接收方就認為數據包的來源是被替換的那個IP的主機
- DNAT(目標地址轉換),就是指數據包從網卡發送出去的時候,修改數據包中的目的IP,表現為如果你想訪問A,可是因為網關做了DNAT,把所有訪問A的數據包的目的IP全部修改為B,那么,你實際上訪問的是B
下面我們來模擬以下兩個轉換:
SNAT
實驗準備:
雙網卡主機:
單網卡主機:
IP:
網關:
注意:這里雙網卡主機類似于路由器的功能。所以單網卡主機的網關必須是和本機ip處于同一網段而且是和雙網卡主機上的一塊網卡IP相同。
接下來在單網卡主機上ping網關,檢查實驗環境(結果如下圖,說明雙網卡主機網卡良好。):
在進行SNAT之前,單網卡主機是不能連接不同網段的172.25.254.50這臺主機的 。
我們要用單網卡主機來連不同網段的主機,必須要做SNAT。在雙網卡主機上做防火墻規則書寫:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.127
查看火墻規則:
這時查看 net 表的ip轉發功能,0代表未開啟,則需要將其開啟;1代表已開啟:
注:開啟方法
此時在單網卡主機ping不同網段的主機,發現可以:
SNAT:局域網共享一個公網IP接入lnternel
好處如下:
保護內網用戶安全,因為公網地址總有一些人惡意掃描,而內網地址在公網沒有路由所以無法被掃描,能被掃描的只有防火墻這一臺,這樣就減少了被攻擊的可能。
Ipv4地址匱乏,很多公司只有一個ipv4地址,但是卻有幾百個用戶需要上網,這個時候就需要使用SNAT。
省錢,公網地址付費,使用SNAT只需要一個公網ip就可以滿足幾百人同時上網。
DNAT
在雙網卡主機上書寫規則:
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-dest 172.25.20.227
從eth0接口進來的數據包我們將其目標地址轉為172.25.20.227這臺主機上
在172.25.254.50主機上測試——用ssh連接172.25.254.127:
但是卻是登陸的172.25.20.227這臺主機:
實現了目的地轉換。
DNAT的用途(DNAT:向internel發布內網服務器 )
在內網中有服務器,如果想讓公網用戶訪問有有兩種方法:
配置雙網卡,一網卡對內,一網卡對外;一般是高訪問量的web服務器,為了避免占用網關的流量才這樣做,使用不是很廣泛。
內網web服務器,或是ftp服務器,為了用戶在公網也可以訪問,有不想買公網ip地址,采用DNAT方案。
總結
以上是生活随笔為你收集整理的linux——Firewalld与iptables的基本配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux——ISCSI 网络磁盘共享
- 下一篇: linux——Shell脚本说明、创建、