Ek probeer 'n paar eenvoudige tcp-poortaanstuur doen

[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward
0
[[email protected] ~]# /bin/echo 1 > /proc/sys/net/ipv4/ip_forward
[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward
1
[[email protected] ~]# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
RH-Firewall-1-INPUT  all  --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
RH-Firewall-1-INPUT  all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain RH-Firewall-1-INPUT (2 references)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere            icmp any
ACCEPT     esp  --  anywhere             anywhere
ACCEPT     ah   --  anywhere             anywhere
ACCEPT     udp  --  anywhere             224.0.0.251         udp dpt:mdns
ACCEPT     udp  --  anywhere             anywhere            udp dpt:ipp
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ipp
ACCEPT     all  --  anywhere             anywhere            state
RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            state NEW
tcp dpt:mysql
ACCEPT     tcp  --  anywhere             anywhere            state NEW
tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere            state NEW
tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere            state NEW
tcp dpt:ftp
ACCEPT     tcp  --  anywhere             anywhere            state NEW
tcp dpt:https
REJECT     all  --  anywhere             anywhere
reject-with icmp-host-prohibited
[[email protected] ~]# iptables --table nat --append PREROUTING --proto
tcp --dport 80 --jump DNAT --to 10.52.208.223:80
[[email protected] ~]# iptables --table nat --list PREROUTING
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  anywhere             anywhere            tcp
dpt:http to:10.52.208.223:80
[[email protected] ~]# curl --verbose http://10.52.208.221:80
* About to connect() to 10.52.208.221 port 80
*   Trying 10.52.208.221... Connection refused
* couldn't connect to host
* Closing connection #0
curl: (7) couldn't connect to host
[[email protected] ~]#
answer

Jy stuur die verkeer na 10.52.208.221. Gegewe die konfigurasie wat jy geplaas het, is jou probleem die webbediener, nie die firewall nie. Jou reëls blyk korrek te wees. FORWARD en INPUT word herlei na RH-Firewall-1-INPUT waar jou eerste reël is om alle verkeer toe te laat. Soos iemand anders uitgewys het, kan jy alle verkeer op eth1 toelaat, terwyl die wêreld eintlik in eth0 kom. Sekondêr, jy moet die verkeer NAT as dit teruggaan na die wêreld

iptables --table nat --append POSTROUTING --proto tcp --dport 80 --jump MASQUERADE -o OUT_INTERFACE

Jou verkeer wat van die router afkomstig is, sal nooit die invoer- of voorwaartse kettings tref nie, maar eerder die uitvoerketting deurkruis na die webbediener. Ander stelsels in daardie subnet sal insgelyks direk na die webbediener gaan. Stelsels oor die hele wêreld sal egter die INPUT / FORWARD kettings deurkruis en benodig SNAT sowel as DNAT sodat dit vir die wêreld na een masjien lyk. Jy kan steeds nie binne jou netwerk toets nie. jy moet toets vanaf die teenoorgestelde koppelvlak van die webbediener. Kry vir my jou IP-adresse en ek sal jou na die regte konfigurasies wys.

Om 'n verbinding geweier te kry, beteken dat ten minste 'n gasheer die TCP-pakkies aanvaar, maar geen diens luister op daardie poort nie. Wat gebeur wanneer jy vanaf 'n ander IP koppel aan beide 10.52.208.221:80 en na 10.52.208.223?

Ek kan dit nie nou toets nie, maar ek het 'n paar scenario's gesien waar koppel vanaf die gasheer waar die IP-tabelle gestel is na 'n NAT'ed IP nie werk nie. Ek is nie seker of dit hier die geval is nie, aangesien jy nie eksplisiet 'n koppelvlak definieer waarop die reël toegepas word nie, maar ek het sommige gevalle gesien waar Linux die IP waaraan jy wil koppel as "plaaslik" sien en gebruik die teruglus-koppelvlak en slaan iptables oor.

In elk geval, kan jy dit van buite die boks probeer?