2015. 4. 29. 00:58




민트데비안 콘솔모드 부팅설정


GRUB 수정

sudo vi /etc/default/grub

1

2

3

4

#GRUB_CMDLINE_LinUX_DEFAULT="quiet" 

GRUB_CMDLINE_LinUX_DEFAULT="text"


GRUB_TERMINAL=console

- 해당 항목 찾아서 변경한다.


1. GRUB_CMDLINE_LinUX_DEFAULT="quiet" 부분을 찾아서 앞에 '#' 으로 주석처리.

   (="quiet" 뒤에 무언가 더 들어있는 경우도 있다. 무시하자.)


2. GRUB_CMDLINE_LinUX_DEFAULT="text" 추가

   (GRUB_CMDLINE_LinUX_DEFAULT="" 으로 되어있는 경우, 안에 text 만 추가)


3. GRUB_TERMINAL=console 추가

   (주석으로 막혀 있는 경우, 주석 해제만 한다.)




적용...?

sudo update-grub 




재부팅 해서 확인 하면 끝~!






[참고]

http://ask.xmodulo.com/boot-into-command-line-ubuntu-debian.html

http://linuxmint.kr/8676



P.S.

- 한국 민트 리눅스 사용자 모임에 질문글 올렸다가 bagjunggyu님의 답변을 받아 적용 후 정리하였습니다. bagjunggyu님 감사합니다.



Posted by 해비
2015. 4. 28. 00:17



삼바(SAMBA) 서버설치

 sudo apt-get install samba

 sudo apt-get install smbclient

 sudo apt-get install samba-common-bin 




설정1 - 공유폴더

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

sudo vim /etc/samba/smb.conf


 /etc/samba/smb.conf

1

2

3

4

5

6

7

8

9

10

11

12

13

14

workgroup = WORKGROUP

dos charset = CP949

display charset = UTF8

unix charset = UTF8


[nas_rw]

path = /usr/hdd1/nas

writable = yes

valid users = net1


[nas_r]

path = /usr/hdd1/nas

writable = no

guest = yes

- 기본 smb.conf 내용을 모두 다 지우고 이 내용만으로 채웠는데 잘 되더라능~

- 갠히 기존파일에 수정만 했다가 안된다고 씩씩댔었다. (그냥 참고만...)

- 윈도우 에서 네트워크 드라이브 연결 시 폴더 2개가 노출된다. (nas_rw, nas_r)

- nas_rw 에 연결하기 위해서는 아이디가 net1 이어야 한다. 쓰기권한 yes 이므로 읽고, 쓰고 다 된다.

- nas_r 에 연결하기 위해서는 smb에 등록된 어떤 아이디든 가능하다. 쓰기권한 no 이므로 읽기만 된다.

노출될 폴더명, 사용자 아이디는 임의로 설정하자.




설정2 - 사용자 추가

sudo useradd net1

sudo useradd netr


sudo passwd -d net1

sudo passwd -d netr


sudo smbpasswd -a net1

sudo smbpasswd -a netr

- 사용자 추가

- 패스워드 제거(SSH 접속을 원천적으로 막음)

- 삼바 사용자 추가

  - 리눅스에 존재하는 사용자명과 동일한 사용자명으로 추가, 패스워드는 동일하지 않아도 된다

  - a 옵션 은 사용자 추가를 의미 하므로, 패스워드 변경시 -a 옵션 없이 입력한다.




포트개방

sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 137:139 -j ACCEPT

sudo iptables -A INPUT -m state --state NEW -m udp -p udp --dport 137:139 -j ACCEPT

sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT




서비스시작

sudo /etc/init.d/samba restart






Posted by 해비
2015. 4. 23. 23:13


라즈베리파이2를 구입 후 NAS 구성했더니 속도가 영 안습이라...


결국 x86 초 저전력 보드를 구입하기에 이르게 되었습니다.



GIGABYTE J1900N-D3V 입니다.

메인보드에 납땜된 CPU가 소모전력이 무려 10 W 입니다. --> 옆에 파워는 안정(?)적 전력공급을 위한 500 W 짜리 -ㅅ-

케이스가 없으니 일단은 이렇게 ...




보드 스펙상으로는 8 GB 까지 라고 되어있는데...

16384 MB (16 GB) 인식 이 잘 됩니다. 그것도 아주 자~알...

DDR3L 8GB x 2 개 로 구성했습니다.


바이오스 셋업화면 들어가야 하는데 생판 처음 보는 EFI Shell 이라는 녀석 때문에 고생좀 했네요... 그냥 exit 치고 엔터 !!

