728x90

우분투에서는 기본적으로 방화벽이 ufw 이다.

이는 iptables를 좀 더 쉽게 설정할 수 있도록 한 것인데 간단한 방화벽 구성에는 문제가 없지만 수준높은 방화벽구성에는 iptables 룰을 직접 사용해야 한다.

참고 : 우분투 UFW help 가이드 

ufw 사용법

ufw 는 기본설정법에 대하여 알아보자

ufw 활성화/비활성화

ufw는 기본 비활성화 상태이기에 이를 활성화 한다.

$ sudo ufw enable


ufw 비활성화

$ sudo ufw disable

ufw 상태 확인

$ sudo ufw status verbose

ufw 기본 룰

ufw에 설정되어 있는 기본 룰은 아래와 같다. 

들어오는 패킷에 대해서는 전부 거부(deny)

나가는 패킷에 대해서는 전부 허가(allow) 


- 기본 룰 확인

$ sudo ufw show raw


- 기본 룰 변경

$ sudo ufw default deny

( 기본 정책 차단 )

$ sudo ufw default allow

( 기본 정책 허용 )

ufw 허용과 차단

- ufw 허용 

$ sudo ufw allow <port>/<optional: protocal>


예) ssh 포트 22번 허용

$ sudo ufw allow 22

( tcp/udp 22번 포트를 모두 허용 )

$ sudo ufw allow 22/tcp

( tcp 22번 포트만을 허용 - ssh는 tcp 22번 포트만 허용하는게 정답 )

$ sudo ufw allow 22/udp

( udp 22번 포트만을 허용 )


- ufw 거부

$ sudo ufw deny <port>/<optional: protocol>


예) ssh 포트 22번 거부

$ sudo ufw deny 22

( tcp/udp 22번 포트를 모두 거부 )

$ sudo ufw deny 22/tcp

( tcp 22번 포트만을 거부 )

$ sudo ufw deny 22/udp

( udp 22번 포트만을 거부 )

ufw 룰의 삭제

ufw deny 22/tcp 설정이 되어있다고 가정

$ sudo ufw delete deny 22/tcp

service 명을 이용한 설정

/etc/services 에 지정되어 있는 서비스명과 포트를 이용해 ufw를 설정할 수 있다.


- 서비스명 보기

$ less /etc/services


- 서비스명으로 허용

$ sudo ufw allow <service name>


예) ssh 서비스

$ sudo ufw allow ssh

$ sudo ufw deny ssh

ufw 로그 기록

$ sudo ufw logging on

$ sudo ufw logging off

Advanced Syntax

문법을 확장하여 목적지 주소와 포트, 프로토콜등을 지정할 수 있다.

특정한 IP 주소 허가/거부

 특정한 IP주소 허용

$ sudo ufw allow from <ip address>


예) 192.168.0.100 주소 허용

$ sudo ufw allow from 192.168.0.100

( IP 주소192.168.0.100 에서만 접속이 가능해진다. )

$ sudo ufw allow from 192.168.0.0/24

( 네트워크 단위로 지정하여 같은 네트워크 상에 있는 컴퓨터들은 접속가능해진다. )


특정 IP 주소와 일치하는 포트 허용

$ sudo ufw allow from <ip address> to <protocol> port <port number> 


예) 192.168.0.100 주소와 포트, 프로토콜 허용

$ sudo ufw allow from 192.168.0.100 to any port 22

( 192.168.0.100 IP주소의 포트 22번 any - 모든 프로토콜 허용 )


특정 IP 주소와 프로토콜, 포트 허용

$ sudo ufw allow from <ip address> to <protocol> port <port number> proto <protocol name>


예) 192.168.0.100 주소와 tcp 프로토콜 22번 포트 허용

$ sudo ufw allow from 192.168.0.100 to any port 22 proto tcp


위의 예제들에서 allow 대신 deny를 입력하면 거부가 된다.

ping (icmp) 허용/거부

ufw 기본설정은 ping 요청을 허용하도록 되어있다.

