블로그 이미지
훅크선장

카테고리

분류 전체보기 (362)
사진이야기 (23)
펭귄컴퓨팅 (121)
컴퓨터보안 (84)
절름발이 프로그래머 (59)
하드웨어개조 (23)
멀알려줄까 (35)
홈베이킹&홈쿠킹 (2)
잡다한것들 (15)
Total
Today
Yesterday

달력

« » 2016.1
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

공지사항

태그목록

최근에 올라온 글

이전에 썼던 글에서, OpenWRT에서 OpenVPN 사용을 위한 방화벽 iptables 허용 규칙


방화벽 규칙을 iptables 가 아닌, netfilter로 사용하는 방법입니다. 두 방법에 차이는 없지만, 외국의 사용자들은 netfilter를 더 권장하는 것 같습니다.

/etc/firewall.user는 일종의 custom 룰로 사용하다보니, 좀 더 근본적인 네트워크 필터링?은 netfilter를 더 선호하는 것 같습니다.


/etc/firewall.user  파일에서 사용한 다음의 세 줄이 대상입니다.


###OPENVPN PASS-THROUGH ENABLE RULES###

iptables -I INPUT -p udp --dport 1194 -j ACCEPT

iptables -I FORWARD -i tun+ -j ACCEPT

iptables -I FORWARD -o tun+ -j ACCEPT


----------------------------------------------------------------------------------------------

먼저 위의 세 줄을 모두 주석처리합니다.

# vi /etc/firewall.user

...

###OPENVPN PASS-THROUGH ENABLE RULES###

#iptables -I INPUT -i eth+ -p udp --dport 1194 -j ACCEPT

#iptables -I FORWARD -i tun+ -j ACCEPT

#iptables -I FORWARD -o tun+ -j ACCEPT

...


/etc/config/network 파일에 다음을 추가합니다.

...

...

config interface 'vpn0'

        option proto 'none'

        option ifname 'tun0'


네트워크 인터페이스를 하나 생성하는 것입니다.


/etc/config/firewall 파일에 다음을 추가합니다.(중간쯤에 추가하면 좋습니다.)


config zone

option input ACCEPT

option output ACCEPT

option name openvpn_zone

option network 'vpn0'

option forward REJECT


config forwarding

option dest lan

option src openvpn_zone


config forwarding

option dest wan

option src openvpn_zone


config forwarding

option dest openvpn_zone

option src lan


config rule

option target ACCEPT

option src wan

option proto udp

option dest_port 1194

option family ipv4

option name 'openvpn2openwrt'


순서대로 설명하면,

먼저 vpn 영역의 zone을 생성해줍니다.

두번째로 포워딩을 정의합니다. 포워딩 룰은 모두 3개를 정의합니다.

vpn 영역에서 lan 영역으로,  vpn 영역에서 wan 영역으로, 그리고, lan 영역에서 vpn 영역으로,

총 3개를 정의하면, vpn 상에서 lan 과 wan에 모두 연결이 됩니다.

마지막으로, openvpn 서비스가 사용하는 1194 포트에 대해서 udp 접속이 허가되도록 해줍니다.


이렇게 하고나서, 반드시 OpenWRT 장비를 리부팅해야 됩니다.  zone 설정은 시스템이 재시작되어야만 적용되기 때문이라고 합니다.

# /etc/init.d/network restart

# /etc/init.d/firewall restart

만으로는 해결되지 않습니다.

반드시, OpenWRT 장비를 리부팅해야만 합니다.



Posted by 훅크선장
, |

터미널 창에서 먼저


$ diskutil list    명령어를 실행합니다.

/dev/disk0

   #:                       TYPE NAME                    SIZE       IDENTIFIER

   0:      GUID_partition_scheme                        *251.0 GB   disk0

   1:                        EFI EFI                     209.7 MB   disk0s1

   2:                  Apple_HFS Macintosh HD            250.1 GB   disk0s2

   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3

/dev/disk1

   #:                       TYPE NAME                    SIZE       IDENTIFIER

   0:      GUID_partition_scheme                        *2.0 TB     disk1

   1:                        EFI EFI                     209.7 MB   disk1s1

   2:                  Apple_HFS Macintosh HD 2          2.0 TB     disk1s2

/dev/disk2

   #:                       TYPE NAME                    SIZE       IDENTIFIER

   0:     FDisk_partition_scheme                        *7.9 GB     disk2

   1:             Windows_FAT_32 boot                    62.9 MB    disk2s1

   2:                      Linux                         1.4 GB     disk2s2