부트 시퀀스로 넘어가기 전에 재빨리 Del 키 눌러야 하는건 뽀나스~


이건 제 키보드가 별나서 그런건지 몰라도...

(키패드 Del 키는 안먹고, 방향키 위에 6개 모여있는 거기 Delete 눌러야 진입되더군요... 참내..-_-);




윈도우에서도 이렇게... 16기가 인식에 문제 없습니다.

(15.9GB 라고 된거는 내장그래픽이 일부 용량을 뺏어가서 저런 겁니다. 아마도요...)




각각 항목별 점수 입니다.




USB 3.0 외장하드로 부터의 전송속도 입니다.

USB 3.0 역시 인텔 컨트롤러가 진리 입니다 ㅠㅠ


AMD970 보드에 내장된 USB는 E머시기 회사의 칩셋이었던거 같은데, 이 속도를 보니 그동안 가짜 USB 3.0 을 써왔다는 생각만 드네요.




이어지는 동영상 재생 테스트



위 (노가속), 아래(가속) 입니다.

CPU사용률이 거의 절반가량 내려가는 Magic이~~

완젼 똑같은 부분 잡기는 힘드네요... -_-




마지막 게임 테스트~


인기 절정의 리그오브레전드 입니다.

기본옵션이구요, 별도 옵션 건드리지 않았습니다.

음... 뭐 그냥 돌아는 가네.. 정도 로 절대 플레이할 수준이 못됩니다.

이거로 게임 할 생각은 그냥 접어두세요~




기본적인 테스트는 다 해봤으니...

이제 리눅스 깔아서 서버 세팅을 해야 겠군요~



공유기를 허브로 돌리고 이녀석을 공유기로 써볼까 싶기도 하네요 (으흐흐... 마침 이 보드에 듀얼 기가비트 랜이 장착되어있음~)

공유기의 용량은 동시 연결 수 입니다. XXX MB 의 대용량(?) 메모리로 XXX,XXX 개의 커넥션을 제공 한다고...

(모 회사의 상품설명란)


그렇다면 인텔 x86 셀러론 쿼드코어에 16 GB의 울트라 하이퍼 초 특대용량이니까 처리 가능한 동시 연결수는 ...? ^^






Posted by 해비
2015. 4. 21. 17:07



[SQL]

SELECT *
  FROM
      (
       SELECT A.OWNER
            , A.TABLE_NAME
            , B.COMMENTS AS TABLE_NAME_CO
            , C.COLUMN_ID
            , C.COLUMN_NAME
            , D.COMMENTS AS COLUMN_NAME_CO
            , C.DATA_TYPE || CASE WHEN C.DATA_TYPE IN ('VARCHAR2','CHAR')          THEN ' (' || C.CHAR_LENGTH || ' Byte)'
                                  WHEN C.DATA_TYPE = 'NUMBER' AND C.DATA_SCALE > 0 THEN ' (' || C.DATA_PRECISION ||','|| C.DATA_SCALE ||')'
                                  WHEN C.DATA_TYPE = 'NUMBER' AND C.DATA_SCALE = 0 THEN ' (' || C.DATA_PRECISION ||')'
                                  ELSE C.DATA_TYPE END AS DATA_TYPE
            , C.NULLABLE
            , (SELECT POSITION
                 FROM ALL_CONS_COLUMNS Y
                    , ALL_CONSTRAINTS Z
                WHERE Y.OWNER           = Z.OWNER
                  AND Y.TABLE_NAME      = Z.TABLE_NAME
                  AND Y.CONSTRAINT_NAME = Z.CONSTRAINT_NAME
                  AND Z.CONSTRAINT_TYPE = 'P'
                  AND Y.OWNER           = A.OWNER
                  AND Y.TABLE_NAME      = A.TABLE_NAME
                  AND Y.COLUMN_NAME     = C.COLUMN_NAME) AS COL_PK
            , C.DATA_DEFAULT AS COL_DEFAULT
         FROM ALL_TABLES       A
            , ALL_TAB_COMMENTS B
            , ALL_TAB_COLUMNS  C
            , ALL_COL_COMMENTS D
        WHERE A.OWNER       = B.OWNER
          AND A.TABLE_NAME  = B.TABLE_NAME
            AND C.OWNER       = A.OWNER
          AND C.TABLE_NAME  = A.TABLE_NAME
          AND D.OWNER       = A.OWNER
          AND D.TABLE_NAME  = A.TABLE_NAME
          AND D.COLUMN_NAME = C.COLUMN_NAME
      )
 WHERE OWNER LIKE '%'
   AND TABLE_NAME LIKE '%'
 ORDER BY TABLE_NAME, COLUMN_ID



