반응형

ssl 설치시 20220407이란 키워드는 작성자가 임의로한 문자이므로 수정해도 무관함.

# haproxy 다운
yum install -y haproxy

# ssl 다운 
openssl genrsa -des3 -out ssl_20220407.key 2048
openssl req -new -key ssl_20220407.key -out ssl_20220407.csr
openssl rsa -in ssl_20220407.key -out ssl_20220407_nopass.key
openssl x509 -req -days 365 -in ssl_20220407.csr -signkey ssl_20220407_nopass.key  -out ssl_20220407.crt
openssl pkcs12 -export -in ssl_20220407.crt -inkey ssl_20220407.key -out ssl_20220407.p12 -name tomcat

# pem파일 생성 (생성하고 싶은 위치에 생성하세요)
cat  ssl_20220407_nopass.key ssl_20220407.crt > ./ssl_20220407.pem

# 설정파일 수정
vi /etc/haproxy/haproxy.cfg

pem 경로를 아까 생성한 대로 입력해준다.

vi 로 열었던것을 캡처사진과 같이 추가해준다.

 

그리고나서 사용할 톰캣 server.xml을 열고

위에서 ssl 설치시 생성했던 p12 파일은 경로포함해서 keystoreFile에 넣고 저장

 

keystorePass는 설치시 등록했던 비밀번호이므로 해당하는 정보를 입력한 후

 

다른 정보들은 그대로 위 캡처본과 같이 입력하고 저장한다.

 

마지막으로 톰캣을 실행한 후 (톰캣 bin/startup.sh 파일 실행)

 

haproxy 재시작한다. ( systemctl restart haproxy)

 

netstat -nptl | grep 443 의 결과가 아래와 같이 나오면 브라우저에서 https가 적용됬는지 확인해보자

 

만약에 포트가 안뜬다면 443 포트를 추가한다

firewall-cmd --permanent --zone=public --add-port=443/tcp

이렇게 추가 하게 되면 /etc/firewalld/zones/public.xml 여기서 확인하는데 추가 한뒤에

 

꼭 반드시 반드시 firewall-cmd --reload 방화벽 재시작을 해야한다.

 firewall-cmd --reload

혹시 

2022.04.07 - [개발/오류] - Setting tune.ssl.default-dh-param to 1024 by default, if your workload permits it you should set it to at least 2048. Please set a value >= 1024 to make this warning disappear

해당 오류가 나온다면 이전 포스팅을 참고하기

 

openssl 설치 더 상세하게 보고 싶다면 이전 포스팅 참고하기

2022.01.25 - [개발/리눅스] - 리눅스 사설아이피 openssl 설치

반응형
반응형

1. 특정 포트 허용/삭제

 

# 80 번 포트 허용
firewall-cmd --permanent --zone=public --add-port=80/tcp

 

# 80번 포트 삭제

firewall-cmd --permanent --zone=public --remove-port=80/tcp

2. 특정 IP 허용/삭제

# 192.168.0.1 IP 허용
firewall-cmd --permanent --zone=public --add-source=192.168.0.1

# 192.168.0.1 IP 삭제
firewall-cmd --permanent --zone=public --remove-source=192.168.0.1

3. 서비스 허용/삭제
# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --remove-service=http
* /usr/lib/firewalld/services 에 해당 서비스 xml 룰 파일이 존재해야함.

위 명령어들을 적용시키려면 firewall-cmd --reload 명령어로 서비스 재시작.

반응형
반응형

https://hiseon.me/tools/online-ssl-checker/

 

SSL 인증서 확인 사이트 - HiSEON

SSL 인증서 확인 사이트 SSL 인증서 확인 도구 (점검, 테스트, 만료) SSL 인증서 확인 사이트 SSL 연결 체크, SSL 인증서 만료일 확인, SSL 인증서 오류 검사, SSL 오류 해결 등 온라인 SSL 인증서 테스트를

hiseon.me

 

해당사이트에 들어가서

 

 

 

위 textarea에 pem파일 텍스트를 붙여넣고 확인 버튼을 누르면

 

아래에 

 

 

이와 같이 ssl관련 정보들이 나온다.

 

갱신할 ssl 파일들의 만료일을 알 수 있었다.

반응형
반응형
취약점 내용

- 공격자는 권한이 없는 일반 사용자로 접속한 후 polkit* 패키지 내 pkexec* 취약점을 이용해 root 권한을 갖게된다

 

영향을 받는 버전

Polkit 0.120 포함 이전 버전이 설치된 리눅스 서버

 

임시조치 방안

chmod 0755 /usr/bin/pkexec

 

설명

먼저 버전확인을 위해 아래와 같이 명령어를 입력한다.

[root@   ~]# rpm -qa | grep polkit
polkit-0.112-22.el7_7.1.x86_64

 

