linux下tcpwraper和xinetd超級守護程序通路控制詳解
1.tcpwraper概念:不同于iptables防火牆網絡通路控制,iptables可對于tcp/ip進行所有通路控制并且工作在核心中,而tcpwraper隻對部分具有tcp協定的服務進行網絡通路控制,友善那些對iptables不熟悉的人使用,也就是說,隻有那些連結libwraper.so庫檔案的服務,才受tcpwraper控制
2.ldd指令查詢服務是否加載動态libwrap.so庫檔案,如果加載,則受tcpwraper控制,否則不受控制
ldd `which 服務名稱` | grep libwrap
例如:ldd `which sshd` | grep libwrap
ldd `which xinetd` | grep libwrap
3.strings指令查詢是否加載靜态hosts.allow和host.deny檔案,如果加載,則受tcpwraper控制,否則不受控制
strings `which portmap` | grep hosts
4.tcpwraper控制機制:主要由/etc/hosts.allow和/etc/hosts.deny這兩個檔案進行控制
比對順序:首先查詢/etc/hosts.allow,再查詢/etc/hosts.deny,最後預設規則是允許所有通過
/etc/hosts.allow和/etc/hosts.deny檔案格式:
服務清單: 用戶端清單 [:選項]
服務清單有下幾種類型寫法:
sshd
vsftpd,sshd,in.telnetd #可以寫多個服務
ALL
用戶端清單有下幾種類型寫法:
IP
network/mask(如172.16.1.0/255.255.255.0)
172.16.1.
FQDN #完整合格域名,如mail.willow.com
.example.com #域名
ALL #所有主機
LOCAL,KNOWN,UNKNOWN,PARANOID
EXCEPT #意思是除了
選項有如下幾種類型寫法:
DENY #在host.allow檔案中可以寫DENY
ALLOW #在host.deny檔案中可以寫ALLOW
spawn #可以在後面執行一樣指令
tcp_wraper宏定義:
%c:代表用戶端資訊(user@host)
%s:代表伺服器資訊(server@host)
%h:用戶端主機名(hostname)
%p:服務ID(server PID)
tcp_wraper宏定義查詢方法: man 5 hosts_access
5.執行個體:不允許1.1.1.0/24通路本機telnet服務,但允許1.1.1.100通路,其他用戶端不受控制
5.1.方法1:
vim /etc/hosts.allow
in.telnetd: 1.1.1.100
vim /etc/hosts.deny
in.telnetd: 1.1.1.0/255.255.255.0
5.2.方法2:
in.telnetd: 1.1.1. EXCEPT 1.1.1.100
5.3.方法3
in.telnetd: ALL EXCEPT 1.1.1. EXCEPT 1.1.1.100
in.telnetd: ALL
6.在hosts.allow檔案中,拒絕1.1.1.0/24通路本機sshd服務,這是一種不常見寫法
vim /etc/host.allow
sshd: 1.1.1. :DENY
7.允許1.1.1.0/24通路本機sshd服務,但必須将其登入日志進行記錄
sshd: 1.1.1. :spawn echo "`date`, Login attempt from %c to %s" >> /var/log/tcpwarper.log
8.xinetd超級守護程序
守護程序分為獨立守護程序和瞬時或短暫守護程序
而xinetd屬于獨立守護程序,但xinetd控制多個瞬時或短暫守護程序,是以叫做超級守護程序
xinetd超級守護程序:有多個非獨立守護程序,也是瞬時或短暫守護程序
主要配置檔案:/etc/xinetd.conf,包含/etc/xinetd.d/*所有短暫守護程序配置檔案
配置檔案分為兩部分:全局和服務配置
配置檔案格式:
service <服務名稱>
(
屬性 操作符 值
..............
)
9.xinetd超級守護程序通路控制
man xinetd.conf #查詢此檔案的配置參數方法
比對規則:only_from與no_access誰精确比對用誰的條目
格式如下:
only_from = #僅允許通路的用戶端,取值有如下常見幾種
IP #如1.1.1.100
NETWORK #如1.1.1.0/24或1.1.1.0/255.255.255.0
HOSTNAME #如mail.willow.com
DOMAIN #如.mail.willow
no_access = #拒絕通路的用戶端,取值格式與only_from一樣
10.時間通路控制:
格式: access_times = hh:mm-hh:mm
例如: access_times = 08:00-17:00 #僅允許在上午8點至下午5點允許通路
11.偵聽的位址通路控制
格式: bind =
interface = #不常見
例如:本機有3個IP,172.16.1.6,172.16.2.6,192.168.1.6,隻想偵聽172.16.2.6這個位址
bind = 172.16.2.6
12.資源通路控制
cps = 每秒連接配接的最大并發數 如超過最大并發數的禁用時長
per_source = 每個IP位址最多連接配接個數
instances = 最大連接配接數(執行個體)
banner = 自定義檔案路徑 #登入提示資訊
13.實驗對rsync服務進行如下通路控制:
(1).偵聽在1.1.1.19位址并提供服務
(2).僅允許1.1.1.0/24網絡内的主機通路,拒絕1.1.1.144主機通路
(3).僅允許同時運作最多3個執行個體,并且每個IP隻能發起2個請求
(4).僅允許在上午10點至下午15點允許通路
vim /etc/xinetd.d/rsync
service rsync
{
disable = no
bind = 1.1.1.19
only_from = 1.1.1.0/24
no_access = 1.1.1.144
instances = 3
per_source = 2
access_times = 10:00-15:00
}
service xinetd restart
netstat -antlp | grep 873 #檢視rsync服務是否啟動且rsync工作在873/tcp端口
再使用rsync指令進行測試即可
14.xinetd超級守護程序也可以通過syslog和file進行記錄日志,相關檢視/etc/xinetd.conf檔案
log_type = SYSLOG daemon info
log_type = FILE /var/log/xxx.log
15.總結:linux系統下的通路控制,常見有3種實作方式,iptables,tcp_wraper,xinetd方式
具體使用哪種方式控制通路,看個人使用習慣和技術特長,因人而異,隻要達到目的即可,哈!