시도하고 배우는 iptables, 포트 포워드
수중에서 시험하고 싶기 때문에 조금 구성은 특수합니다만 이하입니다.
달성하고 싶은 것은 스마트 폰의 브라우저에서 노트북 (192.168.0.9)에 액세스했을 때,
4000번 포트의 서버에 응답시키는 것입니다.
TODO
패킷의 흐름을 아래 그림으로 드러내면서 TODO를 씻어냅니다.
참고 : Iptables 자습서 1.2.2 Chapter 6.1
스마트 폰 브라우저의 GET 요청 패킷은 Destination IP가 192.168.0.9, Destination Port가 80으로, 그림의 "NETWORK"에서 흐릅니다.
서버는 그림의 "Local Process"입니다.
따라서 다음을 수행하면 요청 패킷이 서버에 도달 할 수 있습니다.
※수신처가 로컬 호스트이기 때문에, Routing Decision에서 패킷은 그림의 「INPUT」의 흐름으로 나눌 수 있습니다.
검증
초기 상태는 다음과 같습니다.
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
기본 정책 설정
화이트리스트 방식으로 합니다.
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
노트북 PC의 웹 서버에 대한 액세스 허용
TODO의 순서와 반대가 됩니다만, 우선 노트 PC의 브라우저로 서버에 액세스 할 수 있도록(듯이) 합니다.
# iptables -A INPUT -d 127.0.0.1 -p tcp --dport 4000 -j ACCEPT
# iptables -A INPUT -s 127.0.0.1 -p tcp --sport 4000 -j ACCEPT
로컬이므로 다소 어렵지만, 설정과 패킷은 다음과 같이 대응합니다.
# iptables -A INPUT -d 127.0.0.1/32 -p tcp -m tcp --dport 4000 -j ACCEPT
위가 브라우저에서 서버로 향하는 패킷 허용
# iptables -A INPUT -s 127.0.0.1/32 -p tcp -m tcp --sport 4000 -j ACCEPT
위에서 서버에서 브라우저로 향하는 패킷 허용
스마트 폰에서 http 액세스를 노트북의 서버로 흔들기
스마트폰(192.168.0.2)에서 요청의 desination을 NAPT(Network Address Port Translation)합니다.
# iptables -t nat -A PREROUTING -s 192.168.0.2 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:4000
LAN 내의 스마트폰 이외에서도 액세스 시키려면 다음과 같이 합니다.
# iptables -t nat -A PREROUTING ! -s 192.168.0.9 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:4000
DNAT 타겟을 사용하여 Destination IP와 Destination Port를 재기록하고 있습니다.
.
.
.
.
.
위에서 움직일 것 같지만 움직이지 않았습니다.
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -A INPUT -d 127.0.0.1 -p tcp --dport 4000 -j ACCEPT
# iptables -A INPUT -s 127.0.0.1 -p tcp --sport 4000 -j ACCEPT
# iptables -A INPUT -d 127.0.0.1/32 -p tcp -m tcp --dport 4000 -j ACCEPT
# iptables -A INPUT -s 127.0.0.1/32 -p tcp -m tcp --sport 4000 -j ACCEPT
# iptables -t nat -A PREROUTING -s 192.168.0.2 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:4000
# iptables -t nat -A PREROUTING ! -s 192.168.0.9 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:4000
외부에서 localhost로 기본적으로 연결되지 않는 것 같습니다.
localhost는 외부 세계에서 분리되어야 하기 때문입니다.
이번은 수중에서 검증하기 위해이므로 설정을 변경합니다.
# sysctl -w net.ipv4.conf.eth0.route_localnet=1
※eth0는 스마트폰으로부터의 패킷이 통과하는 NIC의 이름으로 읽어들일 것
이제 액세스할 수 있었습니다!
“서버로부터의 응답 패킷의 SNAT를 할 필요는 없는 것인가?”라고 하는 의문을 받았습니까? 나는 가지고 있었다.
결론은 필요하지 않습니다. DNAT, SNAT는 단방향 변환을 정의하면 역방향은 자동으로 수행됩니다.
※참고: DNAT 타겟
설정 확인
최종 설정은 다음과 같습니다.
root@X1-Carbon-6th:~# iptables-save
# Generated by iptables-save v1.6.1 on Sat Dec 28 14:15:30 2019
*nat
:PREROUTING ACCEPT [167:28771]
:INPUT ACCEPT [10:624]
:OUTPUT ACCEPT [314:29752]
:POSTROUTING ACCEPT [314:29752]
-A PREROUTING -s 192.168.0.2/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 127.0.0.1:4000
COMMIT
# Completed on Sat Dec 28 14:15:30 2019
# Generated by iptables-save v1.6.1 on Sat Dec 28 14:15:30 2019
*filter
:INPUT DROP [3377:278628]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [3560:414379]
-A INPUT -d 127.0.0.1/32 -p tcp -m tcp --dport 4000 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -p tcp -m tcp --sport 4000 -j ACCEPT
COMMIT
# Completed on Sat Dec 28 14:15:30 2019
root@X1-Carbon-6th:~# sysctl -n net.ipv4.conf.enx7cc3a186ea62.route_localnet
1
정리
정리할 때는 아래에 주의하십시오.
# iptables -F && iptables -F -t nat
# iptables -P INPUT ACCEPT && iptables -P FORWARD ACCEPT
# sysctl -w net.ipv4.conf.enx7cc3a186ea62.route_localnet=0
요약
수중 환경에서 포트 포워드를 시도했습니다.
패킷의 흐름의 그림이 매우 우수하고, 보면서 생각하면 충분히 설정을 할 수 있는 것을 확인했습니다.
"좋아요"잘 부탁드립니다.
Reference
이 문제에 관하여(시도하고 배우는 iptables, 포트 포워드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/pojiro/items/c9a57c73f0bdf13b2843
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(시도하고 배우는 iptables, 포트 포워드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/pojiro/items/c9a57c73f0bdf13b2843텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)