firewalld支持動態更新技術並加入了區域(zone)的概念。簡單來說,區域就是firewalld預先准備了幾套防火牆策略集合(策略模板),用戶可以根據生產場景的不同而選擇合適的策略集合,從而實現防火牆策略之間的快速切換。
firewalld中常用的區域名稱及策略規則
區域 默認規則策略
trusted 允許所有的數據包
home 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh、mdns、ipp-client、amba-client與dhcpv6-client服務相關,則允許流量 internal 等同於home區域 work 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh、ipp-client與dhcpv6-client服務相關,則允許流量 public 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh、dhcpv6-client服務相關,則允許流量 external 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh服務相關,則允許流量 dmz 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh服務相關,則允許流量 block 拒絕流入的流量,除非與流出的流量相關 drop 拒絕流入的流量,除非與流出的流量相關 firewall-cmd命令中使用的參數以及作用
參數 作用
--get-default-zone 查詢默認的區域名稱
--set-default-zone=<區域名稱> 設置默認的區域,使其永久生效 --get-zones 顯示可用的區域 --get-services 顯示預先定義的服務 --get-active-zones 顯示當前正在使用的區域與網卡名稱 --add-source= 將源自此IP或子網的流量導向指定的區域 --remove-source= 不再將源自此IP或子網的流量導向某個指定區域 --add-interface=<網卡名稱> 將源自該網卡的所有流量都導向某個指定區域 --change-interface=<網卡名稱> 將某個網卡與區域進行關聯 --list-all 顯示當前區域的網卡配置參數、資源、端口以及服務等信息 --list-all-zones 顯示所有區域的網卡配置參數、資源、端口以及服務等信息 --add-service=<服務名> 設置默認區域允許該服務的流量 --add-port=<端口號/協議> 設置默認區域允許該端口的流量 --remove-service=<服務名> 設置默認區域不再允許該服務的流量 --remove-port=<端口號/協議> 設置默認區域不再允許該端口的流量 --reload 讓“永久生效”的配置規則立即生效,並覆蓋當前的配置規則 --panic-on 開啟應急狀況模式 --panic-off 關閉應急狀況模式
與Linux系統中其他的防火牆策略配置工具一樣,使用firewalld配置的防火牆策略默認為運行時(Runtime)模式,又稱為當前生效模式,而且隨着系統的重啟會失效。如果想讓配置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在用firewall-cmd命令正常設置防火牆策略時添加--permanent參數,這樣配置的防火牆策略就可以永久生效了。但是,永久生效模式有一個“不近人情”的特點,就是使用它設置的策略只有在系統重啟之后才能自動生效。如果想讓配置的策略立即生效,需要手動執行firewall-cmd --reload命令。
[root@linuxprobe ~]# firewall-cmd --permanent --zone=external --change-interface=eno16777728
[root@linuxprobe ~]# firewall-cmd --get-zone-of-interface=eno16777728 [root@linuxprobe ~]# firewall-cmd --zone=public --query-service=ssh [root@linuxprobe ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
centos7修改ssh端口記得添加防火牆規則
1.向防火牆中添加端口的命令為:
firewall-cmd --zone=public --add-port=10022/tcp --permanent
查看端口是否添加成功:
firewall-cmd --zone=public --query-port=10022/tcp
2.開機啟動相關
systemctl start firewalld
systemctl enable firewalld
3.與狀態相關的firewalld命令
firewall-cmd --state ##查看火牆的狀態(運行/停止) firewall-cmd --get-active-zones ##查看正在使用域的情況 firewall-cmd --get-default-zone ##查看默認使用的域 firewall-cmd --get-zones ##查看能使用的所有域 firewall-cmd --zone=public --list-all firewall-cmd --get-services ##顯示直接可以在火牆中寫的服務 firewall-cmd --list-all-zones ##查看所有域 firewall-cmd --list-all ##默認查看正在使用的域 firewall-cmd --set-default-zone=public ##修改默認域
4.firewalld中服務的添加與刪除
(1)地址源的添加與刪除
firewall-cmd [--permanent] --add-source=172.25.254.31 --zone=trusted ##添加來源 firewall-cmd [--permanent] --remove-source=172.25.254.31 --zone=trusted
(2)接口的添加與刪除、改變
firewall-cmd [--permanent] --remove-interface=eth1 --zone=public firewall-cmd [--permanent] --add-interface=eth1 --zone=trusted ##在某域中添加接口 firewall-cmd --list-all --zone=trusted firewall-cmd [--permanent] --chang-interface=eth1 --zone=public ##改變接口
(3)端口的添加與刪除
firewall-cmd [--permanent] --add-port=8080/tcp firewall-cmd [--permanent] --remove-port=8080/tcp
(4)服務的添加與刪除
firewall-cmd [--permanent] --add-service=http firewall-cmd [--permanent] --remove-service=ssh ##永久刪除 firewall-cmd --remove-service=ssh ##臨時刪除,reload后會繼續生效
(5)加載
firewall-cmd --reload ##加載使生效,不會斷開已經連接的客戶端
firewall-cmd --complete-reload ##加載使生效,斷開所有客戶端的連接
5.firewalld相關設定文件
cd /etc/firewalld/zones ##火牆設定目錄
cd /lib/firewalld/services/ ##服務相關文件(函數)
6.防火牆中規則的設定
firewall-cmd --remove-service=ssh firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.31 -p tcp --dport 22 -j ACCEPT firewall-cmd --direct --get-all-rules ##查看所有規則 -s 來源 -p 協議 --dport 目標端口 -j 動作
示例:
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 ! -s 172.25.254.31 -p tcp --dport 22 -j ACCEPT ##除該主機外所有主機走該規則(可以使用ssh)
7.地址偽裝
sysctl -a | grep ip_forward vim /etc/sysctl.conf net.ipv4.ip_forward=1 firewall-cmd --permanent --add-masquerade ##打開偽裝功能 firewall-cmd --reload
8.端口轉發
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.231
端口轉發設置的刪除
firewall-cmd --remove-forward-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.231
把原本訪問本機888端口的流量轉發到22端口,要且求當前和長期均有效:
流量轉發命令格式為firewall-cmd --permanent --zone=<區域> --add-forward-port=port=<源端口號>:proto=<協議>:toport=<目標端口號>:toaddr=<目標IP地址>
firewalld中的富規則表示更細致、更詳細的防火牆策略配置,它可以針對系統服務、端口號、源地址和目標地址等諸多信息進行更有針對性的策略配置。它的優先級在所有的防火牆策略中也是最高的。
[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"
啟用SNAT:在firewall-config中Masquerading,並選中Masquerade zone復選框,就自動開啟了SNAT技術。
8.4 服務的訪問控制列表
TCP Wrappers是RHEL 7系統中默認啟用的一款流量監控程序,它能夠根據來訪主機的地址與本機的目標服務程序作出允許或拒絕的操作。換句話說,Linux系統中其實有兩個層面的防火牆,第一種是前面講到的基於TCP/IP協議的流量過濾工具,而TCP Wrappers服務則是能允許或禁止Linux系統提供服務的防火牆,從而在更高層面保護了Linux系統的安全運行。
在配置TCP Wrappers服務時需要遵循兩個原則:
編寫拒絕策略規則時,填寫的是服務名稱,而非協議名稱;
建議先編寫拒絕策略規則,再編寫允許策略規則,以便直觀地看到相應的效果。
[root@linuxprobe ~]# vim /etc/hosts.deny sshd:* [root@linuxprobe ~]# vim /etc/hosts.allow sshd:192.168.10.
TCP Wrappers服務的控制列表文件中常用的參數
客戶端類型 示例 滿足示例的客戶端列表 單一主機 192.168.10.10 IP地址為192.168.10.10的主機 指定網段 192.168.10. IP段為192.168.10.0/24的主機 指定網段 192.168.10.0/255.255.255.0 IP段為192.168.10.0/24的主機 指定DNS后綴 .linuxprobe.com 所有DNS后綴為.linuxprobe.com的主機 指定主機名稱 www.linuxprobe.com 主機名稱為www.linuxprobe.com的主機 指定所有客戶端 ALL 所有主機全部包括在內
Linux防DDOS攻擊腳本:
*/2 * * * * /usr/local/nginx/var/log/drop.sh #!/bin/sh cd /usr/local/nginx/var/log tail access.log -n 1000 |grep vote.php | |sort |uniq -c |sort -nr |awk '{if ($2!=null && $1>50)}' > drop_ip.txt for i in `cat drop_ip.txt` do #/sbin/iptables -I INPUT -s $i -j DROP; firewall-cmd --add-source=192.168.5.6 --zone=drop done
查看與80端口建立的鏈接
netstat -an | grep ":80" | grep ESTABLISHED