최초 설치 우선 하드의 배드섹터를 체크하고 수정한다. iptables로 방화벽 구성 사용자 계정을 한 곳에서 관리하기 위해 NIS 설치 윈도우 클라이언트에서 쉽게 접근 가능하도록 삼바 설정 원격에서 X윈도우로 관리가 가능한 TightVNC를 설치한다. (기존의 VNC는 사용하지 않음) 콘솔에서 한글을 사용하기 위해 jfbterm 설치 (콘솔 한글이 안될 경우) 한글 man페이지 지원을 위한 less 재설치 (man 페이지가 정상적이지 않을 경우) 도메인 네임 서버 설정 타임 서비스와 시간 동기화 (네트웤 타임 동기화가 없을 경우) 메일 서버와 메일 백신 설정 메일 서버를 제외한 서버들의 백신 설정 FTP 서버 설정 Web 서버 설정 사용자 계정 관리용 스크립트 제작 사용 |
d:tcp:20 d:tcp:21 d:tcp:25 d:tcp:53 d:udp:53 s:tcp:53 s:udp:53 d:tcp:80 d:tcp:110 d:tcp:143 d:tcp:220 d:tcp:465 d:tcp:993 d:tcp:995 . 218.235.99.62 218.235.99.63 218.235.99.64 218.235.99.65 218.235.99.66 218.235.99.67 218.235.99.68 218.235.99.69 218.235.99.70 218.235.99.71 218.235.99.72 218.235.99.73 218.235.99.74 218.235.99.76 . # 데이타 중간엔 주석이 들어가선 안된다. # 여기서부터는 주석 포트를 열때는 가능한 적게 열어 외부 서비스를 구성하고 신뢰하는 IP를 적당히 열어서 내부 서비스를 구성한다. 포트를 여는 형식은 '<s|d>:[tcp|udp]:[포트]' 제일 앞의 s는 소스 포트를 허용할 때 d는 현재 호스트의 목적 포트를 허용할 때 's:udp:53'은 반드시 있어야 dns 응답을 받을 수 있다. ftp-data 20/tcp ftp 21/tcp ssh 22/tcp # SSH Remote Login Protocol telnet 23/tcp smtp 25/tcp mail time 37/tcp timserver nameserver 42/tcp name # IEN 116 domain 53/tcp # name-domain server domain 53/udp # name-domain server http 80/tcp www www-http # WorldWideWeb HTTP pop3 110/tcp pop-3 # POP version 3 imap 143/tcp imap2 # Interim Mail Access Proto v2 imap3 220/tcp # Interactive Mail Access smtps 465/tcp # SMTP over SSL (TLS) imaps 993/tcp # IMAP over SSL pop3s 995/tcp # POP-3 over SSL |
---------------------------------------------------------------- 방화벽 설정용 스크립트 생성 # rulemaker -i ipdata -o /etc/sysconfig/ipfilter # chmod 700 /etc/sysconfig/ipfilter 실행 및 확인 # /etc/sysconfig/ipfilter # iptables -L 재부팅시 자동으로 실행되게 추가 # vi /etc/rc.local -다음을 마지막에 추가------------------------------------------- |
/etc/sysconfig/ipfilter |
---------------------------------------------------------------- 브로드캐스팅 핑 막기 # echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 재부팅 해도 막도록 rc.local에 추가 # vi /etc/rc.local -다음을 마지막에 추가------------------------------------------- |
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts |
---------------------------------------------------------------- DNS버전 정보 감추기 # vi /etc/named.conf -다음을 확인 및 수정-------------------------------------------- |
options { version "unknown"; //버전 정보 감추기 directory "/var/named"; }; |
---------------------------------------------------------------- -첨부된 서비스별 포트 번호 참고--------------------------------- ================================================================================ 사용자 계정을 한 곳에서 관리하기 위해 NIS 설치 -------------------------------------------------------------------------------- NIS는 다음과 같이 설치된다. 도메인 이름 : sorii-lan 마스터 서버 : home.sorii.com 슬래이브 서버 : ns.sorii.com 클라이언트 : 218.235.99.* 이후의 작업에 영향을 주도록 도메인 설정 # domainname sorii-lan [ 마스터, 슬레이브, 클라이언트 공통 ] NIS도메인 추가 # vi /etc/sysconfig/network -다음을 마지막에 추가------------------------------------------- |
NISDOMAIN=sorii-lan |
---------------------------------------------------------------- 호스트 바로가기 추가 # vi /etc/hosts -다음을 마지막에 추가------------------------------------------- |
218.235.99.62 ns.sorii.com ns 218.235.99.63 home.sorii.com home |
---------------------------------------------------------------- NIS를 통한 서비스 가능성 추가 # vi /etc/nsswitch.conf 가능한 모든 항목 뒤에 'nis'를 추가 모든 서버가 동일한 항목에 대해 nis 설정 NIS 사용자 처리가 가능하도록 추가 # vi /etc/passwd -다음을 마지막에 추가------------------------------------------- |
+:::::: |
---------------------------------------------------------------- 재부팅 때마다 실행되도록 서비스 등록 서비스 리스트 목록을 검사한 후 # chkconfig --list | grep ypbind 목록에 없으면 추가한다. # chkconfig --add ypbind 서비스를 활성 시킨다. # chkconfig ypbind on [ 마스터, 슬레이브 공통 ] 허가권 설정 # vi /var/yp/securents -다음을 작성---------------------------------------------------- |
# allow connections from local host -- necessary host 127.0.0.1 # same as 255.255.255.255 127.0.0.1 # # allow connections from any host # on the 218.235.99.0 network 255.255.255.0 218.235.99.0 |
---------------------------------------------------------------- # vi /etc/ypserv.conf -다음의 내용을-------------------------------------------------- |
# * : * : * : none |
-아래처럼 바꾼다------------------------------------------------ |
* : * : * : none |
---------------------------------------------------------------- [ 마스터 서버 ] 슬레이브 서버 목록 파일을 만든다 # vi /var/yp/ypservers -다음을 작성---------------------------------------------------- |
ns.sorii.com |
---------------------------------------------------------------- 맵DB를 생성 # /usr/lib/yp/ypinit -m 이후에 슬레이브로 사용될 서버들의 host이름까지 추가한 후 Ctrl+D를 눌러 db생성 마스터가 갱신될 때 슬레이브 서버도 같이 갱신시키기 원하면 NOPUSH옵션을 해제한다. # vi /var/yp/Makefile -다음의 내용을-------------------------------------------------- |
NOPUSH=true |
-아래처럼 바꾼다------------------------------------------------ |
NOPUSH=false |
---------------------------------------------------------------- 매우 느릴 수 있으므로 NOPUSH옵션은 켜두는 것이 좋다. 대신 마스터가 make하면 슬레이브쪽에서도 make하는 것이 좋다 이후부터 맵DB를 갱신하기 위해서는 # cd /var/yp/ # make [ 슬레이브 서버 ] 마스터 서버를 확인 # ypwhich -m 맵DB를 동기화 # /usr/lib/yp/ypinit -s home 이후부터 맵DB를 갱신하기 위해서는 # cd /var/yp/ # make [ 마스터 슬레이브 공통 ] 재부팅 때마다 실행되도록 서비스 등록 서비스 리스트 목록을 검사한 후 # chkconfig --list | grep yp 목록에 없으면 추가한다. # chkconfig --add ypserv # chkconfig --add yppasswdd # chkconfig --add ypxfrd 서비스를 활성 시킨다. # chkconfig ypserv on # chkconfig yppasswdd on # chkconfig ypxfrd on 서버가 실행 중인지 확인 # rpcinfo -u localhost ypserv [ 마스터, 슬레이브, 클라이언트 공통 ] 클라이언트가 실행 중인지 확인 # rpcinfo -u localhost ypbind ================================================================================ 윈도우 클라이언트에서 쉽게 접근 가능하도록 삼바 설정 -------------------------------------------------------------------------------- SMB는 다음과 같이 설치된다. 워크그룹 이름 : sorii-lan 마스터 서버 : home.sorii.com 슬레이브 서버 : *.sorii.com 마스터 서버에서만 계정을 추가 삭제하고 WINS와 도메인 서버로 구성하여 슬레이브 서버는 마스터의 로그인 정보를 사용하도록 한다. 삼바 설정 파일 수정 # vi /etc/samba/smb.conf -마스터 서버는 첨부된 마스터 smb.conf를 참고-------------------- -슬레이브 서버는 첨부된 슬레이브 smb.conf를 참고---------------- 슬레이브 서버는 'server string = '항목에 적당한 서버이름을 넣는다 공유될 폴더에 관한 설정을 수정하려면 '== Share Definitions =='아래의 항목을 수정한다 실행 및 확인 # /etc/init.d/smb start 윈도우 클라이언트의 탐색기에서 '\\xxx.xxx.xxx.xxx'나 '\\x.sorii.com'으로 접속해본다 재부팅 때마다 실행되도록 서비스 등록 서비스 리스트 목록을 검사한 후 # chkconfig --list | grep smb 목록에 없으면 추가한다. # chkconfig --add smb 서비스를 활성 시킨다. # chkconfig smb on ================================================================================ 원격에서 X윈도우로 관리가 가능한 TightVNC를 설치한다. (기존의 VNC는 사용하지 않음) -------------------------------------------------------------------------------- TightVNC 서버 버전 다운 받기 http://www.tightvnc.com/download.html 서버 rpm 설치 # rpm -Uvh tightvnc-server-1.2.9-1.i386.rpm 패스워드 생성 # vncpasswd 암호 두번 입력 후 읽기 전용 암호도 설정 기본 수행 설정 파일 편집 # vi /etc/sysconfig/vncservers -다음을 마지막에 추가------------------------------------------- |
VNCSERVERS="10:root" |
---------------------------------------------------------------- VNC서버를 실행 # /etc/init.d/vncserver start 환경변수 문제로 데몬 서비스로 시작하지 못하는 경우가 많으므로 터미널로 로그인 후 수동으로 시작하여야 한다. 윈도우용 클라이언트를 다운로드 받아서 'Fast Compression'으로 접속한다 윈도우에서 TightVNC로 접속할 때에는 host.domain:10 을 사용해서 접속 VNC를 통해 시스템 관리가 가능함 한번 로그인 되면 Xvnc가 계속 떠있으므로 로그아웃하지 않으면 세션은 그냥 보존된다. 따라서 접속을 끊기 전에 '화면 잠금'을 하는 것이 안전하다. ================================================================================ 콘솔에서 한글을 사용하기 위해 jfbterm 설치 (콘솔 한글이 안될 경우) -------------------------------------------------------------------------------- 한글 패치된 jfbterm 다운 받기 http://download.kldp.net/kslack/jfbterm-0.3.12-han-2.tar.gz 압축 해제후 설치 # tar xzvf jfbterm-0.3.12-han-2.tar.gz # cd jfbterm-0.3.12-han-2/ # ./configure # make # make install # cat termcap.jfbterm >> /etc/termcap # tic terminfo.jfbterm 설치 확인 jfbterm.conf에서 term 과 encoding 부분을 다음과 같은 확인 및 변경 # cd /usr/local/etc # vi jfbterm.conf -다음을 확인 및 수정-------------------------------------------- |
term : jfbterm encoding : G0,G1,iso646-1973irv,ksc5601-1987,, |
---------------------------------------------------------------- 혹시 무슨무슨 폰트가 없다고 나오면, jfbterm.conf에서 fontset을 주석 처리 혹은 적절한 fontset을 설정. 실행 # jfbterm 로긴 때마다 자동실행 # vi /etc/profile -다음을 마지막에 추가------------------------------------------- |
tty_tmp=`tty | sed -e "s/\/dev\/\([ty]*\).*/\1/"` if [ "$tty_tmp" = "tty" ]; then exec jfbterm fi |
---------------------------------------------------------------- ================================================================================ 한글 man페이지 지원을 위한 less 재설치 (man 페이지가 정상적이지 않을 경우) -------------------------------------------------------------------------------- 한글 패치된 less 소스 받기 http://people.redhat.com/djoo/Koreanizing/less-378-8KR.src.rpm 소스를 컴파일 하여 rpm 생성후 설치 # rpmbuild --rebuild less-378-8KR.src.rpm # rpm -Uvh /usr/src/redhat/RPMS/i386/less-378-8KR.i386.rpm rpmbuild가 없을 경우 rpm-build 패키지를 설치한다 ================================================================================ 도메인 네임 서버 설정 -------------------------------------------------------------------------------- 로컬의 DNS을 변경할 때는 다음 파일을 편집 # vi /etc/resolv.conf -내용----------------------------------------------------------- |
search sorii.com nameserver 218.235.99.62 nameserver 210.220.163.82 nameserver 168.126.63.1 |
---------------------------------------------------------------- zone을 등록하기 위해 설정 편집 # vi /etc/named.conf -내용----------------------------------------------------------- |
// dns controls { inet 127.0.0.1 allow { localhost; } keys { rndckey; }; }; include "/etc/named.custom"; include "/etc/rndc.key"; zone "0.0.127.in-addr.arpa" { type master; file "0.0.127.in-addr.arpa"; }; zone "99.235.218.in-addr.arpa" { type master; file "99.235.218.in-addr.arpa"; }; zone "localhost" { type master; file "localhost.zone"; }; zone "sorii.com" { type master; file "sorii.com.zone"; }; zone "burumaru.com" { type master; file "sorii.com.zone"; }; zone "tinywolf.com" { type master; file "tinywolf.com.zone"; }; |
---------------------------------------------------------------- # vi /etc/named.custom -내용----------------------------------------------------------- |
// local zone "." { type hint; file "named.ca"; }; options { directory "/var/named/"; }; |
---------------------------------------------------------------- 각 존 파일을 추가 # vi /var/named/99.235.218.in-addr.arpa -내용----------------------------------------------------------- |
; 218.235.99.0 / 255.255.255.0 $TTL 86400 @ IN SOA ns.sorii.com. root.sorii.com ( 15 ; serial 28800 ; refresh 7200 ; retry 604800 ; expire 86400 ; ttk ) IN NS ns.sorii.com. 62 IN PTR ns.sorii.com. 63 IN PTR home.sorii.com. 68 IN PTR ns.tinywolf.com. 75 IN PTR wireless.sorii.com. 76 IN PTR lan.sorii.com. |
---------------------------------------------------------------- # vi /var/named/sorii.com.zone -내용----------------------------------------------------------- |
; sorii.com $TTL 86400 @ IN SOA ns.sorii.com. root.sorii.com ( 5 ; serial 28800 ; refresh 7200 ; retry 604800 ; expire 86400 ; ttl ) IN A 211.233.5.48 IN NS ns.sorii.com. IN MX 10 mail ns IN A 218.235.99.62 home IN A 218.235.99.63 mail IN A 218.235.99.64 wireless IN A 218.235.99.75 lan IN A 218.235.99.76 www IN CNAME @ ftp IN CNAME home * IN CNAME home |
---------------------------------------------------------------- # vi /var/named/tinywolf.com.zone -내용----------------------------------------------------------- |
; tinywolf.com $TTL 86400 @ IN SOA ns.sorii.com. root.tinywolf.com ( 2 ; serial 28800 ; refresh 7200 ; retry 604800 ; expire 86400 ; ttl ) IN A 218.235.99.68 IN NS ns.tinywolf.com. IN MX 10 mail.sorii.com. ns IN A 218.235.99.68 home IN A 218.235.99.68 www IN CNAME home ftp IN CNAME home mail IN CNAME mail.sorii.com. |
---------------------------------------------------------------- DNS 서버에 관계된 파일의 위치 /etc/rndc.conf /etc/rndc.key /etc/named.conf /etc/resolv.conf /var/named/* 서비스 시작 # /etc/init.d/named start 재부팅 때마다 실행되도록 서비스 등록 서비스 리스트 목록을 검사한 후 # chkconfig --list | grep named 목록에 없으면 추가한다. # chkconfig --add named 서비스를 활성 시킨다. # chkconfig named on ================================================================================ 타임 서비스와 시간 동기화 (네트웤 타임 동기화가 없을 경우) -------------------------------------------------------------------------------- 시간을 동기화 시키는 스크립트 작성 # vi /etc/init.d/nettime -내용----------------------------------------------------------- |
#!/bin/bash # primary와 secondary 타임서버를 설정 time_server1="time.kriss.re.kr" time_server2="time.nuri.net" # 비교할 시간(10분 오차로 비교)과 되돌릴 시간 지정 old_time=`date --date '10 minutes ago' +%Y%m%d%H%M%S` old_time_for_undo=`date '+%Y-%m-%d %H:%M:%S'` # primary에 시간을 맞춤 echo -n "시간 동기화 : $time_server1" ntpdate $time_server1 > /dev/null 2>&1 server_fail=$? new_time=`date +%Y%m%d%H%M%S` if [ $server_fail != 0 ] || [ $new_time -lt $old_time ]; then echo -e "\t[실패]\t$new_time" # secondary에 시간을 맞춤 echo -n "시간 동기화 : $time_server2" ntpdate $time_server2 > /dev/null 2>&1 server_fail=$? new_time=`date +%Y%m%d%H%M%S` if [ $server_fail != 0 ] || [ $new_time -lt $old_time ]; then echo -e "\t[실패]\t$new_time" # 둘 다 실패시 이전 시간으로 돌림 echo "이전 시간으로 돌림" date -s "$old_time_for_undo" > /dev/null else echo -e "\t[성공]" fi else echo -e "\t[성공]" fi echo -n "시스템 현재 시간 : " date |
---------------------------------------------------------------- 정기적으로 타임서버와 서버의 시간을 동기화 시킨다. # crontab -e -다음을 마지막에 추가------------------------------------------- |
# 매달 1일 3시 : 타임서버와 시간 동기화 00 03 01 * * echo "매달 1일 3시: 타임서버와 시간 동기화" > /dev/tty2 00 03 01 * * /etc/init.d/nettime |
---------------------------------------------------------------- ================================================================================ 메일 서버와 메일 백신 설정 -------------------------------------------------------------------------------- 재부팅 때마다 실행되도록 서비스 등록 서비스 리스트 목록을 검사한 후 # chkconfig --list | grep sendmail # chkconfig --list | grep ipop3 # chkconfig --list | grep pop3s # chkconfig --list | grep imap # chkconfig --list | grep imaps 목록에 없으면 추가한다. # chkconfig --add sendmail # chkconfig --add ipop3 # chkconfig --add pop3s # chkconfig --add imap # chkconfig --add imaps 서비스를 활성 시킨다. # chkconfig sendmail on # chkconfig ipop3 on # chkconfig pop3s on # chkconfig imap on # chkconfig imaps on 메일을 받을 수 있는 호스트 설정 # vi /etc/mail/local-host-names -다음을 마지막에 추가------------------------------------------- |
sorii.com mail.sorii.com burumaru.com mail.burumaru.com tinywolf.com mail.tinywolf.com |
---------------------------------------------------------------- 별칭을 추가 및 관리 # vi /etc/aliases -다음을 마지막에 추가------------------------------------------- |
# Person who should get root's mail root: mkkim,tinywolf home: mkkim # Aliases ceo: kimjw sorii: kimjw,thubansk webmaster: thubansk |
---------------------------------------------------------------- # newaliases 인증기능 활성시킬려면 다음의 파일을 편집 # vi /etc/mail/sendmail.mc -다음의 내용을-------------------------------------------------- |
dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl |
-아래처럼 바꾼다------------------------------------------------ |
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl |
---------------------------------------------------------------- # m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf 메일 서버를 재시작한다. # /etc/init.d/sendmail restart 필터링을 가능케 하기 위해 sendmail-devel패키지와 소스를 설치 설치CD : RedHat9 cd3 RPMS sendmail-devel-8.12.8-4.i386.rpm 다운받는 곳 : http://rpmfind.net/에서 sendmail로 검색 후 RedHat9용 최신 버전을 찾는다. sendmail-8.12.8-9.90.src.rpm sendmail-8.12.8-9.90.i386.rpm sendmail-cf-8.12.8-9.90.i386.rpm sendmail-devel-8.12.8-9.90.i386.rpm root로 소유권 변경후 설치 # rpm -qa | grep sendmail 버전을 검사한 후 서로 버전 다를 경우 전부 설치한다 같은 버전일 경우 없는 것과 소스만 설치한다 # rpm -Uvh sendmail-8.12.8-9.90.i386.rpm # rpm -Uvh sendmail-cf-8.12.8-9.90.i386.rpm # rpm -Uvh sendmail-devel-8.12.8-9.90.i386.rpm # rpm -Uvh sendmail-8.12.8-9.90.src.rpm 소스 컴파일 # cd /usr/src/redhat/SPECS/ # rpmbuild -bc sendmail.spec rpmbuild가 없을 경우 rpm-build 패키지를 설치한다 컴파일시 요구되는 패키지가 있으면 전부 설치한다 설치된 rpm안의 내용물이 어떤 것인지 보려면 'rpm -ql <패키지 이름>'을 이용한다 메일로 퍼지는 바이러스를 막기 위해 AntiVir 백신 설치 다운받는 곳 : http://www.hbedv.com/에서 'AntiVir Milter for Sendmail Linux'를 다운받는다 avlxmlt.tgz 설치 # tar xzvf avlxmlt.tgz # cd antivir-milter-1.0.6 # mkdir /usr/lib/AntiVir # cp bin/avmilter /usr/sbin # cp script/avq /usr/lib/AntiVir # ln -s /usr/lib/AntiVir/avq /usr/sbin/avq # cp bin/antivir /usr/lib/AntiVir # ln -s /usr/lib/AntiVir/antivir /usr/sbin/antivir # cp vdf/antivir.vdf /usr/lib/AntiVir # cp etc/avmilter.conf /etc # cp etc/antivir.conf /etc # cp init/rc.avmilter /etc/init.d/avmilter # chkconfig --add avmilter 라이센스키를 http://www.hbedv.com/private/에서 메일로 발급 받아서 복사해 넣는다. hdedv.key lic_info.txt 복사 # cp hbedv.key lic_info.txt /usr/lib/AntiVir # cp hbedv.key /usr/lib/AntiVir/avmgate.key # chown uucp:uucp /usr/lib/AntiVir/avmgate.key 백신 필터용 스풀 디렉토리를 생성한다 # mkdir /var/spool/avmilter # cd /var/spool/avmilter # mkdir incoming outgoing rejected # chown -R uucp:uucp /var/spool/avmilter # chmod -R 700 /var/spool/avmilter 인증기능 활성시킬려면 다음의 파일을 편집 # vi /etc/mail/sendmail.mc -다음을 마지막에 추가------------------------------------------- |
INPUT_MAIL_FILTER(`avmilter',`S=inet:3333@localhost,F=T,T=S:10m;R:10m;E:5m')dnl |
---------------------------------------------------------------- # m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf 백신 서비스를 시작한다. # /etc/init.d/avmilter start 메일 서버를 재시작한다. # /etc/init.d/sendmail restart 백신 동작을 확인 # netstat -atnp | grep avmilter 백신이 정기적으로 업데이트되고 실행될 수 있도록 cron을 추가 # crontab -e -다음을 마지막에 추가------------------------------------------- |
# 매일 5시 : /home 바이러스 검사 00 05 * * * echo "[cron] daily AM 05h : /home virus check" > /dev/tty2 00 05 * * * /usr/lib/AntiVir/antivir --allfiles -s -nolnk /home # 매 홀수날 2시 : 바이러스 패턴 업데이트 00 02 1-31/2 * * echo "[cron] odd days AM 02h : update virus pattern" > /dev/tty2 00 02 1-31/2 * * /usr/lib/AntiVir/antivir --update # 매주 일요일 4시 : 감염되어 거부된 메일 삭제 00 04 * * sun echo "[cron] sunday AM 04h : delete rejected mails" > /dev/tty2 00 04 * * sun rm -f /var/spool/avmilter/rejected/* |
---------------------------------------------------------------- 백신이 바이러스를 발견할 경우 보낸 사람과 받는 사람 모두에게 경고를 보냄 # vi /etc/avmilter.conf -다음의 내용을-------------------------------------------------- |
# VirusAlertToRcpt NO # VirusAlertToSender NO |
-아래처럼 바꾼다------------------------------------------------ |
VirusAlertToRcpt YES VirusAlertToSender YES |
---------------------------------------------------------------- 백신이 보내는 경고 메일을 한글로 보내도록 템플릿 수정 # mkdir /usr/lib/AntiVir/templates # cd /usr/lib/AntiVir/templates # vi patho-administrator -내용----------------------------------------------------------- |
Subject: 수상한 메일 경고! [발신자: SENDER] * * * * * * * * * * * * * * * 수상한 메일 경고 * * * * * * * * * * * * * * * LICENSE 발신자 : SENDER 발신제목 : "SUBJECT" AntiVir has detected a suspicious mail sent through your server which was not scanned because: AntiVir가 당신의 서버로 보내진 메일에서 아래와 같이 의심되는 수상한 점을 발견함: REASON The mail was not delivered. 해당 메일은 전송되지 않았습니다. It has been quarantined with the following queue id: 아래의 큐이름으로 격리 보관됨: QUEUEID |
---------------------------------------------------------------- # vi patho-recipient -내용----------------------------------------------------------- |
Subject: 수상한 메일 경고! [발신자: SENDER] * * * * * * * * * * * * * * * 수상한 메일 경고 * * * * * * * * * * * * * * * 발신자 : SENDER 발신제목 : "SUBJECT" AntiVir has detected a suspicious mail addressed to you, which was not scanned because: AntiVir가 당신에게로 보내진 메일에서 아래와 같이 의심되는 수상한 점을 발견함: REASON The mail was not delivered. 해당 메일은 전송되지 않았습니다. |
---------------------------------------------------------------- # vi patho-sender -내용----------------------------------------------------------- |
Subject: 수상한 메일 경고! [발신제목: "SUBJECT"] * * * * * * * * * * * * * * * 수상한 메일 경고 * * * * * * * * * * * * * * * 발신자 : SENDER 발신제목 : "SUBJECT" AntiVir has detected a suspicous mail from your address, which was not scanned because: AntiVir가 당신의 주소에서 보내져온 메일에서 아래와 같이 의심되는 수상한 점을 발견함: REASON The mail was not delivered. 해당 메일은 전송되지 않았습니다. 다음과 같은 조치를 권해드립니다. ADVICE |
---------------------------------------------------------------- # vi virus-administrator -내용----------------------------------------------------------- |
Subject: 바이러스 경고! [발신자: SENDER] * * * * * * * * * * * * * * * 바이러스 경고 * * * * * * * * * * * * * * * LICENSE 발신자 : SENDER 발신제목 : "SUBJECT" AntiVir has detected the following in a mail sent through your server: AntiVir가 당신의 서버로 보내진 메일에서 아래와 같은 바이러스를 발견함: VIRUSES The mail was not delivered. 해당 메일은 전송되지 않았습니다. It has been quarantined with the following queue id: 아래의 큐이름으로 격리 보관됨: QUEUEID |
---------------------------------------------------------------- # vi virus-recipient -내용----------------------------------------------------------- |
Subject: 바이러스 경고! [발신자: SENDER] * * * * * * * * * * * * * * * 바이러스 경고 * * * * * * * * * * * * * * * 발신자 : SENDER 발신제목 : "SUBJECT" AntiVir has detected the following in a mail addressed to you: AntiVir가 당신에게로 보내진 메일에서 아래와 같은 바이러스를 발견함: VIRUSES The mail was not delivered. 해당 메일은 수신 거부 되었습니다. |
---------------------------------------------------------------- # vi virus-sender -내용----------------------------------------------------------- |
Subject: 바이러스 경고! [발신제목: "SUBJECT"] * * * * * * * * * * * * * * * 바이러스 경고 * * * * * * * * * * * * * * * 발신자 : SENDER 발신제목 : "SUBJECT" AntiVir has detected the following in a mail from your address: AntiVir가 당신의 주소에서 보내져온 메일에서 아래와 같은 바이러스를 발견함: VIRUSES The mail was not delivered. 해당 메일은 전송되지 않았습니다. Please remove any potential malicious software from your computer before sending a new mail with attachments. 메일에 첨부되어 전송된 악의적인 소프트웨어를 제거해 주시기 바랍니다. |
---------------------------------------------------------------- 백신의 테스트 http://www.eicar.org/anti_virus_test_file.htm에서 eicar.com을 다운 받아서 메일에 첨부하여 메일 서버로 보내본다. 다음의 제목으로 시작하는 메일을 받았다면 백신은 정상 작동하는 것이다. AntiVir ALERT ... 백신에 관한 내용은 http://kltp.kldp.org/를 참고 펄로 메일 필터를 제작하여 사용하기 위해서 다음의 펄모듈을 다운받는다 http://www.cpan.org/authors/id/G/GA/GAAS/MIME-Base64-3.00.tar.gz http://www.cpan.org/authors/id/C/CY/CYING/Sendmail-Milter-0.18.tar.gz Base64 모듈 설치 # tar xzvf MIME-Base64-3.00.tar.gz # cd MIME-Base64-3.00 # perl Makefile.PL # make # make install Milter 모듈 설치. 반드시 sendmail소스 컴파일이 먼저 되어 있어야 한다. # tar xzvf Sendmail-Milter-0.18.tar.gz # cd Sendmail-Milter-0.18 # perl Makefile.PL /usr/src/redhat/BUILD/sendmail-8.12.8/ /usr/src/redhat/BUILD/sendmail-8.12.8/obj.Linux.2.4.20-8.i686/ # make # make install perl로 milter 생성 # vi /etc/mail/SoriiMilter.pl -첨부된 SoriiMilter.pl 소스 참고-------------------------------- 재부팅 때마다 시작하도록 rc.local에 추가 # vi /etc/rc.local -다음을 마지막에 추가------------------------------------------- |
perl /etc/mail/SoriiMilter.pl SoriiMilter /etc/mail/sendmail.cf & |
---------------------------------------------------------------- 로그파일을 생성한다 # touch /var/log/milterlog 로그를 모니터링할 수 있다 # tail -f /var/log/milterlog 정기적으로 로그를 청소하도록 cron에 추가한다. # crontab -e -다음을 마지막에 추가------------------------------------------- |
# 매주 월요일 4시 : 밀터로그를 청소한다 00 04 * * mon echo "[cron] monday AM 04h : clear milter log" > /dev/tty2 00 04 * * mon (echo -n "Milter Log Clear"; date) > /var/log/milterlog |
---------------------------------------------------------------- milter가 백신보다 먼저 실행될 수 있도록 설정 수정 # vi /etc/mail/sendmail.mc -다음의 앞줄에-------------------------------------------------- |
INPUT_MAIL_FILTER(`avmilter',`S=inet:3333@localhost,F=T,T=S:10m;R:10m;E:5m')dnl |
-다음을 추가---------------------------------------------------- |
INPUT_MAIL_FILTER(`SoriiMilter', `S=local:/var/run/soriimilter.sock')dnl |
---------------------------------------------------------------- # m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf milter를 백그라운드로 실행한다. # perl /etc/mail/perlmilter/SoriiMilter.pl SoriiMilter /etc/mail/sendmail.cf & 그냥 재부팅하여 자동으로 실행 되도록 하여도 된다. 실행이 되었는지 확인한다. # ps -Al | grep perl 메일 서버를 재시작한다. # /etc/init.d/sendmail restart -첨부된 perl 정규식 참고---------------------------------------- ================================================================================ 메일 서버를 제외한 서버들의 백신 설정 -------------------------------------------------------------------------------- 윈도우와 공유되는 폴더의 바이러스를 막기 위해 AntiVir 백신 설치 다운받는 곳 : http://www.hbedv.com/에서 'AntiVir Linux Server'를 다운받는다 avlxsrv.tgz 설치 # tar xzvf avlxsrv.tgz # cd antivir-server-2.0.9 # ./install 이후엔 대화형으로 진행된다. 대부분 디폴트 값을 선택하고 autoupdate항목에서 y를 한다 백신이 실행될 수 있도록 cron을 추가 # crontab -e -다음을 마지막에 추가------------------------------------------- |
# 매일 5시 : /home 바이러스 검사 00 05 * * * echo "[cron] daily AM 05h : /home virus check" > /dev/tty2 00 05 * * * /usr/lib/AntiVir/antivir --allfiles -s -nolnk /home |
---------------------------------------------------------------- 정해진 주기 말고 업데이트를 설정하고 싶으면 자동 업데이터를 정지시키고 cron으로 업데이트 한다 # /usr/lib/AntiVir/avupdater stop # crontab -e -다음을 마지막에 추가------------------------------------------- |
# 매 홀수날 2시 : 바이러스 패턴 업데이트 00 02 1-31/2 * * echo "[cron] odd days AM 02h : update virus pattern" > /dev/tty2 00 02 1-31/2 * * /usr/lib/AntiVir/antivir --update |
---------------------------------------------------------------- ================================================================================ FTP 서버 설정 -------------------------------------------------------------------------------- proftpd를 설치한다. 설정파일을 수정 # vi /etc/proftpd/proftpd.conf -다음 각 항목들을 수정하거나 추가------------------------------- |
ServerName "SORIi FTP Server" ServerType standalone ServerAdmin ftp@sorii.com DeferWelcome on MultilineRFC2228 on DefaultRoot /home MaxClients 10 "Sorry, maximum users %m -- try again later. 사용자가 많습니다 -- 잠시 후 다시 시도해 주십시오." MaxClientsPerHost 2 "Only one client is allowed to connect! 오직 하나의 연결만 가능합니다!" DisplayConnect /home/.proftpd/connect.msg DisplayLogin /.proftpd/welcome.msg DisplayFirstChdir .message <Anonymous ~ftp> # 익명접속 허용하지 않음 <Limit LOGIN> DenyAll </Limit> </Anonymous> |
---------------------------------------------------------------- # mkdir /home/.proftpd # vi /home/.proftpd/connect.msg -내용----------------------------------------------------------- |
************************************************ Welcome to %V admin E-mail : %E ************************************************ 익명 접속을 허용하지 않습니다. Anonymous user cannot login this server. |
---------------------------------------------------------------- # vi /home/.proftpd/welcome.msg -내용----------------------------------------------------------- |
************************************************ Welcome to %V admin E-mail : %E ************************************************ 접속자 : %U 로그인 시간 : %T 접속 IP : %R 접속자 수 : 현재 (%N) / 최대 (%M) 외부 사용자의 접근을 제한합니다. 호스트당 1개의 접속만 허용합니다. 웹호스팅 디렉토리는 /public_html/%U/입니다. 현재 남은 용량은 %f입니다. |
---------------------------------------------------------------- 서버 재실행 및 서비스 등록 # /etc/init.d/proftpd restart # chkconfig proftpd on ================================================================================ Web 서버 설정 -------------------------------------------------------------------------------- 일단 깔려있는 패키지를 전부 제거 실행중인 프로세스를 전부 찾아서 종료시키고 rpm패키지를 제거한다 # ps -ef | grep httpd # killall httpd # rpm -qa | grep apache # rpm -e <패키지 이름> --nodeps 위와 같은 식으로 apache, mysql, php를 전부 제거 mysql같은 경우 몇몇 디렉토리나 파일이 남아 있다면 찾아서 제거. /etc/my.cnf, /var/lib/mysql, /var/local/mysql 등. MySQL 설치 다운받는 곳 : http://www.mysql.com/downloads/mysql-4.0.html에서 'Tarball (tar.gz)'을 다운받는다 mysql-4.0.18.tar.gz 데이타베이스는 /home에 위치하도록 한다. (root파티션이 차는 것을 막기 위해) # mv mysql-4.0.18.tar.gz /usr/local/share # tar xzvf mysql-4.0.18.tar.gz # cd mysql-4.0.18 # ./configure --prefix=/usr/local/mysql --localstatedir=/home/.mysqldata --with-charset=euc_kr # make && make install # cd /usr/local/mysql # cp support-files/my-medium.cnf /etc/my.cnf # ./bin/mysql_install_db # chown -R mysql:mysql /usr/local/mysql # chown -R mysql:mysql /home/.mysqldata # ./bin/mysqld_safe & 아파치를 설치한다 다운받는 곳 : http://httpd.apache.org/download.cgi 여기서 'httpd-2.0.x.tar.gz'의 최신버전을 다운받는다. httpd-2.0.48.tar.gz # tar xzvf httpd-2.0.48.tar.gz # cd httpd-2.0.48 # ./configure --enable-layout=RedHat --enable-rule=SHARED_CORE --enable-mods-shared=all --disable-info # make && make install # cd /etc/httpd/conf # cp httpd-std.conf httpd.conf # cp highperformance-std.conf highperformance.conf # cp ssl-std.conf ssl.conf # cp /usr/sbin/apachectl /etc/init.d/httpd # ln -s /etc/rc.d/init.d/httpd /etc/rc.d/rc0.d/S90httpd # ln -s /etc/rc.d/init.d/httpd /etc/rc.d/rc3.d/S89httpd # ln -s /etc/rc.d/init.d/httpd /etc/rc.d/rc4.d/S89httpd # ln -s /etc/rc.d/init.d/httpd /etc/rc.d/rc5.d/S89httpd # vi /etc/httpd/conf/httpd.conf -다음의 내용이 있는지 확인-------------------------------------- |
LoadModule rewrite_module libexec/mod_rewrite.so |
-다음의 내용을-------------------------------------------------- |
ServerAdmin you@example.com # ServerName www.example.com:80 AddDefaultCharset ISO-8859-1 # DefaultLanguage nl |
-아래처럼 바꾼다------------------------------------------------ |
ServerAdmin webmaster@sorii.com ServerName home.sorii.com:80 AddDefaultCharset EUC-KR DefaultLanguage ko |
-그리고 다음을 마지막에 추가------------------------------------ |
NameVirtualHost * <VirtualHost *> ServerName home.sorii.com ServerAdmin home@sorii.com DocumentRoot /var/www/html </VirtualHost> <VirtualHost *> ServerName board.sorii.com ServerAdmin home@sorii.com DocumentRoot /home/public_html/phpBB2 </VirtualHost> <VirtualHost *> ServerName sorii.com # 모든 호스트에 대해 ServerAlias *.sorii.com ServerAdmin home@sorii.com # 호스트명이 생략 되었을 경우에는 home.sorii.com으로 Redirect /index.html http://home.sorii.com/ # 호스트명을 매칭 시켜서 해당 폴더로 리다이렉팅 RewriteEngine on RewriteCond %{HTTP_HOST} ^[^.]+\.sorii\.com$ RewriteRule ^(.+) %{HTTP_HOST}$1 [C] RewriteRule ^([^.]+)\.sorii\.com(.*) /home/public_html/$1$2 </VirtualHost> |
---------------------------------------------------------------- 이미지 지원을 위해 freetype과 GD를 설치 다운받는 곳 : http://www.freetype.org/에서 찾아들어가서 'freetype의 stable 최신 소스 tar.gz'를 다운받는다 freetype-2.1.7.tar.gz 다운받는 곳 : http://www.boutell.com/gd/에서 'Download .tar.gz'를 다운 받는다 gd-2.0.22.tar.gz 다음의 라이브러리들이 깔려 있는지 확인한다 libpng libpng-devel zlib zlib-devel libjpeg libjpeg-devel libjpeg6a # rpm -q <확인할 패키지> 없는 것이 있을 경우 찾아서 설치한다. FreeType을 설치한다 # tar xzvf freetype-2.1.7.tar.gz # cd freetype-2.1.7 # ./configure # make && make install # cd .. GD 라이브러리를 설치한다 # tar xzvf gd-2.0.22.tar.gz # cd gd-2.0.22 # vi Makefile # ./configure # make && make install PHP를 설치한다 # tar xzvf php-4.3.4.tar.gz # cd php-4.3.4 # ./configure --with-apxs2=/usr/sbin/apxs --with-config-file-path=/etc --with-mysql --with-mod-charset --with-language=korean --with-charset=euc_kr --with-zlib --with-gd=/usr/local --with-jepg-dir=/usr --with-ttf=/usr/local --enable-ftp --enable-calendar 각 함목 중 --with-mysql은 그냥 추가하고 나머지 --with-xx항목은 해당 라이브러리 항목이 설치된 디렉토리를 적는다. rpm으로 설치된 라이브러리는 /usr아래에 있고 소스로 설치된 항목은 /usr/local아래에 있다. /usr/lib에서 라이브러리를 찾아서 있으면 /usr인 것이고 /usr/local/lib에 있으면 /usr/local로 하면 된다. # make && make install # cp php.ini-dist /etc/php.ini 아파치에서 php를 사용할 수 있도록 설정한다 # vi /etc/httpd/conf/httpd.conf -다음의 내용이 있는지 확인-------------------------------------- |
LoadModule php4_module lib/apache/libphp4.so |
-다음을 AddType항목 중 마지막에 추가---------------------------- |
AddType application/x-httpd-php .php .phtml AddType application/s-httpd-php-source .phps |
-다음의 내용을-------------------------------------------------- |
DirectoryIndex index.html index.html.var |
-아래처럼 바꾼다------------------------------------------------ |
DirectoryIndex index.html index.html.var index.php index.phtml index.phps |
---------------------------------------------------------------- phpBB2를 설치 다운받는 곳 : http://www.phpbb.com/downloads.php phpBB-2.0.6.tar.gz lang_korean.tar.gz subSilver_korean.tar.gz 우선 MySQL에 계정을 하나 만든다 # cd /usr/local/mysql # ./bin/mysqladmin -u root password '관리자암호' # ./bin/mysql -u root -p > create database board; > use mysql; > insert into user (host,user,password) values ('localhost','phpbb2',password('암호')); > insert into db values ('localhost','board','phpbb2','y','y','y','y','y','y','y','y','y','y','y','y'); > flush privileges; > exit # ./bin/mysqladmin reload phpBB2를 압축 풀고 설치 # cd /home/public_html # tar xzvf phpBB-2.0.6.tar.gz # cd phpBB2 # cd language # tar xzvf ../../lang_korean.tar.gz # cd ../templates # tar xzvf ../../subSilver_korean.tar.gz 웹브라우저에서 http://board.sorii.com으로 phpBB2를 설치 시작한다. 빈 값을 적당히 채워 넣은 후 (DB는 'localhost','board','phpbb2','암호'를 위의 MySQL에서 정한 것과 동일하게 입력) config.php를 다운 받아서 phpBB2 디렉토리에 덮어쓰고 다시 접속했을 때 지시하는 두개의 디렉토리를 삭제한다. 다시 http://board.sorii.com으로 접속하면 phpBB2설치 완료 phpBB2의 여러가지 MOD설치는 http://www.phpbb.com/ http://www.phpbb.co.kr/ http://www.phpbbhacks.com/ 사이트를 참고 ================================================================================ 사용자 계정 관리용 스크립트 제작 사용 -------------------------------------------------------------------------------- 메일 서버를 제외한 각 서버의 root로 오는 메일을 메일서버로 돌린다 # vi /etc/aliases -다음의 내용을-------------------------------------------------- |
# root: m |
-아래처럼 바꾼다------------------------------------------------ |
root: root@mail.sorii.com |
---------------------------------------------------------------- NIS와 SMB에 동시에 사용자를 추가 시켜주는 스크립트를 마스터 서버에서 사용한다. # vi /usr/bin/userman -첨부된 userman 소스를 참고------------------------------------- 메일 서버에 그룹을 사용한 메일링 리스트가 가능하도록 스크립트를 제작하고 aliases를 수정한다. # mkdir /etc/mail/group # chmod 755 /etc/mail/group # vi /usr/bin/mkgrpmail -첨부된 mkgrpmail 소스를 참고----------------------------------- # vi /etc/aliases -다음을 마지막에 추가------------------------------------------- |
# Groups all: ":include:/etc/mail/group/sorii.list" manage: ceo,":include:/etc/mail/group/manage.list" develop: ceo,":include:/etc/mail/group/develop.list" design: ceo,":include:/etc/mail/group/design.list" |
---------------------------------------------------------------- # newaliases 사용자가 추가되거나 삭제될 때에는 메일 서버에서 아래의 명령을 실행하여 목록을 갱신한다. # mkgrpmail 사용자를 추가할 때는 sorii그룹을 초기 그룹으로하고 사용자의 성격에 맞게 추가 그룹을 설정한다. # userman -입력예--------------------------------------------------------- |
======================================== = 새로운 사용자 추가 = ======================================== 1. 사용자 ID : tinywolf 2. 전체 이름 : Jeong Seung-Dae 3. 암호 : 입력 됨 4. 초기 그룹 : sorii 5. 추가 그룹 : develop 6. 홈 위치 : /home/develop/tinywolf 7. 쉘 종류 : 기본 쉘 사용 8. 뼈대 복사 : no 스켈렉톤 디렉토리를 복사하지 않습니다. 9. 뼈대 위치 : 기본 위치 사용 10. 새 그룹 : no 사용자 ID와 같은 이름의 새 그룹을 만들지 않습니다. 11. UID : 기본값 사용 12. 홈 생성 : yes 홈 디렉토리를 생성합니다. 13. 삼바 추가 : yes 삼바 계정에 추가합니다. [q] 생성 취소 내용을 점검하고 수정하십시오. 완료되면 엔터를 누르십시오. 수정할 항목 번호 : |
---------------------------------------------------------------- ================================================================ -- rulemaker 소스 ---------------------------------------------- ================================================================ |
#!/bin/bash iptables="iptables" [ -f /usr/local/bin/iptables ] && iptables="/usr/local/bin/iptables" [ -f /sbin/iptables ] && iptables="/sbin/iptables" Usage() { echo "RuleMaker 0.9b" echo "" echo "iptables로 방화벽을 구축할 룰을 생성합니다." echo "" echo "사용법) rulemaker [-i <inputfile>] [-o <outputfile>]" echo " rulemaker --help" echo "" echo "입력 파일이 생략될 경우 표준 입력으로 입력하게 되고" echo "출력 파일이 생략될 경우 표준 출력으로 출력됩니다." echo "" } DefaultRule() { echo "# iptables 모듈 등록" echo "modprobe iptable_filter" echo "# 룰 초기화" echo "$iptables -F" echo "# 기본 정책 수립" echo "$iptables -P INPUT DROP" echo "$iptables -P OUTPUT ACCEPT" echo "# 라우터로 사용할 경우 FORWARD룰은 ACCEPT로 수정해야 한다" echo "$iptables -P FORWARD DROP" echo "" echo "# localhost의 트래픽은 전부 수용" echo "$iptables -A INPUT -i lo -j ACCEPT" echo "" } PortOpen() { echo "# 특정 포트를 통한 입력은 전부 받아들임" input="." read input while [ "$input" != "." ] && [ -n $input ] do if [ "$input" != "" ]; then ptype="${input#*:}"; ptype="${ptype%%:*}" [ "$ptype" != "" ] && ptype=" -p $ptype" port="${input##*:}" [ "$port" != "" ] && port=" --${input%%:*}port $port" echo "$iptables -A INPUT$ptype$port -j ACCEPT" fi read input done echo "" } IPOpen() { echo "# 특정 IP를 통한 입력은 전부 받아들임" input="." read input while [ "$input" != "." ] && [ -n $input ] do if [ "$input" != "" ]; then echo "$iptables -A INPUT -s $input -j ACCEPT" fi read input done echo "" } AcceptRule() { echo "# 이미 연결 성립된 응답은 받아들임" echo "$iptables -A INPUT -p tcp ! --syn -j ACCEPT" echo "" } if [ $# -eq 0 ]; then echo "#!/bin/sh" echo "#######################################################################" echo "# 기본적으로 iptables 모듈을 등록하고 룰 기본 정책을 세우도록 합니다. #" echo "#######################################################################" DefaultRule echo "#########################################################################################" echo "# 모든 영역에서 허용할 서비스의 종류와 포트번호를 다음과 같은 형식으로 입력해 주십시오. #" echo "# 형식) <s|d>:[tcp|udp]:[port-number] (입력을 마칠때는 마침표 하나만 입력) #" echo "#########################################################################################" PortOpen echo "##########################################################################################" echo "# 모든 포트를 허용할 IP주소를 차례대로 입력해 주십시오. #" echo "# 예제) 192.168.1.1 혹은 192.168.1.0/24 혹은 192.168.1.0/255.255.255.0 (마칠때는 마침표) #" echo "##########################################################################################" IPOpen echo "###############################################" echo "# 마지막으로 다음의 일반적인 룰이 추가됩니다. #" echo "###############################################" AcceptRule elif [ "$1" == "--help" ]; then Usage else for i in $* do case $i in -i) exec < $2; shift 2;; -o) exec > $2; shift 2;; --) shift; break;; esac done echo "#!/bin/sh" DefaultRule PortOpen IPOpen AcceptRule fi |
================================================================ ================================================================ -- 서비스별 포트 번호 참고 ------------------------------------- ================================================================ |
echo 7/tcp echo 7/udp discard 9/tcp sink null discard 9/udp sink null systat 11/tcp users systat 11/udp users daytime 13/tcp daytime 13/udp qotd 17/tcp quote qotd 17/udp quote msp 18/tcp # message send protocol msp 18/udp # message send protocol chargen 19/tcp ttytst source chargen 19/udp ttytst source ftp-data 20/tcp ftp-data 20/udp # 21 is registered to ftp, but also used by fsp ftp 21/tcp ftp 21/udp fsp fspd ssh 22/tcp # SSH Remote Login Protocol ssh 22/udp # SSH Remote Login Protocol telnet 23/tcp telnet 23/udp # 24 - private mail system smtp 25/tcp mail smtp 25/udp mail time 37/tcp timserver time 37/udp timserver rlp 39/tcp resource # resource location rlp 39/udp resource # resource location nameserver 42/tcp name # IEN 116 nameserver 42/udp name # IEN 116 nicname 43/tcp whois nicname 43/udp whois tacacs 49/tcp # Login Host Protocol (TACACS) tacacs 49/udp # Login Host Protocol (TACACS) re-mail-ck 50/tcp # Remote Mail Checking Protocol re-mail-ck 50/udp # Remote Mail Checking Protocol domain 53/tcp # name-domain server domain 53/udp whois++ 63/tcp whois++ 63/udp bootps 67/tcp # BOOTP server bootps 67/udp bootpc 68/tcp # BOOTP client bootpc 68/udp tftp 69/tcp tftp 69/udp gopher 70/tcp # Internet Gopher gopher 70/udp netrjs-1 71/tcp # Remote Job Service netrjs-1 71/udp # Remote Job Service netrjs-2 72/tcp # Remote Job Service netrjs-2 72/udp # Remote Job Service netrjs-3 73/tcp # Remote Job Service netrjs-3 73/udp # Remote Job Service netrjs-4 74/tcp # Remote Job Service netrjs-4 74/udp # Remote Job Service finger 79/tcp finger 79/udp http 80/tcp www www-http # WorldWideWeb HTTP http 80/udp www www-http # HyperText Transfer Protocol kerberos 88/tcp kerberos5 krb5 # Kerberos v5 kerberos 88/udp kerberos5 krb5 # Kerberos v5 supdup 95/tcp supdup 95/udp hostname 101/tcp hostnames # usually from sri-nic hostname 101/udp hostnames # usually from sri-nic iso-tsap 102/tcp tsap # part of ISODE. csnet-ns 105/tcp cso # also used by CSO name server csnet-ns 105/udp cso rtelnet 107/tcp # Remote Telnet rtelnet 107/udp pop2 109/tcp pop-2 postoffice # POP version 2 pop2 109/udp pop-2 pop3 110/tcp pop-3 # POP version 3 pop3 110/udp pop-3 sunrpc 111/tcp portmapper # RPC 4.0 portmapper TCP sunrpc 111/udp portmapper # RPC 4.0 portmapper UDP auth 113/tcp authentication tap ident auth 113/udp authentication tap ident sftp 115/tcp sftp 115/udp uucp-path 117/tcp uucp-path 117/udp nntp 119/tcp readnews untp # USENET News Transfer Protocol nntp 119/udp readnews untp # USENET News Transfer Protocol ntp 123/tcp ntp 123/udp # Network Time Protocol netbios-ns 137/tcp # NETBIOS Name Service netbios-ns 137/udp netbios-dgm 138/tcp # NETBIOS Datagram Service netbios-dgm 138/udp netbios-ssn 139/tcp # NETBIOS session service netbios-ssn 139/udp imap 143/tcp imap2 # Interim Mail Access Proto v2 imap 143/udp imap2 snmp 161/tcp # Simple Net Mgmt Proto snmp 161/udp # Simple Net Mgmt Proto snmptrap 162/udp snmp-trap # Traps for SNMP cmip-man 163/tcp # ISO mgmt over IP (CMOT) cmip-man 163/udp cmip-agent 164/tcp cmip-agent 164/udp mailq 174/tcp # MAILQ mailq 174/udp # MAILQ xdmcp 177/tcp # X Display Mgr. Control Proto xdmcp 177/udp nextstep 178/tcp NeXTStep NextStep # NeXTStep window nextstep 178/udp NeXTStep NextStep # server bgp 179/tcp # Border Gateway Proto. bgp 179/udp prospero 191/tcp # Cliff Neuman's Prospero prospero 191/udp irc 194/tcp # Internet Relay Chat irc 194/udp smux 199/tcp # SNMP Unix Multiplexer smux 199/udp at-rtmp 201/tcp # AppleTalk routing at-rtmp 201/udp at-nbp 202/tcp # AppleTalk name binding at-nbp 202/udp at-echo 204/tcp # AppleTalk echo at-echo 204/udp at-zis 206/tcp # AppleTalk zone information at-zis 206/udp qmtp 209/tcp # Quick Mail Transfer Protocol qmtp 209/udp # Quick Mail Transfer Protocol z39.50 210/tcp z3950 wais # NISO Z39.50 database z39.50 210/udp z3950 wais ipx 213/tcp # IPX ipx 213/udp imap3 220/tcp # Interactive Mail Access imap3 220/udp # Protocol v3 link 245/tcp ttylink link 245/ucp ttylink fatserv 347/tcp # Fatmen Server fatserv 347/udp # Fatmen Server rsvp_tunnel 363/tcp rsvp_tunnel 363/udp rpc2portmap 369/tcp rpc2portmap 369/udp # Coda portmapper codaauth2 370/tcp codaauth2 370/udp # Coda authentication server ulistproc 372/tcp ulistserv # UNIX Listserv ulistproc 372/udp ulistserv ldap 389/tcp ldap 389/udp svrloc 427/tcp # Server Location Protocl svrloc 427/udp # Server Location Protocl mobileip-agent 434/tcp mobileip-agent 434/udp mobilip-mn 435/tcp mobilip-mn 435/udp https 443/tcp # MCom https 443/udp # MCom snpp 444/tcp # Simple Network Paging Protocol snpp 444/udp # Simple Network Paging Protocol microsoft-ds 445/tcp microsoft-ds 445/udp kpasswd 464/tcp kpwd # Kerberos "passwd" kpasswd 464/udp kpwd # Kerberos "passwd" photuris 468/tcp photuris 468/udp saft 487/tcp # Simple Asynchronous File Transfer saft 487/udp # Simple Asynchronous File Transfer gss-http 488/tcp gss-http 488/udp pim-rp-disc 496/tcp pim-rp-disc 496/udp isakmp 500/tcp isakmp 500/udp gdomap 538/tcp # GNUstep distributed objects gdomap 538/udp # GNUstep distributed objects iiop 535/tcp iiop 535/udp dhcpv6-client 546/tcp dhcpv6-client 546/udp dhcpv6-server 547/tcp dhcpv6-server 547/udp rtsp 554/tcp # Real Time Stream Control Protocol rtsp 554/udp # Real Time Stream Control Protocol nntps 563/tcp # NNTP over SSL nntps 563/udp # NNTP over SSL whoami 565/tcp whoami 565/udp submission 587/tcp msa # mail message submission submission 587/udp msa # mail message submission npmp-local 610/tcp dqs313_qmaster # npmp-local / DQS npmp-local 610/udp dqs313_qmaster # npmp-local / DQS npmp-gui 611/tcp dqs313_execd # npmp-gui / DQS npmp-gui 611/udp dqs313_execd # npmp-gui / DQS hmmp-ind 612/tcp dqs313_intercell # HMMP Indication / DQS hmmp-ind 612/udp dqs313_intercell # HMMP Indication / DQS ipp 631/tcp # Internet Printing Protocol ipp 631/ucp # Internet Printing Protocol ldaps 636/tcp # LDAP over SSL ldaps 636/udp # LDAP over SSL acap 674/tcp acap 674/udp ha-cluster 694/tcp # Heartbeat HA-cluster ha-cluster 694/udp # Heartbeat HA-cluster kerberos-adm 749/tcp # Kerberos `kadmin' (v5) kerberos-iv 750/udp kerberos4 kerberos-sec kdc kerberos-iv 750/tcp kerberos4 kerberos-sec kdc webster 765/tcp # Network dictionary webster 765/udp phonebook 767/tcp # Network phonebook phonebook 767/udp rsync 873/tcp # rsync rsync 873/udp # rsync telnets 992/tcp telnets 992/udp imaps 993/tcp # IMAP over SSL imaps 993/udp # IMAP over SSL ircs 994/tcp ircs 994/udp pop3s 995/tcp # POP-3 over SSL pop3s 995/udp # POP-3 over SSL # # UNIX specific services # exec 512/tcp biff 512/udp comsat login 513/tcp who 513/udp whod shell 514/tcp cmd # no passwords used syslog 514/udp printer 515/tcp spooler # line printer spooler printer 515/udp spooler # line printer spooler talk 517/udp ntalk 518/udp utime 519/tcp unixtime utime 519/udp unixtime efs 520/tcp router 520/udp route routed # RIP ripng 521/tcp ripng 521/udp timed 525/tcp timeserver timed 525/udp timeserver tempo 526/tcp newdate courier 530/tcp rpc conference 531/tcp chat netnews 532/tcp netwall 533/udp # -for emergency broadcasts uucp 540/tcp uucpd # uucp daemon klogin 543/tcp # Kerberized `rlogin' (v5) kshell 544/tcp krcmd # Kerberized `rsh' (v5) afpovertcp 548/tcp # AFP over TCP afpovertcp 548/udp # AFP over TCP remotefs 556/tcp rfs_server rfs # Brunhoff remote filesystem socks 1080/tcp # socks proxy server socks 1080/udp # socks proxy server # Port 1236 is registered as `bvcontrol', but is also used by the # Gracilis Packeten remote config server. The official name is listed as # the primary name, with the unregistered name as an alias. bvcontrol 1236/tcp rmtcfg # Daniel J. Walsh, Gracilis Packeten remote config server bvcontrol 1236/udp # Daniel J. Walsh h323hostcallsc 1300/tcp # H323 Host Call Secure h323hostcallsc 1300/udp # H323 Host Call Secure ms-sql-s 1433/tcp # Microsoft-SQL-Server ms-sql-s 1433/udp # Microsoft-SQL-Server ms-sql-m 1434/tcp # Microsoft-SQL-Monitor ms-sql-m 1434/udp # Microsoft-SQL-Monitor ica 1494/tcp # Citrix ICA Client ica 1494/udp # Citrix ICA Client wins 1512/tcp # Microsoft's Windows Internet Name Service wins 1512/udp # Microsoft's Windows Internet Name Service ingreslock 1524/tcp ingreslock 1524/udp prospero-np 1525/tcp # Prospero non-privileged prospero-np 1525/udp datametrics 1645/tcp old-radius # datametrics / old radius entry datametrics 1645/udp old-radius # datametrics / old radius entry sa-msg-port 1646/tcp old-radacct # sa-msg-port / old radacct entry sa-msg-port 1646/udp old-radacct # sa-msg-port / old radacct entry kermit 1649/tcp kermit 1649/udp l2tp 1701/tcp l2f l2tp 1701/udp l2f h323gatedisc 1718/tcp h323gatedisc 1718/udp h323gatestat 1719/tcp h323gatestat 1719/udp h323hostcall 1720/tcp h323hostcall 1720/udp tftp-mcast 1758/tcp tftp-mcast 1758/udp mtftp 1759/udp hello 1789/tcp hello 1789/udp radius 1812/tcp # Radius radius 1812/udp # Radius radius-acct 1813/tcp radacct # Radius Accounting radius-acct 1813/udp radacct # Radius Accounting mtp 1911/tcp # mtp 1911/udp # hsrp 1985/tcp # Cisco Hot Standby Router Protocol hsrp 1985/udp # Cisco Hot Standby Router Protocol licensedaemon 1986/tcp licensedaemon 1986/udp gdp-port 1997/tcp # Cisco Gateway Discovery Protocol gdp-port 1997/udp # Cisco Gateway Discovery Protocol nfs 2049/tcp nfsd nfs 2049/udp nfsd zephyr-srv 2102/tcp # Zephyr server zephyr-srv 2102/udp # Zephyr server zephyr-clt 2103/tcp # Zephyr serv-hm connection zephyr-clt 2103/udp # Zephyr serv-hm connection zephyr-hm 2104/tcp # Zephyr hostmanager zephyr-hm 2104/udp # Zephyr hostmanager cvspserver 2401/tcp # CVS client/server operations cvspserver 2401/udp # CVS client/server operations venus 2430/tcp # codacon port venus 2430/udp # Venus callback/wbc interface venus-se 2431/tcp # tcp side effects venus-se 2431/udp # udp sftp side effect codasrv 2432/tcp # not used codasrv 2432/udp # server port codasrv-se 2433/tcp # tcp side effects codasrv-se 2433/udp # udp sftp side effectQ # Ports numbered 2600 through 2606 are used by the zebra package without # being registred. The primary names are the registered names, and the # unregistered names used by zebra are listed as aliases. hpstgmgr 2600/tcp zebrasrv # HPSTGMGR hpstgmgr 2600/udp # HPSTGMGR discp-client 2601/tcp zebra # discp client discp-client 2601/udp # discp client discp-server 2602/tcp ripd # discp server discp-server 2602/udp # discp server servicemeter 2603/tcp ripngd # Service Meter servicemeter 2603/udp # Service Meter nsc-ccs 2604/tcp ospfd # NSC CCS nsc-ccs 2604/udp # NSC CCS nsc-posa 2605/tcp bgpd # NSC POSA nsc-posa 2605/udp # NSC POSA netmon 2606/tcp ospf6d # Dell Netmon netmon 2606/udp # Dell Netmon corbaloc 2809/tcp # CORBA naming service locator icpv2 3130/tcp # Internet Cache Protocol V2 (Squid) icpv2 3130/udp # Internet Cache Protocol V2 (Squid) mysql 3306/tcp # MySQL mysql 3306/udp # MySQL trnsprntproxy 3346/tcp # Trnsprnt Proxy trnsprntproxy 3346/udp # Trnsprnt Proxy pxe 4011/udp # PXE server rwhois 4321/tcp # Remote Who Is rwhois 4321/udp # Remote Who Is krb524 4444/tcp # Kerberos 5 to 4 ticket xlator krb524 4444/udp # Kerberos 5 to 4 ticket xlator rfe 5002/tcp # Radio Free Ethernet rfe 5002/udp # Actually uses UDP only cfengine 5308/tcp # CFengine cfengine 5308/udp # CFengine cvsup 5999/tcp CVSup # CVSup file transfer/John Polstra/FreeBSD cvsup 5999/udp CVSup # CVSup file transfer/John Polstra/FreeBSD x11 6000/tcp X # the X Window System afs3-fileserver 7000/tcp # file server itself afs3-fileserver 7000/udp # file server itself afs3-callback 7001/tcp # callbacks to cache managers afs3-callback 7001/udp # callbacks to cache managers afs3-prserver 7002/tcp # users & groups database afs3-prserver 7002/udp # users & groups database afs3-vlserver 7003/tcp # volume location database afs3-vlserver 7003/udp # volume location database afs3-kaserver 7004/tcp # AFS/Kerberos authentication service afs3-kaserver 7004/udp # AFS/Kerberos authentication service afs3-volser 7005/tcp # volume managment server afs3-volser 7005/udp # volume managment server afs3-errors 7006/tcp # error interpretation service afs3-errors 7006/udp # error interpretation service afs3-bos 7007/tcp # basic overseer process afs3-bos 7007/udp # basic overseer process afs3-update 7008/tcp # server-to-server updater afs3-update 7008/udp # server-to-server updater afs3-rmtsys 7009/tcp # remote cache manager service afs3-rmtsys 7009/udp # remote cache manager service sd 9876/tcp # Session Director sd 9876/udp # Session Director amanda 10080/tcp # amanda backup services amanda 10080/udp # amanda backup services pgpkeyserver 11371/tcp # PGP/GPG public keyserver pgpkeyserver 11371/udp # PGP/GPG public keyserver h323callsigalt 11720/tcp # H323 Call Signal Alternate h323callsigalt 11720/udp # H323 Call Signal Alternate bprd 13720/tcp # BPRD (VERITAS NetBackup) bprd 13720/udp # BPRD (VERITAS NetBackup) bpdbm 13721/tcp # BPDBM (VERITAS NetBackup) bpdbm 13721/udp # BPDBM (VERITAS NetBackup) bpjava-msvc 13722/tcp # BP Java MSVC Protocol bpjava-msvc 13722/udp # BP Java MSVC Protocol vnetd 13724/tcp # Veritas Network Utility vnetd 13724/udp # Veritas Network Utility bpcd 13782/tcp # VERITAS NetBackup bpcd 13782/udp # VERITAS NetBackup vopied 13783/tcp # VOPIED Protocol vopied 13783/udp # VOPIED Protocol # This port is registered as wnn6, but also used under the unregistered name # "wnn4" by the FreeWnn package. wnn6 22273/tcp wnn4 wnn6 22273/ucp wnn4 quake 26000/tcp quake 26000/udp wnn6-ds 26208/tcp wnn6-ds 26208/udp traceroute 33434/tcp traceroute 33434/udp # # Datagram Delivery Protocol services # rtmp 1/ddp # Routing Table Maintenance Protocol nbp 2/ddp # Name Binding Protocol echo 4/ddp # AppleTalk Echo Protocol zip 6/ddp # Zone Information Protocol # # Kerberos (Project Athena/MIT) services # Note that these are for Kerberos v4, and are unregistered/unofficial. Sites # running v4 should uncomment these and comment out the v5 entries above. # kerberos_master 751/udp # Kerberos authentication kerberos_master 751/tcp # Kerberos authentication passwd_server 752/udp # Kerberos passwd server krbupdate 760/tcp kreg # Kerberos registration kpop 1109/tcp # Pop with Kerberos knetd 2053/tcp # Kerberos de-multiplexor # # Kerberos 5 services, also not registered with IANA # krb5_prop 754/tcp # Kerberos slave propagation eklogin 2105/tcp # Kerberos encrypted rlogin # # Unregistered but necessary(?) (for NetBSD) services # supfilesrv 871/tcp # SUP server supfiledbg 1127/tcp # SUP debugging # # Unregistered but useful/necessary other services # netstat 15/tcp # (was once asssigned, no more) linuxconf 98/tcp # Linuxconf HTML access poppassd 106/tcp # Eudora poppassd 106/udp # Eudora smtps 465/tcp # SMTP over SSL (TLS) gii 616/tcp # gated interactive interface omirr 808/tcp omirrd # online mirror omirr 808/udp omirrd # online mirror swat 901/tcp # Samba Web Administration Tool rndc 953/tcp # rndc control sockets (BIND 9) rndc 953/udp # rndc control sockets (BIND 9) skkserv 1178/tcp # SKK Japanese input method xtel 1313/tcp # french minitel support 1529/tcp prmsd gnatsd # GNATS, cygnus bug tracker cfinger 2003/tcp # GNU Finger ninstall 2150/tcp # ninstall service ninstall 2150/udp # ninstall service afbackup 2988/tcp # Afbackup system afbackup 2988/udp # Afbackup system squid 3128/tcp # squid web proxy prsvp 3455/tcp # RSVP Port prsvp 3455/udp # RSVP Port postgres 5432/tcp # POSTGRES postgres 5432/udp # POSTGRES fax 4557/tcp # FAX transmission service (old) hylafax 4559/tcp # HylaFAX client-server protocol (new) sgi-dgl 5232/tcp # SGI Distributed Graphics sgi-dgl 5232/udp noclog 5354/tcp # noclogd with TCP (nocol) noclog 5354/udp # noclogd with UDP (nocol) hostmon 5355/tcp # hostmon uses TCP (nocol) hostmon 5355/udp # hostmon uses TCP (nocol) canna 5680/tcp x11-ssh-offset 6010/tcp # SSH X11 forwarding offset ircd 6667/tcp # Internet Relay Chat ircd 6667/udp # Internet Relay Chat xfs 7100/tcp # X font server tircproxy 7666/tcp # Tircproxy http-alt 8008/tcp http-alt 8008/udp webcache 8080/tcp # WWW caching service webcache 8080/udp # WWW caching service tproxy 8081/tcp # Transparent Proxy tproxy 8081/udp # Transparent Proxy jetdirect 9100/tcp laserjet hplj mandelspawn 9359/udp mandelbrot # network mandelbrot kamanda 10081/tcp # amanda backup services (Kerberos) kamanda 10081/udp # amanda backup services (Kerberos) amandaidx 10082/tcp # amanda backup services amidxtape 10083/tcp # amanda backup services isdnlog 20011/tcp # isdn logging system isdnlog 20011/udp # isdn logging system vboxd 20012/tcp # voice box system vboxd 20012/udp # voice box system wnn4_Kr 22305/tcp # used by the kWnn package wnn4_Cn 22289/tcp # used by the cWnn package wnn4_Tw 22321/tcp # used by the tWnn package binkp 24554/tcp # Binkley binkp 24554/udp # Binkley asp 27374/tcp # Address Search Protocol asp 27374/udp # Address Search Protocol tfido 60177/tcp # Ifmail tfido 60177/udp # Ifmail fido 60179/tcp # Ifmail fido 60179/udp # Ifmail |
================================================================ ================================================================ -- 마스터 smb.conf 소스 ---------------------------------------- ================================================================ |
# This is the main Samba configuration file. You should read the # smb.conf(5) manual page in order to understand the options listed # here. Samba has a huge number of configurable options (perhaps too # many!) most of which are not shown in this example # # Any line which starts with a ; (semi-colon) or a # (hash) # is a comment and is ignored. In this example we will use a # # for commentry and a ; for parts of the config file that you # may wish to enable # # NOTE: Whenever you modify this file you should run the command "testparm" # to check that you have not made any basic syntactic errors. # #======================= Global Settings ===================================== [global] # workgroup = NT-Domain-Name or Workgroup-Name # 작업 그룹 이름을 넣는다. 되도록이면 영문 사용 workgroup = sorii-lan # server string is the equivalent of the NT Description field # 이부분에 적당한 서버 이름과 NetBIOS이름을 넣는다 # 서버이름은 한글 사용 가능 server string = Home Server netbios name = HOME # This option is important for security. It allows you to restrict # connections to machines which are on your local network. The # following example restricts access to two C class networks and # the "loopback" interface. For more examples of the syntax see # the smb.conf man page ; hosts allow = 192.168.1. 192.168.2. 127. # if you want to automatically load your printer list rather # than setting them up individually then you'll need this printcap name = /etc/printcap load printers = yes # It should not be necessary to spell out the print system type unless # yours is non-standard. Currently supported print systems include: # bsd, sysv, plp, lprng, aix, hpux, qnx printing = lprng # Uncomment this if you want a guest account, you must add this to /etc/passwd # otherwise the user "nobody" is used ; guest account = pcguest # this tells Samba to use a separate log file for each machine # that connects log file = /var/log/samba/%m.log # Put a capping on the size of the log files (in Kb). max log size = 0 # code page # 코드 페이지 한글로 설정 client code page = 949 # character set = ISO8859-1 # Security mode. Most people will want user level security. See # security_level.txt for details. # user 인증 모드, 로컬의 사용자 아이디와 암호로 인증한다. security = user # Use password server option only with security = server # The argument list may include: # password server = My_PDC_Name [My_BDC_Name] [My_Next_BDC_Name] # or to auto-locate the domain controller/s # password server = * ; password server = <NT-Server-Name> # Password Level allows matching of _n_ characters of the password for # all combinations of upper and lower case. ; password level = 8 ; username level = 8 # You may wish to use password encryption. Please read # ENCRYPTION.txt, Win95.txt and WinNT.txt in the Samba documentation. # Do not enable this option unless you have read those documents encrypt passwords = yes smb passwd file = /etc/samba/smbpasswd # The following is needed to keep smbclient from spouting spurious errors # when Samba is built with support for SSL. ; ssl CA certFile = /usr/share/ssl/certs/ca-bundle.crt # The following are needed to allow password changing from Windows to # update the Linux sytsem password also. # NOTE: Use these with 'encrypt passwords' and 'smb passwd file' above. # NOTE2: You do NOT need these to allow workstations to change only # the encrypted SMB passwords. They allow the Unix password # to be kept in sync with the SMB password. unix password sync = Yes passwd program = /usr/bin/passwd %u passwd chat = *New*password* %n\n *Retype*new*password* %n\n *passwd:*all*authentication*tokens*updated*successfully* # You can use PAM's password change control flag for Samba. If # enabled, then PAM will be used for password changes when requested # by an SMB client instead of the program listed in passwd program. # It should be possible to enable this without changing your passwd # chat parameter for most setups. pam password change = yes # Unix users can map to different SMB User names ; username map = /etc/samba/smbusers # Using the following line enables you to customise your configuration # on a per machine basis. The %m gets replaced with the netbios name # of the machine that is connecting ; include = /etc/samba/smb.conf.%m # This parameter will control whether or not Samba should obey PAM's # account and session management directives. The default behavior is # to use PAM for clear text authentication only and to ignore any # account or session management. Note that Samba always ignores PAM # for authentication in the case of encrypt passwords = yes obey pam restrictions = yes # Most people will find that this option gives better performance. # See speed.txt and the manual pages for details socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 # Configure Samba to use multiple interfaces # If you have multiple network interfaces then you must list them # here. See the man page for details. ; interfaces = 192.168.12.2/24 192.168.13.2/24 # Configure remote browse list synchronisation here # request announcement to, or browse list sync from: # a specific host or from / to a whole subnet (see below) ; remote browse sync = 192.168.3.25 192.168.5.255 # Cause this host to announce itself to local subnets here ; remote announce = 192.168.1.255 192.168.2.44 # Browser Control Options: # set local master to no if you don't want Samba to become a master # browser on your network. Otherwise the normal election rules apply ; local master = no # OS Level determines the precedence of this server in master browser # elections. The default value should be reasonable ; os level = 33 # Domain Master specifies Samba to be the Domain Master Browser. This # allows Samba to collate browse lists between subnets. Don't use this # if you already have a Windows NT domain controller doing this job domain master = yes # Preferred Master causes Samba to force a local browser election on startup # and gives it a slightly higher chance of winning the election ; preferred master = yes # Enable this if you want Samba to be a domain logon server for # Windows95 workstations. # 윈95를 위한 도메인 로그온이 가능하게 한다. domain logons = yes # if you enable domain logons then you may want a per-machine or # per user logon script # run a specific logon batch file per workstation (machine) ; logon script = %m.bat # run a specific logon batch file per username ; logon script = %U.bat # Where to store roving profiles (only for Win95 and WinNT) # %L substitutes for this servers netbios name, %U is username # You must uncomment the [Profiles] share below ; logon path = \\%L\Profiles\%U # Windows Internet Name Serving Support Section: # WINS Support - Tells the NMBD component of Samba to enable it's WINS Server # WINS서버가 되도록 한다 wins support = yes # WINS Server - Tells the NMBD components of Samba to be a WINS Client # Note: Samba can be either a WINS Server, or a WINS Client, but NOT both ; wins server = w.x.y.z # WINS Proxy - Tells Samba to answer name resolution queries on # behalf of a non WINS capable client, for this to work there must be # at least one WINS Server on the network. The default is NO. ; wins proxy = yes # DNS Proxy - tells Samba whether or not to try to resolve NetBIOS names # via DNS nslookups. The built-in default for versions 1.9.17 is yes, # this has been changed in version 1.9.18 to no. dns proxy = no # Case Preservation can be handy - system default is _no_ # NOTE: These can be set on a per share basis ; preserve case = no ; short preserve case = no # Default case is normally upper case for all DOS files ; default case = lower # Be very careful with case sensitivity - it can break things! ; case sensitive = no #============================ Share Definitions ============================== [homes] comment = 사용자 홈 browseable = no writable = yes valid users = %S create mode = 0640 directory mode = 0750 # If you want users samba doesn't recognize to be mapped to a guest user ; map to guest = bad user [manage] comment = 기획/관리자 그룹. 기획/관리자만 쓰기가 가능 path = /home/manage public = yes writable = yes create mode = 0664 directory mode = 0775 [develop] comment = 개발자 그룹. 개발자만 쓰기가 가능 path = /home/develop public = yes writable = yes create mode = 0664 directory mode = 0775 [design] comment = 디자이너 그룹. 디자이너만 쓰기가 가능 path = /home/design public = yes writable = yes create mode = 0664 directory mode = 0775 [sorii] comment = 소리아이 공유. ftp://ftp.sorii.com/으로 접속, 아이디 sorii. 공용의 목적으로 사용 path = /home/sorii public = yes writable = yes create mode = 0660 directory mode = 0770 [public_html] comment = 홈페이지 공간. 여기에 폴더를 만들어 두면 http://폴더이름.sorii.com/으로 홈페이지 운영이 가능 path = /home/public_html public = yes writable = yes create mode = 0644 directory mode = 0755 # Un-comment the following and create the netlogon directory for Domain Logons ; [netlogon] ; comment = Network Logon Service ; path = /usr/local/samba/lib/netlogon ; guest ok = yes ; writable = no ; share modes = no # Un-comment the following to provide a specific roving profile share # the default is to use the user's home directory ;[Profiles] ; path = /usr/local/samba/profiles ; browseable = no ; guest ok = yes # NOTE: If you have a BSD-style print system there is no need to # specifically define each individual printer [printers] comment = All Printers path = /var/spool/samba browseable = no # Set public = yes to allow user 'guest account' to print guest ok = no writable = no printable = yes # This one is useful for people to share files ;[tmp] ; comment = Temporary file space ; path = /tmp ; read only = no ; public = yes # A publicly accessible directory, but read only, except for people in # the "staff" group ;[public] ; comment = Public Stuff ; path = /home/samba ; public = yes ; writable = yes ; printable = no ; write list = @staff # Other examples. # # A private printer, usable only by fred. Spool data will be placed in fred's # home directory. Note that fred must have write access to the spool directory, # wherever it is. ;[fredsprn] ; comment = Fred's Printer ; valid users = fred ; path = /home/fred ; printer = freds_printer ; public = no ; writable = no ; printable = yes # A private directory, usable only by fred. Note that fred requires write # access to the directory. ;[fredsdir] ; comment = Fred's Service ; path = /usr/somewhere/private ; valid users = fred ; public = no ; writable = yes ; printable = no # a service which has a different directory for each machine that connects # this allows you to tailor configurations to incoming machines. You could # also use the %U option to tailor it by user name. # The %m gets replaced with the machine name that is connecting. ;[pchome] ; comment = PC Directories ; path = /usr/local/pc/%m ; public = no ; writable = yes # A publicly accessible directory, read/write to all users. Note that all files # created in the directory by users will be owned by the default user, so # any user with access can delete any other user's files. Obviously this # directory must be writable by the default user. Another user could of course # be specified, in which case all files would be owned by that user instead. ;[public] ; path = /usr/somewhere/else/public ; public = yes ; only guest = yes ; writable = yes ; printable = no # The following two entries demonstrate how to share a directory so that two # users can place files there that will be owned by the specific users. In this # setup, the directory should be writable by both users and should have the # sticky bit set on it to prevent abuse. Obviously this could be extended to # as many users as required. ;[myshare] ; comment = Mary's and Fred's stuff ; path = /usr/somewhere/shared ; valid users = mary fred ; public = no ; writable = yes ; printable = no ; create mask = 0765 |
================================================================ ================================================================ -- 슬레이브 smb.conf 소스 -------------------------------------- ================================================================ |
# This is the main Samba configuration file. You should read the # smb.conf(5) manual page in order to understand the options listed # here. Samba has a huge number of configurable options (perhaps too # many!) most of which are not shown in this example # # Any line which starts with a ; (semi-colon) or a # (hash) # is a comment and is ignored. In this example we will use a # # for commentry and a ; for parts of the config file that you # may wish to enable # # NOTE: Whenever you modify this file you should run the command "testparm" # to check that you have not made any basic syntactic errors. # #======================= Global Settings ===================================== [global] # workgroup = NT-Domain-Name or Workgroup-Name # 작업 그룹 이름을 넣는다. 되도록이면 영문 사용 workgroup = sorii-lan # server string is the equivalent of the NT Description field # 이부분에 적당한 서버 이름과 NetBIOS이름을 넣는다 # 서버이름은 한글 사용 가능 server string = Name Server netbios name = NAME # This option is important for security. It allows you to restrict # connections to machines which are on your local network. The # following example restricts access to two C class networks and # the "loopback" interface. For more examples of the syntax see # the smb.conf man page ; hosts allow = 192.168.1. 192.168.2. 127. # if you want to automatically load your printer list rather # than setting them up individually then you'll need this printcap name = /etc/printcap load printers = yes # It should not be necessary to spell out the print system type unless # yours is non-standard. Currently supported print systems include: # bsd, sysv, plp, lprng, aix, hpux, qnx, cups printing = cups # Uncomment this if you want a guest account, you must add this to /etc/passwd # otherwise the user "nobody" is used ; guest account = pcguest # this tells Samba to use a separate log file for each machine # that connects log file = /var/log/samba/%m.log # Put a capping on the size of the log files (in Kb). max log size = 0 # code page # 코드 페이지 한글로 설정 client code page = 949 # character set = ISO8859-1 # Security mode. Most people will want user level security. See # security_level.txt for details. # server 인증 모드, NetBIOS이름과 일치하는 다른 삼바 서버를 통해 사용자 모드와 같이 인증한다. security = server # Use password server option only with security = server # The argument list may include: # password server = My_PDC_Name [My_BDC_Name] [My_Next_BDC_Name] # or to auto-locate the domain controller/s # 보안 레벨을 server로 했을 때 사용할 인증 서버의 NetBIOS 이름을 지정 ; password server = * password server = HOME # Password Level allows matching of _n_ characters of the password for # all combinations of upper and lower case. ; password level = 8 ; username level = 8 # You may wish to use password encryption. Please read # ENCRYPTION.txt, Win95.txt and WinNT.txt in the Samba documentation. # Do not enable this option unless you have read those documents encrypt passwords = yes smb passwd file = /etc/samba/smbpasswd # The following is needed to keep smbclient from spouting spurious errors # when Samba is built with support for SSL. ; ssl CA certFile = /usr/share/ssl/certs/ca-bundle.crt # The following are needed to allow password changing from Windows to # update the Linux system password also. # NOTE: Use these with 'encrypt passwords' and 'smb passwd file' above. # NOTE2: You do NOT need these to allow workstations to change only # the encrypted SMB passwords. They allow the Unix password # to be kept in sync with the SMB password. unix password sync = Yes passwd program = /usr/bin/passwd %u passwd chat = *New*password* %n\n *Retype*new*password* %n\n *passwd:*all*authentication*tokens*updated*successfully* # You can use PAM's password change control flag for Samba. If # enabled, then PAM will be used for password changes when requested # by an SMB client instead of the program listed in passwd program. # It should be possible to enable this without changing your passwd # chat parameter for most setups. pam password change = yes # Unix users can map to different SMB User names ; username map = /etc/samba/smbusers # Using the following line enables you to customise your configuration # on a per machine basis. The %m gets replaced with the netbios name # of the machine that is connecting ; include = /etc/samba/smb.conf.%m # This parameter will control whether or not Samba should obey PAM's # account and session management directives. The default behavior is # to use PAM for clear text authentication only and to ignore any # account or session management. Note that Samba always ignores PAM # for authentication in the case of encrypt passwords = yes obey pam restrictions = yes # Most people will find that this option gives better performance. # See speed.txt and the manual pages for details socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 # Configure Samba to use multiple interfaces # If you have multiple network interfaces then you must list them # here. See the man page for details. ; interfaces = 192.168.12.2/24 192.168.13.2/24 # Configure remote browse list synchronisation here # request announcement to, or browse list sync from: # a specific host or from / to a whole subnet (see below) ; remote browse sync = 192.168.3.25 192.168.5.255 # Cause this host to announce itself to local subnets here ; remote announce = 192.168.1.255 192.168.2.44 # Browser Control Options: # set local master to no if you don't want Samba to become a master # browser on your network. Otherwise the normal election rules apply ; local master = no # OS Level determines the precedence of this server in master browser # elections. The default value should be reasonable ; os level = 33 # Domain Master specifies Samba to be the Domain Master Browser. This # allows Samba to collate browse lists between subnets. Don't use this # if you already have a Windows NT domain controller doing this job ; domain master = yes # Preferred Master causes Samba to force a local browser election on startup # and gives it a slightly higher chance of winning the election ; preferred master = yes # Enable this if you want Samba to be a domain logon server for # Windows95 workstations. # 윈95를 위한 도메인 로그온이 가능하게 한다. domain logons = yes # if you enable domain logons then you may want a per-machine or # per user logon script # run a specific logon batch file per workstation (machine) ; logon script = %m.bat # run a specific logon batch file per username ; logon script = %U.bat # Where to store roving profiles (only for Win95 and WinNT) # %L substitutes for this servers netbios name, %U is username # You must uncomment the [Profiles] share below ; logon path = \\%L\Profiles\%U # Windows Internet Name Serving Support Section: # WINS Support - Tells the NMBD component of Samba to enable it's WINS Server ; wins support = yes # WINS Server - Tells the NMBD components of Samba to be a WINS Client # Note: Samba can be either a WINS Server, or a WINS Client, but NOT both # 지정된 주소의 서버를 사용하는 WINS클라이언트가 되도록 한다 wins server = 218.235.99.63 # WINS Proxy - Tells Samba to answer name resolution queries on # behalf of a non WINS capable client, for this to work there must be # at least one WINS Server on the network. The default is NO. ; wins proxy = yes # DNS Proxy - tells Samba whether or not to try to resolve NetBIOS names # via DNS nslookups. The built-in default for versions 1.9.17 is yes, # this has been changed in version 1.9.18 to no. dns proxy = no # Case Preservation can be handy - system default is _no_ # NOTE: These can be set on a per share basis ; preserve case = no ; short preserve case = no # Default case is normally upper case for all DOS files ; default case = lower # Be very careful with case sensitivity - it can break things! ; case sensitive = no #============================ Share Definitions ============================== ;[homes] ; comment = Home Directories ; browseable = no ; writable = yes ; valid users = %S ; create mode = 0664 ; directory mode = 0775 # If you want users samba doesn't recognize to be mapped to a guest user ; map to guest = bad user [share] comment = 공유 폴더 path = /home/sorii writable = yes create mode = 0640 directory mode = 0750 write list = @sorii # Un-comment the following and create the netlogon directory for Domain Logons ; [netlogon] ; comment = Network Logon Service ; path = /usr/local/samba/lib/netlogon ; guest ok = yes ; writable = no ; share modes = no # Un-comment the following to provide a specific roving profile share # the default is to use the user's home directory ;[Profiles] ; path = /usr/local/samba/profiles ; browseable = no ; guest ok = yes # NOTE: If you have a BSD-style print system there is no need to # specifically define each individual printer [printers] comment = All Printers path = /var/spool/samba browseable = no # Set public = yes to allow user 'guest account' to print guest ok = no writable = no printable = yes # This one is useful for people to share files ;[tmp] ; comment = Temporary file space ; path = /tmp ; read only = no ; public = yes # A publicly accessible directory, but read only, except for people in # the "staff" group ;[public] ; comment = Public Stuff ; path = /home/samba ; public = yes ; writable = yes ; printable = no ; write list = @staff # Other examples. # # A private printer, usable only by fred. Spool data will be placed in fred's # home directory. Note that fred must have write access to the spool directory, # wherever it is. ;[fredsprn] ; comment = Fred's Printer ; valid users = fred ; path = /home/fred ; printer = freds_printer ; public = no ; writable = no ; printable = yes # A private directory, usable only by fred. Note that fred requires write # access to the directory. ;[fredsdir] ; comment = Fred's Service ; path = /usr/somewhere/private ; valid users = fred ; public = no ; writable = yes ; printable = no # a service which has a different directory for each machine that connects # this allows you to tailor configurations to incoming machines. You could # also use the %U option to tailor it by user name. # The %m gets replaced with the machine name that is connecting. ;[pchome] ; comment = PC Directories ; path = /usr/local/pc/%m ; public = no ; writable = yes # A publicly accessible directory, read/write to all users. Note that all files # created in the directory by users will be owned by the default user, so # any user with access can delete any other user's files. Obviously this # directory must be writable by the default user. Another user could of course # be specified, in which case all files would be owned by that user instead. ;[public] ; path = /usr/somewhere/else/public ; public = yes ; only guest = yes ; writable = yes ; printable = no # The following two entries demonstrate how to share a directory so that two # users can place files there that will be owned by the specific users. In this # setup, the directory should be writable by both users and should have the # sticky bit set on it to prevent abuse. Obviously this could be extended to # as many users as required. ;[myshare] ; comment = Mary's and Fred's stuff ; path = /usr/somewhere/shared ; valid users = mary fred ; public = no ; writable = yes ; printable = no ; create mask = 0765 |
================================================================ ================================================================ -- perl 정규식 참고 -------------------------------------------- ================================================================ |
정규식에 사용되는 특수문자의 의미 ------------------+----------------------------------------------------- ^ (caret) | 라인의 처음이나 문자열의 처음을 표시 | ^aaa (문자열의 처음에 aaa를 포함하면 참, 그렇지 않으면 거짓) ------------------+----------------------------------------------------- $ (dollar) | 라인의 끝이나 문자열의 끝을 표시 | aaa$ (문자열의 끝에 aaa를 포함하면 참, 그렇지 않으면 거짓) ------------------+----------------------------------------------------- . (period) | 임의의 한 문자를 표시 | ^a.c (문자열의 처음에 abc, adc, aZc 등은 참, aa 는 거짓) | a..b$ (문자열의 끝에 aaab, abbb, azzb 등을 포함하면 참) ------------------+----------------------------------------------------- [] (bracket) | 문자의 집합이나 범위를 나타냄, 두 문자 사이의 "-"는 범위를 나타냄 | []내에서 "^"이 선행되면 not을 나타냄 ------------------+----------------------------------------------------- {} (brace) | {} 내의 숫자는 직전의 선행문자가 나타나는 횟수 또는 범위를 나타냄 | a{3} ('a'의 3번 반복인 aaa만 해당됨) ------------------+----------------------------------------------------- * (asterisk) | "*" 직전의 선행문자가 0번 또는 여러번 나타나는 문자열 | ab*c ('b'를 0번 또는 여러번 포함하므로 ac, ackdddd, abc, abbc, abbbbbbbc 등) ------------------+----------------------------------------------------- + | "+" 직전의 선행문자가 1번 이상 나타나는 문자열 | ab+c ('b'를 1번 또는 여러번 포함하므로 abc, abckdddd, abbc, abbbbbbbc 등, ac는 안됨) ------------------+----------------------------------------------------- ? | "?" 직전의 선행문자가 0번 또는 1번 나타나는 문자열 | ab?c ('b'를 0번 또는 1번 포함하므로 abc, abcd 만 해당됨) ------------------+----------------------------------------------------- () (parenthesis) | ()는 정규식내에서 패턴을 그룹화 할 때 사용 ------------------+----------------------------------------------------- | (bar) | or를 나타냄 | a|b|c (a, b, c 중 하나, 즉 [a-c]와 동일함) ------------------+----------------------------------------------------- \ (backslash) | 위에서 사용된 특수 문자들을 정규식내에서 문자로 취급하고 싶을 때 | '\'를 선행시켜서 사용하면됨 | filename\.ext ("filename.ext"를 나타냄). ------------------+----------------------------------------------------- 정규식에서는 위에서 언급한 특수 문자를 제외한 나머지 문자들은 일반 문자로 취급함 위의 정규식 연산자 가운데 vi에서는 지원하지 않는 연산자가 있습니다. vi의 경우 +연산자도 없습니다. regular expression library에 따라 지원하는 연산자의 종류가 상당히 다릅니다. 요즘은 perl-style regular expression이 표준으로 자리잡아가는 것이 대체적인 추세이고, perl의 regular expression은 가장 복합하고 기능이 많은 편입니다. · [abc] (a, b, c 중 어떤 문자, "[a-c]."과 동일) · [Yy] (Y 또는 y) · [A-Za-z0-9] (모든 알파벳과 숫자) · [-A-Z]. ("-"(hyphen)과 모든 대문자) · [^a-z] (소문자 이외의 문자) · [^0-9] (숫자 이외의 문자) · [[:digit:]] ([0-9]와 동일) · a{3,} ('a'가 3번 이상 반복인 aaa, aaaa, aaaa, ... 등을 나타냄) · a{3,5} (aaa, aaaa, aaaaa 만 해당됨) · ab{2,3} (abb와 abbb 만 해당됨) · [0-9]{2} (두 자리 숫자) · doc[7-9]{2} (doc77, doc87, doc97 등이 해당) · [^Zz]{5} (Z와 z를 포함하지 않는 5개의 문자열, abcde, ttttt 등이 해당) · .{3,4}er ('er'앞에 세 개 또는 네 개의 문자를 포함하는 문자열이므로 Peter, mother 등이 해당) · * (선행문자가 없는 경우이므로 임의의 문자열 및 공백 문자열도 해당됨) · .* (선행문자가 "."이므로 하나 이상의 문자를 포함하는 문자열, 공백 문자열은 안됨) · ab* ('b'를 0번 또는 여러번 포함하므로 a, accc, abb, abbbbbbb 등) · a* ('a'를 0번 또는 여러번 포함하므로 k, kdd, sdfrrt, a, aaaa, abb, 공백문자열 등) · doc[7-9]* (doc7, doc777, doc778989, doc 등이 해당) · [A-Z].* (대문자로만 이루어진 문자열) · like.* (직전의 선행문자가 '.'이므로 like에 0 또는 하나 이상의 문자가 추가된 문자열이 됨, like, likely, liker, likelihood 등) · ab+ ('b'를 1번 또는 여러번 포함하므로 ab, abccc, abb, abbbbbbb 등) · like.+ (직전의 선행문자가 '.'이므로 like에 하나 이상의 문자가 추가된 문자열이 됨, likely, liker, likelihood 등, 그러나 like는 해당안됨) · [A-Z]+ (대문자로만 이루어진 문자열) · yes|Yes (yes나 Yes 중 하나, [yY]es와 동일함) · korea|japan|chinese (korea, japan, chinese 중 하나) · [\?\[\\\]] ('?', '[', '\', ']' 중 하나) |
================================================================ ================================================================ -- SoriiMilter.pl 소스 ----------------------------------------- ================================================================ |
#!/usr/bin/perl # 소리아이 메일 필터 # 기본적으로 제목의 '광고','홍보'와 # 첨부파일의 확장자가 scr,pif,bat,com인 것을 차단한다. use Sendmail::Milter; use Socket; use MIME::Base64; $logfile = "/var/log/milterlog"; sub connect_callback { my ($ctx, $hostname, $sockaddr_in) = @_; open LOG,">>$logfile"; $date = `echo -n \`date '+\%Y-\%m-\%d \%H:\%M:\%S'\``; print LOG "[connect $date] hostname: '$hostname'\n"; close LOG; return SMFIS_CONTINUE; } sub helo_callback { my ($ctx, $helohost) = @_; open LOG,">>$logfile"; print LOG " [helo] helohost: '$helohost'\n"; # 송신 도메인이 확실치 않은 메일 제거 if ($helohost =~ /.*([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/) { print LOG " ! helo invalid: $helohost\n"; return SMFIS_REJECT; } close LOG; return SMFIS_CONTINUE; } sub envfrom_callback { my ($ctx, $from, @args) = @_; open LOG,">>$logfile"; print LOG " [envfrom] args: '$from','" . join("','", @args) . "'\n"; # 익명 송신자 제거 if ($from !~ /.*\@.*/) { print LOG " ! from nobody: $from\n"; return SMFIS_REJECT; } close LOG; return SMFIS_CONTINUE; } sub envrcpt_callback { my ($ctx, $rcpt, @args) = @_; open LOG,">>$logfile"; print LOG " [envrcpt] args: '$rcpt','" . join("','", @args) . "'\n"; # 익명 수신자 제거 if ($rcpt !~ /.*\@.*/) { print LOG " ! rcpt nobody: $rcpt\n"; return SMFIS_REJECT; } close LOG; return SMFIS_CONTINUE; } sub check_subject { my ($subject) = @_; open LOG,">>$logfile"; # 광고 및 홍보 제거 if ($subject =~ /[[(< ({].*((광|=B1=A4).*(고|=B0=ED)|(홍|=C8=AB).*(보|=BA=B8)).*[])>) }]/) { print LOG " ! ad: $subject\n"; return "bad"; } # 포르노 제거 if ($subject =~ /.*(포르노|porno).*/) { print LOG " ! porno: $subject\n"; return "bad"; } close LOG; return "good"; } sub header_callback { my ($ctx, $headerf, $headerv) = @_; # Subject: 헤더인 경우. if ($headerf eq "Subject") { $chk = &check_subject($headerv); if ($chk eq "bad") { return SMFIS_REJECT; } # base64 디코딩을 수행 @decoded = split(/[\?+\n+ +\t+]/, $headerv); $headerv = ""; foreach (@decoded) { $headerv .= decode_base64($_); } $chk = &check_subject($headerv); if ($chk eq "bad") { return SMFIS_REJECT; } } return SMFIS_CONTINUE; } sub eoh_callback { my ($ctx) = @_; return SMFIS_CONTINUE; } sub check_body { my ($body) = @_; open LOG,">>$logfile"; # 광고 체크 : 정보통신부 if ($body =~ /정보통신부 *권고 *사항에 *의거/) { print LOG " ! ad: 정보통신부 권고 사항에 의거한 내용\n"; return "bad"; } close LOG; return "good"; } sub body_callback { my ($ctx, $body_chunk, $len) = @_; open LOG,">>$logfile"; print LOG " [body] length: $len\n"; close LOG; # 적당하지 않은 첨부파일 제거 @decoded = split(/[\n+\r+]/, $body_chunk); foreach (@decoded) { if ($_ =~ /name=\"?.*\.(scr|pif|bat)\"?/) { open LOG,">>$logfile"; print LOG " ! virus?: $1 '$_'\n"; close LOG; return SMFIS_REJECT; } } $chk = &check_body($body_chunk); if ($chk eq "bad") { return SMFIS_REJECT; } # base64 디코딩을 수행 @decoded = split(/[\?+\n+ +\t+]/, $body_chunk); $body_chunk = ""; foreach (@decoded) { $body_chunk .= decode_base64($_); } $chk = &check_body($body_chunk); if ($chk eq "bad") { return SMFIS_REJECT; } return SMFIS_CONTINUE; } sub eom_callback { my ($ctx) = @_; $ctx->addheader("X-SoriiMilter", "Spam,Virus Chk 1.01beta [Perl version]"); return SMFIS_CONTINUE; } sub abort_callback { my ($ctx) = @_; open LOG,">>$logfile"; print LOG " ! mail rejected !\n"; close LOG; return SMFIS_CONTINUE; } sub close_callback { my ($ctx) = @_; open LOG,">>$logfile"; print LOG " mail colsed\n"; close LOG; return SMFIS_CONTINUE; } ############################################ # 이하의 코드는 밀터 기본 코드로 수정 불가 # ############################################ my %my_callbacks = ( 'connect' => \&connect_callback, 'helo' => \&helo_callback, 'envfrom' => \&envfrom_callback, 'envrcpt' => \&envrcpt_callback, 'header' => \&header_callback, 'eoh' => \&eoh_callback, 'body' => \&body_callback, 'eom' => \&eom_callback, 'abort' => \&abort_callback, 'close' => \&close_callback, ); BEGIN: { if (scalar(@ARGV) < 2) { print "Usage: perl $0 <name_of_filter> <path_to_sendmail.cf> [name_of_logfile]\n"; exit; } my $conn = Sendmail::Milter::auto_getconn($ARGV[0], $ARGV[1]); print "Found connection info for '$ARGV[0]': $conn\n"; if ($conn =~ /^local:(.+)$/) { my $unix_socket = $1; if (-e $unix_socket) { print "Attempting to UNIX socket '$conn' ..."; if (unlink($unix_socket) == 0) { print "failed.\n"; exit; } print "successful.\n"; } } if (!Sendmail::Milter::auto_setconn($ARGV[0], $ARGV[1])) { print "Failed to detect connection information.\n"; exit; } if (!Sendmail::Milter::register($ARGV[0], \%my_callbacks, SMFI_CURR_ACTS)) { print "Failed to register callbacks for $ARGV[0].\n"; exit; } print("Starting Sendmail::Milter $Sendmail::Milter::VERSION engine.\n"); if ($ARGV !~ /[ \t]*/) { $logfile = $ARGV[2]; } print("Writing log '$logfile'.\n"); open LOG,">>$logfile"; $date = `echo -n \`date '+\%Y-\%m-\%d \%H:\%M:\%S'\``; print LOG "\n## Starting Milter ## $date\n"; close LOG; if (Sendmail::Milter::main()) { print "Successful exit from the Sendmail::Milter engine.\n"; } else { print "Unsuccessful exit from the Sendmail::Milter engine.\n"; } open LOG,">>$logfile"; $date = `echo -n \`date '+\%Y-\%m-\%d \%H:\%M:\%S'\``; print LOG "\n## Stoped Milter ## $date\n"; close LOG; } |
================================================================ ================================================================ -- userman 소스 ------------------------------------------------ ================================================================ |
#!/bin/bash # 사용자 정보 기본값 userid="" fullname="" password="" initgrp="sorii" grps="" homedir="" shelltype="" skelcopy="no" skeldir="" mkusergrp="no" setuid="" mkhome="yes" addsmb="yes" ShowTitle() { clear echo "========================================" echo "= NIS, SMB 통합 사용자 관리 =" echo "========================================" echo } ShowMainMenu() { echo " 1. 사용자 추가" echo " 2. 사용자 삭제" echo echo " 3. 그룹 추가" echo " 4. 그룹 삭제" echo echo " 5. NIS를 통해 사용자와 그룹 목록 보기" echo echo " [q] 종료" } ShowAddUserMenu() { clear echo "========================================" echo "= 새로운 사용자 추가 =" echo "========================================" echo echo " 1. 사용자 ID : $userid" echo " 2. 전체 이름 : $fullname" echo " 3. 암호 : 나중에 입력" echo " 4. 초기 그룹 : $initgrp" echo " 5. 추가 그룹 : $grps" echo -n " 6. 홈 위치 : " if [ "$homedir" = "" ]; then echo "기본 위치 사용" else echo "$homedir" fi echo -n " 7. 쉘 종류 : $shelltype" if [ "$shelltype" = "" ]; then echo "기본 쉘 사용" else echo "$shelltype" fi echo -n " 8. 뼈대 복사 : $skelcopy 스켈렉톤 디렉토리를 복사" if [ "$skelcopy" = "yes" ]; then echo "합니다." else echo "하지 않습니다." fi echo -n " 9. 뼈대 위치 : " if [ "$skeldir" = "" ]; then echo "기본 위치 사용" else echo "$skeldir" fi echo -n " 10. 새 그룹 : $mkusergrp 사용자 ID와 같은 이름의 새 그룹을 만" if [ "$mkusergrp" = "yes" ]; then echo "듭니다." else echo "들지 않습니다." fi echo -n " 11. UID : " if [ "$setuid" = "" ]; then echo "기본값 사용" else echo "$setuid" fi echo -n " 12. 홈 생성 : $mkhome 홈 디렉토리를 생성" if [ "$mkhome" = "yes" ]; then echo "합니다." else echo "하지 않습니다." fi echo -n " 13. 삼바 추가 : $addsmb 삼바 계정에 추가" if [ "$addsmb" = "yes" ]; then echo "합니다." else echo "하지 않습니다." fi echo echo " [q] 생성 취소" } InputID() { input="" echo -e -n " 사용자 ID를 입력하십시오. (영문 소문자와 숫자로만 구성)\n ID : " read input if [ "$input" = "" ]; then echo "! 입력이 되지 않았습니다." else userid="$input" echo -n " 입력이 되었습니다." fi } InputFullName() { input="" echo -e -n " 사용자의 전체이름을 입력하십시오. (한글 및 2바이트 문자를 삼가해 주십시오)\n 전체 이름 : " read input if [ "$input" = "" ]; then echo "! 입력이 되지 않았습니다." else fullname="$input" echo -n " 입력이 되었습니다." fi } InputPasswd() { passwd="" input1="" input2="" attempt=2 stty -echo while [ $attempt -ne 0 ] do let "attempt -= 1" echo -e -n " 암호를 입력하십시오.\n 암호 : " read input1 echo echo -e -n " 다시 한번 더 입력하십시오.\n 암호 : " read input2 echo if [ "$input1" = "" ] || [ "$input2" = "" ] || [ "$input1" != "$input2" ]; then echo -e -n "! 서로 같지 않거나 입력되지 않았습니다." if [ $attempt = 1 ]; then echo " 다시 입력해 주십시오. (마지막 시도!)" elif [ $attempt != 0 ]; then echo " 다시 입력해 주십시오. ($attempt번 시도 남음)" fi else password="$input1" break fi done stty echo if [ "$password" = "" ]; then echo "! 암호가 입력되지 않았습니다." fi } InputInitGrp() { input="" echo -e -n " 사용자의 주요 그룹 지정 (먼저 해당 그룹이 만들어져 있어야 합니다)\n 초기 그룹 : " read input if [ "$input" = "" ]; then echo "! 입력이 되지 않았습니다." else initgrp="$input" echo -n " 입력이 되었습니다." fi } InputGroups() { input="" echo -e -n " 사용자의 기타 소속 그룹 지정 (,(콜론)으로 여러개의 그룹을 지정할 수 있습니다)\n 그룹 목록 : " read input if [ "$input" = "" ]; then echo "! 입력이 되지 않았습니다." else grps="$input" echo -n " 입력이 되었습니다." fi } InputHomeDir() { input="" echo " 사용자의 홈 디렉토리 위치 지정 (엔터 입력시 /home/<초기그룹명>/<사용자id>의 기본 값 사용)" echo -n " 현재 위치 = " if [ "$homedir" = "" ]; then echo "시스템 디폴트" else echo "$homedir" fi echo -n " 새로운 위치 : " read input if [ "$input" = "" ]; then homedir="" echo " 입력이 되지 않았습니다. 시스템 디폴트 쉘을 사용하게 됩니다." else homedir="$input" echo -n " 입력이 되었습니다." fi } InputShell() { input="" echo " 사용자의 기본 쉘 지정 (엔터 입력시 디폴트 쉘 사용)" echo -n " 현재 쉘 = " if [ "$shelltype" = "" ]; then echo "시스템 디폴트" else echo "$shelltype" fi echo -n " 새로운 쉘 : " read input if [ "$shelltype" = "" ]; then shelltype="" echo " 입력이 되지 않았습니다. 시스템 디폴트 쉘를 사용하게 됩니다." else shelltype="$input" echo -n " 입력이 되었습니다." fi } InputSkelCopy() { input="" echo " 사용자의 기본적인 정보를 구성하기 위해 스켈렉톤 디렉토리를 복사하시겠습니까?" echo -n " y = 예, 복사합니다 / n = 아니오, 복사하지 않습니다 [y/n] : " read input if [ "$input" = "y" ] || [ "$input" = "Y" ]; then echo "예, 복사합니다." skelcopy="yes" elif [ "$input" = "n" ] || [ "$input" = "N" ]; then echo "아니오, 복사하지 않습니다." skelcopy="no" else echo "! 잘못 입력 되었습니다. 입력이 되지 않았습니다." fi } InputSkelDir() { input="" echo " 복사될 기본 스켈렉톤 디렉토리 지정" echo -n " 현재 위치 = " if [ "$skeldir" = "" ]; then echo "시스템 디폴트" else echo "$skeldir" fi echo -n " 새로운 위치 : " read input if [ "$input" = "" ]; then skeldir="" echo " 입력이 되지 않았습니다. 시스템 디폴트 위치를 사용하게 됩니다." else skeldir="$input" echo -n " 입력이 되었습니다." fi } InputMkUserGrp() { input="" echo " 사용자의 ID와 같은 이름의 새로운 그룹을 자동 생성하시겠습니까?" echo -n " y = 예, 생성합니다 / n = 아니오, 생성하지 않습니다 [y/n] : " read input if [ "$input" = "y" ] || [ "$input" = "Y" ]; then echo "예, 생성합니다." mkusergrp="yes" elif [ "$input" = "n" ] || [ "$input" = "N" ]; then echo "아니오, 생성하지 않습니다." mkusergrp="no" else echo "! 잘못 입력 되었습니다. 입력이 되지 않았습니다." fi } InputSetUID() { input="" echo " 사용자의 UID를 직접 지정합니다. (숫자만 사용, 그냥 엔터시 기본값 사용)" echo -n " 현재 UID = " if [ "$skeldir" = "" ]; then echo "시스템 디폴트" else echo "$setuid" fi echo -n " 새로운 UID : " read input if [ "$input" = "" ]; then setuid="" echo " 입력이 되지 않았습니다. 시스템 디폴트 UID를 사용하게 됩니다." else setuid="$input" echo -n " 입력이 되었습니다." fi } InputMkHome() { input="" echo " 사용자의 홈 디렉토리를 자동 생성하시겠습니까?" echo " (자동 생성시 홈 디렉토리가 기본 값이 아니라면 가장 하위 단계만 제외하고 미리 생성되어 있어야 합니다)" echo -n " y = 예, 생성합니다 / n = 아니오, 생성하지 않습니다 [y/n] : " read input if [ "$input" = "y" ] || [ "$input" = "Y" ]; then echo "예, 생성합니다." mkhome="yes" elif [ "$input" = "n" ] || [ "$input" = "N" ]; then echo "아니오, 생성하지 않습니다." mkhome="no" else echo "! 잘못 입력 되었습니다. 입력이 되지 않았습니다." fi } InputAddSMB() { input="" echo " 사용자의 암호를 삼바암호에도 추가 하시겠습니까?" echo " (입력된 암호와 같은 값으로 smbpasswd에 추가됩니다)" echo -n " y = 예, 추가합니다 / n = 아니오, 추가하지 않습니다 [y/n] : " read input if [ "$input" = "y" ] || [ "$input" = "Y" ]; then echo "예, 추가합니다." addsmb="yes" elif [ "$input" = "n" ] || [ "$input" = "N" ]; then echo "아니오, 추가하지 않습니다." addsmb="no" else echo "! 잘못 입력 되었습니다. 입력이 되지 않았습니다." fi } AddUser() { echo InputID while [ 0 ] do menunum="" ShowAddUserMenu echo echo " 내용을 점검하고 수정하십시오. 완료되면 엔터를 누르십시오." echo -n " 수정할 항목 번호 : " read menunum echo if [ "$menunum" = "q" ]; then break elif [ "$menunum" = "" ]; then addusercmd="useradd " if [ "$userid" = "" ]; then echo "! 잘못된 사용자 ID가 사용되었습니다." sleep 3 break else addusercmd="$addusercmd $userid" fi if [ "$fullname" != "" ]; then addusercmd="$addusercmd -c \"$fullname\"" fi if [ "$initgrp" != "" ]; then addusercmd="$addusercmd -g $initgrp" fi if [ "$grps" != "" ]; then addusercmd="$addusercmd -G $grps" fi if [ "$homedir" != "" ]; then addusercmd="$addusercmd -d $homedir -M" else addusercmd="$addusercmd -d /home/$initgrp/$userid -M" fi if [ "$shelltype" != "" ]; then addusercmd="$addusercmd -s $shelltype" fi if [ "$skelcopy" = "yes" ]; then addusercmd="$addusercmd -m" if [ "$skeldir" != "" ]; then addusercmd="$addusercmd -k \"$skeldir\"" fi fi if [ "$mkusergrp" = "yes" ]; then addusercmd="$addusercmd -n" fi if [ "$setuid" != "" ]; then addusercmd="$addusercmd -u $setuid" fi echo echo "Adding User..." `$addusercmd` # echo -e "$passwd\n$passwd\n" > /tmp/tmppass # passwd $userid --stdin < /tmp/tmppass echo "사용자 암호를 두 번 입력해 주십시오." passwd $userid if [ "$addsmb" = "yes" ]; then # echo -n "smbpasswd: " # smbpasswd -a $userid -s < /tmp/tmppass "삼바 암호를 두 번 입력해 주십시오." smbpasswd -a $userid fi # rm -f /tmp/tmppass if [ "$mkhome" = "yes" ]; then if [ "$homedir" = "" ] && [ "$initgrp" != "" ]; then mkdir "/home/$initgrp/$userid" > /dev/null chown $userid:$initgrp "/home/$initgrp/$userid" > /dev/null chmod 750 "/home/$initgrp/$userid" > /dev/null elif [ "$homedir" != "" ]; then mkdir "$homedir" > /dev/null chown $userid:$initgrp "$homedir" > /dev/null chmod 750 "$homedir" > /dev/null fi fi echo -n "Done! Press [Enter] key." read menunum break fi case "$menunum" in "1" ) InputID;; "2" ) InputFullName;; "3" ) # InputPasswd;; echo "나중에 입력해야 합니다.";; "4" ) InputInitGrp;; "5" ) InputGroups;; "6" ) InputHomeDir;; "7" ) InputShell;; "8" ) InputSkelCopy;; "9" ) InputSkelDir;; "10" ) InputMkUserGrp;; "11" ) InputSetUID;; "12" ) InputMkHome;; "13" ) InputAddSMB;; esac sleep 1 done } ShowAddGrpMenu() { echo " 1. 그룹 이름 : $userid" echo -n " 2. GID : " if [ "$setuid" = "" ]; then echo "기본값 사용" else echo "$setuid" fi echo -n " 3. 홈 위치 : " if [ "$homedir" = "" ]; then echo "기본 위치 사용" else echo "$homedir" fi echo -n " 4. 홈 생성 : $mkhome 홈 디렉토리를 생성" if [ "$mkhome" = "yes" ]; then echo "합니다." else echo "하지 않습니다." fi } InputGrpName() { input="" echo -e -n " 그룹 이름를 입력하십시오. (영문 소문자와 숫자로만 구성)\n 이름 : " read input if [ "$input" = "" ]; then echo "! 입력이 되지 않았습니다." else userid="$input" echo -n " 입력이 되었습니다." fi } InputSetGID() { input="" echo " 그룹의 GID를 직접 지정합니다. (숫자만 사용, 그냥 엔터시 기본값 사용)" echo -n " 현재 GID = " if [ "$skeldir" = "" ]; then echo "시스템 디폴트" else echo "$setuid" fi echo -n " 새로운 GID : " read input if [ "$input" = "" ]; then setuid="" echo " 입력이 되지 않았습니다. 시스템 디폴트 GID를 사용하게 됩니다." else setuid="$input" echo -n " 입력이 되었습니다." fi } InputGrpDir() { input="" echo " 그룹의 홈 디렉토리 위치 지정 (엔터 입력시 /home/<그룹명>의 기본 값 사용)" echo -n " 현재 위치 = " if [ "$shelltype" = "" ]; then echo "시스템 디폴트" else echo "$shelltype" fi echo -n " 새로운 위치 : " read input if [ "$input" = "" ]; then homedir="" echo " 입력이 되지 않았습니다. /home/<그룹명>의 기본 값을 사용하게 됩니다." else homedir="$input" echo -n " 입력이 되었습니다." fi } InputMkGrpHome() { input="" echo " 그룹의 홈 디렉토리를 자동 생성하시겠습니까?" echo " (자동 생성시 홈 디렉토리가 기본 값이 아니라면 가장 하위 단계만 제외하고 미리 생성되어 있어야 합니다)" echo -n " y = 예, 생성합니다 / n = 아니오, 생성하지 않습니다 [y/n] : " read input if [ "$input" = "y" ] || [ "$input" = "Y" ]; then echo "예, 생성합니다." mkhome="yes" elif [ "$input" = "n" ] || [ "$input" = "N" ]; then echo "아니오, 생성하지 않습니다." mkhome="no" else echo "! 잘못 입력 되었습니다. 입력이 되지 않았습니다." fi } AddGroup() { echo userid="" setuid="" homedir="" mkhome="yes" InputGrpName while [ 0 ] do menunum="" ShowAddGrpMenu echo echo " 내용을 점검하고 수정하십시오. 완료되면 엔터를 누르십시오." echo -n " 수정할 항목 번호 : " read menunum echo if [ "$menunum" = "q" ]; then break elif [ "$menunum" = "" ]; then addusercmd="groupadd " if [ "$userid" = "" ]; then echo "! 잘못된 사용자 ID가 사용되었습니다." sleep 3 break else addusercmd="$addusercmd $userid" fi if [ "$setuid" != "" ]; then addusercmd="$addusercmd -g $setuid" fi echo echo "Adding Group..." `$addusercmd` if [ "$mkhome" = "yes" ]; then if [ "$homedir" = "" ]; then mkdir "/home/$initgrp" > /dev/null chown root:$initgrp "/home/$initgrp" > /dev/null chmod 770 "/home/$initgrp" > /dev/null else mkdir "$homedir" > /dev/null chown root:$initgrp "$homedir" > /dev/null chmod 770 "$homedir" > /dev/null fi fi echo -n "Done! Press [Enter] key." read menunum break fi case "$menunum" in "1" ) InputGrpName;; "2" ) InputSetGID;; "3" ) InputGrpDir;; "4" ) InputMkGrpHome;; esac sleep 1 done } while [ 0 ] do menunum="" ShowTitle ShowMainMenu echo echo -n " 작업 번호 입력 : " read menunum case "$menunum" in "1" ) AddUser ;; "2" ) echo echo " 삭제할 사용자 ID를 입력하십시오." echo userid="" InputID if [ "$userid" != "" ]; then echo echo "홈 디렉토리는 직접 삭제하셔야 합니다." userdel $userid smbpasswd -x $userid echo -n "Done! Press [Enter] key." read menunum fi ;; "3" ) AddGroup ;; "4" ) echo echo " 삭제할 그룹 이름을 입력하십시오." echo userid="" InputGrpName if [ "$userid" != "" ]; then echo echo "홈 디렉토리는 직접 삭제하셔야 합니다." groupdel $userid echo -n "Done! Press [Enter] key." read menunum fi ;; "5" ) ypcat group > /tmp/tmpgrp ypcat passwd > /tmp/tmpusr exec 6<&0 exec < /tmp/tmpgrp echo "그룹 목록" > /tmp/tmplist read input while [ "$input" != "" ] do echo -e " ${input%%:*} \t${input##*:}" >> /tmp/tmplist read input done exec < /tmp/tmpusr echo -e "\n사용자 목록" >> /tmp/tmplist read input while [ "$input" != "" ] do fullname="${input#*:}"; fullname="${fullname#*:}" fullname="${fullname#*:}"; fullname="${fullname#*:}" fullname="${fullname%:*}"; fullname="${fullname%:*}" echo -e " ${input%%:*} \t$fullname" >> /tmp/tmplist read input done exec 0<&6 rm -f /tmp/tmpusr rm -f /tmp/tmpgrp less /tmp/tmplist rm -f /tmp/tmplist ;; [qQ] ) echo echo "NIS 사용자 DB 갱신중..." pushd . > /dev/null cd /var/yp make popd > /dev/null echo echo " 본 호스트를 제외한 NIS가 설치된 슬래이브 서버에서 다음과 같이 목록을 갱신하십시오." echo " # cd /var/yp" echo " # make" echo echo " 메일 서버가 설치된 곳에서는 메일링 그룹 목록을 갱신하는 것도 중요합니다." echo " # mkgrpmail" echo echo " 종료합니다." echo break;; esac done |
================================================================ ================================================================ -- mkgrpmail 소스 ---------------------------------------------- ================================================================ |
#!/bin/bash ypcat group > /tmp/tmpgrp if [ $# -gt 0 ]; then let "i = 0" for grp in $* do exec < /tmp/tmpgrp read input while [ "$input" != "" ] do if [ "${input%%:*}" == "$grp" ]; then echo -n "" > "/etc/mail/group/$grp.list" comma=0 input="${input##*:}" if [ "$input" != "" ]; then if [ $comma -eq 1 ]; then echo -n "," >> "/etc/mail/group/$grp.list" fi echo -n $input >> "/etc/mail/group/$grp.list" comma=1 fi fi read input done done else exec < /tmp/tmpgrp read input while [ "$input" != "" ] do grp="${input%%:*}" echo -n "" > "/etc/mail/group/$grp.list" comma=0 input="${input##*:}" if [ "$input" != "" ]; then if [ $comma -eq 1 ]; then echo -n "," >> "/etc/mail/group/$grp.list" fi echo -n $input >> "/etc/mail/group/$grp.list" comma=1 fi read input done fi rm -f /tmp/tmpgrp echo |
================================================================ |
728x90
댓글