$ sudo vi /etc/ufw/before.rules

 # ok icmp codes

-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT

-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT

-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT

-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT

-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT


위 코드들의 ACCEPT 부분을 모두 DROP으로 변경하거나 삭제하면 ping 요청을 거부하게 된다.

ufw numbered rules

ufw 룰들에 숫자를 붙여서 볼 수 있다. 이를 이용해 룰에 수정이나 삭제, 추가를 할 수 있다.

ufw number 보기

$ sudo ufw status numbered

ufw numbered 수정

$ sudo ufw delete 1

$ sudo ufw insert 1 allow from <ip address>


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

나의 방화벽 정책

$ sudo ufw enable

$ sudo ufw allow from 192.168.0.3 to any port 22 proto tcp

$ sudo ufw allow 123/udp

$ sudo ufw allow 80/tcp

$ sudo ufw allow 3306/tcp

$ sudo ufw status




출처 : http://webdir.tistory.com/206

Posted by 앗뜨거
,
728x90

특정 OS에서 톰캣을 구동시에 request.getRemoteAddr()을 호출하면 IPv6 주소를 리턴하는 경우가 있는데

이를 IPv4로 받으려면 -Djava.net.preferIPv4Stack=true 옵션을 넣어줘야 합니다.


[이클립스 설정]

1. Run - Run Configurations 메뉴 선택

2. Apache Tomcat 하위에 설정하고자 하는 톰캣서버 선택

3. Arguments 탭 선택

4. VM arguments 젤 뒤에 -Djava.net.preferIPv4Stack=true 옵션 추가

5. Apply


[톱캣 설정]

1. 톰캣이 설치되어 있는 ROOT → bin → catalina.bat를 에디터로 열기

2. set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG% 뒤에 위와 같이 옵션을 추가 합니다.



출처 : http://tskwon.tistory.com/272

Posted by 앗뜨거
,
728x90

웹 개발을 하다보면 접속하는 사용자의 정보를 확인하기 위해서 CLIENT IP를 수집하는 경우가 있습니다.
하지만 접속하는 클라이언트가 PROXY SERVER를 사용하거나, 내부적으로 LOAD BALANCER를 하고 있다면 접속하는 클라이언트의 실제 IP를 수집하는 것이 아니라 웹 서버에 접속하는 바로 직전의 IP를 수집하게 될 것입니다.

그렇다면 그 정보는 정확한 정보가 아닌 쓰레기 정보라고 할 수 있겠죠?
그래서 접속하는 클라이언트의 실제 IP를 수집하는 방법을 설명 하려고 합니다.

먼저 보편적인 클라이언트 IP를 수집하는 방법입니다.

그렇다면 PROXY SERVER 또는 LOAD BALANCER를 거쳐나온 클라이언트의 IP는 어떻게 구할까요?

대부분의 이런 경우에는 CLIENT IP가 없어지는 것이 아니라 Request의 헤더에 X-FORWARDED_FOR라는 키워드로 정보를 남겨 놓는다고 합니다. 그래서 자바내의 로직을 처리하실 때는 다음과 같이 하시면 됩니다.

위의 자료는 STCreative에서 개발을 하면서 겪었던 일을 기반으로 작성된 자료입니다.
모두 100%정확하다는 편견을 버려주십시요.
확인해 보시고 에러가 발생한다면 디버깅과 함께 해결 방법을 적어주시면 수정하도록 하겠습니다.

출처 : http://blog.stclab.co.kr/?p=6




메소드로 구현 해 놓기


public String getClientIP(HttpServletRequest request) {


    String ip = request.getHeader("X-FORWARDED-FOR"); 

    

    if (ip == null || ip.length() == 0) {
        ip = request.getHeader("Proxy-Client-IP");
    }


    if (ip == null || ip.length() == 0) {
        ip = request.getHeader("WL-Proxy-Client-IP");  // 웹로직
    }


    if (ip == null || ip.length() == 0) {
        ip = request.getRemoteAddr() ;
    }

    

    return ip;

}

Posted by 앗뜨거
,