지돌이의 블로그 입니다!


인터넷 ----- (eth0, 1.2.3.4)라우터머신(eth1, 10.0.0.1/24) ----- (10.0.0.2,3)방화벽머신(10.1.0.2,3/24) ---- 서버넷(10.1.0.0/24)



라우터머신에서 

# ip route add 10.1.0.0/24 nexthop via 10.0.0.2 dev eth1 weight 1 nexthop via 10.0.0.3 dev eth1 weight 1

Health 체크해야 하는데.. 따로 프로그램 개발해보려고 한다.


방화벽머신에서

sysctl에 net.ipv4.ip_forward=1추가

FORWARD 룰 추가


:INPUT ACCEPT [85585:5846741]

:FORWARD DROP [0:0]

:OUTPUT ACCEPT [151412:23960411]

-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -i eth0.101 -o eth0.50 -m conntrack --ctstate NEW -j ACCEPT


그리고 Snort등 IDS/IPS설치



서버에서 (젤루 복잡합..ㅠㅠ)

1. /etc/iproute2/rt_tables 에

 101 fw1

 102 fw2

추가

2. 라우트 테이블에 추가

# ip route add default table fw1 via 10.1.0.2 dev eth0

# ip route add default table fw2 via 10.1.0.3 dev eth0
# ip rule add from all fwmark 101 lookup fw1
# ip rule add from all fwmark 101 lookup fw1

3. iptables에 추가
# iptables -t mangle -A PREROUTING -m mac --mac-source 11:11:11:11:11:01 (fw1 MAC주소) -j MARK --set-mark 101
# iptables -t mangle -A PREROUTING -m mac --mac-source 11:11:11:11:11:02 (fw2 MAC주소) -j MARK --set-mark 102
# iptables -t mangle -A PREROUTING -j CONNMARK --save-mark



Comment +0

OpenWRT공유기 여러대의 무선랜을 한번에 관리하고자 하여

OpenWRT에서 사용할 수 있는 Wireless LAN Controller Opensource을 찾아보다가

OpenWISP2라는 것을 알게 되어 설치해 보았습니다.


그런데 그냥 패키지 하나 설치하거나 그런게 아니고.. 저에겐 처음보는 생쇼한 방식이라 설치하는데 좀 어려움이 있었습니다.

OpenWISP는 ansible라는 것을 통해 SSH로 서버에 접속해서 OpenWISP구동에 필요한 모든 것을 알아서 설치해 줍니다.

(편하지만 다른 말로는 보안에 민감한 분들에게는 꺼림직 할 수 있을거 같습니다.)


쨋든 docker에 한번에 설치할 수 있는 방법입니다.


1. 일단 DB가 필요한데 저는 MySQL을 사용하였습니다. OpenWISP을 위한 DB와 사용자 계정을 만드시고

(기본적으로 OpenWISP는 sqlite으로 구동되는데 docker에서 사용하려면 MySQL같은 DB서버가 적합합니다.)


2.

https://github.com/jc-lab/openwisp2-controller-docker-compose

위의 git을 받으셔서

 - work/hostname 에 사용하실 openwisp 도메인을 입력하시고

 - work/playbook.yml에서 db관련 정보를 세팅하시고 추가로 필요하신 세팅이 있으시면 입력하시면 됩니다.


3. docker-compose up 을 통해 실행합니다!


끄읕....^^


참고로 해당 설정에서 OpenWISP서버 Docker IP는 172.20.1.10 으로 만들어집니다.

필요한 포트 (80/443)을 포트포워딩 하시면 되구

Dockerfile에서 기본 root비밀번호 세팅하는 부분이 있으니 보안상 아에 지우셔도 좋고 바꾸셔도 좋습니다~


커뮤니티 글 : https://cafe.naver.com/openthedevice


Comment +0

2007년 이후 개발된 리눅스 커널의 모든 버전 (Linux Kernel 2.6.11 이후)에서 발생하는

매우 심각한 취약점인 Dirty Cow가 발견되었고 지지난주 정도에

레드햇, 데비안, 우분투, 젠투, 수세 등의 리눅스 배포판에는 이미 패치되었다고 합니다.


안드로이드, 웹호스팅 등에서 매우 심각한 위험을 초래할거 같습니다..


헐... 저도 제 모든 시스템 패치하러 갑니다..


관련 기사 : http://www.ciokorea.com/news/31682

