Lucrăm cu un PLC (phoenix plc next) care se conectează la o rețea profinet (și profibus). Din cauza lipsei de instrumente și a faptului că nu putem reconecta lucrurile la nevoile noastre (PLC-ul este integrat în mașina noastră), căutăm diferite modalități de a ajunge la un server web https pe masterul profibus.
Deci, de la o oarecare distanță, avem un computer Windows. Acest PC este conectat printr-un comutator la un PLC. Acest PLC rulează pe o distribuție Linux. PLC-ul este conectat la profinet master și profibus master.
- WinPC (192.168.192.200)
- PLC extern nic (192.168.192.202)
- PLC intern nic (192.168.2.2)
- Master Profinet (192.168.2.3)
- Master Profibus (192.168.2.4)
Ce ar fi absolut genial, dacă am fi capabili să deschidem un browser web pe computerul Windows și să ne conectăm la profibus master (unde PLC-ul ar fi pur și simplu NAT pachetele la profibus master).
Am acces root pe PLC, așa că m-am gândit că aș putea gestiona acest lucru folosind iptables
. Deoarece nu ne pasă de securitate, am setat toate politicile să accepte (INPUT, OUTPUT, FORWARD). Singurul pas pe care trebuie să îl fac apoi (naiv eu...) este NAT-ul pachetului către destinație. Din pacate nu functioneaza.
ieșirea mea curentă de iptables -S
root@axcf3152:/opt/plcnext/# iptables -S
-P ACCEPT INTRARE
-P ACCEPTAȚI ÎNTÂMPRE
-P ACCEPT IEȘIRE
și masa mea de nat
root@axcf3152:/opt/plcnext/# iptables -t nat -L
PRERUUTARE în lanț (politica ACCEPTĂ)
target prot opt sursă destinație
DNAT icmp -- oriunde oriunde la:192.168.2.4
DNAT tcp -- oriunde oriunde tcp dpt:6666 la:192.168.2.4:443
DNAT tcp -- oriunde oriunde tcp dpt:5555 la:192.168.2.3:443
DNAT tcp -- oriunde oriunde tcp dpt:4444 la:192.168.2.3:80
DNAT tcp -- oriunde oriunde tcp dpt:3333 la:192.168.2.4:80
DNAT tcp -- oriunde oriunde tcp dpt:6666 la:192.168.2.4:443
Deci, practic, tot ce am făcut în afară de a seta toate politicile pentru ACCEPT a fost să adaug câteva reguli pentru nat:
iptables -t nat -A PREROUTING -p tcp --dport 6666 -j DNAT --to-destination 192.168.2.4:443
Și apoi pentru ambele arome (http (80), https (443)), și pentru ambele profinet master (192.168.2.3) și profibus master (192.168.2.4)
Dacă înțeleg tot ce am citit despre iptables în această seară, nu trebuie să mă obosesc să adaug reguli pentru tabelul de filtrare „FORWARD”, deoarece accept totul (super nesigur, dar nu ne pasă de această configurare de testare).
Singurul lucru despre care nu sunt sigur, este dacă (sau când) trebuie să mă ocup de POSTROUTING.
Oricum, când deschid pagina web https://192.168.192.202:6666 sau oricare dintre aromele sale, pagina nu se poate încărca (conexiune refuzată).
Orice ajutor ar fi foarte apreciat!!
ACTUALIZAȚI:
Emiterea următoarelor comenzi permiteți-mi să dau ping la masterul profibus (CRED)
iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT
iptables -t nat -A PREROUTING -p icmp -j DNAT --to-destination 192.168.2.4
iptables -t filter -A FORWARD -p icmp -d 192.168.2.4 -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE
când acum dau ping pe computerul Windows la 192.168.192.202 primesc răspunsuri. Îl văd și pe iptables -t nat -L -v
măriți statisticile acestei reguli (#pachete + octeți cresc când trimit comenzi ping noi).
Cred că acest lucru demonstrează că maestrul profinet răspunde la ping (din moment ce resping icmp pe PLC însuși acum)
Întrebări:
- Am nevoie de regula FORWARD? Sau presupunerea mea a fost corectă că permit totul și această regulă este redundantă?
- Trebuie să adaug MASQUARADE? Încă îmi este greu să înțeleg ce face asta de fapt (la fel ca multe altele se pare după numărul de întrebări care există pe web)
- Lipsește ceva din experimentul meu iptables care ar explica de ce https nu este redirecționat? Sau totul arată bine și problema ar fi în masterul profibus real (nu găzduiește serverul web acolo, așa cum susține furnizorul, de ex.)
UPDATE2:
Regula icmp funcționează din când în când. Când șterg toate regulile din iptables și încerc să reproduc pașii, nu funcționează întotdeauna. iptables este mai greu decât am crezut că ar fi...