Thứ Hai, 28 tháng 4, 2014

XINETD trong linux

Xinetd là gì?

NAME

xinetd - the extended Internet services daemon  

Xinetd là một dịch vụ dùng để thay thế cho những internet service daemon cũ như inetd, tcp_wrappers...
Xinted cũng thực hiện các chức năng cơ bản tương tự như inetd : điều khiển các kết nối mạng đến hệ thống. File config của Xinetd sẽ quy đinh các service mà xnetd quản lý. Xinetd khởi chạy cùng với thời gian khởi chạy hệ thống và nằm yên cho tới khi có yêu cầu kết nối được gửi tới. Khi một request gửi tới một port được quản lý bởi Xinetd nó sẽ gửi request này tới server tương ứng mà nó quản lý, theo những quy định riêng của nó. 
Vì vậy, Chúng ta cóp thể goi xnetd như là một siêu máy chủ


Xined cung cấp một số tính năng nổi trội hơn như.
- Khả năng điều khiển truy cập
- Khả năng ngăn cản kiểu tấn công từ chối dịch vụ
- Khả năng log đa dạng hơn
- Khả năng giới hạn lượng process phục vụ dịch vụ.
- Khả năng tương tác người dùng.



Xinet hầu hết đã có sẵn trên những hệ điều hành Linux phổ biến và việc cài đặt nó khá đơn giản.
Download package dạng .tar.gz, giải nén và lần lượt chạy ./ config , make, make install.
Một số tuỳ chọn trong phần chạy ./config có thể bạn quan tâm.


--d : khởi chạy chế độ debug
--syslog: syslog_facility
log thông tin trong syslog 
--filelog: log to a file
--with-libwrap
Với tuỳ chọn này Xinetd sẽ kiểm tra các file cấu hình tcpd (/etc/hosts.allow, /etc/hosts.deny ) để xem yêu cầu kết nối có được phép thực hiện hay không, nếu không được phép Xinetd sẽ loại bỏ ngay các yêu cầu này, ngược lại nó sẽ thực hiện kết nối theo những quy định của nó.
--with-loadavg
Với tuỳ chọn này Xinetd sẽ sử dụng tuỳ chọn max_load trong những cấu hình của mình để deactive một số dịch vụ khi lâm vào tình trạng quá tải(có khả năng ngăn cản DOS).
--with-inet6
Hỗ trợ ipv6

File cấu hình chính /etc/xinetd.conf gồm hai phần chính "defaults section" và "services section"

defaults section
quy định những thuộc tính được áp dụng cho tất cả những dịch vụ chịu sự quản lý của Xinetd.
cấu trúc của nó dạng
defaults

{
attribute operator value(s)
...
}  services section
xác định những giá trị thuộc tính cho từng dịch vụ cụ thể, những dịch vụ  khai báo ở đây cũng phải được khai báo ở thuộc tính enabled ở phần defaults section.
Ở phần này có một số thuộc tính chung được sử dụng ở hầu hết các dịch vụ, nhưng cũng có những thuộc tính chí được sử dụng ở một số dịch vụ tuỳ vào đặc điểm của từng dịch vụ.

Cấu trúc của nó dạng

serviceservice_name

{

attribute operator value(s)

...

}

một số thuộc tính thường được sử dụng.
- instance
giới hạn số request lớn nhất được xử lý đồng thời hoặc số connection lớn nhất được phép kết nối. Thuộc tính này có khả năng chống kiểu tấn công từ chối dịch vụ.
- log_on_success
xác định những thông tin cần log lại khi có một kết nối được chấp nhận. Các giá trị có thể là HOST ( ghi lại địa chỉ ip của remote host), USERID (ghi lại id user đối với những dịch vụ yêu cầu xác thực user) EXIT (trạng thái kết thúc kết nối), DURATION ( thời gian kết nối) ...
- log_on_failure
xác định những thông tin cần được log lại đối với những kết nối không được chấp nhận ( do những quy định của file config ...) hoặc những kết nối không thể thực hiện được (do thiếu tài nguyên, lỗi hệ thống ...). Các giá trị có thể là HOST, USER ID, ATTEMPT ( những cố gắng tạo kết nối không thành ) RECORD (ghi tất cả những thông tin có thể ghi lại được của remote host).
- only_from
giới hạn những ip được phép thực hiện kết nối, giá trị mặc định là từ chối mọi kết nối (giống như giá trị mặc định của iptables) . Thông thường cấu hình là từ chối mọi kết nối tại phần defaults section là giới hạn ip được phép thực hiện kết nối tại phần services section đối với từng service cụ thể.
- per_source
xác định số lượng lớn nhất connection được phép thực hiện từ một địa chỉ ip, đâu cũng là một thuộc tính có khả năng chống tấn công từ chối dịch vụ.
- enabled
khai báo tất cả những dịch vụ được Xinetd quản lý tại đây.
sau đây là một số ví dụ cụ thể cho phần services section
service pop3s
{
socket_type = stream
wait = no
user = root
server = /usr/sbin/ipop3d
only_from = 0.0.0.0/0 #allows every client
no_access = 207.35.78.10
instances = 30
log_on_success += USERID
log_on_failure += USERID
nice = -2
}

