Linux防火墻(如firewalld、iptables)本身不直接提供完整的身份驗證功能,但可通過集成PAM模塊、IP白名單、應用層認證或輔助工具(如fail2ban)實現身份驗證。以下是具體方法:
firewalld依賴PAM(可插拔認證模塊)進行用戶身份驗證,可配置為使用系統用戶數據庫或自定義數據庫。
編輯PAM配置文件:
打開/etc/pam.d/firewalld文件,添加或修改以下行,指示firewalld使用系統用戶數據庫(passwd)進行認證:
auth required pam_userdb.so db=/etc/passwd
若需使用自定義數據庫(如/etc/custom_passwd),需先創建數據庫:
sudo useradd testuser && sudo passwd testuser # 創建系統用戶
sudo db_load -T -t hash -f /etc/passwd /etc/passwd.db # 轉換為數據庫格式
然后將PAM配置中的db=/etc/passwd改為db=/etc/passwd.db。
驗證配置:
修改/etc/pam.d/firewalld后,重啟firewalld服務使配置生效:
sudo systemctl restart firewalld
此時,訪問防火墻管理的資源(如通過firewall-cmd命令)需輸入系統用戶密碼。
通過firewalld的**區域(Zone)**功能,將受信任的IP地址添加到特定區域(如trusted),實現“IP即身份”的認證。
192.168.1.100)添加到trusted區域:sudo firewall-cmd --permanent --zone=trusted --add-source=192.168.1.100
sudo firewall-cmd --reload
此時,僅192.168.1.100能訪問trusted區域的資源(如SSH、Web服務)。若需對特定應用(如Apache、Nginx)的訪問進行身份驗證,可通過firewalld放行應用層認證流量,并結合應用自身配置實現。
/var/www/html/admin)中創建.htpasswd文件(存儲用戶名和密碼):sudo htpasswd -c /etc/apache2/.htpasswd admin # 創建用戶admin
然后修改Apache配置文件(如/etc/httpd/conf/httpd.conf),添加以下內容:<Directory "/var/www/html/admin">
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
Order Deny,Allow
Allow from 192.168.1.0/24 # 僅允許內網IP訪問
Deny from all
</Directory>
firewalld放行HTTP(端口80)或HTTPS(端口443)流量:sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
此時,訪問http://server-ip/admin需輸入用戶名和密碼,且IP需在允許范圍內。fail2ban通過監控日志(如/var/log/auth.log),自動封禁多次認證失敗的IP地址,間接增強身份驗證安全性。
fail2ban:sudo yum install fail2ban # CentOS
sudo apt install fail2ban # Ubuntu
編輯SSH保護配置(/etc/fail2ban/jail.local):[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3 # 允許的最大失敗次數
bantime = 3600 # 封禁時間(秒)
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
此時,若同一IP在3次內輸入錯誤密碼,fail2ban將自動封禁該IP1小時,防止暴力破解。firewalld、PAM、fail2ban等軟件為最新版本,修復已知安全漏洞。以上方法可根據實際需求組合使用(如“PAM認證+IP白名單+fail2ban”),實現多層身份驗證,提升Linux防火墻的安全性。