위와 비슷한 결과가 나옵니다. 실험된 iMac 장비에는 내장 디스크가 SSD 256GB 1개와 HDD 2TB 1개가 달려있습니다.

그래서, 마지막에 보시면, /dev/disk2 라는 디스크로 8GB 짜리 USB 메모리가 보입니다. 현재 Linux 파티션이 1.4GB로 보입니다.


/dev/disk2 로 인식되어 있는 8GB USB 메모리를 FAT32 파티션으로 포맷하는 방법은 간단합니다.

포맷하기전에 반드시 꼭 디스크명 /dev/disk2 를 확인하세요!! 잘못하면, 엉뚱한 디스크를 포맷할 수 있습니다.


$ sudo diskutil eraseDisk FAT32 "AAA" MBRFormat /dev/disk2

명령어 하나면, USB 디스크를 모두 지운후에, FAT32 파티션으로 만들어줍니다.

"AAA"는 볼륨 이름을 지정하는 것인데, 반드시 대문자로 써야합니다.  "aaa" 같이 소문자를 절대로 쓰면 안됩니다.


$ sudo diskutil eraseDisk FAT32 "AAA" MBRFormat /dev/disk2

Password:[관리자 패스워드 입력 필요]

Started erase on disk2

Unmounting disk

Creating the partition map

Waiting for the disks to reappear

Formatting disk2s1 as MS-DOS (FAT32) with name AAA

512 bytes per physical sector

/dev/rdisk2s1: 15385208 sectors in 1923151 FAT32 clusters (4096 bytes/cluster)

bps=512 spc=8 res=32 nft=2 mid=0xf8 spt=32 hds=255 hid=2 drv=0x80 bsec=15415294 bspf=15025 rdcl=2 infs=1 bkbs=6

Mounting disk

Finished erase on disk2


위 명령어 후에는 다음과 같이 보입니다.

$ diskutil list

/dev/disk0

   #:                       TYPE NAME                    SIZE       IDENTIFIER

   0:      GUID_partition_scheme                        *251.0 GB   disk0

   1:                        EFI EFI                     209.7 MB   disk0s1

   2:                  Apple_HFS Macintosh HD            250.1 GB   disk0s2

   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3

/dev/disk1

   #:                       TYPE NAME                    SIZE       IDENTIFIER

   0:      GUID_partition_scheme                        *2.0 TB     disk1

   1:                        EFI EFI                     209.7 MB   disk1s1

   2:                  Apple_HFS Macintosh HD 2          2.0 TB     disk1s2

/dev/disk2

   #:                       TYPE NAME                    SIZE       IDENTIFIER

   0:     FDisk_partition_scheme                        *7.9 GB     disk2

   1:                 DOS_FAT_32 AAA                     7.9 GB     disk2s1

Posted by 훅크선장
, |

OpenWRT에서 WAN Interface 명칭과  LAN 인터페이스 명칭을 쉡 스크립트로 사용하여 알 수 있습니다.


Interface 명칭은 보통 eth0, eth1, 등등 인데, OpenWRT에서는 br-lan 이라는 인터페이스 명이 주로 내부 LAN 이름으로 사용됩니다.

UCI 명령어를 쓰면 인터페이스 명칭을 쉽게 알아낼 수 있습니다.


WAN 인터페이스 명칭 알아내기

uci -P/var/state get network.wan.ifname

결과값은

eth0

으로 출력됩니다만, 다른 장비들에서는 eth1 으로 출력되기도 합니다. 주의하셔서 보셔야 합니다.

LAN 인터페이스 명칭 알아내기

uci -P/var/state get network.lan.ifname

결과값은

br-lan

으로 대부분 출력됩니다.



위의 스크립트는 다양한 곳에서 사용할 수 있습니다.

대표적으로 방화벽 설정파일인 /etc/firewall.user 파일에 적용할 수 있습니다.


WANIF=$(uci -P/var/state get network.wan.ifname)

iptables -A INPUT -i $WANIF -p tcp --dport 21 -j ACCEPT

와 같은 식으로, WAN 인터페이스를 지정하는 스크립트를 장비의 출력값에 구애받지 않고 쓸 수 있는 장점이 있습니다.

Posted by 훅크선장
, |

OpenWrt Chaos Calmer 15.05 에서 테스트된 내용으로,

OpenVPN 클라이언트가 OpenWRT의 OpenVPN 서비스로 접속하여, 인터넷을 하기 위한 iptables 규칙을 설명합니다. (클라이언트의 패킷들이 OpenWRT 공유기를 통하여, 인터넷으로 Forwarding 되기 위한 조건)


