티스토리 뷰
1. Active 모드 사용시 Server 로 전달한 IP/PORT 가 INBOUND 에 등록되어있는지 확인
FTP 는 Control connection 과 Data connection 두 단계로 커넥션이 나뉘어져 있다.
- Control connection : 일반적으로 21번 포트로 FTP 서버에 접속. 인증, 디렉토리 변경, 파일 전송 요청등과 같은 명령을 주고 받기 위한 커넥션
- Data connection : 데이터 또는 디렉터리 리스트를 전송하는데 사용되는 커넥션
Control connection 을 맺은 후에 Data connection 을 맺을때 Active/Passive 모드에 따라서 커넥션을 맺는 주체가 달라진다.
- Active Mode : Client 가 자신의 IP 와 Port 를 FTP 서버에게 전달하면 서버가 Client 로 역방향 Data connection 연결
- Passive Mode : FTP Server 가 Client 에게 IP 와 Port 를 전달하면 Client 가 Server 로 Data connection 연결
Active Mode 를 이용할 경우에, 서버로 전달한 IP/PORT 가 NACL 에 INBOUND 로 등록되어있는지 확인해야한다. 또한, FTP Server 에게 응답을 해야하는데, NACL 은 stateless 이므로 요청에 대한 응답을 보낼때도 OUTBOUND 를 검사하게 된다. 즉, FTP Server 의 ephemeral ip 대역이 NACL OUTBOUND 에 등록되어있는 확인 필요.
2. Passive 모드 사용시 Server 가 전달하는 IP/PORT 가 NACL OUTBOUND 에 등록되어있는지 확인
IP 와 21 번 포트가 NACL OUTBOUND 에 등록되어있어 Control Connection 에 성공했다고 하더라도, Data Connection 을 다시 맺을때 서버가 전달한 IP/PORT 가 NACL OUTBOUND 에 등록되어있지 않다면, Data Connection 연결에 실패할 것이다.
> EPSV
* Connect data stream passively
< 229 Entering Extended Passive Mode (|||10001|)
* Connecting to 10.0.0.1 (10.0.0.1) port 10001
* Trying 10.0.0.1:10001...
* Connected 2nd connection to 10.0.0.1 port 10001
* SSL reusing session ID
Control Connection 이 맺어진 후 로그인에 성공한 후에, Data connection 을 맺기 위하여 서버로 부터 전달 받은 IP (10.0.0.1) 과 PORT (10001) 로 Data connection 을 시도하는것을 볼 수 있다.
만약, 10.0.0.1 과 10001 포트가 NACL OUTBOUND 에서 열러있지 않다면 Data connction 을 맺는데 실패했을 것이다. FTP Server 측과 Data connection 에 사용되는 IP/PORT range 를 확인하여 NACL OUTBOUND 에 등록해야한다.
3. NAT Gateway IP 가 FTP Server ACL 에 등록되어있는지 확인
Pirvate subnet 의 EC2 는 public NAT Gateway 를 통해서 external internat 과 접속할 수 있다. 이때, 요청을 받은 서버측이 바라본 Client 의 IP 는 NAT Gateway 의 IP가 된다. NAT Gateway 의 IP 접속을 서버측이 허용하고 있는지 확인이 필요하다.
부록1) Ephemeral ip 과 NACL OUTBOUDN
외부와 통신을 시도할떄 Client 측의 OS 는 ephmeral port 대역 안에서 해당 통신을 위한 Port 하나를 할당한다.
bash-5.2# netstat
tcp 0 0 localhost:42890 10.0.0.1:10003 ESTABLIHSED
tcp 0 0 localhost:41368 10.0.0.1:21 ESTABLIHSED
tcp 0 0 localhost:41364 10.0.0.1:21 ESTABLIHSED
tcp 0 0 localhost:42036 10.0.0.1:10001 ESTABLIHSED
tcp 0 0 localhost:42892 10.0.0.1:10002 ESTABLIHSED
netstat 명령어의 결과를 보면 10.0.0.1 로의 커넥션을 확인할 수 있는데 Source 측의 Port 가 40000번대로 linux emphermeral port 범위 안에서 할당된 것을 볼 수 있다.
10.0.0.1 서버측에서 응답을 보낼때 4000번대의 Port 로 보내질 것이기 때문에, Stateless 인 NACL INBOUND 에는 linux ephemeral port 대역이 허용되어있어야 EC2 에서 응답을 받을 수 있을 것이다.
'Trouble Shooting' 카테고리의 다른 글
| Spring + Undertow 사용시 Exception 로깅 안됨 (0) | 2024.09.30 |
|---|---|
| CurrentThreadBusy 발생시 ZipFile.open() 에 Thread 가 Block 되어있는 이유 (0) | 2024.06.27 |
| Zookeeper 노드 동작 안함 - Cannot open channel to 2 at election address (0) | 2023.08.02 |
| Logstash Memory 사용량 증가 파악기 (1) | 2021.12.31 |
| [Java] Minor GC 증가 원인 파악기 (feat. Excel WorkBook) (1) | 2021.11.12 |
- Total
- Today
- Yesterday
- circurit breaker
- referencedColumnName
- aurora
- RoutePredication
- custom config data convertion
- rate limit
- Seperate Chaining
- RouteDefinition
- getBoolean
- HashMap
- mariadb-connector-j
- dynamodb
- reative
- notifyAll()
- mariada-connector
- router
- ConcurrentHashMap
- Lazy
- reactor
- msyql-connector-java
- ResultSet
- DyanomoDB
- MariaDB
- AbstractMethodError
- N+1
- wait()
- GlobalFilter
- Flux
- spring cloud gateway
- notify()
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |