概述
CentOS中的防火牆有很多,如SELinux、Firewall、TCP Wrappers、iptables/netfilter。
每種防火牆都有各自擅長的地方。
這裏主要講兩種:SELinux和Firewall。
SElinux
爲什麼需要SElinux?
Linux中的程序不能擁有過大的權限,否則就會侵入我們的系統,獲取我們的數據(比如數據庫文件),隨意安裝程序(比如後門)。
這就像是在Windows上下載一些非官方軟件,安裝後桌面上會出現“貪玩藍月”,“傳奇”或者廣告等圖標。
SElinux的作用:
SElinux主要用於防內部,比如內部的文件權限、端口權限。這樣的話,應用程序就不會擁有過大的權限。
SELinux三種模式
enforcing #強制模式,攔截不合法請求(默認狀態)
permissive #只警告不攔截
disabled #對於越權行爲不警告也不攔截(即關閉SELinux)
查看當前SELinux的模式與狀態
getenforce #查看SELinux當前的模式
getsebool -a #查詢當前各項規則的布爾值
#舉例:
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/ #放開httpd這個程序對/home/wwwroot/的權限
SELinux的開關
- 臨時開關(無需重啓)
setenforce 0 #臨時關閉SELinux
setenforce 1 #臨時開啓SELinux
- 永久開關(需要重啓)
vim /etc/selinux/config
SELINUX=disabled #將SELinux的狀態設置爲disabled(關閉)
- 通常如何關閉和開啓SElinux
因爲臨時開關臨時有效,永久開關需要重啓。
所以我們通常結合兩種方式。
比如,關閉SELinux:
setenforce 0 #臨時關閉SELinux
vim /etc/selinux/config
SELINUX=disabled
Firewalld
與SELinux不同,這個防火牆主要用來防外部。比如:防止網絡上其他主機對某端口的訪問。
Firewalld還有其他很強大的功能:比如NAT轉發。
臨時放行端口
firewall-cmd --add-port=8080/tcp #放行8080端口的TCP協議
firewall-cmd --add-port=8080-8090/tcp #放行8080端口~8090端口的TCP協議
#注意:上面端口的UDP協議還是會被攔截。
臨時放行某個協議
firewall-cmd --add-service=https #臨時放行https協議(與放行443端口作用一樣)
臨時攔截某個協議
firewall-cmd --remove-service=https #臨時攔截https協議(與攔截443端口作用一樣)
#同理:攔截端口用的命令是--remove-port
查看firewalld中的規則
firewall-cmd --list-all #查看當前的規則(包括臨時)
firewall-cmd --list-all --permanent #查看永久規則
永久放行或攔截
前面講到的都是臨時有效的,重啓firewalld之後,規則就會失效(因爲會重新讀取配置文件)。
- 永久放行端口-方法1
firewall-cmd --add-port=8080/tcp --permanent #只會將規則寫入文件,但不立即生效
firewall-cmd --add-port=8080/tcp
- 永久放行端口-方法2
firewall-cmd --add-port=8080/tcp --permanent #只會將規則寫入文件,但不立即生效
firewall-cmd --reload #重啓firewlld(會重新讀取配置文件)