리눅스마스터 1급 2차 요약정리 - 8 (TCPwrapper / xinetd / Proxy)
TCP wrapper 작성 규칙
※ TCP Wrapper
: 슈퍼데몬인 inetd에 의하여 수행되는 서비스들의 접근을 제어하는 TCP 연결 기반 프로그램
: sshd, vsftpd, rsh 등을 이용해 접속하는 호스트를 제어.
/etc/hosts.allow : 접근이 허가된 호스트의 목록 파일
/etc/hosts.deny : 접근이 거부된 호스트의 목록 파일
TCP wrapper 파일 형식
daemon_list : client_list [ : shell_command ]
- daemon_list : 서버 프로그램 혹은 예약어. in.telnetd와 같은 실행 데몬명으로 작성
- client_list : 접속을 제어할 호스트
- [ : shell_command] : spawn<자식 프로세스 생성>과 twist<프로세스 교체>로 실행
- 예약어
: ALL (모든 서비스 또는 호스트)
: LOCAL (같은 도메인에 있는 호스트. . 을 포함하지 않는 모든 호스트)
: KNOWN / UNKNOWN (이름이 KNOWN인 호스트 또는 이름을 알고 있는 호스트)
: PARANOID (호스트명과 주소가 일치되지 않는 호스트)
: 가 EXCECPT 나 (리스트 가에서 나를 제외한 모든 호스트)
- shell_command 확장옵션
%a (%A) 클라이언트(서버)의 주소
%c 클라이언트의 정보 (user@host 또는 user@address)
%d 데몬 프로세스의 이름
%h (%H) 클라이언트(서버)의 호스트명 또는 주소
%n (%N) 클라이언트(서버)의 호스트명 또는 unknown, paranoid
%p 데몬의 PID
%s 서버의 정보 (daemon@host 또는 daemon@address)
%u 클라이언트 사용자면 또는 unknown
/etc/hosts.allow 혹은 /etc/hosts/deny 예시 <쉘 명령어를 등록 하는 방식임>
ALL : cracker.aa.com : twist (finger -l @%h | mail -s %d -%h root)
in.telnetd : 192.168.5.13
in.telnetd@192.168.1.254 : 192.168.1.
sshd : .aa.com EXCEPT cracker.aa.com
ALL EXCEPT vsftpd : .comeve.kr EXCEPT bad_man.comeve.kr
xinetd (Extend Inetd)
※ xinetd : TCP wrapper를 사용하는 inetd를 대체. 환경설정 파일을 이용해 자체적 접근 제어 가능. IP 주소 당 접속 수 제한, 시간대별 서비스 제한, Dos 공격에 대비한 설정 등을 추가로 제공
- xinetd의 구성
/etc/xinetd.conf : xinetd의 전페적인 환경 설정을 담당하는 파일
/etc/xinetd.d : xinetd에 의해 관리 및 제어되는 서비스 파일들이 위치하는 디렉터리
/etc/rc.d/init.d/xinetd : xinetd 데몬스크립트 파일
/etc/xinetd.conf 주요 항목
log_type = 어떠한 형태로 로그를 저장할 것인지 지정. SYSLOG (syslog에 기록), FILE (별도 파일 지정)
log_on_failure = 접속에 실패 시 기록될 속성값 지정. HOST (원격 호스트의 IP 주소), USERID (원격 사용자 ID), ATTEMPT (실패한 시도)
log_on_success = 접속 성공 시 기록될 속성 값 지정. PID (실행된 서버의 pid), HOST, USERID, EXIT (관련 서비스가 종료될 때 상태), DURATION (서비스의 세션 지속 상태), TRAFFIC (리다이렉트 서비스를 위한 전체 바이트수)
cps = 초당 요청 받은 수에 대한 제한 설정. 요청수, 제한시간
instances = 동시에 서비스 할 수 있는 서버의 최대 개수. 개수, UNLIMITED
per_source = 특정 IP 주소에서 접속할 수 있는 최대 개수. 개수
only_from = 서비스를 이용할 수 있는 원격 호스트. 서버에 접속을 허가할 호스트의 IP주소, 네트워크 대역 주소 등 사용 가능. IP주소, [네트워크 대역주소]
no_access = 서비스를 이용할 수 없는 원격 호스트 주소 지정. only_from과 옵션 동일
enabled = 사용 가능한 서비스 목록을 지정
disabled = 사용 불가한 서비스 목록 지정
includedir 각 서비스 파일에서 사용되는 주요 속성과 속성값
/etc/xinetd.conf 예시
defaults
{
log_type = SYSLOG daemon info # FILE /ver/log/xinetd.log
log_on_failure = HOST
log_on_success = PID HOST DURATION EXIT
cps = 50 10 # 초당 요청수가 50이상이면 10초간 연결 중단
instances = 50
per_source = 10
enabled = telnet rlogin
includedir /etc/xinet.d
}
/etc/xinetd.d/서비스명 주요 항목
: /etc/xinetd.conf의 설정 항목과 동일
flags = 서비스 운영 관련 설정. REUSE (지속적 재사용)
socket_type = 네트워크 소켓 타입. steam <stream>, dgram <datagram>, raw <ip 직접 접근 필요>, seqpacket <신뢰성 있는 연속적인 데이터그램 전송>
wait = 서비스의 스레드 여부. yes <단일 스레드>, no <다중 스레드>
user = 서버 프로세스의 UID 지정. root 등
server = 서비스를 실행하는 데몬 파일의 경로. /usr/sbin/in.telnetd
log_on_failure += 로그 관련 설정. /etc/xinetd.conf에 지정된 설정에 추가하거나 뺄 옵션 지정
access_times = 서비스 이용가능 시간 설정. 01:00-07:00
redirect = 해당 서비스를 다른 서버로 포워딩 할 경우 지정
port = 서비스의 포트번호 지정
nice = 서버의 우선순위
/etc/xinetd.d/서비스명의 예시 (telnet)
service telnet
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
access_times = 09:00-17:00 21:00-23:59
per_source = 3
only_from = 192.168.12.22 192.168.5.0/24
no_access = 192.168.5.13
log_type = FILE /ver/log/telnet.log
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
Squid (프록시 서버 프로그램) 설정 (/etc/squid/squid.conf)
http_port 프록시 서버의 포트 번호 지정. 기본 3128
cache_dir ufs /var/spool/squid 100 16 256 캐시 정보 저장 경로 설정. ufs <squid 저장 포맷>, 100 <저장되는 캐시 정보의 크기>, 16 <캐시가 저장되는 첫 번째 하위 디렉터리의 개수>, 256 <두 번째 하위 디렉터리 개수>
/etc/squid/squid.conf의 ACL 설정
acl 별칭 src IP주소/넷마스크 값
acl 별칭 dst IP주소/넷마스크 값
acl 별칭 srcdomain .foo.com
acl 별칭 dstdomain .foo.com
http_access allow / http_access deny
/etc/squid/squid.conf 예시
http_port 3128
cache_dir ufs /var/spool/squid 100 16 256
acl deragon src 192.168.4.0/255.255.255.0
acl 2mukee ssrcdomain .example.com
acl exploit dstdomain .exploit-db.com
http_access allow deragon
http_access allow 2mukee
http_access deny exploit
http_access deny all