NAT ಮಾಡುವ VPN ಗೇಟ್ವೇ ಹಿಂದೆ FTP ಪಟ್ಟಿಗಳು ಏಕೆ ನೇತಾಡುತ್ತವೆ
ಲಾಗಿನ್ ಮತ್ತು PWD ಯಶಸ್ವಿಯಾಗುತ್ತವೆ, ಆದರೆ NAT ಕೇವಲ ಹೆಡರ್ಗಳನ್ನು ಮತ್ತೆ ಬರೆಯುವಾಗ LIST ಮತ್ತು RETR ನಿಲ್ಲುತ್ತವೆ. FTP ಸಹಾಯಕ ಎಲ್ಲಿರಬೇಕು ಮತ್ತು ನಿಷ್ಕ್ರಿಯ ಮೋಡ್ ಅನ್ನು ಹೇಗೆ ಸರಿಪಡಿಸಬೇಕು ಎಂದು ನೋಡಿ.
ಲಾಗಿನ್ ಕೆಲಸ ಮಾಡುತ್ತದೆ, PWD ಕೆಲಸ ಮಾಡುತ್ತದೆ, ನಂತರ LIST ಕ್ಲೈಂಟ್ ಬಿಟ್ಟುಕೊಡುವವರೆಗೆ ಅಥವಾ ಬೇರೆ ಡೇಟಾ ಮೋಡ್ಗೆ ಹೋಗುವವರೆಗೆ ನೇತಾಡುತ್ತದೆ. ಈ ವಿಭಜನೆಯೇ ಸಹಿ: ಪೋರ್ಟ್ 21 ಗೆ ನಿಯಂತ್ರಣ ಸಂಪರ್ಕ ಆರೋಗ್ಯಕರವಾಗಿದೆ, ಆದರೆ ಡೇಟಾ ಸಂಪರ್ಕವು ಇನ್ನೊಂದು ಬದಿ ತಲುಪಲಾಗದ ವಿಳಾಸ ಅಥವಾ ಪೋರ್ಟ್ನಿಂದ ನಿರ್ಮಾಣವಾಗುತ್ತಿದೆ. NAT ಕೂಡ ಮಾಡುವ VPN ಗೇಟ್ವೇ ಹಿಂದೆ ಸಾಮಾನ್ಯ ಅಪರಾಧಿ ಎಂದರೆ ಪೇಲೋಡ್ನಲ್ಲಿ 10.8.0.6 ರಂತಹ ಸುರಂಗ ವಿಳಾಸವನ್ನು ಹೆಸರಿಸುವ FTP ಆಜ್ಞೆ. ಹೆಡರ್ ಅನುವಾದ ಆ ಮೌಲ್ಯವನ್ನು ಎಂದಿಗೂ ಸ್ಪರ್ಶಿಸುವುದಿಲ್ಲ.
ಮುಂದೆ ಬರುವುದು ಆ ಮೌಲ್ಯ ಎಲ್ಲಿಂದ ಬರುತ್ತದೆ, ಮತ್ತು ಯಾವ ಬಾಕ್ಸ್ ಅದನ್ನು ಬದಲಿಸಲು ಅನುಮತಿ ಹೊಂದಿದೆ ಎಂಬುದು.
ಮುರಿಯುವುದು ಪೇಲೋಡ್, ಸುರಂಗವಲ್ಲ
FTP ಡೇಟಾದ ಅಂತ್ಯ ಬಿಂದುವನ್ನು ನಿಯಂತ್ರಣ ಸ್ಟ್ರೀಮ್ನ ಒಳಗೆ ಇಡುತ್ತದೆ. ಸಕ್ರಿಯ ಮೋಡ್ನಲ್ಲಿ ಕ್ಲೈಂಟ್ ತನ್ನದೇ ವಿಳಾಸ ಮತ್ತು ಪೋರ್ಟ್ನೊಂದಿಗೆ PORT ಕಳುಹಿಸುತ್ತದೆ, ಮತ್ತು ಸರ್ವರ್ ಆ ಜೋಡಿಗೆ ಮರಳಿ ಕರೆ ಮಾಡುತ್ತದೆ. ನಿಷ್ಕ್ರಿಯ ಮೋಡ್ನಲ್ಲಿ ಸರ್ವರ್ ಜೋಡಿಯೊಂದಿಗೆ 227 ಉತ್ತರಿಸುತ್ತದೆ, ಮತ್ತು ಕ್ಲೈಂಟ್ ಬದಲಾಗಿ ಅದನ್ನೇ ಕರೆ ಮಾಡುತ್ತದೆ.
ಎರಡೂ ರೂಪಗಳು ಒಂದೇ ರೀತಿಯ ಹೇಳಿಕೆಯನ್ನು ಹೊತ್ತುಕೊಳ್ಳುತ್ತವೆ: ಈ ವಿಳಾಸಕ್ಕೆ, ಈ ಪೋರ್ಟ್ನಲ್ಲಿ ಸಂಪರ್ಕಿಸು. ಕೇವಲ IP ಮತ್ತು TCP ಹೆಡರ್ಗಳನ್ನು ಮತ್ತೆ ಬರೆಯುವ ಸಾಧನ ಹೇಳಿಕೆಯನ್ನು ಹಾಗೆಯೇ ಬಿಡುತ್ತದೆ, ಆದ್ದರಿಂದ ಒಂದು ತುದಿ ಸುರಂಗದ ಇನ್ನೊಂದು ಬದಿಯಲ್ಲಿ ಮಾತ್ರ ಇರುವ ವಿಳಾಸವನ್ನು ತಲುಪಲು ಪ್ರಯತ್ನಿಸುತ್ತಲೇ ಇರುತ್ತದೆ. ನಿಯಂತ್ರಣ ಸಂಪರ್ಕ ಈಗಾಗಲೇ ಆರೋಗ್ಯಕರ ಎಂದು ಘೋಷಿಸಿದ ನಂತರ ಡೇಟಾ ಸಂಪರ್ಕ ನಿಲ್ಲುತ್ತದೆ.
ಮೂರು ಮೋಡ್ಗಳು, ಮೂರು ಪೇಲೋಡ್ಗಳು
ಕೆಳಗಿನ ಕೋಷ್ಟಕ ಯಾವ ಬದಿಗೆ ಕರೆ ಮಾಡಲು ಹೇಳಲಾಗಿದೆ, ಮತ್ತು ಕೇವಲ ಹೆಡರ್ ಬದಲಿಸುವ NAT ಅದರ ಬಗ್ಗೆ ಏನು ಮಾಡಬಹುದು ಎಂಬುದನ್ನು ತೋರಿಸುತ್ತದೆ.
ಕೊನೆಯ ಕಾಲಮ್ ಅನ್ನು ಮೊದಲು ವಿಫಲವಾಗುವ ವಿಷಯ ಎಂದು ಓದಿ. ಸಕ್ರಿಯ ಮೋಡ್ನಲ್ಲಿ ಖಾಸಗಿ ವಿಳಾಸಕ್ಕೆ ಕರೆ ಮಾಡುವುದು ಸರ್ವರ್; ನಿಷ್ಕ್ರಿಯ ಮೋಡ್ನಲ್ಲಿ ಕ್ಲೈಂಟ್; FTPS ನಲ್ಲಿ ಪೇಲೋಡ್ ಸೈಫರ್ಟೆಕ್ಸ್ಟ್ ಆಗಿದ್ದು ಮಧ್ಯವರ್ತಿ ಬಾಕ್ಸ್ಗೆ ಕೆಲಸ ಮಾಡಲು ಇನ್ನೂ ಕಡಿಮೆ ಇರುತ್ತದೆ.
| Mode | Value in the control stream | Who dials whom | Header-only NAT leaves |
|---|---|---|---|
| Active (PORT) | client address and port | server dials the client | a server dialing an unreachable tunnel address |
| Passive (227) | server address and port | client dials the server | a client dialing an address it cannot route to |
| FTPS | the same values, inside TLS | as above | ciphertext, so no rewrite happens at all |
ಅನುವಾದ ನಡೆಯುವಲ್ಲಿಯೇ ಸಹಾಯಕವನ್ನು ಇಡಿ
ಲಿನಕ್ಸ್ನಲ್ಲಿ ಪೇಲೋಡ್ ಮತ್ತೆ ಬರೆಯುವುದನ್ನು nf_conntrack_ftp ಸಹಾಯಕ ಮಾಡುತ್ತದೆ. ಅದು ನಿಯಂತ್ರಣ ಸಂಪರ್ಕವನ್ನು ಗಮನಿಸುತ್ತದೆ, ಮಾತುಕತೆ ನಡೆದ ಪೋರ್ಟ್ ಕಲಿಯುತ್ತದೆ, ಡೇಟಾ ಹರಿವಿಗೆ ನಿರೀಕ್ಷೆ ಸೃಷ್ಟಿಸುತ್ತದೆ ಮತ್ತು NAT ಬಾಕ್ಸ್ನಲ್ಲಿ ಪೇಲೋಡ್ ಒಳಗಿನ ವಿಳಾಸ ಮತ್ತು ಪೋರ್ಟ್ ಅನ್ನು ಮತ್ತೆ ಬರೆಯುತ್ತದೆ. ಅದು ಕ್ಲೈಂಟ್ನ ವಿಳಾಸವನ್ನು ಅನುವಾದಿಸುವ ಸಾಧನದಲ್ಲಿ ಮಾತ್ರ ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಅದನ್ನು ಕ್ಲೈಂಟ್ನಲ್ಲಿ ಅಥವಾ ಹರಿವನ್ನು ಮುಂದಕ್ಕೆ ರವಾನಿಸುವ ರೌಟರ್ನಲ್ಲಿ ಲೋಡ್ ಮಾಡುವುದು ಸೆಷನ್ನಲ್ಲಿ ಏನನ್ನೂ ಬದಲಿಸುವುದಿಲ್ಲ.
ಈ ಮೂರು ಆಜ್ಞೆಗಳು ಮಾಡ್ಯೂಲ್ ಇದೆಯೇ, ಸಂಪರ್ಕಗೊಂಡಿದೆಯೇ, ಮತ್ತು ಸೆಷನ್ ತೆರೆದಿರುವಾಗ ನಿರೀಕ್ಷೆ ಇದೆಯೇ ಎಂಬುದನ್ನು ತೋರಿಸುತ್ತವೆ:
modprobe nf_conntrack_ftp
lsmod | grep nf_conntrack_ftp
conntrack -L expect | grep ftp
ಮಾಡ್ಯೂಲ್ ಲೋಡ್ ಮಾಡುವುದು ಅದನ್ನು ಸಂಪರ್ಕಿಸುವುದಕ್ಕೆ ಸಮವಲ್ಲ. 4.7 ರಿಂದ ಕರ್ನಲ್ಗಳು net.netfilter.nf_conntrack_helper=0 ಜೊತೆಗೆ ಬರುತ್ತವೆ, ಆದ್ದರಿಂದ ಸಹಾಯಕ ಸ್ಪಷ್ಟ ನಿಯಮಕ್ಕೆ ಕಾಯುತ್ತದೆ, ಉದಾಹರಣೆಗೆ iptables -t raw -A PREROUTING -p tcp --dport 21 -j CT --helper ftp. ಸ್ಥಳಾಂತರಣೆಯ ಪ್ರಯತ್ನದ ವೇಳೆ ನಿರೀಕ್ಷೆ ಪಟ್ಟಿ ಖಾಲಿಯಾಗಿದ್ದರೆ, ಪರಿಶೀಲಿಸಬೇಕಾದದ್ದು ಸಂಪರ್ಕ, ಮಾಡ್ಯೂಲ್ ಅಲ್ಲ.
ನಿಷ್ಕ್ರಿಯ ಮೋಡ್: ಸರ್ವರ್ ಏನನ್ನು ಘೋಷಿಸಬೇಕೆಂದು ಹೇಳಿ
ನಿಷ್ಕ್ರಿಯ ಮೋಡ್ ಅನ್ನು ನಿರ್ಧಾರಾತ್ಮಕ ಮಾಡುವುದು ಸುಲಭ, ಏಕೆಂದರೆ 227 ಉತ್ತರದಲ್ಲಿ ಏನನ್ನು ಇಡಬೇಕೆಂದು ಸರ್ವರ್ಗೆ ಹೇಳಬಹುದು. vsftpd ನಲ್ಲಿ ಅದು pasv_address, ಜೊತೆಗೆ pasv_min_port ಮತ್ತು pasv_max_port; ProFTPD MasqueradeAddress ಮತ್ತು PassivePorts ಬಳಸುತ್ತದೆ. ಇವುಗಳನ್ನು ಮೊದಲು ಹೊಂದಿಸಿ, ಏಕೆಂದರೆ ಸರಿಯಾಗಿ ಘೋಷಿಸಿದ ವಿಳಾಸ ಆ ಬದಿಯಲ್ಲಿ ಏನನ್ನೂ ಮತ್ತೆ ಬರೆಯುವ ಅಗತ್ಯವನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ.
ನಂತರ ನಿಖರವಾಗಿ ಆ ಪೋರ್ಟ್ ಶ್ರೇಣಿಯನ್ನು ಗೇಟ್ವೇ ಮೂಲಕ ಹಾದುಹೋಗಲು ಬಿಡಿ, ಉದಾಹರಣೆಗೆ -A FORWARD -i tun0 -p tcp --dport 30000:30100 -j ACCEPT, ನಿಯಮ ಸರ್ವರ್ ಘೋಷಿಸುವುದಕ್ಕೆ ಹೊಂದಿಕೆಯಾಗುವಂತೆ.
ಎರಡೂ ಸೆಟ್ಟಿಂಗ್ಗಳು ಒಪ್ಪಿಕೊಳ್ಳಬೇಕು. 30000-30100 ಘೋಷಿಸಲು ಹೇಳಲಾದ ಸರ್ವರ್, ಗೇಟ್ವೇ 40000-40100 ಗೆ ಅನುಮತಿ ನೀಡಿದರೆ, ಅತ್ಯಂತ ಉಪಯುಕ್ತವಲ್ಲದ ರೀತಿಯಲ್ಲಿ ವಿಫಲವಾಗುತ್ತದೆ: ನಿಯಂತ್ರಣ ಸಂಭಾಷಣೆ ಆರೋಗ್ಯಕರವಾಗಿ ಕಾಣುತ್ತದೆ ಮತ್ತು ಪ್ರತಿ ಡೇಟಾ ಸಂಪರ್ಕವೂ ಸಾಯುತ್ತದೆ. ಬೇರೆ ಏನನ್ನೂ ಡೀಬಗ್ ಮಾಡುವ ಮೊದಲು ಸಂಖ್ಯೆಗಳನ್ನು ಹೋಲಿಸಿ.
ಎರಡು ವೈಫಲ್ಯದ ಸಹಿಗಳು, ಮತ್ತು FTPS ಏನನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ
LIST ನಲ್ಲಿ ನೇತಾಡುವುದು ಸೆಷನ್ನ ಮೊದಲ ಡೇಟಾ ಸಂಪರ್ಕವನ್ನು ಸೂಚಿಸುತ್ತದೆ, ಅಲ್ಲಿ ವಿಳಾಸ ಮತ್ತೆ ಬರೆಯುವುದು ಮತ್ತು ನಿರೀಕ್ಷೆ ಎರಡೂ ಕೆಲಸ ಮಾಡಬೇಕು. ಕೆಲಸ ಮಾಡುವ LIST ನಂತರ RETR ನಲ್ಲಿ ನೇತಾಡುವುದು ಸ್ವತಃ ಸ್ಥಳಾಂತರಣೆಯನ್ನು ಸೂಚಿಸುತ್ತದೆ, ಅಂದರೆ ನಿಷ್ಕ್ರಿಯ ಶ್ರೇಣಿ ಅಥವಾ ಸುರಂಗದ MTU. ಆ ಎರಡನೇ ಸಹಿ ಪೇಲೋಡ್ ಸಮಸ್ಯೆ ಅಲ್ಲ, ಮತ್ತು ಸಹಾಯಕದ ಸೆಟ್ಟಿಂಗ್ಗಳು ಅದನ್ನು ಸರಿಪಡಿಸುವುದಿಲ್ಲ.
TLS ಮೇಲಿನ FTP ಸಹಾಯಕ ಓದುವ ಪೇಲೋಡ್ ಅನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ. ಮಧ್ಯವರ್ತಿ ಬಾಕ್ಸ್ ಡೀಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗದ PORT ಅಥವಾ PASV ಮೌಲ್ಯವನ್ನು ಮತ್ತೆ ಬರೆಯಲಾಗದು, ಆದ್ದರಿಂದ ಉಳಿದ ಆಯ್ಕೆಗಳೆಂದರೆ TLS ಮುಗಿಸುವ ಪ್ರಾಕ್ಸಿ, ಸೀಮಿತ ಶ್ರೇಣಿಯಲ್ಲಿ ತಲುಪಬಹುದಾದ ವಿಳಾಸವನ್ನು ಘೋಷಿಸುವ ಸರ್ವರ್, ಅಥವಾ ಬೇರೆ ಸ್ಥಳಾಂತರಣಾ ಪ್ರೋಟೋಕಾಲ್.
ಪರಿಶೀಲನೆಗಳ ಸಂಕ್ಷಿಪ್ತ ಕ್ರಮ
ಲಕ್ಷಣದಿಂದ ಹೊರಕ್ಕೆ ಕೆಲಸ ಮಾಡಿ. PWD ಯಶಸ್ವಿಯಾದಾಗ LIST ವಿಫಲವಾಗುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸಿ, PORT ಅಥವಾ 227 ಪೇಲೋಡ್ ಒಳಗಿನ ವಿಳಾಸವನ್ನು ಹಿಡಿಯಿರಿ, ಮತ್ತು ಯಾವ ಸಾಧನ ಆ ವಿಳಾಸವನ್ನು ಅನುವಾದಿಸುತ್ತದೆ ಎಂದು ಕೇಳಿ. ಅಲ್ಲಿ ಸಹಾಯಕವನ್ನು ಸಂಪರ್ಕಿಸಿ, ಒಂದು ಸ್ಥಳಾಂತರಣೆಯ ವೇಳೆ ನಿರೀಕ್ಷೆ ಪಟ್ಟಿಯನ್ನು ಗಮನಿಸಿ, ನಂತರ ಸರ್ವರ್ನಲ್ಲಿ ನಿಷ್ಕ್ರಿಯ ಮೋಡ್ ಸರಿಪಡಿಸಿ ಮತ್ತು ಗೇಟ್ವೇ ನಿಯಮದಲ್ಲಿ ಶ್ರೇಣಿಯನ್ನು ಪ್ರತಿಬಿಂಬಿಸಿ.
ಡೇಟಾ ಮಾರ್ಗದ ವೈಫಲ್ಯವನ್ನು ಬಹುಸಂಖ್ಯಾತ ಸ್ಥಳಾಂತರಣೆಯ ವೈಫಲ್ಯದಿಂದ ಪ್ರತ್ಯೇಕವಾಗಿಡಿ, ಏಕೆಂದರೆ ಅವು ನಿಮ್ಮನ್ನು ಬೇರೆ ಸೆಟ್ಟಿಂಗ್ಗಳಿಗೆ ಕರೆದೊಯ್ಯುತ್ತವೆ.