관련 정보 : https://bugzilla.redhat.com/show_bug.cgi?id=1384344#c13 (패치되지 않은 시스템에서 취약점을 임시로 완화할 수 있는 방법)

안랩 블로그(공격 예시) : http://blog.alyac.co.kr/853


kernel.org 패치 : https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=19be0eaffa3ac7d8eb6784ad9bdbc7d67ed8e619


---------- 지금까지 찾은 패치된 커널 버전 정보 ----------


http://linux.softpedia.com/blog/important-centos-7-linux-kernel-security-update-patches-dirty-cow-bug-509637.shtml

CentOS 7 : kernel-3.10.0-327.36.3.el7.x86_64

그리고 Linux kernel 3.10.104 LTS maintenance release.


* CentOS에서 3.10.0-327.3.1.el7.x86_64 버전 취약점 공격 성공 확인함


Raspberry Pi : raspberrypi-kernel armhf 1.20161020-1 (2016.11.01 현재 패치된 최신버전)



Comment +0

아... Apache 에다가 Tomcat연동은 처음이라서 이틀동한 해멨네요..ㅠㅠ


Note 1.

 httpd.conf 에서의 Include 순서 주의!

 

 저는 httpd.conf 맨 아래에 Include conf.d/*.conf 을 써놓고 conf.d안의 모든 *.conf파일을 인클루트 하도록 해놓습니다.

 그리고 jk.conf에 jk관련 설정을 넣어놓고 httpd-vhosts.conf 에 가상호스트 설정을 넣어놓았습니다.

 그런데 도저히 가상 호스트에 jk가 적용되지 않았었는데... 그 이유가 바로 "순서" 때문이었습니다.

 jk을 먼저 인클루트 해야 LoadModule을 하는데 순서가 반대가 되버린거죠...

 그래서 지금은 10-jk.conf 50-vhosts.conf 이렇게 파일이름을 바꿔 인클루트되는 순서를 정해놓았습니다.


Note 2.

 아파치 설정 파일 내용


10-jk.conf


LoadModule jk_module modules/mod_jk.so

<IfModule jk_module>

    JkLogFile        /var/log/httpd/jk-module.log

    JkShmFile        /var/run/httpd/jk-module.shm

    JkLogLevel       info

    JkWorkersFile    conf.d/jk/workers.properties

</IfModule>



conf.d/jk/workers.properties


workers.tomcat_home=/usr/local/tomcat

workers.java_home=/usr/local/java/bin/java

ps=/

worker.list=worker1

worker.worker1.port=8009

worker.worker1.host=localhost

worker.worker1.type=ajp13

worker.worker1.lbfactor=1



50-vhosts.conf

<VirtualHost *:80>
    ServerAdmin webmaster@email
    DocumentRoot "/www-directory"
    ServerName domain.com
    ServerAlias www.domain.com
    ErrorLog "/var/log/httpd/www.domain.com-error.log"
    CustomLog "/var/log/httpd/www.domain.com-access.log" common
    <IfModule jk_module>

        JkMount /*.jsp worker1
        JkMount /*.do worker1

    </IfModule>
    <Directory "/www-directory">
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>


Note 3.
 tomcat에서도 설정이 필요합니다.

tomcat의 server.xml에 추가

      <Host name="domain.com" appBase="webapps"

        unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

        <Alias>www.domain.com</Alias>

        <Context path="" reloadable="true" docBase="/www-directory" debug="0"/>

      </Host>



이런식으로 하니 잘 되네요~

Comment +0

[원글]

http://blog.alex.org.uk/2010/09/05/adding-sql-support-to-isc-dhcpd/

의 내용입니다.



dhcpd 을 MySQL으로 관리하고 싶어서 찾아보다~ 이런 좋은것을 발견했네요!

지금 적용중입니다.ㅎ


그런데 이게 구버젼이라 오류가 납니다.

dhcp-4.3.3 버전에서 작동하는 patch 파일을 만들어 첨부합니다.


libdbi-0.9.0 버전 미만용 (_r 함수 사용 X)

dhcp-4.3.3_with-dbi.patch


libdbi-0.9.0 버전 이상용 (_r 함수 사용. 이전의 함수들은 deprecated 됨.)

dhcp-4.3.3_with-dbi-0.9.0.patch


dhcp-4.3.3을 압축풀고


dhcp-4.3.3]$ patch -p1 < dhcp-4.3.3_with-dbi.patch


이런식으로 패치한 뒤


aclocal

libtoolize --copy --force

autoconf

autoheader

automake --foreign --add-missing --copy


을 하시고 

./configure 에 --with-dbi 옵션 추가 후 사용하심 됩니다~



* 아직 글쓰는중...

Comment +0

2015.06.16. 00:22



CentOS 6.6 커널버전2.6.x을 사용하면서 NFS서버를 사용하기 위해

/etc/exports 파일에 no_root_squash,no_all_squash 옵션을 추가했는데도

클라리언트쪽에서 모든 파일들의 owner uid,gid가 4294967294 으로 되어버리는 문제...


해결방법 -> 커널 업그레이드...ㅎ

그렇게 해맸었는데 결론은 커널이네요...ㅎ

elrepo-kernel에서 kernel-ml을 설치하고 설정했더니 잘 됩니다~^^


[elrepo kernel 설치법...]

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

# rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm

# yum install --enablerepo=elrepo-kernel install kernel-ml

그리고...

/boot/grub/menu.lst의 default을 수정해 줍니다.

Comment +0

2015.05.30. 12:13



우와... 성공했네요.ㅋㅋ

왜이리 honeyd 에 대한 한국어 정보가 없을까요...ㅠㅠ


저는 CentOS 6.6 (i384 / x86_64) 버전에서 설치했습니다.

******

x86_64 (64bit) 버전에서는 webserver 가 작동하지 않습니다!!!

webserver에 접속하면 세그멘테이션 오류가...

꼭@@@@@@@@@@ 32bit에서 사용하세요!


honeyd을 설치/구동하기 위해 미리 설치해야할 프로그램과 라이브러리들이 있습니다.

 [root@honeypot] # yum install make gcc gcc-c++ libpcap-devel libevent-devel libedit-devel zlib-devel autoconf automake perl python-devel

 dnet 설치 (아래 URL은 제 Dropbox URL입니다. dnet 공식홈페이지에서도 다운받으실 수 있습니다.)

[admin@honeypot ~/downloads]$ wget "https://www.dropbox.com/s/jh7lz8bnnfx1gdy/libdnet-1.11.tar.gz?dl=1" -O libdnet-1.11.tar.gz

[admin@honeypot ~/downloads]$ tar xf libdnet-1.11.tar.gz

[admin@honeypot ~/downloads]$ cd libdnet-1.11

[admin@honeypot ~/downloads/libdnet-1.11]$ ./configure --prefix=/usr

* 64bit 운영체제일 경우   --libdir=/usr/lib64  추가하세요

[admin@honeypot ~/downloads/libdnet-1.11]$ make

[admin@honeypot ~/downloads/libdnet-1.11]$ sudo make install


아래.. .안해도 됩니다. configure 수정했어요

그리고 dnet을 dumbnet으로 인식시켜 주기 위해서...

[root@honeypot ~]# cd /usr/bin

[root@honeypot /usr/bin]# ln -s dnet-config dumbnet-config

[root@honeypot ~]# cd /usr/include

[root@honeypot /usr/include]# ln -s dnet.h dumbnet.h

[root@honeypot ~]# cd /usr/lib

[root@honeypot /usr/include]# ln -s libdnet.1 libdumbnet.1

[root@honeypot /usr/include]# ln -s libdnet.1.0.1 libdumbnet.1.0.1

[root@honeypot /usr/include]# ln -s libdnet.a libdumbnet.a


honeyd 을 실행하려면 farpd 또한 필요합니다.

(이거 구하고 CentOS에서 설치하기 너무 힘들었어요..ㅠㅠ 더 좋은 방법 있으신 분은 알려주세요...

configure 도 패치하고... 패치파일 수정했습니다.)

[admin@honeypot ~/downloads]$ wget "http://www.citi.umich.edu/u/provos/honeyd/arpd-0.2.tar.gz"

[admin@honeypot ~/downloads]$ wget "https://www.dropbox.com/s/gx0iqe2jlzhnxjd/arpd-0.2.diff?dl=1" -O arpd-0.2.diff

[admin@honeypot ~/downloads]$ tar xf arpd-0.2.tar.gz

[admin@honeypot ~/downloads]$ cd arpd

[admin@honeypot ~/downloads]$ patch -p1 < ../arpd-0.2.diff

[admin@honeypot ~/downloads]$ ./configure --prefix=/usr --with-libevent=/usr --with-libdnet=/usr

[admin@honeypot ~/downloads/farpd-0.2]$ make

[admin@honeypot ~/downloads/farpd-0.2]$ sudo make install

[admin@honeypot ~/downloads/farpd-0.2]$ cd /usr/sbin

[admin@honeypot ~/downloads/farpd-0.2]$ sudo ln -s arpd farpd

$ sudo wget "https://www.dropbox.com/s/qpmg44jc6zhxmuu/farpd.sysconfig?dl=1" -O /etc/sysconfig/farpd


이제 honeyd 을 설치합니다.

[admin@honeypot ~/downloads]$ wget http://www.honeyd.org/uploads/honeyd-1.5c.tar.gz

[admin@honeypot ~/downloads]$ tar xf honeyd-1.5c.tar.gz


============================================================

* 64bit 운영체제일 경우

[admin@honeypot ~/downloads]$ wget "https://www.dropbox.com/s/7chlrq9n7cyhb3n/honeyd-1.5c.x86_64.diff?dl=1" -O honeyd-1.5c.x86_64.diff

[admin@honeypot ~/downloads]$ cd honeyd-1.5c

[admin@honeypot ~/downloads/honeyd-1.5c]$ patch -p1 < ../honeyd-1.5c.x86_64.diff

[admin@honeypot ~/downloads/honeyd-1.5c]$ ./configure --prefix=/usr --with-python --libdir=/usr/lib64

============================================================

* 32bit 운영체제일 경우

[admin@honeypot ~/downloads]$ cd honeyd-1.5c

[admin@honeypot ~/downloads/honeyd-1.5c]$ ./configure --prefix=/usr --with-python

============================================================

[admin@honeypot ~/downloads/honeyd-1.5c]$ make

[admin@honeypot ~/downloads/honeyd-1.5c]$ sudo make install

sudo mkdir /var/log/honeyd

sudo chown nobody:nobody /var/log/honeyd

sudo chown nobody:nobody -R /usr/share/honeyd/webserver

$ sudo wget "https://www.dropbox.com/s/80wiouqz1rc0jpv/honeyd.initscript?dl=0" -O /etc/init.d/honeyd

$ sudo chmod +x /etc/init.d/honeyd


============================================================

* 64bit 운영체제일 경우

$ sudo wget "https://www.dropbox.com/s/j8i5gzz052u0u57/honeyd.x86_64.sysconfig?dl=1" -O /etc/sysconfig/honeyd

============================================================

* 32bit 운영체제일 경우

$ sudo wget "https://www.dropbox.com/s/piqt2cnbtecbasd/honeyd.sysconfig?dl=1"  -O /etc/sysconfig/honeyd

============================================================


[admin@honeypot ~/downloads]$ sudo wget "http://www.honeyd.org/contrib/fabian.bieker/honeyd.tgz"

[admin@honeypot ~/downloads]$ sudo tar xf honeyd.tgz -C /usr/share 


sudo wget "https://www.dropbox.com/s/1o373yd52rt21kr/honeyd.conf?dl=1" -O /usr/etc/honeyd.conf


$ sudo vim /usr/etc/honeyd.conf

honeyd.conf 파일은 honeyd.conf.bloat 파일을 수정한 겁니다.

여기에 IP들은 본인의 환경에 맞게 바꾸시면 됩니다.

bind 192.168.93.202 xxxx 이런것은

현재 네트워크에서 사용하지 않는 IP대역을 입력하시면 됩니다.


$ sudo service honeyd start


 service honeyd start

honeyd (을)를 시작 중: Honeyd V1.5c Copyright (c) 2002-2007 Niels Provos

honeyd[12943]: started with -p /usr/share/honeyd/nmap.prints -f /usr/etc/honeyd.conf -i eth0 -l /var/log/honeyd/honeyd.log --webserver-address=0.0.0.0 --webserver-port=8000 --webserver-root=/usr/share/honeyd/webserver/htdocs/

Warning: Impossible SI range in Class fingerprint "IBM OS/400 V4R2M0"

Warning: Impossible SI range in Class fingerprint "Microsoft Windows NT 4.0 SP3"

honeyd[12943]: listening promiscuously on eth0: (arp or ip proto 47 or (udp and src port 67 and dst port 68) or (ip )) and not ether src 00:0c:29:6f:ed:50

honeyd[12943]: HTTP server listening on 0.0.0.0:8000

honeyd[12943]: HTTP server root at /usr/honeyd/webserver/htdocs/

Honeyd starting as background process

                                                           [  OK  ]

farpd 시작 중:  arpd[12947]: listening on eth0: arp  and not ether src xx:xx:xx:xx:xx:xx

                                                           [  OK  ]


이런식으로 나오면 성공입니다~!!

 



honeyd의 웹서버에 접속해 보면?





 

이렇게 상태가 나옵니다


네트워크 연결 테스트

 

192.168.93.165는 honeyd을 설치한 서버입니다.

192.168.93.202 은 honeyd.conf에서 SuSE linux 환경을 만들어 준 것입니다.


잘 접속됩니다.ㅎㅎ

 

Comment +0

2014.10.21. 23:27



 MYSQL이 가끔(또는 시도때도 없이...) 죽거나 실행이 안될때가 있다면...

제 경험상으로 이건 거의 메모리 부족으로 인한 겁니다.

 

저는 막 mysqld가 계속 주기적으로 죽어버리고...

어쩔땐 mysqld서비스를 실행하면

mysqld_safe mysqld from pid file /var/run/mysqld.pid ended.

이러면서 실행도 안되고... 그런 증상이었습니다.

메모리 부족이란 생각은 해서 innodb_buffer_pool_size도 팍 줄여봤는데도 계속 그러더라구요

그렇다고 top로 확인해보면 그렇게 부족한 것 같지도 않구...

그래서 우선 cron에서 1분마다 체크해서 프로세스가 죽으면 다시 서비스를 시작하게 해서

임시방편으로 쓰다가... 서버에서 작업을 하니 이젠 계속 죽어버리더라구요...

그래서 swap을 추가했습니다. 그러니 잘 되네요...ㅋ

(저는 swap을 별로 안좋아 해서 잘 안씁니다)

 

쨋든.. 결론적으로

swap을 사용할 때 얼마나 사용하는지를 체크해서 그만큼 메모리를 추가해 주었습니다.

Comment +0

2014.10.09. 00:50



iptables 으로 DNAT (Port Forwarding)을 구현하던 중 클라이언트에서 서버에 접속을 하면

서버에서 받는 패킷의 Source IP가 게이트웨이(e.g. 192.168.0.1)으로 변해버려서

클라이언트의 실제 IP을 알 수 없는 문제가 발생하였습니다.

 

공유기는 안그러는데 생각하고... 구글링을 좀 해봤는데 못찾겠더라구요.ㅠㅠ

구글에서 알려주는 거랑 똑같이 했는데 안되더군요...

그런데 저는 제 스스로 답을 찾는 곳을 알고있었는데 뻘군데를 보고 있었네요..

제가 제 스스로 '공유기는 안그러는데'생각을 했었는데... 왜 공유기의 Rule는 보지 않았는지..ㅋㅋ

결국 공유기의 iptables 을 보고 해결했습니다.

그런데 제가 잘못된 곳에 초점을 두고 있었습니다.

NAT부분 (POSTROUTING/PREROUTING)가 아닌 FORWARD을 봤어야 했었습니다...

 

wan와 lan 인터페이스가 eth0, eth1이라고 하면

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
이런식으로 하면 Source IP가 변해버립니다.

해결방법은!
iptables -A FORWARD -i eth0 -m conntrack --ctstate DNAT -j ACCEPT
iptables -A FORWARD -i eth1 -m conntrack --ctstate DNAT -j ACCEPT
이렇게 하니 잘 되네요~


Comment +0

2014.05.24. 22:25



아.. 이걸로 몇시간동안 해맨거 같네요...ㅠㅠ

결론은 아주 간단합니다..

 

/proc/sys/net/bridge/bridge-nf-call-iptables 을 1로 설정해 줘야 합니다.

그렇지 않으면 bridge패킷이 net filter 으로 가지 않고 바로 스위칭? 되버리는거 같습니다.

그래서 iptables -L -v 로 확인해보면 FORWARD패킷수가 항상 0으로 나왔었습니다.

 

부팅시 자동으로 적용하기 위해

/etc/sysctl.conf 에

net.bridge.bridge-nf-call-iptables 와 ip6tables, arptables 모두를 1로 설정해주었습니다.

 

이제 잘 되네요~ㅎ

Comment +0