1 # Generated by iptables-save v1.3.5 on Wed Jul 17 11:04:31 2013
2 *filter
3 :INPUT ACCEPT [190:31877]
4 :FORWARD ACCEPT [0:0]
5 :OUTPUT ACCEPT [877930:408233966]
6 :RH-Firewall-1-INPUT – [0:0]
7 #실컷 이런식으로 Ip 차단 해높고 ” -A INPUT -j RH-Firewall-1-INPUT ” 이 부분을 이 위치에 있으면 적용이 되지 않는다
8 -A INPUT -s 69.90.209.90 -j DROP
9 -A INPUT -s 199.15.234.0/255.255.255.0 -j DROP
10 -A INPUT -s 112.123.168.0/255.255.255.0 -j DROP
11 -A INPUT -s 185.25.51.0/255.255.255.0 -j DROP
.
.
36 -A INPUT -s 199.180.0.0/255.255.255.0 -j DROP
37 -A INPUT -s 218.10.0.0/255.255.0.0 -j DROP
38 -A INPUT -s 137.175.0.0/255.255.0.0 -j DROP
39 -A INPUT -s 46.119.0.0/255.255.0.0 -j DROP
40 -A INPUT -s 66.249.0.0/255.255.0.0 -j DROP
41 -A INPUT -s 208.115.0.0/255.255.0.0 -j DROP
42 -A INPUT -j RH-Firewall-1-INPUT —> 차단 Ip 끝나는 이부분에 삽입해해야함
43 -A FORWARD -j RH-Firewall-1-INPUT
44 -A RH-Firewall-1-INPUT -i lo -j ACCEPT
45 -A RH-Firewall-1-INPUT -p icmp -m icmp –icmp-type any -j ACCEPT
46 -A RH-Firewall-1-INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
47 -A RH-Firewall-1-INPUT -p udp -m state –state NEW -m udp –dport 53 -j ACCEPT
48 -A RH-Firewall-1-INPUT -p tcp -m state –state NEW -m tcp –dport 53 -j ACCEPT
49 -A RH-Firewall-1-INPUT -p tcp -m state –state NEW -m tcp –dport 953 -j ACCEPT
50 -A RH-Firewall-1-INPUT -p tcp -m state –state NEW -m tcp –dport 3306 -j ACCEPT
.
.
.
# watch iptables -vnL 실시간 확인
Every 2.0s: iptables -vnL Wed Jul 17 11:13:59 2013
Chain INPUT (policy ACCEPT 64 packets, 19900 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all — * * 69.90.209.90 0.0.0.0/0
0 0 DROP all — * * 199.15.234.0/24 0.0.0.0/0
0 0 DROP all — * * 112.123.168.0/24 0.0.0.0/0
105 5288 DROP all — * * 185.25.51.0/24 0.0.0.0/0
32 2000 DROP all — * * 218.10.17.0/24 0.0.0.0/0
0 0 DROP all — * * 188.135.5.252 0.0.0.0/0
0 0 DROP all — * * 66.249.77.111 0.0.0.0/0
0 0 DROP all — * * 199.180.0.0/24 0.0.0.0/0
0 0 DROP all — * * 218.10.0.0/16 0.0.0.0/0
36 1824 DROP all — * * 137.175.0.0/16 0.0.0.0/0
0 0 DROP all — * * 46.119.0.0/16 0.0.0.0/0
90 5542 DROP all — * * 66.249.0.0/16 0.0.0.0/0
29 1737 DROP all — * * 208.115.0.0/16 0.0.0.0/0
이런식으로 드롭 되는 것을 볼 수 있음!
서버관리자들에게 있어서 스팸메일 보내는 인간들은 때려죽이고 싶은 충동을
불러일으킵니다.
다른 해킹과 달리 스팸공격하는 건 로그분석해서 찾기도, 막기도 어렵습니다.
더구나, 많은 스팸이 한메일이나 네이버,구글 메일서버로 보내지다 보니,
한메일이나 네이버 메일서버 측에서 멀쩡한 메일서버 ip 를 차단해서
선량한 일반 메일 사용자들이 메일이 발송되지 않아 피해를 입습니다.
아래에,
리눅스 서버에서 sendmail 데몬 관련해서 삽질하면서 알게 된 정보를 공개합니다.
허접합니다만, 나보다 더 허접한 관리자들에게 조금이나마 도움이 되었으면 합니다.
2. 서버환경
– OS : CentOs 5.x (레드햇 계열)
– Sendmail 버전 : 12.x, 13.x
– POP3 데몬 : dovecot, qpopper 등
– 메일 로그 파일 : /var/log/maillog
3. 웹소스 통한 스팸 발송 관련
– 그누보드나 제로보드등 웹사이트 게시판의 첨부파일 업로드 기능의 헛점을
이용해서 서버에 .php 같은 실행파일을 저장한 후 외부에서 이 파일을 통해서
스팸을 발송하는 방법입니다.
문제는, 이렇게 웹경로에 업로드한 후 스팸메일을 보내면 해당 서버에 있는 sendmail
로그에 잘 기록이 안됩니다.
php 모듈이 웹서버권한을 이용해서 막바로 보내므로 특정 사용자 계정을
알수가 없습니다. 또 한 외부 서버에 포트 접속해서 발송한다면 내부 메일서버에는
기록이 남지 않게됩니다.
이건 maillog 분석으로는 알기어렵고, 반드시 무단으로 업로드된 해킹 파일을
찾아서 삭제해야 합니다.
여기서는 간단한 방법만 소개합니다.
만약 웹로트가 /home/mywebsite_home/public_html 인 곳에 그누보드가 설치됐고
freeboard 라는 게시판아이디를 사용했다면
/home/mywebsite_home/public_html/data/file/freeboard 이곳에 첨부파일이
저장되므로 보통 이런 곳에 해킹파일이 업로드 됩니다.
와 같이 게시판 저장경로에 이상한 php 파일이 저장되어 있으면 해킹당한겁니다.
파일 이름과 확장자는 수시로 바뀌더군요.
http://mywebsite.co.kr/data/file/freeboard/lele.php
같이 웹접속 해서 불순한 짓을 쥐도새도 모르게 하게 됩니다.
– 일단 http://www.krcert.or.kr/index.jsp 에 있는 whistl 같은 도구로
웹루트 디렉토리의 전체 소스를 점검해서 해킹된 파일을 점검해 보는 것이
좋습니다. 사용법은 위 사이트를 참조하시기 바랍니다.
– 가장 강력한 해결책은 위 첨부파일이 저장되는 웹서버의 data 같은 디렉토리에서
php 같은 서버 사이드 스크립트가 실행이 안되게 해야 합니다.
data 디렉토리 안에 .htaccess 파일을 아래와 비슷하게 시행안될 확장자를 지정해서
생성합니다.
# cat .htaccess
<FILES ~ “\.ph(p[2-6]?|tml)$|\.htm$|\.html$|\.inc$”>
Order allow,deny
Deny from all
</Files>
와 같이 넣어두면 위에 나열된 확장자 파일에 대한 접근이 거부되어 실행이 안됩니다.
한가지 주의할 건
아파치 웹서버 설정파일 httpd.conf 등에서 php 스크립트가 실행될 확장자에 맞게
나열해야합니다.
httpd.conf 파일에
AddType application/x-httpd-php .html .htm .php .php3 .php4 .php5 .phtml .cgi .inc
이런 방식이나 혹은
<FilesMatch “\.ph(p[2-6]?|tml)$|\.htm$|\.html$|\.inc$”>
SetHandler application/x-httpd-php
</FilesMatch>
와 같은 방식으로 php 실행 확장자를 넣는데, 이렇게 httpd.conf 에서 지정된 확장자를
모두 .htaccess 파일에서 지정을 해줘야 php 파일 실행을 막을 수 있습니다.
이런 차이를 이용해서 좀 생소한 .phtml 이나 php2 등으로 확장자를 바꾸어서 저장하여
공격하는 경우도 있습니다.
자신의 웹서버 설정에 따라서 .htaccess 파일의 내용이 달라질겁니다.
4. POP 접속을 이용한 sendmail 공격
1) 아이디 비번 해킹
해커는 스팸을 보내기 위해 서버의 메일 계정 아이디 비번을
탈취하려고합니다.
비밀번호를 1234 나 1111 혹은 아이디끝에 1234 등을 붙이는 등 단순하게 하면
무차별 대입공격으로 쉽게 알아낼 수 있습니다.
이런 공격은 ssh 나 ftp, telnet 등을 통해서도 자주 이루어 집니다.
/var/log/message 나 ,/var/log/secure 파일등에서 가끔 무지막지한 기록을 볼 수
있을겁니다.
여기서는 pop3 를 통해 시도한 공격흔적을 maillog 파일에서 찾아보겠습니다.
메일로그에서 “Aborted login:” 문구로 grep 했을때 동일한 rip= 값으로 수백
수천 줄이 길게 나온다면 이건 비밀번호 해킹이 이루어 진겁니다.
보통 자주 쓰는 아이디인 web, admin, root,webmaster 같은 계정이나 혹은
한국에서 자주 쓰는 sung,yong,choi 같이 추측 가능한 아이디를 이용해서
비번이 1234 같이 간단한걸 무작위로 연속 대입해서 알아내는 겁니다.
위 로그에서는 64.31.40.137 라는 듣보잡 ip 에서 공격한 예입니다.
9864 라인에 chung 라는 계정이 결국 재수없게 뚫려서 정상 로그인 처리된 걸 확인할
수 있습니다.
나중에 확인해 보니 이 사용자는 비밀번호로 chung1234 를 사용하고 있었다고 합니다.
– POP3 데몬으로 qpopper 을 사용할 경우
만약 pop3 로 qpopper 를 사용한다면 아래와 같이 “Password supplied” 라는 걸로
grep 하면 비슷하게 확인 가능합니다.
여기서는 222.179.203.46 에서 수천번의 비밀번호 넘겨짚으려는 시도가 있었습니다.
# zgrep “Password supplied” ./maillog.1.gz
…
Nov 21 14:21:33 home3 popper[20898]: web at 46.203.179.222.broad.cq.cq.dynamic.163data.com.cn (222.179.203.46): -ERR [AUTH] Password supplied for “web” is incorrect.
Nov 21 14:21:33 home3 popper[20899]: user at 46.203.179.222.broad.cq.cq.dynamic.163data.com.cn (222.179.203.46): -ERR [AUTH] Password supplied for “user” is incorrect.
Nov 21 14:21:35 home3 popper[20906]: admin at 46.203.179.222.broad.cq.cq.dynamic.163data.com.cn (222.179.203.46): -ERR [AUTH] Password supplied for “admin” is incorrect.
Nov 21 14:21:37 home3 popper[20911]: webmaster at 46.203.179.222.broad.cq.cq.dynamic.163data.com.cn (222.179.203.46): -ERR [AUTH] Password supplied for “webmaster” is incorrect.
2) pop3 클라이언트 사용시 로그 형태
– 일반적으로 사용하는 아웃룩과 같은 메일 클라이언트로 접속해서 메일을 발송할 경우
sendmail 로그에 어떻게 기록되는지 먼저 보겠습니다.
## POP 아웃룩 연결
..
Dec 1 16:35:59 home5 sendmail[31579]: AUTH=server, relay=[112.187.xxx.xx], authid=nonots, mech=LOGIN, bits=0
Dec 1 16:35:59 home5 sendmail[31579]: pB17ZvAS031579: from=<nonots@home5.myhome.co.kr>, size=1272,, nrcpts=1, msgid=<777699E70A5C4270BEEF016962B9C39F@mycom>, proto=ESMTP, daemon=MTA, relay=[112.187.xxx.xx]
Dec 1 16:35:59 home5 sendmail[31579]: pB17ZvAS031579: Milter add: header: X-Virus-Scanned: clamav-milter 0.97.2 at home5.myhome.co.kr
Dec 1 16:35:59 home5 sendmail[31579]: pB17ZvAS031579: Milter add: header: X-Virus-Status: Clean
Dec 1 16:35:59 home5 sendmail[31583]: pB17ZvAS031579: to=<nonots@hanmail.net>, ctladdr=<nonots@home5.myhome.co.kr> (501/501), delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=121272, relay=mx9.hanmail.net. [211.43.198.80], dsn=2.0.0, stat=Sent (fB1GZwhE5580598200 Message accepted for delivery)
내가 사용하는 PC 아이피인 112.187.xxx.xx 에서 nonots 아이디로 home5.myhome.co.kr
서버에 접속해서, 한메일 nonots@hanmail.net 주소로 메일 보낸 기록입니다.
한메일서버 mx9.hanamil.net 으로 메일을 보내서 stat=Sent 가 나와서
정상적으로 발송됐음을 알 수 있습니다.
첫 라인에 authid=nonots 라는 접속 기록이 보이고, 접속한 sendmail 프로세스
번호가 [31579] 번입니다.
이 프로세스에 의해 식별자 pB17ZvAS031579 가 부여되는데, 이 식별자의 마지막 부분에
31579 라는 프로세스 아이디값을 사용한다는 점을 유의해야 합니다.
이 식별자에 의해서 /var/spool/mqueue 에 메일 헤더파일인 hfpB17ZvAS031579 와
데이타파일인 dfpB17ZvAS031579 가 일시적으로 생기고, 발송 완료한 후에는 mqueue
에서 일정기간 후 자동으로 삭제가 됩니다.
이제 이 특징을 이용해서 메일서버 해킹 여부를 점검해 보겠습니다.
3) maillog 점검
– 보통 sendmail 로그는 /var/log에 저장되고 1 주일마다 서버 logrotate cron 에 의해
백업이 됩니다.
maillog.1, maillog.2,maillog.3 와 같이 백업되는데, 어떤 서버에서는
압축백업을 해서, maillog.1.gz, maillog.2.gz.. 와 같이 gz 압축되어
저장되기도 합니다.
로그 분석을 위해서는 지난 백업파일까지 전체를 검색하기 위해 /var/log/maillog* 와
같이 옵션을 주는 것이 좋습니다.
아래 grep 이 아니라 zgrep 을 사용한 이유는 gz 로 압축된건 자동으로 풀어서
검색하기 위해 zgrep 을 사용했습니다.
만약 백업파일이 업축되지 않았다면 그냥 grep 을 사용해도 됩니다.
# zgrep “authid=” /var/log/maillog* | awk ‘{print $8}’ | sort | uniq -c | grep authid | sort -r
2972 authid=chung,
20 authid=kmlee,
13 authid=aychoi,
8 authid=keom,
7 authid=hyseong,
6 authid=tsshyang,
…
이 명령어는 아웃룩 같은 메일클라이언트에서 정상적으로 계정에 로그인한 정보를
메일로그에서 추출하여서 각 아이디 별로 통계를 낸 겁니다.
auth=?? 와 같이 로그인 성공한 라인에서 공백문자를 기준으로 cut 을 해서 8 번째
필드를 뽑아낸 후 같은 아이디를 합산한 후 정렬한겁니다.
위에서, 해킹당한 chung 라는 계정이 2972번으로 가장 많이 접속했음을 알 수 있습니다.
그리고 메일을 발송한 ip 별로 보려면
# zgrep “authid=” /var/log/maillog* | awk ‘{print $7}’ | sort | grep relay | uniq -c | sort -r
2972 relay=[194.51.238.89],
23 relay=[121.166.xxx.xxx],
19 relay=[112.158.73.131],
12 relay=[183.98.111.130],
8 relay=[116.121.255.202],
…
와 같이 194.51.238.89 아이피에서 제일 많이 접속한걸 알수 있습니다.
이 아이피가 chung 계정을 이용한 것으로 추측할 수 있습니다.
실제로 maillog 파일을 에디터로 열어서 authid=chung 나 194.51.238.89 등을
검색해서 보면
..
41628 Nov 28 20:07:23 home7 sendmail[15541]: AUTH=server, relay=[194.51.238.89], authid=chung, mech=LOGIN, bits=0 41629 Nov 28 20:07:23 home7 sendmail[15539]: AUTH=server, relay=[194.51.238.89], authid=chung, mech=LOGIN, bits=0
41630 Nov 28 20:07:23 home7 sendmail[15540]: AUTH=server, relay=[194.51.238.89], authid=chung, mech=LOGIN, bits=0 41631 Nov 28 20:07:23 home7 sendmail[15554]: AUTH=server, relay=[194.51.238.89], authid=chung, mech=LOGIN, bits=0
41632 Nov 28 20:07:23 home7 sendmail[15555]: AUTH=server, relay=[194.51.238.89], authid=chung, mech=LOGIN, bits=0
41633 Nov 28 20:08:13 home7 sendmail[15540]: pASB7Bop015540: from=<co@e-lupeni.ro>, size=596,, nrcpts=50, msgid=<201111281107.pASB7Bop01554 0@home7.myhome.co.kr>, proto=ESMTP, daemon=MTA, relay=[194.51.238.89]
41634 Nov 28 20:08:13 home7 sendmail[15540]: pASB7Bop015540: Milter add: header: X-Virus-Scanned: clamav-milter 0.97.2 at home7.myhome.co.kr
41635 Nov 28 20:08:13 home7 sendmail[15540]: pASB7Bop015540: Milter add: header: X-Virus-Status: Clean
41636 Nov 28 20:08:14 home7 sendmail[15542]: pASB7Bi0015542: from=<co@e-lupeni.ro>, size=596,, nrcpts=50, msgid=<201111281107.pASB7Bi001554 2@home7.myhome.co.kr>, proto=ESMTP, daemon=MTA, relay=[194.51.238.89]
..
와 같이 되어 있습니다.
11월 28일 20시 7분에 접속해서 co@e-lupeni.ro 를 발송자로 해서 스팸메일을
발송한걸 알 수 있습니다.
아마 이런 발송이 수백 수천건이 보일겁니다. 빌어먹을..
3) 실시간 스팸 발송 대응
– 만약 현재 시각으로 서버에서 스팸이 열나게 발송되고 있을 경우
우선 아래와 같이 ps 명령어로 보면 아래와 같은 sendmail 프로세스가 보입니다.
# ps aux
…
root 6839 0.0 0.1 69232 2996 ? S 15:14 0:00 sendmail: ./pB26E7mm006835 from queue
…
이 경우 식별자 pB26E7mm006835 에서 끝부분 숫자 6835 번 프로세스에 의해서
발송됐음을 알 수 있습니다.
위에서 말했듯이 /var/spool/mqueue 에 dfpB26E7mm006835, hfpB26E7mm006835 파일이 있을 겁니다.
로그파일에서 이 번호로 발송기록을 찾아보면
# grep “\[6835\]” /var/log/maillog
..
Dec 2 15:14:10 home7 sendmail[6835]: AUTH=server, relay=[121.166.xxx.xxx], authid=jychoi, mech=LOGIN, bits=0
Dec 2 15:14:10 home7 sendmail[6835]: pB26E7mm006835: from=<jychoi@aaabbb.com>, size=90127,, nrcpts=1, msgid=<000001ccb0b9$9b14ed20$d13ec760$@com>, proto=ESMTP, daemon=MTA, relay=[121.166.xxx.xxx]
Dec 2 15:14:10 home7 sendmail[6835]: pB26E7mm006835: Milter add: header: X-Virus-Scanned: clamav-milter 0.97.2 at home7.myhome.co.kr
Dec 2 15:14:10 home7 sendmail[6835]: pB26E7mm006835: Milter add: header: X-Virus-Status: Clean
..
와 같이 검색이 될겁니다
grep 검색에서 [, ] 문자를 사용하려면 위와 같이 역슬래시로 처리해 줘야 합니다.
만약 너무 길어서 보기 힘들다면 authid= 부분만 검색해서 어느 계정으로
발송 중인지 알 수 있습니다.
# grep “\[6835\]” /var/log/maillog | grep authid
Dec 2 15:14:10 home7 sendmail[6835]: AUTH=server, relay=[121.166.xxx.xxx], authid=jychoi, mech=LOGIN, bits=0
..
와 같이 jychoi 라는 계정으로 121.166.xxx.xxx 에서 접속해서 메일을
발송 중입니다.
만약 이 발송이 정상이 아니라 스팸 의심이 된다면 위에서 검색한
# zgrep “authid=” /var/log/maillog* | awk ‘{print $8}’ | sort | uniq -c | grep authid | sort -r
의 결과를 보거나 기타 방법으로 스팸 여부를 판단하면 됩니다.
실제 jychoi 사용자에게 전화해서 지금 메일 발송중인지 물어볼 수있다면 제일 정확하겠죠.
그리고 보통 스팸은 늦은밤이나 새벽 시간대에 보내므로 발송 시간을 보고
어느정도 추정할 수도 있습니다.
5) 스팸발송일 경우 대처 방법
– 장난이 아니라면 모든 메일로그를 압축해서 보관하고 “기관”에 신고하면 됩니다.
귀찮아서 그냥 자체 해결하려면,
(0) sendmail 데몬을 중지합니다.
(1) 우선 스팸 발송한 ID 계정을 폐쇄하거나, 혹은 실제 사용자에게 연락해서
비밀번호를 수정하도록 강제합니다.
(2) 해킹 의심되는 IP 를 차단합니다. 아래와 같이 iptables 로 해도 되고
# iptables -I INPUT -s 194.51.238.89 -j DROP
# iptables -I OUTPUT -s 194.51.238.89 -j DROP
/etc/mail/access 파일이나, /etc/hosts.deny 등을 이용하거나
하여튼, 방화벽에서 막을 수 있는 모든 수단을 동원해 막습니다.
(3) /var/spool/mqueue 를 청소합니다.
아이디나 아이피를 차단해도 sendmail 데몬의 큐에 저장된 건 일정시간 계속
발송하려고 시도하게 됩니다.
194.51.238.89 이 아이피로 생성된 큐의 임시파일을
아래와 같이 일괄 삭제 가능합니다.
# grep -l 194.51.238.89 /var/spool/mqueue/* | xargs -i rm -f {}
(4) sendmail 데몬을 재시작합니다.
아마 재시작해도 일정시간 동안 큐에 있는 파일 때문에 일부 스팸 발송
시도가 있을수 있습니다. 그건 수동으로 큐파일 이름을 확인해서
삭제해 주면 됩니다.
sendmail 오류 1(데몬실행시 오류 554 5.0.0 No local mailer defined)
senmail 메일 발송 불가
[root@localhost mail]# service sendmail restart
sm-client을 종료 중: [ OK ]
sendmail를 종료 중: [ OK ]
sendmail (을)를 시작 중: 554 5.0.0 No local mailer defined
554 5.0.0 QueueDirectory (Q) option must be set
[실패]
sm-client를 시작 중: [ OK ]
[root@localhost mail]# netstat -nlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 4343/mysqld
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4410/httpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 4225/vsftpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 4209/sshd
원인
메일큐 폴더가 없거나 잘못 셋팅된 경우
아마 sendmail.cf 파일에서
# queue directory
0 QueueDirectory=/var/spool/mqueue
Nameserver 를 운용하기 위해서는 세버측 데몬 프로그램이 필요하게 되는데, 이중 Bind 는 db 파일의 구성이 손쉽고 표준을 충실히 따른 검증된 도구로서 인터넷에서 가장 널리 사용된다. 대부분의 Unix 시스템에서는 Bind가 이미 설치되어 있다.
도메인을 Ip로 매칭하는 네임서버와 resolver 로 구성되어 있다. 여기서 resolver 란 반대로 Ipfmf 도메인으로 매칭하는 서비스 라이브러리.
1. 리눅스 네임서버 데몬(프로그램) 설치
리눅스의 네임서버는 bind 패키지를, 페도라의 설정파일은 caching-nameserver 패키지를 사용합니다. 이 두 패키지를 yum 을 이용해 설치합니다.
yum install bind caching-nameserver
2. named.conf 설정
caching-nameserver 를 설치하였기 때문에 named.conf 파일 대신 named.caching-nameserver.conf 파일을 사용합니다. 다음 소스코드에서 붉은 색 부분만 추가해줍니다.
vi /etc/named.caching-nameserver.conf
options {
listen-on port 53 { 127.0.0.1; };
listen-on port 53 { 자신의 서버 아이피; }; // 아이피 추가
listen-on-v6 port 53 { ::1; };
directory “/var/named”;
dump-file “/var/named/data/cache_dump.db”;
statistics-file “/var/named/data/named_stats.txt”;
memstatistics-file “/var/named/data/named_mem_stats.txt”;
query-source port 53;
query-source-v6 port 53;
allow-query { any; }; // localhost 에서 any 로 변경
};
logging {
channel default_debug {
file “data/named.run”;
severity dynamic;
};
};
view localhost_resolver {
// match-clients { localhost; }; // 주석처리
// match-destinations { localhost; }; // 주석처리
recursion yes;
include “/etc/named.rfc1912.zones”;
};
3. zone 파일 설정
네임서버에서 사용할 도메인의 zone 파일을 설정해줘야 합니다. /etc/named.rfc1912.zones 파일을 열어 다음 코드를 추가해줍니다.
vi /etc/named.rfc1912.zones
zone “도메인” IN {
type master;
file “도메인의 존(zone) 파일 이름”;
allow-update { none; };
};
예 :
zone “hoguinside.com” IN {
type master;
file “hoguinside.com.zone”;
allow-update { none; };
};
4. zone 파일 생성
이제 실질적으로 도메인 네임서버를 컨트롤할 zone 파일을 생성합니다. 다음 예제를 보고 자신의 도메인에 맞게 설정하면 됩니다.
vi /var/named/hoguinside.com.zone
$TTL 3600 ; 해당정보를 가져간 DNS서버에서 그 서버 캐쉬에 얼마동안 보관할 것인가에 대한 설정(캐시활성시간), 초단위이며 기본값은 24시간
@ IN SOA ns.hoguinside.com. root.hoguinside.com. ( ; 네임서버. 관리자email (root @ hoguinside.com 로 인식)
2007051007 ; 시리얼값 (년월일시간)으로 대부분 설정합니다.
30M ; 2차 네임서버가 1차 네임서버에 접속하는 시간
15M ; 접속 실패시 다시 시작할 시간 간격
1W ; 1차 네임서버에 데이터가 없다면 1주 이후에 지워진다.
1H ) ; 위에서 설정한 TTL값과 같은 의미
IN NS ns.hoguinside.com. ; 도메인을 소유한 DNS의 도메인
IN MX 10 mail.hoguinside.com. ; 메일을 보낼 도메인 또는 주소
IN A 111.111.111.11 ; 도메인이 찾아갈 IP주소
www IN A 111.111.111.11
* IN A 111.111.111.11 ; 모든 서브 도메인이 찾아갈 서버 IP
5. zone 파일 권한설정
파일의 소유자는 root.named 로 권한은 640 으로 변경ㅇㅇ
path는 .nspasswd 파일이 있는 물리적 경로입니다. .nspasswd파일은 아래의 htpasswd과 같은 형태로 만들어 줍니다.
.htpasswd 파일만들기 (첫 사용자 ID만들기)
– .htpasswd는 사용자ID와 패스워드가 있는 파일
– 다른이름으로 설정할 수 있으나 .htaccess의 경로와 일치
– .htpasswd를 만들기 위해서는 htpasswd라는 프로그램을 사용해야 하는데, 보통 리눅스Linux용 htpasswd는 /usr/sbin 또는 /usr/bin 디렉토리에 있슴메
– 본 호구는 /usr/local/apache/bin/htpasswd -c .htpasswd 계정명
(최초에는 반드시 -c 옵션을 줍니다.)
New password: 로그인 할 비밀번호 입력.
Re-type new password: 재입력.
Adding password for user admin 성공 한 메세지.
사용자 ID 추가하기
– $ /usr/sbin/htpasswd .htpasswd 계정명
(-c를 빼고 적어야 됩니다.-c 옵션 추가시 기존 ID는 지워짐.)
– 암호를 두 번 입력
위와 같이 하면 .htpasswd 파일에 사용자 아이디와 암호화된 패스워드가 저장!!!
이제 .htpasswd 에 입력된 사용자만 해당 디렉토리에 접근할 수 있으며 한 번 로그인 된 브라우저를 재 접속 할 때 암호 창이 뜨지 않고 그냥 접속이 됩니다. 테스트 하기 위해 선 한 번 로그인 된 브라우저를 닫고 새 브라우저를 열고 확인 합니다.
그러나 이렇게 해도 접속 창이 뜨질 않는다면 .htaccess 를 사용 하기 위에 디렉토리 설정을 해야 합니다.
[root@localhost11:59:45:/var/www/mrtg]# vi /usr/local/apache/conf/httpd.conf —> 해당 파일을 열어 맨 아래에 아내 내용 추가
#=====================================
<Directory “/var/www/mrtg*”>
AllowOverride All
Options +ExecCGI
Order allow,deny
Allow from all
</Directory>
#=====================================
mrtg 관련 index 페이지를 사용 하기 위해 내용삽입 및 apache 재구동을 합니다.
Multi Router Traffic Grapher 의 약자로서 snmp 기반의 장비를 모니터링 하는데 사용함. 주 사용 용도는 네트워크 트래픽 사용량 모니터링 이지만, 경우에 따라서는 cpu, 디스크 사용량 등 벤더에서 제공하는 snmp mip 값을 사용 하여 다양한 정보를 수집 가능.
os 는 centos 5.8에서 진행및 아파치가 필요 하기 때문에 아파치가 설치되어 있다는 전재하에 진행합니다.
1. mrtg 다운
mrtg 다운 전에 필요 한 패키지를 설치 하자
# yum install -y net-snmp* , gd, libpng , zlib
# yum install mrtg or http://oss.oetiker.ch/mrtg 에서 소스 다운 후 설치
소스 설치시
# ./configure –prefix=/usr/local/mrtg
# make && make install
2. mrtg 설정
1) 디렉토리 생성
# mkdir -p /home/mrtg/cfg —> yum 으로 했을때는 이 디렉토리만 생성해도됩니다.
# mkdir -p /home/mrtg/www —> 소스로 설치 했을시 해당 디렉토리도 같이 진행합니다. 인덱스 페이지를 저장하기 위해 만든 디렉토리이기 때문에 어느곳이든 상관 없습니다.
본 호구는 vhost 를 사용하기 때문에 호스트 설정은 나중에하고, yum 으로 mrtg 설치했습니다.
2) snmp 설정
# vim /etc/snmp/snmpd.conf
40 # sec.name source community
41 #com2sec notConfigUser default public
42 com2sec hoguinside xxx.xxx.xxx.xxx public —-> IP는 서버의 IP나 default 로 해도 무방
43
44 ####
45 # Second, map the security name into a group name:
46
47 # groupName securityModel securityName
48 group notConfigGroup v1 hoguinside —-위의 source 명과 동일하게
49 group notConfigGroup v2c hoguinside —- 마찬가지
50
51 ####
52 # Third, create a view for us to let the group have rights to:
53
54 # Make at least snmpwalk -v 1 localhost -c public system fast again.
55 # name incl/excl subtree mask(optional)
56 #view systemview included .1.3.6.1.2.1.1
57 #view systemview included .1.3.6.1.2.1.25.1.1
58 view systemview included .1 80 —-subtree 값 변경
기존에 있던 내용은 주석 처리 하거나 삭제 해도 됩니다.
linux의 기본 파티션 도구인 fdisk는 파티션 생성시의 2TB 이상의 파티션은 인식하지 못한다 .
그렇다면은 2TB 이상의 파티션은 못 나누는 것인가? 그것은 아니다. parted를 이용 gpt파티션으로 이용할 수 있다.
물론 굉장히 편하게 되어 있지는 않지만 대용량 파티션 설정 툴인 parted를 통해 대용량 파티션을 생성하고 사용하는 법을 알아보자. 간단하게 실제 파티션을 나누는 방법을 기술해 알아보자.
parted 사용법
# parted /dev/sdc
(parted) print
Error: Unable to open /dev/sdc – unrecognised disk label.
(parted) mklabel gpt
(parted) p
입력모드 : vi 편집화면에서 문자를 입력할 수 있는 모드로서 입력모드로 진입하기 위해서는 i, a, o, I, A, O, R등이 있습니다. 즉 초기 vi 편집기 모드는 명령어 모드로 진입을 하기때문에 문자를 입력하기 전에 앞의 단축키 중 하나를 먼저 입력해야 원하는 문자를 입력할 수 있습니다.
명령모드 : 커서이동/문자삭제/문자(열)교체/문자열검색 등을 할수 있는 모드로서 입력모드에서 편집이 완료되면 Esc키를 눌러 명령모드로 진입하면 됩니다.
x : vi 명령모드에서 커서위치의 한 문자 삭제
dw : vi 명령모드에서 커서위치의 한단어 삭제
dd : vi 명령모드에서 커서위치의 행 삭제
Ndd : vi 명령모드에서 커서위치의 여러행 동시 삭제
실행모드 : 특별한 명령어를 실행하는 모드로서 명령어모드에서 “:”(콜론)를 누르면 vi 화면 하단 좌측에 vi 특수명령어를 입력할 수 있습니다.
실행모드의 일반적으로 쓰이는 특수 명령어
q : 수정 작업이 이루어지지 않은 상태에서 vi 편집기에서 빠져나옵니다.
q! : 수정 작업이 이루어진 부분을 적용시키지 않고 vi 편집기를 강제로 빠져나옵니다.
w : 수정된 작업을 저장합니다.
wq : 수정된 작업을 저장하고 vi 편집기에서 빠져나옵니다.
글로벌 설정 : 글로벌 설정으로서 이 설정은 삼바서버가 공유하는 자원들에게 공통적으로 적용할 기본값을 설정하는곳입니다. 만약 여기서 설정한 값과 개별 사용자의 설정값이 중복된다면 개별사용자의 설정값이 우선합니다. 이 글로벌 설정은 [global]이라는 선언으로 시작하는 부분입니다.
자동 홈디렉토리 : 리눅스 계정 사용자들이 홈디렉토리를 로그인홈으로 사용하기 위한 설정으로서 [home]로 시작하는 부분의 설정을 의미합니다.
프린터설정 : 네트워크 공유프린터에 대한 설정부분으로서 [printers]로 시작하는 부분의 설정을 의미합니다.
#으로 시작하는 행 : 이 행은 주석처리되어 무시된다.
;으로 시작하는 행 : 이 행들도 주석행으로 간주되어 무시된다. 보통 이런 행은 설정행이
작동하지 않도록 하는데 사용된다. ;대신에 #을 사용해도 된다. 이 두
가지 유형의 주석이 사용되는 이유는 #은 유닉스에서 사용하는 주석이고.
;는 윈도우에서 사용하는 주석이라 두 가지 모두 사용한다.
[ ]을 사용하는 행 : 섹션을 정의한다. 하나의 섹션이 정의된 후 그 다음 섹션이 정의될 때
까지의 행들은 해당 섹션에 속한다.
name = value 행 : 사용하는 옵션과 해당값을 설정하는 행들이다.
[설정부분]
unix charset = CP949
dos charset = cp949
display charset = cp949
[리눅스(유닉스)문자셋, 도스(dos)문자셋. 그리고 디스플레이 문자셋을 각각 설정한 것입니다.]
Workgroup = Workgroup
[워크그룹 설정]
Server string = samaba
[삼바서버의 이름]
Hosts allow = 22.17.1.
[삼바서버로의 접근을 허가하기 위한 IP주소 설정]
Load printers = yes
[자동프린트 목록을 사용하기 위한 값으로 yes를 주시면 됩니다. 즉, 네트워크 프린터를 삼바서버에서 관리하도록 하려면 반드시 yes로 설정해야 합니다.]
Printcap name = /etc/printcap
[Printcap파일의 위치가 다른 곳에 있다면 그곳을 지정하시면 됩니다. 기본 위치는 etc/printcap이므로 그대로 두셔도 됩니다.]
Printing = bsd
[사용하시는 프린터가 표준이 아니라면 주석처리를 해두시는 것이 좋습니다. 현재 지원되는 프린터 시스템의 종류로는 bsd, sysv, plp, lprng, aix, hpux, qnx등이 있습니다.]
Guest account = pcguest
[삼바서버의 guest사용자를 허용하고자 할대에는 이 주석을 제거하십시오. 즉, 이 옵션은 삼바서버에 손님권한으로 접속하여을 때에 어떤 권한을 부여할 것인가를 설정하는 것입니다.
가능한 시스템에 특별한 권한이 없는 nobody와 같은 권한으로 설정해 두시기 바랍니다. 만약 nobody사용자를 설정하지 않으시려면 useradd명령어로 /etc/passwd에 손님계정으로 사용할 계정을 생성하신 후에 그 계정을 설정하시기 바랍니다.]
Log file = /var/log/samba/log.%m
[이 설정은 삼바서버로 접속하는 개별 사용자들의 호스트정보를 %m으로 받아서 개별 로그파일을 생성하도록 합니다.]
Log file = /var/log/samba/smbd.log
[위의 접속한 호스트별로 로그파일을 사용하지 않는다면 이와 같이 하나의 로그파일을 사용할 수도 있습니다. 즉, /var/log/samba/smbd.log 파일에 삼바접속로그기록을 모두 하게 됩니다.]
max log size = 50
[로그파일의 용량크기를 KB단위로 제한하기 위한 옵션입니다. 즉, 위의 예는 50KB로 제한한 설정이며 만약 제한하지 않으시려면 0을 입력해 두시면 됩니다.]
Security = share
[보안 모드를 설정하는 것으로서 대부분의 삼바 접속자들에게는 user레벨이 가장 알맞습니다. 즉, user레벨을 설정하면 사바서버에 접속하는 사용자는 반드시 윈도우에서 사용하는 로그인ID와 동일해야 합니다. 만약 위의설정과 같이 share레벨은 공유디렉토리등에 설정하는 것으로서 Id와 패스워드 인증을 받지않도록하는 레벨입니다. 또한 server레벨은 별도의 인증서버에서 Id 와 패스워드 인증을 받도록 하는 레벨입니다. 가능하다면 삼바서버 보안을 위하며 user레벨을 사욯하시는게 좋습니다.]
Password server = <NT-Server_Name>
[위의 security 옵션값이 server로 설정되었을 때에만 설정할 수 있는 옵션으로서 인증서버로 사용할 서버를 지정하는 옵션입니다.]
Password level = 8
[패스워드 문자로 대소문자를 조합하여 사용할 문자의 개수를 지정한 옵션입니다.]
Username level = 8
[삼바사용자명을 대소문자 조합하여 사용할 문자의 개수를 지정한 옵션입니다.]
Encrypt passwords = yes
[패스워드를 암호화하여 사용하려면 YES]
Smb passwd file = /etc/samba/smbpasswd
[Smb passwd file 옵션은 삼바사용자들의 암호파일의 위치를 지정한 것입니다. 기본적인 암호파일 위치는 /etc/samba/smbpasswd입니다. 만약 보안을 위하여 사용자암호파일을 다른곳에 지정하였다면 여기서 그 파일의 위치를 지정해 주셔야 합니다.]
[삼바사용자가 원격지에서 삼바패스워드를 변경할 수 있도록 하기 위한 설정입니다. 이 설정을 사용하여 원격에서 패스워드를 변경하도록 허용하려면 앞의 encrypt passwords옵션값에 yes라고 해야하고 Smb passwd file = 옵션에 반드시 삼바사용자 패스워드 파일의 경로를 지정해줘야 합니다.]
Username map = /etc/samba/smbusers
[대부분 삼바에서 사용하는 ID와 리눅스계정 ID는 동일하게 사용합니다. 만약 사바사용자명과 리눅스 계정사용자명을 다르게 사용할 경우에 이를 매칭할 수 있도록 하기 위한 옵션으로서 매칭테이블 파일을 /etc/samba/smbusers파일로 사용하는 설정입니다.]
Include = /etc/samba/smb.conf.%m
[이 옵션은 삼바접속자의 플렛폼에 따라서 각기 다른 설정 파일을 적용할 수 있도록 지원하기 위해 사용하는 옵션입니다. %m은 접속자 시스템의 NetBIOS이름으로 대체되어 접속한 사용자의 플레폼 종류에 따라서 각기 다른 삼바설정파일을 적용할 수 있습니다.]
– 위 경로에 파일이 없을 경우 default 설정을 추가해 주고 iptables save를 하면 생김
4. 설정
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [49:25377]
-A INPUT -i lo -j ACCEPT # 로컬 호스트는 모두 허용
-A INPUT -s 118.34.143.244 -j ACCEPT # 특정 아이피는 모두 허용
-A INPUT -s 69.162.77.122 -j DROP # 특정 아이피 막음
-A INPUT -m state –state INVALID -j DROP
-A INPUT -m iprange –src-range 114.58.0.0-114.58.255.255 -j DROP # 인도네시아쪽 아이피 대역대 막음
-A INPUT -m iprange –src-range 202.70.0.0-202.70.255.255 -j DROP # 인도네시아쪽 아이피 대역대 막음
-A INPUT -m iprange –src-range 125.164.0.0-125.164.255.255 -j DROP # 인도네시아쪽 아이피 대역대 막음
-A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp –dport 25 -m state –state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp –dport 53 -m state –state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m udp –dport 53 -m state –state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp –dport 110 -m state –state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m udp –dport 123 -m state –state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp –dport 443 -m state –state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -j LOG –log-level 7
-A INPUT -p tcp -j DROP # 위에 선언된 포트를 제외하고는 모두 막음
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state –state INVALID -j DROP
-A OUTPUT -p tcp -m tcp –dport 53 -m state –state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p udp -m udp –dport 53 -m state –state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp –dport 7899 -m state –state NEW,ESTABLISHED -j ACCEPT
COMMIT
■ iptables
– 설정파일 : /etc/sysconfig/iptables
– 설정복구 : iptables-restore < 백업파일 (내부적으로 설정파일에 덮어 씀)
– 설정저장 : /etc/init.d/iptables save (수정 내용을 설정파일에 저장)
(내부적으로는 iptables-save > /etc/sysconfig/iptables 하여 영구반영)
– 설정백업 : iptables-save (설정 파일내용이 출력됨)
■ system-config-firewall / system-config-firewall-tui
– GUI 및 TUI 를 통하여 리눅스 방화벽 설정. 내부적으로는 iptable 이용.
– 따라서 system-config-firewall 사용시 iptables 명령어를 이용하여
작업한 내용은 삭제됨.
– 설정파일 : /etc/sysconfig/system-config-firewall
# cat /etc/sysconfig/system-config-firewall
# Configuration file for system-config-firewall
–enabled
–port=2222:tcp
–port=5900-5902:tcp
–service=dns
■ iptables VS system-config-firewall
– system-config-firewall 은 GUI 및 TUI 를 이용하여 편리하게 방화벽 셋팅
– “적용” 클릭시 iptables 에 방화벽 룰 자동 셋팅
– 따라서 적용시 iptables 명령어를 이용하여 작업한 내용은 삭제됨.
-> system-config-firewall 수정 -> 적용 -> iptables 반영
– iptable을 직접 사용시 system-config-firewall 사용으로 인한 덮어씀 방지
(패키지 삭제: yum remove system-config-firewall.noarch
system-config-firewall-base.noarch
system-config-firewall-tui.noarch )
– 간단 수정 – > system-config-firewall, 전문가 -> iptables 사용
■ iptables Rule
* 기본 명령어
-A(–append) : 규칙을 추가한다.
-N(–new-chain) : 새로운 체인 생성
-X(–delete-chain) : 체인 제거
-P(–policy) : 체인 기본정책 변경
-L(–list) : 체인의 규칙상태 보기
-F(–flush) : 체인내의 모든 규칙 제거(방화벽 초기화)
-Z(–zero) : 체인내의 모든 규칙의 패킷과 바이트의 카운트 초기화
-D(–delete) : 규칙을 삭제
-R(–replace) : 새로운 규칙으로 대체
-I(–insert) : 체인의 가장 처음에 규칙을 추가한다.
-E(–rename-chain) : 체인의 이름을 변경한다.
* 확인 : iptables -L -n -v –line-numbers
-L : 리스트
-n : PORT를 이름이 아닌 숫자로 표현
-v : 자세한 출력(인터페이스 장비까지 나옴)
–line-numbers : 정책번호 출력(삽입,삭제시 인덱스로 유용)
* iptables 체인의 종류
INPUT : 로컬로 들어오는 패킷(입력 패킷)
FORWARD : INPUT와 OUTPUT 역할, 라우터에 방화벽을 적용할 때 쓰임
OUTPUT : 외부로 나가는 패킷(출력 패킷)
* 사용자 정의 체인 생성 및 INPUT 체인에 추가(옵션)
# iptables -N 사용자정의체인명
# iptables -A INPUT -j 사용자정의체인명
-> 사용자 정의 체인을 설정하고 모든 INPUT 을 사용자 정의 체인으로 보냄
-> 향후 등록시 -> iptables -A 사용자정의체인명 -s IP -d IP -j ACCEPT
* 기타 사항
– 최근 버전의 iptables 는 state(NEW,ESTABLISHED,RELATED) 지원
– iptables -A INPUT -j REJECT –reject-with icmp-host-prohibited
: 모든 입력을 차단
: –reject-with icmp-host-prohibited 있으면 connection denied 통보
: –reject-with icmp-host-prohibited 없으면 connection timeout 발생
■ 정책 적용 방법
* OLD 버전(예, 인터넷과 SSH 을 열 때)
1)iptables -A OUTPUT -p tcp -m tcp –dport 80 -j ACCEPT
2)iptables -A INPUT -p tcp -m tcp –sport 80 -j ACCEPT
1)iptables -A OUTPUT -p tcp -m tcp –dport 22 -j ACCEPT
2)iptables -A INPUT -p tcp -m tcp –sport 22 -j ACCEPT
-> 1) 외부(80/22 PORT)로 나가는 패킷 허용
-> 2) 외부(80/22 PORT)에서 들어오는 패킷 허용
=> 위와 같이 INPUT/OUTPUT 을 두개씩 등록 필요
* NEW 버전
1)iptables -A OUTPUT -m state –state NEW -p tcp -m tcp
–dport 80 -j ACCEPT
1)iptables -A OUTPUT -p tcp -m tcp –dport 22 -j ACCEPT
2)iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-> 1) 외부(80/22 PORT)로 나가는 신규(NEW 즉 SYN) 패킷 허용
-> 2) 외부에서 들어오는 연결된/관련된(SYNACK, ACK) 패킷 허용
=> 따라서, OUTPUT 관련 정의 하나만 내리면,
INPUT 관련 패킷은 –state ESTABLISHED,RELATED 공통정의로 해결됨.
(이와 반대 상황도 마찬가지로 허용됨.)
=> ESTABLISHED,RELATED 허용의미는 이미 연결되었거나, 기존 연결에 관련된
패킷은 허용한다는 의미(예, FTP 21 포트 열면 20 포트는 자동열림)
* 정책 삽입
# iptables -I OUTPUT [RULE_NUMBER] -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT -m comment –comment “ACCEPT OUT – WWW”
* 로그 남기는 방법
# iptables -A INPUT -j LOG
-> /var/log/messages 에 로그가 남겨짐
-> 차단된 포트를 확인시 차단 정책 바로위에 정책 설정하면 됨.
– 체인 삭제 : iptables -X 체인명
– 정책 삭제 : iptables -D 체인명 인덱스
* 기본 모두 막고 시작하기
# iptables -F (방화벽 초기화)
# iptables -X (체인 제거)
# iptables -Z (통계 초기화)
# iptables -P INPUT DROP (기본정책 DROP 설정)
# iptables -P FORWARD DROP (기본정책 DROP 설정)
# iptables -P OUTPUT DROP (기본정책 DROP 설정)
(OUTPUT 은 편의를 위해서 DEFAULT ACCEPT로 하기도 함.)
* 루프백 허용
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT
—————————–
# 방화벽 초기화 및 기본 설정 샘플
—————————–
1. 초기화 및 기본 차단 정책 설정
# iptables -F
# iptables -X
# iptables -Z
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT DROP
2. 루프백 설정
# iptables -A INPUT -i lo -j ACCEPT -m comment –comment “ACCEPT IN – LOOP BACK”
# iptables -A OUTPUT -o lo -j ACCEPT -m comment –comment “ACCEPT OUT – LOOP BACK”
3. ESTABLISHED,RELATED state 추가
# iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT -m comment –comment “ACCEPT IN – ESTABLISHED, RELATED”
# iptables -A OUTPUT -m state –state ESTABLISHED,RELATED -j ACCEPT -m comment –comment “ACCEPT OUT – ESTABLISHED, RELATED”
4. ICMP 추가
# iptables -A INPUT -p icmp -j ACCEPT -m comment –comment “ACCEPT IN – ICMP”
# iptables -A OUTPUT -p icmp -j ACCEPT -m comment –comment “ACCEPT OUT – ICMP”
5. 필요한 정책 추가 (IN/OUT)
(1) DNS 서버 운영시
# iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 53 -j ACCEPT -m comment –comment “ACCEPT IN – DNS SERVER”
# iptables -A INPUT -m state –state NEW -m udp -p udp –dport 53 -j ACCEPT -m comment –comment “ACCEPT IN – DNS SERVER”
(2) DNS QUERY
# iptables -A OUTPUT -m state –state NEW -m tcp -p tcp –dport 53 -j ACCEPT -m comment –comment “ACCEPT OUT – DNS QUERY”
# iptables -A OUTPUT -m state –state NEW -m udp -p udp –dport 53 -j ACCEPT -m comment –comment “ACCEPT OUT – DNS QUERY”
(3) 외부 웹서버 접근
# iptables -A OUTPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT -m comment –comment “ACCEPT OUT – WWW”
(4) 내부에 서버 운영시
# iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 포트 -j ACCEPT -m comment –comment “주석”
(5) 외부에 서버 접근시
# iptables -A OUTPUT -m state –state NEW -m tcp -p tcp –dport 포트 -j ACCEPT -m comment –comment “주석”
6. 마지막 차단 정책(기본 정책이 DROP 일 경우, 추가하지 않아도 무방함 하지만 추가할 경우 차단을 명시적으로 알려주는 역할. 추가안할 경우 TIMEOUT 발생)
* 로그를 남기겠다면 추가
# iptables -A OUTPUT -j LOG -m comment –comment “LOGGING /etc/var/messages”
# iptables -A INPUT -j REJECT –reject-with icmp-host-prohibited -m comment –comment “REJECT IN – ALL”
# iptables -A OUTPUT -j REJECT –reject-with icmp-host-prohibited -m comment –comment “REJECT OUT – ALL”
# iptables -A FORWARD -j REJECT –reject-with icmp-host-prohibited -m comment –comment “REJECT FORWARD – ALL”
7. 수정된 정책 저장
/etc/init.d/iptables save
————————–
# 방화벽 적용 샘플 – OLD 버전
————————–
InnoDB: Error: data file /usr/local/mysql/data/ibdata1 is of a different size
InnoDB: 640 pages (rounded down to MB)
InnoDB: than specified in the .cnf file 128000 pages!
InnoDB: Could not open or create data files.
InnoDB: If you tried to add new data files, and it failed here,
InnoDB: you should now edit innodb_data_file_path in my.cnf back
InnoDB: to what it was, and remove the new ibdata files InnoDB created
InnoDB: in this failed attempt. InnoDB only wrote those files full of
InnoDB: zeros, but did not yet use them in any way. But be careful: do not
InnoDB: remove old data files which contain your precious data!
my.cnf 설정 내역
innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend
실제 pages (640) 와, my.cnf에 설정된 pages (128000) 가 달라서 에러가 나는것임.
.
계산을 해보면 1page 당 Memory는 16kbytes 이라고 하는데….
즉, 위 에러 로그상의 실제 page 는 640 pages 이므로
640 pages = 10Mbytes
128000 pages = 1000Mbytes
정확한 내용은 요기에 —> http://www.mail-archive.com/mysql@lists.mysql.com/msg76029.html
위 메모리 양에 따라 my.cnf 내용을 아래처럼 수정하고 mysql restart
Syntax error on line 56 of /usr/local/apache/conf/extra/httpd-ssl.conf:
Invalid command ‘SSLPassPhraseDialog’, perhaps misspelled or defined by a module not included in the server configuration
소스를 압축 풀고 디렉토리를 phpmyadmin으로 이름 변경 후 계정의 홈페이지 디렉토리
안에 디렉토리 통째로 넣는다.
도메인/phpmyadmin 입력 후 접속 되는지 확인
접속시 오류 메시지
#1045 – Access denied for user ‘root’@’localhost’ (using password: NO)
설정
압축을 풀어 업로드시켰다면, 그중에 config.inc.php라는 파일을 자신의 실행환경에
맞게끔 편집을 해주어야 한다.
# cp config.sample.inc.php config.inc.php
※ 2.11.7 버젼에서는 config.inc.php 파일대신 /libraries/config.default.php 파일을 아래 내용에따라 편집해준다
버전 마다 다르다 2. 대는 #vim phpmyadmin/libraries config.default.php 요기서 편집