iptables로 80번 포트에 도착한 그룹을 로컬 상급 포트로 전송합니다

2925 단어 iptables
예를 들면 Node입니다.js로 제작된 WEB 서비스를 외부에서 공개하려면 80번 포트에서 공개하고 싶지만 일반 사용자는 1024번 이상의 포트만 사용할 수 있기 때문에 루트에서 실행하고 싶지 않다.이럴 때는 IPtables로 REDIRECT나 DCT를 만드는 것이 편리하다.
지저분한 필기 수준이었지만 메모로 적어 놓았다.
간단한 예
80번으로 3000번 포트에서 이동하는 서비스를 공개한 예로 이런 지령을 내릴 수 있다.
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000
프로필에 저장할 때 Filter 이외에nat표의 설정↓를 추가하여 이렇게 쓰면 됩니다.
/etc/sysconfig/iptables
*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# filter settings here...
COMMIT
그리고 service iptables restart 이렇게 하면 반영된다.
여러 개의 IP를 할당한 서버가 수락한 IP를 통해 전송된 목적지의 로컬 포트를 바꾸는 예
예를 들어 10.0.0.80과 10.0.0.81의 IP가 있을 때 10.0.0.81의 패킷이 3001호 포트로 전달되고, 다른 IP로 받은 상태에서 3000호 포트로 전달될 때 ↓는 이렇게 쓰면 된다.
/etc/sysconfig/iptables
*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp -d 10.0.0.81 --dport 80 -j REDIRECT --to-port 3001
-A PREROUTING -p tcp              --dport 80 -j REDIRECT --to-port 3000
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# filter settings here...
COMMIT
이렇게 하면 한 서버가 서로 다른 포트에서 개발 환경과 실제 환경을 구분할 수 있고 지정된 포트가 없는 URL을 통해 접근할 수 있다.
로컬 프로세스로부터의 통신도 지원되는 경우 OUTPUT 체인으로 덮어쓰기
상기 설정이라면 밖에서 오는 그룹은 잘 작동하지만 로컬 프로세스에서 발생하는 그룹은 잘 작동하지 않습니다.로컬 프로세스에서 생성된 그룹은 PREROUTING 검사를 통과하지 않기 때문입니다.대신 OUTEPUT 검사를 통과합니다.그래서 바깥쪽과 지방의 두 가지 측면에서 대응한다면 ↓는 그렇다.
/etc/sysconfig/iptables
*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp -d 10.0.0.81 --dport 80 -j REDIRECT --to-port 3001
-A OUTPUT     -p tcp -d 10.0.0.81 --dport 80 -j REDIRECT --to-port 3001
-A PREROUTING -p tcp -d 10.0.0.80 --dport 80 -j REDIRECT --to-port 3000
-A OUTPUT     -p tcp -d 10.0.0.80 --dport 80 -j REDIRECT --to-port 3000
-A OUTPUT     -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-port 3000
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# filter settings here...
COMMIT
OUTPUT 체인점으로 80판을 모두 다시 쓰면 외부 http에 접근할 수 없기 때문에 번거롭지만-d 자신의 IP를 모두 열거해 고칠 필요가 있다.
DCT를 사용할 수도 있습니다.
DNTAT의 경우는 다음과 같습니다↓.
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination :3000
또한 DNS의 경우 IP도 포트와 함께 다시 쓸 수 있다.
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.90:3000
참고 자료
nat 테이블의 프리로우팅 검사가 어디서 유효한지↓ 이 그림 등은 쉽게 알 수 있다.

좋은 웹페이지 즐겨찾기