엑셀 문서작업 한다고 필요해서 작업했던 것인데 나중에 또 써먹을 것 같아서 보관...



Posted by 해비
2015. 4. 17. 15:07




요구사항:

예) 외출 시간이 10:00 ~ 14:00 인 경우, 원래 4시간 이나, 점심시간 (12:00 ~ 13:00) 이 포함되면 해당 범위만큼 제외한 시간을 산정하도록 한다.


입력은 분단위 환산된 정수 값이다.


한계)

- 당일 시간단위의 계산에 한함. 일자가 변경되는 것 까지 고려하지는 않는다.


        /* -----------------------------
         * 2015.04.17
         * Haebi, http://haebi.kr
         * ----------------------------- */
        /// <summary>
        /// 특정 시간간격을 제외한 총 분단위 간격을 구한다.
        /// </summary>
        /// <param name="fromMin">시작분</param>
        /// <param name="toMin">종료분</param>
        /// <param name="exFromMin">제외시작분</param>
        /// <param name="exToMin">제외종료분</param>
        /// <returns></returns>
        private int checkDurMinutes(int fromMin , int toMin, int exFromMin, int exToMin)
        {
            if (toMin < fromMin) throw new Exception("checkDurMinutes() : 종료시간이 시작시간보다 작을 수 없습니다.");
            if (exToMin < exFromMin) throw new Exception("checkDurMinutes() : 제외종료시간이 제외시작시간보다 작을 수 없습니다.");

            /**
             * 제외시킬 기간과 겹쳐질수 있는 4가지 케이스에 대하여 처리하고 있으며,
             * 해당없는 경우(겹쳐지지 않는경우) 그냥 to - from 처리로 끝난다.
             */
            int _retMin = 0;

            try
            {
                // -----<------|---------------|------>------
                if (fromMin <= exFromMin && toMin >= exToMin)
                {
                    _retMin = toMin - fromMin - (exToMin - exFromMin);
                }
                // ------------|---<------>----|-------------
                else if (fromMin >= exFromMin && toMin <= exToMin)
                {
                    _retMin = 0;
                }
                // ------<-----|---------->----|-------------
                else if ((fromMin <= exFromMin)
                    && (toMin >= exFromMin && toMin <= exToMin))
                {
                    _retMin = exFromMin - fromMin;
                }
                // ------------|----------<----|------>------
                else if ((fromMin >= exFromMin && fromMin <= exToMin)
                    && toMin >= exToMin)
                {
                    _retMin = toMin - exToMin;
                }
                // ---<----->--|---------------|-------------
                // ------------|---------------|---<----->---
                else
                {
                    _retMin = toMin - fromMin;
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

            return _retMin;
        }




그리고 검증을 위한 테스트 코드

               int min1 = 600; // 10:00
                int min2 = 630; // 10:30
                int dmin = 0;

                for (int i = 0; i < 300;i++)
                {
                    min2++; dmin = checkDurMinutes(min1, min2, 720, 780); printLog(i + 1, dmin, min1, min2);
                }



printLog() 부분

        private void printLog(int count, int dmin, int min1, int min2)
        {
            // 테스트 결과 출력 (단위:분)
            // 테스트 넘버    from ~ to 기간    from 분    to 분
            textBox3.Text = textBox3.Text + "\r\n" + count.ToString() + "\t"
                + string.Format("{0:D2}", (dmin / 60)) + ":" + string.Format("{0:D2}", (dmin % 60))
                + "\t" + string.Format("{0:D2}", (min1 / 60)) + ":" + string.Format("{0:D2}", (min1 % 60))
                + "\t" + string.Format("{0:D2}", (min2 / 60)) + ":" + string.Format("{0:D2}", (min2 % 60));
        }

- textBox3 하나 추가해 주면 된다.




테스트 결과(샘플)

카운트 - (외출)시간 - 시작시간 - 종료시간

88    01:58    10:00    11:58
89    01:59    10:00    11:59
90    02:00    10:00    12:00

91    02:00    10:00    12:01
92    02:00    10:00    12:02
93    02:00    10:00    12:03

...(생략)
148    02:00    10:00    12:58
149    02:00    10:00    12:59
150    02:00    10:00    13:00

151    02:01    10:00    13:01
152    02:02    10:00    13:02
153    02:03    10:00    13:03

- 1분단위로 종료시간을 더해가면서 실제 반영되는 시간이 얼마인지를 확인 한다.

- 테스트는 720(12:00) ~ 780(13:00) 까지의 범위에 대해 계산을 하지 않는 것으로 설정하였다.




Posted by 해비
2015. 4. 10. 09:41

Datatable 사용해서 처리하는 구문이 있었는데 의도하지 않은 방향으로 흘러가 버렸네요...


일단 의도는 다음과 같습니다.


1. 테이블에서 Select 하여 대상 데이터를 선택합니다.

2. 원 테이블을 클리어 시킵니다.

3. 선택된 데이터를 집어 넣습니다.



위 의도대로 아래와 같이 코드를 작성하였습니다

            // 테이블 정의
            DataTable srcDT = new DataTable();
            srcDT.Columns.Add("A1");
            srcDT.Columns.Add("A2");
            srcDT.Columns.Add("A3");
            srcDT.Columns.Add("A4");

            // 데이터 입력
            srcDT.Rows.Add(new object[] { "AAA", "111", "A11", "1AA" });
            srcDT.Rows.Add(new object[] { "BBB", "222", "B11", "1BB" });
            srcDT.Rows.Add(new object[] { "CCC", "333", "C11", "1CC" });

            // 커밋
            srcDT.AcceptChanges();

            // 쿼리
            DataRow[] fDR = srcDT.Select("A1 like '" + "A" + "%'");

            srcDT.Clear();
            foreach (DataRow dr in fDR)
            {
                srcDT.Rows.Add(dr);
            }

            for (int i = 0; i < srcDT.Rows.Count; i++)
            {
                textBox1.AppendText(srcDT.Rows[i][0].ToString() + " | "
                    + srcDT.Rows[i][1] + " | "
                    + srcDT.Rows[i][2] + " | "
                    + srcDT.Rows[i][3] + " | " + "\r\n");
            }


이 소스코드가 잘 돌아갈 것 같이 보입니까?



여기에는 치명적인 문제가 있습니다.

원 테이블을 클리어 시켜 버렸다는 것.


선택된 목록만을 가져오기 위해서 Clear 후 다시 선택된 값을 집어 넣고 있지만...;;


정작 빈 껍데기 row만 들어갑니다.


Select 할 때, 값을 복사해 오는것이 아니고 해당 데이터의 위치주소 값을 가져오는 듯 합니다.

그래서, 테이블 클리어 때 값이 다 지워졌고, 해당 주소값의 row를 다시 추가해 봤자 이미 다 지워진 빈 데이터 만 추가될 뿐이고...




이런 경우 제가 찾은 해결책은 2가지 입니다.


1번째는 목록을 not like 로 가져 온 다음, 해당 하는 행을 remove 로 지워 나가는 것.

2번째는 like 로 가져온 행을 새 테이블에 넣어주는 방법 (넣기 전에 원 테이블이 Clear 되면 안됩니다.)



1번째 소스코드

            // 쿼리
            DataRow[] fDR = srcDT.Select("A1 not like '" + "A%" + "%'");

            //srcDT.Clear();
            foreach (DataRow dr in fDR)
            {
                srcDT.Rows.Remove(dr);
            }

            for (int i = 0; i < srcDT.Rows.Count; i++)
            {
                textBox1.AppendText(srcDT.Rows[i][0].ToString() + " | "
                    + srcDT.Rows[i][1] + " | "
                    + srcDT.Rows[i][2] + " | "
                    + srcDT.Rows[i][3] + " | " + "\r\n");
            } 




2번째 소스코드

            // 쿼리
            DataRow[] fDR = srcDT.Select("A1 like '" + "A" + "%'");

            //srcDT.Clear();
            DataTable srcDT2 = new DataTable();
            srcDT2 = srcDT.Clone();
            foreach (DataRow dr in fDR)
            {
                srcDT2.Rows.Add(dr.ItemArray);
            }

            for (int i = 0; i < srcDT2.Rows.Count; i++)
            {
                textBox1.AppendText(srcDT2.Rows[i][0].ToString() + " | "
                    + srcDT2.Rows[i][1] + " | "
                    + srcDT2.Rows[i][2] + " | "
                    + srcDT2.Rows[i][3] + " | " + "\r\n");
            }






Posted by 해비
2015. 4. 5. 20:09

Tor WiFi Router 만들기

WiFi 접속만으로 Tor Network 에 연결할수 있는 라우터를 만들어 보겠습니다.


준비물

- Raspberry pi 본체 (또는 linux OS가 설치된 시스템)

- USB WLAN(RTL8188CUS) 무선랜

  (여기서는 iptime의 N100mini 를 사용했습니다만 동일 칩셋이 들어간 어떤 무선랜이라도 상관없을 것이라 봅니다)

- SD(Raspbian OS) 라즈비안OS가 설치된 SD 메모리 (기타 저장장치에 linux 가 설치된 시스템이면 필요없음)


결과물

- Tor WiFi AP 토르 네트워크에 연결되는 와이파이 액세스 포인트



Tor 이 무엇인지, 어디에 쓰이는지 모르시는분들은 검색해서 참조하여 주십시오.

(양파 모양의 아이콘을 띄고 있습니다.)




[작업순서]

1. AP가 될 무선랜 어뎁터의 IP 설정

2. DHCP서버 설치 및 설정

3. 무선랜을 AP로 변신시켜줄 hostapd 설치 및 설정

4. rtl871xdrv 가 포함된 hostapd 를 다운로드 하여 덮어쓰자

5. tor 설치 및 설정

6. iptables 설정

7. 로그 파일 생성 및 설정

8. Tor 자동시작 설정




1. AP가 될 무선랜 어뎁터의 IP 설정

sudo vim /etc/network/interfaces

1

2

3

4

 iface wlan0 inet static

 address 192.168.42.1

 netmask 255.255.255.0

 up iptables-restore < /etc/iptables.ipv4.nat




2. DHCP서버 설치 및 설정

 # sudo apt-get install isc-dhcp-server

- DHCP 서버 설치



sudo vim /etc/dhcp/dhcpd.conf

1

2

3

4

5

6

7

8

9

10

11

12

 #option domain-name "example.orWg";

 #option domain-name-servers ns1.example.org, ns2.example.org;

 authoritative;

 subnet 192.168.42.0 netmask 255.255.255.0 {

 range 192.168.42.10 192.168.42.50;

 option broadcast-address 192.168.42.255;

 option routers 192.168.42.1;

 default-lease-time 600;

 max-lease-time 7200;

 option domain-name "local";

 option domain-name-servers 8.8.8.8, 8.8.4.4;

 }

- 진하게 표시된 부분에 유의하여 설정을 진행합니다.




 # sudo vim /etc/default/isc-dhcp-server

1

 INTERFACES="wlan0"

- DHCP를 적용할 장치를 설정합니다.



 # sudo service isc-dhcp-server restart

- DHCP 서버 재시작




3. 무선랜을 AP로 변신시켜줄 hostapd 설치 및 설정

 # sudo apt-get install hostapd

- hostapd 설치



sudo vim /etc/hostapd/hostapd.conf

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

 interface=wlan0

 #driver=nl80211

 driver=rtl871xdrv

 ssid=onionWiFi

 hw_mode=g

 ieee80211n=1

 wmm_enabled=1

 wmm_ac_bk_cwmin=4

 wmm_ac_bk_cwmax=10

 wmm_ac_bk_aifs=7

 wmm_ac_bk_txop_limit=0

 wmm_ac_bk_acm=0

 wmm_ac_be_aifs=3

 wmm_ac_be_cwmin=4

 wmm_ac_be_cwmax=10

 wmm_ac_be_txop_limit=0

 wmm_ac_be_acm=0

 wmm_ac_vi_aifs=2

 wmm_ac_vi_cwmin=3

 wmm_ac_vi_cwmax=4

 wmm_ac_vi_txop_limit=94

 wmm_ac_vi_acm=0

 wmm_ac_vo_aifs=2

 wmm_ac_vo_cwmin=2

 wmm_ac_vo_cwmax=3

 wmm_ac_vo_txop_limit=47

 wmm_ac_vo_acm=0

 channel=6

 macaddr_acl=0

 auth_algs=1

 ignore_broadcast_ssid=0

 wpa=2

 wpa_passphrase=yourpassword

 wpa_key_mgmt=WPA-PSK

 wpa_pairwise=TKIP

 rsn_pairwise=CCMP

- 1. AP의 장치명을 설정.

- 3. AP의 드라이버명을 지정.

- 4. SSID 에 노출될 명칭

- 6. n 모드 지원

- 7 ~ 27. WMM (무선 QoS) 설정

- 28. 사용할 무선랜 채널

- 30~36. 무선보안 설정



# sudo vim /etc/default/hostapd

1

 DAEMON_CONF="/etc/hostapd/hostapd.conf"

- hostapd.conf 파일위치 설정




4. rtl871xdrv 가 포함된 hostapd 를 다운로드 하여 덮어쓰자

1

 # wget http://www.adafruit.com/downloads/adafruit_hostapd.zip 

2

 # unzip adafruit_hostapd.zip 

3

 # sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.ORIG 

4

 # sudo mv hostapd /usr/sbin

5

 # sudo chmod 755 /usr/sbin/hostapd




5. tor 설치 및 설정

 # sudo apt-get install tor 

- tor 설치



sudo vim /etc/tor/torrc

1

2

3

4

5

6

7

8

 Log notice file /var/log/tor/notices.log

 VirtualAddrNetwork 10.192.0.0/10

 AutomapHostsSuffixes .onion,.exit

 AutomapHostsOnResolve 1

 TransPort 9040

 TransListenAddress 192.168.42.1

 DNSPort 53

 DNSListenAddress 192.168.42.1

- 7, 8 IP주소는 위에서 설정한 wlan0 의 것과 동일하게 합니다.




6. iptables 설정

 iptables -P INPUT ACCEPT

 iptables -F


 iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

 iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

 iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP


 iptables -A INPUT -i lo -j ACCEPT


 iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT


 iptables -A INPUT -i eth0 -p udp --sport 68 --dport 67 -j ACCEPT


 iptables -A INPUT -i wlan0 -j ACCEPT


 iptables -A INPUT -i eth0 -p tcp -m tcp --sport 137 --dport 137 -j ACCEPT

 iptables -A INPUT -i eth0 -p udp -m udp --sport 137 --dport 137 -j ACCEPT

 iptables -A INPUT -i eth0 -p udp -m udp --sport 138 --dport 138 -j ACCEPT

 iptables -A INPUT -i eth0 -p tcp -m tcp --sport 139 --dport 138 -j ACCEPT


 iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


 iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

 iptables -P INPUT DROP


 iptables -P OUTPUT ACCEPT


 iptables -nL

 

 iptables -t nat -F

 iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 22 -j REDIRECT --to-ports 22

 iptables -t nat -A PREROUTING -i wlan0 -p udp --dport 53 -j REDIRECT --to-ports 53

 iptables -t nat -A PREROUTING -i wlan0 -p tcp --syn -j REDIRECT --to-ports 9040

 iptables -t nat -nL

- eth0 포트 22 는 ssh 접속용, 67~68 은 dhcp, 137~139 는 netbios (RFC 1001, 1002 문서 참고)

- wlan0 의 포트 리다이렉트 설정은 ssh 접속용인 22번을 제외하고 tor 라우터 설정.




1

 # sudo iptables-save > iptables.conf

2

 # sudo cp iptables.conf /etc/iptables.conf

- 부팅 후 iptables 규칙이 유지되도록 현재 규칙을 저장



sudo vim /etc/network/interfaces

1

 pre-up iptables-restore < /etc/iptables.conf

- eth0 설정 아랫부분에 위 내용 추가




7. 로그 파일 생성 및 설정

1

 # sudo touch /var/log/tor/notices.log

2

 # sudo chown debian-tor /var/log/tor/notices.log

3

 # sudo chmod 644 /var/log/tor/notices.log




8. Tor 자동시작 설정

1

 # sudo service tor start

2

 # sudo service tor status

3

 # sudo update-rc.d tor enable



ls -l /var/log/tor 

- tor 로그를 확인할 수 있다.




웹브라우저를 열고 아래 주소에 접속하면 Tor 네트워크에 연결되었는지를 확인할 수 있다.

https://check.torproject.org



만약 위 화면과 다르게 양파에 붉은 X 자 표시가 되어있다면, Tor 네트워크로 접속되지 않았음을 의미한다.




[변경사항]

- 2015.04.22 : iptables 설정 중 deny 로그 남기는 부분의 설정 위치에 대한 오류가 있어 정정합니다.






[참고사이트]

http://www.maketecheasier.com/set-up-raspberry-pi-as-wireless-access-point/

http://www.raspberrypi.org/forums/viewtopic.php?t=53943&p=413909

http://www.raspberrypi.org/forums/viewtopic.php?f=28&t=44044

https://learn.adafruit.com/onion-pi/install-tor

http://www.instructables.com/id/Raspberry-Pi-Tor-relay/step1/Start-the-TOR-Server/

http://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf






Posted by 해비