해당 명령어를 통해 0.112 버전을 확인하고 0.120 이전버전이므로 아래와 같이 한번 더 명령어를 입력

[root@   ~]# rpm -ql polkit-0.112-22.el7_7.1.x86_64
... 
/usr/bin/pkexec
...

/usr/bin/pkexec 파일이 존재함을 확인된다면

 

아래와 같이 순서대로 진행한다.

 

 

위 이미지처럼

 

기존에는 pkexec는 권한이 없는 일반사용자도 해당 파일을 실행할때 일시적으로 소유자의 권한을 얻어 root로 실행가능했다.  -rws

 

취약점 임시조치를 위해 권한 변경으로 인해 chmod 0755 /usr/bin/pkexec

 

일반사용자는 해당 파일을 실행할 수 없도록 수정된다. -rwxr

 

기존의 s는 setuid라고 하며, 이는 실제 실행하고 있는 사용자가 root소유자 권한으로 실행할 수 있는 권한을 갖는다

 

반응형
반응형

ssl_1 은 내가 하고싶은 이름이므로, 사용하고싶은 명칭을 쓰면 됨

 

[user@localhost ~]$ openssl genrsa -des3 -out ssl_1.key 2048
Generating RSA private key, 2048 bit long modulus
..........+++
...........................................................................................+++
e is 65537 (0x10001)
Enter pass phrase for ssl_1.key:
# 비밀번호입력
Verifying - Enter pass phrase for ssl_1.key:
# 비밀번호 재입력


