먼저 인터넷에서 이 소프트웨어를 구입한 회사까지 검색했는데 5개월이 지났습니다! 그래서 나는 너무 오랫동안 읽고 노력했지만 아무것도 찾지 못해서 내 눈과 뇌가 피를 흘리고 있었기 때문에 커뮤니티로 눈을 돌렸습니다. 간단히 말해서, 괜찮습니까? 분명히 나는 이것을 하기에는 너무 멍청하지만 적어도 나는 지금 iptables에 대한 많은 지식을 가지고 있습니다 :-)
내 요구 사항: 이메일에 protonmail을 사용합니다. 몰랐다면 이메일을 보내고 받는 데 필요한 모든 컴퓨터에서 "브리지 소프트웨어"를 실행해야 할 정도로 안전합니다. 스마트 홈, 카메라, 알람 등에 대한 이메일을 나에게 보내고 싶습니다. 상상할 수 있듯이 카메라는 물론이고 20개의 장치에 이 소프트웨어를 설치할 수 없었습니다! 따라서 이메일 "허브" 역할을 하려면 이 소프트웨어를 실행하는 Linux 서버가 필요합니다.
내 네트워크는 192.168.10.0/24입니다. VLAN도 없고 복잡성도 없습니다(pfsense가 라우터/방화벽 역할을 함).
나는 mxlinux/debian을 "이메일 호스트"로 사용하고 있습니다. 192.168.10.106 IMAP은 포트 1143에서 수신 중입니다. SMTP는 포트 1025에서 수신 중입니다.
내가 원하는 것은 내 네트워크의 모든 장치가 192.168.10.106을 사용하여 포트 1025에서 SMTP를 사용하여 이메일을 보낼 수 있도록 허용하는 것입니다. 쉬울 줄 알았는데.. 하지만 아니죠. 빌어먹을 소프트웨어가 127.0.0.1에서만 수신 대기하기 때문에 0.0.0.0 등으로 변경할 수 없습니다.
먼저 내가 protonmail에 직접 연락했다는 사실을 알아야 합니다. Protonmail은 유료 이메일 서비스이고 실제로 자신이 무엇을 하고 있는지 알고 있고 귀하와 대화할 기술자가 있기 때문입니다. 그러나 그들은 서비스가 0.0.0.0에서 수신 대기하도록 허용하는 것을 "보안 위험"으로 간주하므로 코드에서는 이를 변경하는 것을 허용하지 않습니다. "email server/192.168.10.106"에서 다음을 수행했습니다.
net.ipv4.ip_forward=1 이전의 콘텐츠를 편집
/etc/sysctl.conf
하고 주석 처리를 제거하세요.#
고쳐 쓰다
iptables
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.10.0/24 --dport 1025 -j DNAT --to-destination 127.0.0.1:1025 sudo iptables -t nat -A POSTROUTING -o lo -p tcp --dport 1025 -j SNAT --to-source 192.168.10.106 sudo iptables -A FORWARD -i eth0 -o lo -p tcp --dport 1025 -j ACCEPT
재부팅 시 항목을 저장하려면 위의 테이블을 저장할지 묻는 메시지가 표시되며 예라고 대답해야 합니다.
sudo apt install iptables-persistent
MX "방화벽 구성"을 입력하고 "공용, 개인 및 사무실"을 끄고 기본적으로 방화벽을 끄십시오.
컴퓨터를 다시 시작하세요
좋습니다. 이제 아래와 같이 재시작 후 상황을 나열해 보겠습니다. 네트워크 192.168.10.50의 Windows 시스템에서 텔넷을 시도했는데 보시다시피 패킷을 볼 수 있지만 작동하지 않습니다. :-( :-( :-( :-( :-( :-( :-( :- ( :-( :-( :-(
sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 15748 packets, 1719K bytes)
pkts bytes target prot opt in out source destination
5 260 DNAT tcp -- eth0 * 192.168.10.0/24 0.0.0.0/0 tcp dpt:1025 to:127.0.0.1:1025
Chain INPUT (policy ACCEPT 15748 packets, 1719K bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 730 packets, 73256 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 730 packets, 73256 bytes)
pkts bytes target prot opt in out source destination
0 0 SNAT tcp -- * lo 0.0.0.0/0 0.0.0.0/0 tcp dpt:1025 to:192.168.10.106
여기가 내 localhost 이메일 시스템에서 서비스를 테스트하는 곳입니다.
$ telnet 127.0.0.1 1025
Trying 127.0.0.1... Connected to 127.0.0.1.
Escape character is '^]'.
220 127.0.0.1 ESMTP Service Ready
eth0 수신자가 삭제한 패킷에 유의하세요.
$ uname -a
Linux email 5.10.0-23-amd64 #1 SMP Debian 5.10.179-2 (2023-07-14) x86_64 GNU/Linux
bob@email:~ $ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.106 netmask 255.255.255.0 broadcast 192.168.10.255
ether 00:0c:29:63:d5:4f txqueuelen 1000 (Ethernet)
RX packets 126620 bytes 24077186 (22.9 MiB)
RX errors 0 dropped 6447 overruns 0 frame 0
TX packets 30080 bytes 3728557 (3.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 57 bytes 4931 (4.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 57 bytes 4931 (4.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
위의 어느 것도 효과가 없었으므로 다양한 변형을 시도했습니다. 또한 도움이 되지 않는 것 같았지만 사용하도록 제안된 명령을 찾았지만 어쨌든 시도해 보았습니다.
sysctl -w net.ipv4.conf.eth0.route_localnet=1
답변1
또 다른 방법은 애플리케이션 전달자를 사용하는 것입니다. 필요하지 않거나 iptables
커널 수준 전달이 필요하지 않습니다. 이 예에서는 이를 사용했지만 socat
다른 가능성이 있을 수 있습니다. 여기에서 허용되는 소스 IP 주소 집합은 애플리케이션 매개변수로 정의됩니다.
socat TCP-LISTEN:1025,fork,range=192.168.10.0/24,reuseaddr,bind=192.168.10.106 TCP4:127.0.0.1:1025
여기에는 두 가지 인수 집합이 있습니다.
청취 주소
LISTEN:1025
- 이 포트에서 듣기fork
- 각 인바운드 요청을 처리하기 위해 하위 프로세스를 포크합니다.range=192.168.10.0/24
- 이 네트워크 범위 내에 있는 장치의 요청을 수락합니다.reuseaddr
- 주소/포트 튜플을 빠르게 재사용할 수 있습니다.bind=192.168.10.106
eth0
- 이 주소(당신의 주소 ) 를 들어보세요.
전달/중계 주소
TCP4:127.0.0.1:1025
- 이 주소로 중계:포트