- service pop3s
xác định dịch vụ mà bạn muốn config, bạn lưu ý rằng tên này (pop3s) không được sử dụng tuỳ ý theo ý mình,tên này đã được quy định trong file /etc/services 
- socket_type
xác định loại socket sử dụng cho dịch vụ này, các giá trị có thể là stream, dgram, raw, rdm, seqpacket. Với dịch vụ pop3s bạn phải sử dụng socket loại stream.
- wait
xác định xem Xinet có tiếp tục nhận các request sau khi connection được thiết lập ( yes ) hay là được gửi trực tiếp cho dịch vụ đó ( no ).
- user
xác định địch vụ được chạy với tài khoản user nào (thường là tài khoản root).
- server
xác đinh chương trình (đường dẫn đầy đủ ) được Xinetd chạy đẻ thực hiện dịch vụ khi có request gửi đến socket.
- only_from
xác định những ip được phép thực hiện kết nối, 0.0.0.0/0 ở đây có nghĩa là mọi client đều có thể thực hiện kết nối.
- no_access
xác định những ip không được phép thực hiện kết nối, việc kết hợp hai thuộc tính only_from và no_access cho ta những giới hạn ip rất mềm dẻo.
- instance
xác định số lượng request lớn nhất mà dịch vụ có thể xử lý đồng thời, giá trị khai báo ở đây ghi đè lên giá trị đã khai báo ở phần defaults section đối với dịch vụ pop3s.
- nice
qui định độ ưu tiên process dịch vụ (phạm vi giá trị từ -20 đến 19), độ ưu tiên mặc định mà hệ thống qui định cho process pop3s là 10, với việc tăng độ ưu tiên giúp cho khả năng tạo kết nối nhanh hơn
# description: An RFC 868 time server. This is the tcp \
# version, which is used by rdate.
service time
{
socket_type = stream
wait = no
user = root
type = INTERNAL
id = time-stream
protocol = tcp
only_from = 207.35.78.0/24 192.168.1.0/24
no_access = 207.35.78.10
}
# description: An RFC 868 time server. This is the udp \
# version.
service time
{
socket_type = dgram
wait = yes
user = root
type = INTERNAL
id = time-dgram
protocol = udp
only_from = 207.35.78.0/24 192.168.1.0/24
no_access = 207.35.78.10
port = 37
}
với những tcp connection giá trị của socket_type phải là stream, udp connection giá trị của socket_type phải là dgram.
- type
xác định loại dịch vụ, các giá trị có thể là RPC ( dịch vụ thuộc loại remote procedure call ), INTERNAL (dịch vụ được cung cấp bởi Xinetd ) UNLISTED (những dịch không thuộc dạng dịch vụ hệ thống chuẩn )
- id
với Xinetd mặc định thì giá trị của thuộc tính này cũng giống như tên của dịch vụ, nhưng với một số dịch vụ có khả năng thực hiện kết nối ở nhiều protocol thì cần phải có những giá trị id khác nhau để phân biệt chúng.
- protocol
xác định loại protocol mà dịch vụ sử dụng.
- port
xác định port mà ở đó kết nối được thực hiện.
service imaps
{
socket_type = stream
wait = no
user = root
server = /usr/sbin/imapd
only_from = 0.0.0.0/0 #allows every client
no_access = 207.35.78.10
instances = 30
log_on_success += DURATION USERID
log_on_failure += USERID
nice = -2
redirect = 192.168.1.14 993
bind = 207.35.78.3
}
- redirect
thuộc tính này cho phép dữ liệu nhận được của một dịch vụ TCP chạy trên một port xác định (993) được forward đến một host khác (192.168.1.14).
- bind
xác định địa chỉ ip mà tại đó dịch vụ sẵn sàng phục vụ.
với mục đích bảo vệ Xinetd bạn nên
- để file /etc/xinetd.conf chỉ có thể đọc được bởi root
chmod 400 /etc/xinetd.conf
- để đảm bảo file /etc/xinetd.conf không thể thay đổi được
chattr +i /etc/xinetd.conf

để chạy, dừng, hiển thị trạng thái Xinet bạn chỉ đơn giản thực hiện
/etc/init.d/Xinetd start|stop|status

1 nhận xét:

  1. xinetd là 1 thứ được ít người dùng (trên Ubuntu/Debian)

    http://ubuntuforums.org/showthread.php?t=1906546&p=12389493#post12389493

    Trả lờiXóa