[user@localhost ~]$ openssl req -new -key ssl_1.key -out ssl_1.csr
Enter pass phrase for ssl_1.key:
# 위에서 비밀번호입력한 비밀번호 입력
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:KR
State or Province Name (full name) []:Seoul
Locality Name (eg, city) [Default City]:GangNam
Organization Name (eg, company) [Default Company Ltd]:회사명
Organizational Unit Name (eg, section) []:제품명
Common Name (eg, your name or your server's hostname) []:사설아이피입력
Email Address []:이메일주소

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:비밀번호
An optional company name []:
[user@localhost ~]$ openssl rsa -in ssl_1.key -out ssl_1_nopass.key
Enter pass phrase for ssl_1.key:
writing RSA key
[user@localhost ~]$ openssl x509 -req -days 365 -in ssl_1.csr -signkey ssl_1_nopass.key  -out ssl_1.crt
Signature ok
subject=/C=KR/ST=Seoul/L=GangNam/O=회사명/OU=제품명/CN=사설아이피/emailAddress=이메일주소
Getting Private key
[user@localhost ssl]$ openssl pkcs12 -export -in ssl_1.crt -inkey ssl_1.key -out ssl_1.p12 -name tomcat
Enter Export Password:
Verifying - Enter Export Password:

-- ========================
[user@localhost ssl]$ ll

-rw-rw-r--. 1 user user 1326  1월 11 11:18 ssl_1.crt
-rw-rw-r--. 1 user user 1102  1월 11 11:06 ssl_1.csr
-rw-rw-r--. 1 user user 1743  1월 11 10:53 ssl_1.key
-rw-rw-r--. 1 user user 1675  1월 11 11:18 ssl_1_nopass.key
-rw-rw-r--. 1 user user 2594  1월 11 12:16 ssl_1_nopass.p12
[user@localhost ssl]$

 

위에서부터 순서대로 하면 된다.

 

근데 이건 openssl이라 톰캣 실제 운영할떄 구매해서 사용하는 ssl이랑 설정이 조금 다르다

 

우선 톰캣 server.xml 변경할 것 (설치한 ssl을 443포트로 사용할 것이라는 가정하에)

 

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
port="443" SSLEnabled="true" maxThreads="200"
    scheme="https" secure="true"
    keystoreFile="p12 경로"
    keystorePass="p12 비밀번호"
    keystoreType="pkcs12"
    clientAuth="false"
    sslProtocol="TLS" />

 

그다음 톰캣 conf 디렉토리 하위에 web.xml에 다음 코드를 추가한다.

 

    <security-constraint>
       <web-resource-collection>
          <web-resource-name>SSL Forward</web-resource-name>
          <url-pattern>/*</url-pattern>
       </web-resource-collection>
       <user-data-constraint>
         <transport-guarantee>CONFIDENTIAL</transport-guarantee>
      </user-data-constraint>
   </security-constraint>

 

톰캣 재기동 후 설치확인한다.

openssl s_client -host 사설아이피 -port 443 -tls1_2

 

설치확인이 됬는데 https가 안떠서 확인해보니 포트사용중이긴하나 방화벽에서 허용된 포트가 아니라 안뜨는거엿음.

아래443포트추가후 완료

 

 $ 443포트 추가
 firewall-cmd --permanent --zone=public --add-port=443/tcp
 # 반드시 재시작 필요
 firewall-cmd --reload

 

다음 포스팅에선 openssl 적용한 후 haproxy적용하는 방법을 적어봐야지

2022.04.07 - [개발/리눅스] - openssl 적용한 후 haproxy적용하는 방법

반응형
반응형

 

find ./ -name 'log4j.proper*'

 

log4j.propertise파일을 찾는다

 

결과는

 

./***-apache-tomcat-8.0.45/webapps/***/WEB-INF/classes/log4j.properties

 

이런식으로 나오게 되면 해당 log4j.propertise 파일을 확인한다.

 

vi ./***-apache-tomcat-8.0.45/webapps/***/WEB-INF/classes/log4j.properties

 

vi 편집기로 해당 파일을 확인한다.

 

log4j.rootCategory=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{2}:%L - %m%n log4j.category.org.springframework.beans.factory=DEBUG

 

ConsoleAppender을 사용하고 있어 CVE-2021-4104이슈(JMSAppeder사용하는 경우 이슈) 해당없음 확인함.

 

CVE-2021-4104 관련 링크

https://www.cve.org/CVERecord?id=CVE-2021-4104

반응형
반응형

몇일전 log4j 관련해서 취약점이 이슈가 되면서 해당 취약점에 대해 알아보게 되었다.

 

우선 이슈가 되고있는 해당 취약점은 log4j의 버전이 2.x.x부터 2.15.0 미만인 경우에 해당한다고해서

 

만약 이 구간에 해당한다면 권고 버전인 2.15.0으로 log4j를 업데이트 진행해야한다. (단, java8버전이 필요) 

 

java7버전의 마지막 지원되는 버전이 2.12.1이라고한다.

 

그래서 프로젝트들의 log4j 버전을 먼저 확인하게 되었다.

 

우리는 메이븐을 사용하고 있고 pom.xml을 뒤져봐도 되지만

 

귀찮기도하고 한눈에 보기위해 간단하게 명령어를 쳐서 log4j jar 경로를 확인했다.

 

 find ./ -name 'log4j*.jar'

 

해당 명령어를 치게 되면, 내가 있는 위치 기준으로 관련파일들을 찾게 되고

 

아래와 같은 형태로 나온다.

 

./apache-tomcat-8.0.32/webapps/hyperic-sigar-1.6.4/sigar-bin/lib/log4j.jar
./apache-tomcat-8.0.32/webapps/WEB-INF/lib/log4j-1.2.17.jar

 

find 명령어가 아닌 다른방법으로는 log4j jar 파일경로를 새 파일에 저장하는 방법

 

find / -name “log4j-1.*.jar” > RESULT_log4j.txt; find / -name “log4j-core-2.*.jar” >> RESULT_log4j.txt
cat RESULT_log4j.txt

 

 

jar의 버전을 보면 log4j는 1.2.17으로 관련 취약점에 해당사항 없음으로 확인하였다. (pom.xml도 참고)

 

버전이 낮은 버전이라 추후 권고버전으로 업데이트가 필요할 듯 하다.

 

또 다른 이슈로  JMS Appender 사용 여부를 확인하는 방법

 

jar -tf ./apache-tomcat-8.0.45/webapps/WEB-INF/lib/log4j-1.2.17.jar | grep JMSAppender

 

반응형
반응형

서버 로그에 java.net.NoRouteToHostException: 호스트로 갈 루트가 없음

라는 오류가 찍힘. 

 

혹시 접속정보가 잘못 됬나 싶었는데 그것도 아님. 로그인 결과도 성공임 (loginCheck이 true)

FTPClient ftpClient = new FTPClient();

ftpClient.connect(String hostname, int port);

Boolean loginCheck =  ftpClient.login(String username, String password)

 

많은 삽질끝에 어이없게 방화벽 문제였다.

 

https://docs.oracle.com/javase/8/docs/api/

 

Java Platform SE 8

 

docs.oracle.com

api를 뒤져보니

 

public class NoRouteToHostException
extends SocketException

Signals that an error occurred while attempting to connect a socket to a remote address and port. Typically, the remote host cannot be reached because of an intervening firewall, or if an intermediate router is down.

 

번역 : 소켓을 원격 주소 및 포트에 연결하는 동안 오류가 발생했음을 알립니다. 일반적으로 간섭하는 방화벽 때문에 또는 중간 라우터가 다운된 경우 원격 호스트에 연결할 수 없습니다.


해결방법

 

방화벽 상태를 보니 켜져있다(최근에 이 서버 재기동하면서 방화벽이 자동으로 켜진듯)

# systemctl status firewalld

 

방화벽을 stop하고, 재부팅해도 활성화 되지 않도록 설정함.

# systemctl stop firewalld

# systemctl mask firewalld

 

 

반응형

+ Recent posts