SSH 연결 포트를 서버로 전달하도록 iptables 구성

SSH 연결 포트를 서버로 전달하도록 iptables 구성

내 네트워크 토폴로지는 다음과 같습니다.

인터넷---------방화벽------------서버

0.0.0.0/0-----172.8.45.140 및 192.168.1.1-----192.168.1.2

원격 클라이언트(인터넷)에서 서버(192.168.1.2)로 들어오는 SSH 연결을 전달하려면 iptables를 사용하여 방화벽을 구성해야 합니다. 192.168.1.2의 서버에 원격으로 액세스하기 위해 클라이언트에서 기본적으로 실행됩니다.ssh [email protected]

방화벽에는 통신을 위한 두 개의 NIC가 있습니다.

172.8.45.140(공개)은 ens33 인터페이스에 있습니다.

192.168.1.1(비공개)은 ens37 인터페이스에 있습니다.

서버의 개인 IP는 192.168.1.2이며 SSH에 기본 포트 22 대신 포트 54045를 사용하도록 구성됩니다.

방화벽의 iptables가 구성되고 INPUT 및 FORWARD 체인이 모두 DROP 정책으로 변경되었으며 OUTPUT 체인에는 여전히 기본 정책 ACCEPT가 있습니다.

Chain INPUT (policy DROP)

target     prot opt source               destination         

Chain FORWARD (policy DROP)

target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

방화벽 뒤의 웹 서버에 웹 요청을 전달하는 방법을 자세히 설명하는 온라인 가이드를 보았습니다. 다음을 참조하세요.

https://www.systutorials.com/port-forwarding-using-iptables/

https://www.digitalocean.com/community/tutorials/how-to-forward-ports-through-a-linux-gateway-with-iptables

https://wikileaks.org/ciav7p1/cms/page_16384684.html

이 튜토리얼에 따라 /etc/sysctl.conf 파일을 통해 방화벽에서 포트 전달을 활성화하고 다음 규칙을 시도했습니다.

첫 시도

입력 및 전달 정책은 삭제되고 출력 정책은 수락됩니다.

sudo iptables -A PREROUTING -t nat -i ens33 -p tcp --dport 22 -j DNAT --to 192.168.1.2:54045

sudo iptables -A FORWARD -p tcp -d 192.168.1.2 --dport 54045 -j ACCEPT

결과: SSH 작업 시간이 초과되었습니다. 또한 INPUT 및 FORWARD 정책 ACCEPT에 지쳐 여전히 작업 시간 초과가 발생했습니다.

두 번째 시도

입력 및 전달 정책은 삭제되고 출력 정책은 수락됩니다.

sudo iptables -A FORWARD -i ens33 -o ens37 -p tcp --syn --dport 22 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -i ens33 -o ens37 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -i ens37 -o ens33 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

sudo iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 54045 -j DNAT --to-destination 192.168.1.2

sudo iptables -t nat -A POSTROUTING -o ens37 -p tcp -d 192.168.1.2 -j SNAT --to-source 192.168.1.1

결과: SSH 작업 시간이 초과되었습니다. 또한 INPUT 및 FORWARD 정책에 지쳐서 ACCEPT 연결이 거부되었습니다.

세 번째 시도

입력, 전달 및 출력 정책 수용.

sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to-destination 192.168.1.2:54045

sudo iptables -t nat -A POSTROUTING -j MASQUERADE

결과: 이것은 작동하지만 FORWARD 체인의 정책이 ACCEPT인 경우에만 가능합니다. 방화벽을 통해 연결되는 유일한 시간입니다. 체인 FORWARD를 DROP으로 변경하면 SSH 연결 시간이 다시 초과됩니다.

나는 이것이 위장과 관련이 있거나 FORWARD 정책 DROP과 관련이 있다고 추측합니다.

내 질문은 내가 무엇을 간과하고 있습니까? 이것은 내가 나를 돌아보며 놓쳤던 것일 수도 있습니다. 친절하게 대해주시고 도움을 주셔서 감사합니다.

답변1

당신에게 필요한 것은대상 NAT. 깨진 규칙을 모두 제거하고 이 두 가지만 사용하세요. 잘 작동할 겁니다. 행운을 빌어요!

$ sudo iptables -t nat -A PREROUTING -p tcp -i ens33 --dport 22 -j DNAT --to-destination 192.168.1.2:54045
$ sudo iptables -t nat -A POSTROUTING -j MASQUERADE

관련 정보