/etc/firewall.user  파일에 다음과 같이 딱 세 줄만 추가하면 됩니다.


###OPENVPN PASS-THROUGH ENABLE RULES###

iptables -I INPUT -p udp --dport 1194 -j ACCEPT

iptables -I FORWARD -i tun+ -j ACCEPT

iptables -I FORWARD -o tun+ -j ACCEPT


앞의 첫째 줄,

iptables -I INPUT -p udp --dport 1194 -j ACCEPT

이것들은 1194 포트(OpenVPN의 디폴트 Listen 포트번호)로 들어오는 udp 패킷을 받아들이는 것입니다.

이 라인이 없으면, OpenVPN 서비스 접속 자체가 불가능합니다.

만약 특정 네트워크 인터페이스에서만, OpenVPN 서비스를 사용한다면, 다음과 같이 인터페이스를 지정할 수 있습니다.

iptables -I INPUT -i eth0 -p udp --dport 1194 -j ACCEPT


eth0는 예로 든 것입니다. 일반적으로는 ifconfig  명령을 실행한 다음, 인터넷과 연결된 WAN 인터페이스를 찾아야 합니다. 경험상으로 eth0 또는 eth1이 주로 WAN 인터페이스입니다만, 어느쪽이 될지는 OpenWRT가 설치된 장비에 따라 틀립니다. 반드시 확인하시기 바랍니다.


만약 OpenVPN을 tcp 모드로 사용한다면,  다음과 같이 수정해서 사용하여야 한다. (OpenVPN은 udp 모드로 사용해야 좋습니다. udp 모드가 tcp 모드에 비해 속도가 빠르다고 합니다.)

iptables -I INPUT -p tcp --dport 1194 -j ACCEPT

--dport 뒤에 쓰여진 1194 라는 번호도 역시 디폴트 OpenVPN 포트번호이므로, 혹시 다른 포트를 사용하기로 설정했다면, 여기도 수정해서 사용해야 한다.


그 뒤의 두 줄,

iptables -I FORWARD -i tun+ -j ACCEPT

iptables -I FORWARD -o tun+ -j ACCEPT

이것들은 OpenVPN으로 연결된(tun 디바이스명을 가진) 네트워크 어댑터들의 패킷들이 다른 네트워크 디바이스 쪽으로 서로 왕래할 수 있도록 합니다.


-i tun+ 가 있는 줄은 tun 디바이스 명을 가진 네트워크 어댑터에서 출발한 패킷들이 다른 네트워크 어댑터, 즉 OpenWRT 공유기의 LAN 영역이나 WAN 영역으로 전달될 수 있도록 하는 것입니다.

-o tun+ 가 있는 줄은 OpenWRT 공유기의 LAN 영역이나 WAN 영역에서 출발한 패킷들이(아마도 대부분은 윗 줄의 패킷들에 대한 응답들이 많은) tun 디바이스명을 가진 네트워크 어댑터쪽으로 다시 들어올 수 있도록 하는 것입니다.


------------------------------------------

대부분의 OpenWRT의  OpenVPN 서비스가 사용할 빈도가 적겠지만,

만약 OpenVPN 서비스에 접속한 외부의 클라이언트들이 OpenWRT 내부의 LAN 영역에만 접근가능하도록 하고, 인터넷을 사용하지 못하게 하려면, (ex. 회사내의 서버만을 연결하는 경우)


위에서 설명한 FORWARD 규칙 두 줄을 다음과 같이 수정하면 됩니다.

iptables -I FORWARD -i tun+ -d 192.168.1.0/24 -j ACCEPT

iptables -I FORWARD -o tun+ -s 192.168.1.0/24 -j ACCEPT


여기서, 192.168.1.0 네트워크는 OpenWRT의 내부 LAN  IP 대역을 지칭하는 것입니다. 여러분의 환경에 맞게 확인하시고 입력하시면 됩니다.


 -d 192.168.1.0/24 를 -o br-lan 으로,  -s 192.168.1.0/24 를 -i br-lan  으로 바꾸어 쓸 수 없습니다. (br-lan은 OpenWRT의 내부 LAN 영역을 지칭하는 디바이스명입니다.) 이유는 확실하지 않지만, 일단 br-lan 영역에 패킷이 들어오면, 공유기의 기본 기능으로 인하여, 패킷이 인터넷으로 포워딩되는 것 같습니다.

개인적으로는 'br-lan' 이라는 이름보다는 IP 주소를 명시적으로 사용하는 것이 직관적이라고 생각됩니다.

Posted by 훅크선장
, |