一、firewall
1、從CentOS7開始,默認使用firewall來配置防火牆,沒有安裝iptables(舊版默認安裝)。
2、firewall的配置文件是以xml的格式,存儲在 /usr/lib/firewalld/ 和 /etc/firewalld/ 目錄中。
(1)系統配置目錄,目錄中存放定義好的網絡服務和端口參數,系統參數,不要修改。
1 /usr/lib/firewalld/ 2 /usr/lib/firewalld/services 3 /usr/lib/firewalld/zones
(2)用戶配置目錄
1 /etc/firewalld/ 2 /etc/firewalld/services 3 /etc/firewalld/zones
3、特性
(1)firewalld是centos7的一大特性,最大的好處有兩個:
- 支持動態更新,不中斷用戶連接
- 加入了防火牆的“zone”概念 ,可以理解為 firewalld 的單位、規則集:
1️⃣ drop(丟棄),任何接受的網絡數據包都被丟棄,沒有任何回復。僅能有發送出去的網路連接。
2️⃣ block(限制),任何接收的網絡連接都被IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohibited信息所拒絕。
3️⃣ public(公共),在公共區域內使用,不能相信網絡內的其他計算機不會對你的計算機造成危害,只能接收經過選取的連接。
4️⃣ external(外部),特別是為路由器啟動了偽裝功能的外部網。你不能相信來自網絡的其他計算機,不能相信他們不會對你的計算機造成危害,只能接收經過選擇的連接。
5️⃣ dmz(非軍事區),用於你的非軍事區內的電腦,此區域內可公開訪問,可以有限的進入你的內部網絡,僅僅接收經過選擇的連接。
6️⃣ work(工作),用於工作區。你可以基本相信網絡內的其他計算機不會危害到你。僅僅接收經過選擇的連接。
7️⃣ home(家庭),用於家庭網絡。你可以基本相信網絡內的其他計算機不會危害到你。僅僅接收經過選擇的連接。
8️⃣ internal(內部),用於內部網絡。你可以基本相信網絡內的其他計算機不會危害到你。僅僅接收經過選擇的連接。
9️⃣ trusted(信任),可接受所有的網絡連接。
說明:firewalld 的缺省區域是 public。
(2)firewalld有圖形界面和工具界面
(3)firewalld的字符界面管理工具是 firewall-cmd
二、配置防火牆
設置防火牆的方式有兩種:firewall命令 、 直接修改配置文件
1、firewall命令
例如:對外開放/停止3306端口,供外部的計算機訪問。該命令方式添加的端口,可在/etc/firewalld/zones中的對應配置文件中得到體現
#開放 firewall-cmd --zone=public --add-port=3306/tcp --permanent #刪除 firewall-cmd --zone=public --remove-port=3306/tcp --permanent #別忘記重啟防火牆 systemctl restart firewalld
說明:
- firewall-cmd:Linux中提供的操作firewall的工具。
- –zone:指定作用域。
- –add-port=3306/tcp:添加的端口,格式為:端口/通訊協議。
- –permanent:表示永久生效,沒有此參數重啟后會失效。
2、直接修改配置文件
比如:修改 /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?> <zone> <short>Public</short> <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <service name="ssh"/> <service name="dhcpv6-client"/> <port protocol="tcp" port="20"/> <port protocol="tcp" port="21"/> <port protocol="tcp" port="22"/> <port protocol="tcp" port="80"/> <port protocol="tcp" port="8888"/> <port protocol="tcp" port="39000-40000"/> <port protocol="tcp" port="3306"/> </zone>
如上,需要開放的端口,已經添加再public這個區域里了。
三、firewall常用命令
1、查看狀態
service firewalld status
或 systemctl status firewalld 或 firewall-cmd --state
2、啟動、停止、重啟
# 啟動
service firewalld start
或
systemctl start firewalld
# 停止
service firewalld stop
或
systemctl stop firewalld
# 重啟
service firewalld restart
或
systemctl restart firewalld
3、開機自啟動
# 關閉開機自啟動
systemctl disable firewalld
# 開啟開機自啟動
systemctl enable firewalld
4、查看防火牆規則
firewall-cmd --list-all
四、其他命令
1、其他基本命令
firewall-cmd --version #查看版本 firewall-cmd --help #查看幫助 firewall-cmd --panic-on #拒絕所有包 firewall-cmd --panic-off #取消拒絕狀態 firewall-cmd --query-panic #查看是否拒絕 firewall-cmd --reload #重新加載防火牆,並不中斷用戶連接(firewalld特性之一動態添加規則) firewall-cmd --complete-reload #重新加載防火牆並中斷用戶連接(類似於重啟服務)
2、zone相關
firewall-cmd --get-zones #顯示支持的區域列表 firewall-cmd --get-active-zones #查看當前的區域 firewall-cmd --get-default-zone #查看默認區域 firewall-cmd --set-default-zone=home #設置默認區域為 home firewall-cmd --zone=public --list-interfaces #顯示顯示公共區域(public)所有接口 firewall-cmd --zone=public --list-all #顯示公共區域(public)所有設置 firewall-cmd --get-zone-of-interface=ens33 #查看指定接口 ens33 所屬區域 firewall-cmd --zone=internal --change-interface=ens33 #臨時修改網絡接口 ens33 為內部區域(internal),永久修改加上 --permanent 參數 firewall-cmd --zone=public --add-interface=ens37 #為公共區域(public)增加一個接口 ens37
3、service相關
firewall-cmd --get-service #顯示服務列表 firewall-cmd --list-service #顯示當前服務 firewall-cmd --enable service=ssh #允許SSH服務通過 firewall-cmd --disable service=ssh #禁止SSH服務通過 firewall-cmd --enable service=samba --timeout=600 #臨時允許 samba 服務通過 600 秒 firewall-cmd --permanent --zone=internal --add-service=http #添加 http 服務到內部區域(internal) firewall-cmd --zone=work --add-service=smtp #把 smtp 服務加入工作區域(work) firewall-cmd --zone=work --remove-service=smtp #從工作區域(work)移除 smtp 服務
4、地址偽裝
firewall-cmd --zone=external --query-masquerade #查詢外部區域(external)是否能偽裝ip,結果為yes
firewall-cmd --zone=external --add-masquerade #外部區域(external)啟用IP偽裝(masquerade) firewall-cmd --zone=external --remove-masquerade #外部區域(external)禁用用IP偽裝
5、端口轉發
# 打開端口轉發,首先需要打開IP地址偽裝 firewall-cmd --zone=external --add-masquerade # example 1:把外部區域(external)的 22 端口 轉發至 3753 firewall-cmd --zone=external --add-forward-port=22:porto=tcp:toport=3753 # example 2:把外部區域(external)的 22 端口轉發到 192.168.1.20 的同一端口 firewall-cmd --zone=external --add-forward-port=22:porto=tcp:toaddr=192.168.1.20 # example 3:把外部區域(external)的 22 端口轉發到 192.168.1.20 的 52222 端口 firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=52222:toaddr=192.168.1.20