seliunx、iptables、firewalld
一、seliunx
1、作用
最大限度地減小系統中服務進程可訪問的資源(最小權限原則)
2、context上下文
[root@localhost ~]# ls -Z
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 initial-setup-ks.cfg
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 公共
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 模板
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 視頻
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 圖片
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 文檔
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 下載
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 音樂
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 桌面
u:user;r:規則;t:type類型。
[root@localhost ~]# pstree -Z
systemd(`system_u:system_r:init_t:s0')
├─ModemManager(`system_u:system_r:modemmanager_t:s0')
│ └─2*[{ModemManager}(`system_u:system_r:modemmanager_t:s0')]
├─NetworkManager(`system_u:system_r:NetworkManager_t:s0')
│ └─2*[{NetworkManager}(`system_u:system_r:NetworkManager_t:s0')]
├─VGAuthService(`system_u:system_r:vmtools_t:s0')
├─abrt-dbus(`system_u:system_r:abrt_t:s0-s0:c0.c1023')
│ └─2*[{abrt-dbus}(`system_u:system_r:abrt_t:s0-s0:c0.c1023')]
字段 | 說明 | 含義 |
---|---|---|
u身份識別 | unconfined:不受限制的用戶 | 防止本地以外的人的訪問 |
system_u | 系統用戶只有系統有權限 | |
r規則 | boject_r | 文件或者目錄的資源 |
system_r | 系統資源,注意普通用戶創建的也屬於system_r | |
t類型 | 訪問策略 |
3、配置文件
1、配置文件分析
[root@localhost ~]# vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected, //目標進程收到保護
# minimum - Modification of targeted policy. Only selected processes are protected. //修改有針對性的政策。只有選定的進程受到保護。
# mls - Multi Level Security protection. //多層安全保護
SELINUXTYPE=targeted
2、工作模式
工作模式 | 說明 |
---|---|
enforcing | 強制模式。違反 SELinux 規則的行爲將被阻止並記錄到日誌中。 |
permissive | 寬容模式。違反 SELinux 規則的行爲只會記錄到日誌中。一般爲調試用。 |
disabled | 關閉 SELinux。 |
3、SELinux 日誌的記錄
[root@localhost ~]# systemctl status auditd.service
● auditd.service - Security Auditing Service
Loaded: loaded (/usr/lib/systemd/system/auditd.service; enabled; vendor preset: enabled)
Active: active (running) since 六 2020-05-23 12:14:40 CST; 1 weeks 3 days ago
Docs: man:auditd(8)
https://github.com/linux-audit/audit-documentation
Process: 682 ExecStartPost=/sbin/augenrules --load (code=exited, status=0/SUCCESS)
Process: 669 ExecStart=/sbin/auditd (code=exited, status=0/SUCCESS)
Main PID: 673 (auditd)
Tasks: 5
CGroup: /system.slice/auditd.service
├─673 /sbin/auditd
├─675 /sbin/audispd
└─677 /usr/sbin/sedispatch
......
4、修改上下文
[root@localhost html]# ll -Z test.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 test.html
[root@localhost html]# setenforce 0 //關閉selinux
[root@localhost html]# chcon -t admin_host_t test.html //更改安全標籤
[root@localhost html]# ll -Z test.html
-rw-r--r--. root root unconfined_u:object_r:admin_host_t:s0 test.html
[root@localhost html]# setenforce 1 //打開selinux
[root@localhost html]# restorecon test.html //恢復其默認標籤
[root@localhost html]# ll -Z test.html
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 test.html
或者使用setroubleshoot工具
[root@localhost ~]# yum install setroubleshoot
[root@localhost ~]# tailf /var/log/messages
Jun 2 22:40:42 localhost setroubleshoot: failed to retrieve rpm info for /var/www/html/test.html
Jun 2 22:40:43 localhost setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/test.html. For complete SELinux messages run: sealert -l 1a3bed1b-1cae-4183-afd6-e2f662bc0bf9
......
[root@localhost ~]# sealert -l 1a3bed1b-1cae-4183-afd6-e2f662bc0bf9 //根據提供的方案解決問題
......
然後執行:
restorecon -v '/var/www/html/test.html'
......
二、iptables
1、策略與規則鏈
1、操作順序:從上倒下,如沒有匹配則執行默認(放行或阻止)
2、規則鏈
規則鏈 | 說明 |
---|---|
filter表 | 過濾數據包 |
Nat表 | 用於網絡地址轉換(IP、端口) |
Mangle表 | 修改數據包的服務類型、TTL、並且可以配置路由實現QOS |
Raw表 | 決定數據包是否被狀態跟蹤機制處理 |
INPUT鏈 | 進來的數據包應用此規則鏈中的策略 |
OUTPUT鏈 | 外出的數據包應用此規則鏈中的策略 |
FORWARD鏈 | 轉發數據包時應用此規則鏈中的策略 |
PREROUTING鏈 | 對數據包作路由選擇前應用此鏈中的規則(所有的數據包進來的時侯都先由這個鏈處理) |
POSTROUTING鏈 | 對數據包作路由選擇後應用此鏈中的規則(所有的數據包出來的時侯都先由這個鏈處理) |
2、基本的命令參數
參數 | 作用 | 參數 | 作用 |
---|---|---|---|
-P | 設置默認策略 | -F | 清空規則鏈 |
-L | 查看規則鏈 | -A | 在規則鏈的末尾加入新規則 |
-I num | 在規則鏈的頭部加入新規則 | -D num | 刪除某一條規則 |
-s | 匹配來源地址IP/MASK,加歎號“!”表示除這個IP外 | -d | 匹配目標地址 |
-i | 網卡名稱 匹配從這塊網卡流入的數據 | -o | 網卡名稱 匹配從這塊網卡流出的數據 |
-p | 匹配協議 | –dport num | 匹配目標端口號 |
–sport num | 匹配來源端口號 |
1、查看已有的防火牆規則鏈
[root@localhost ~]# iptables -L
2、清空已有的防火牆規則鏈
[root@localhost ~]# iptables -F
3、把INPUT規則鏈的默認策略設置爲丟棄
[root@localhost ~]# iptables -P INPUT DROP //設置後xshell等連接工具就連不上虛擬機
4、拒絕ping使不可達
[root@localhost ~]# iptables -I INPUT -p icmp -j REJECT
5、丟棄ping使超時
[root@localhost ~]# iptables -I INPUT -p icmp -j DROP
6、查看添加的規則
[root@localhost ~]# iptables-save //添加了3條針對ICMP的規則
# Generated by iptables-save v1.4.21 on Tue Jun 2 23:14:23 2020
*security
*filter
:INPUT ACCEPT [28:1588]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [22:1752]
-A INPUT -p icmp -j ACCEPT
-A INPUT -p icmp -j DROP
-A INPUT -p icmp -j REJECT --reject-with icmp-port-
unreachable
COMMIT
# Completed on Tue Jun 2 23:14:23 2020
......
7、刪除添加的規則
[root@localhost ~]# iptables -D INPUT 3
8、只允許指定網段的主機訪問本機的22端口,拒絕來自其他所有主機的流量
[root@localhost ~]# iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j REJECT
[root@localhost ~]# iptables-save
# Generated by iptables-save v1.4.21 on Tue Jun 2 23:18:26 2020
*filter
:INPUT ACCEPT [1:40]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [12:1136]
-A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 22 -j
ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j REJECT --reject-with
icmp-port-unreachable
COMMIT
# Completed on Tue Jun 2 23:18:26 2020
三、firewalld
1、firewalld的預定義區域說明
區域 | 說明 |
---|---|
trusted(信任區域) | 可接收所有的網絡連接 |
public(公共區域) | 允許指定的進入鏈接 |
work(工作區域) | 允許受信任的計算機被限制的進入鏈接 |
home(家庭區域) | 同work,如果流量和ssh,dhcpv6-client等服務相關,則允許 |
internal(內部區域) | 同work,範圍針對所有互聯網用戶 |
external(外部區域) | 同public,處理僞裝的進入鏈接,一般用於路由轉發 |
dmz(隔離區域也稱爲軍事區域) | 允許受限制的進入鏈接 |
block(限制區域) | 拒絕所有外部發起的鏈接,允許內部發起的鏈接 |
drop(丟棄區域) | 丟棄所有進入的包,而不給出任何迴應 |
2、firewall的狀態
[root@localhost ~]# firewall-cmd --state //查看防火牆的狀態
[root@localhost ~]# firewall-cmd --reload //重新加載防火牆,中斷用戶的連接,將臨時配置清掉,加載配置文件中的永久配置
[root@localhost ~]# firewall-cmd --complete-reload //重新加載防火牆,不中斷用戶的連接(防火牆出嚴重故障時使用)
[root@localhost ~]# firewall-cmd --panic-on //緊急模式,強制關閉所有網絡連接,--panic-off是關閉緊急模式
3、firewall命令
1、基本命令
查看firewalld服務當前所使用的區域
[root@localhost ~]# firewall-cmd --get-default-zone
public
顯示默認區域的所有規則
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client https ssh
ports: 8080-8081/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
查詢ens33網卡在firewalld服務中的區域
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
public
將網絡接口ens33對應區域更改爲internal區域
[root@localhost ~]# firewall-cmd --zone=public --change-interface=ens33
success
[root@localhost ~]# firewall-cmd --zone=internal --list-interfaces
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
public
顯示所有激活區域
[root@localhost ~]# firewall-cmd --get-active-zones
public
interfaces: ens33
2、服務管理
顯示默認區域內允許訪問的所有服務
[root@localhost ~]# firewall-cmd --list-services
dhcpv6-client ssh
設置默認區域允許訪問http服務
[root@localhost ~]# firewall-cmd --add-service=http
success
查詢public區域是否允許請求SSH和HTTPS協議的流量
[root@localhost ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@localhost ~]# firewall-cmd --zone=public --query-service=https
no
把firewalld服務中請求HTTPS協議的流量設置爲永久允許,並立即生效
[root@localhost ~]# firewall-cmd --zone=public --add-service=https
success
[root@localhost ~]# firewall-cmd --zone=public --add-service=https --permanent
success
[root@localhost ~]# firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client http https ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
禁止ping
[root@localhost ~]# firewall-cmd --add-icmp-block=echo-request --zone=dmz --permanent
success
3、端口管理
在internal區域打開443/TCP 端口
[root@localhost ~]# firewall-cmd --zone=internal --add-port=443/tcp
success
把在firewalld服務中訪問8080和8081端口的流量策略設置爲允許,但僅限當前生效
[root@localhost ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
success
[root@localhost ~]# firewall-cmd --zone=public --list-ports
8080-8081/tcp
把原本訪問本機888端口的流量轉發到22端口,要且求長期有效且立即生效
[root@localhost ~]# firewall-cmd --zone=public --add-forward-port=port=888:proto=tcp:toport=22 --permanent
success
4、富規則
rule [family="<rule family>"]
[ source address="<address>" [invert="True"] ]
[ destination address="<address>" [invert="True"] ]
[ <element> ]
[ log [prefix="<prefix text>"] [level="<log level>"] [limit value="rate/
duration"] ]
[ audit ]
[ accept|reject|drop ]
參數 | 解釋 |
---|---|
source | 限制源IP地址,源地址可以是—個IPv4,IPv6地址或者一個網絡地址段 |
destination | 限制目標地址,目標地址使用跟源地址相同的語法 |
log | 註冊有內核曰志的連接請求到規則中。如系統曰志 |
audit | 審覈,審覈類型可以是accept, reject或drop中的一種 |
accept reject drop | 指定accept時所有新的連接請求都將被允許。指定reject時連接將被拒絕,發起端將接到—個拒絕信息。指定drop時所有數據包會被丟棄並且不會向發起端發送任何信息 |
element | 要素 |
service | 服務名稱。命令格式爲service name = service_name |
port | 端口。命令格式爲port port = number _or _range protocoI = protocoI |
protocol | 協議。命令格式爲 protocol value = protocol_name_or _ID |
icmp-block | 阻斷—個或多個 ICMP類型。命令格式爲icmp-block name = icmptype_name |
masquerade | 規則裏的IP僞裝。 |
forward-port | 將指定的TCP或UDP協議的數據包轉發到本機的其他端口。 |