前回TwinCAT/BSDでWinSCP Clientを使用しFileやりとりする方法を紹介しました。次はFirwall Rules機能を説明したいと思います。TwinCAT/BSDでは完全のFull-機能 Package Filter Firewallがついております。
Default設定ではわずかなIncoming/OutComing Connectionのみ接続できるようになっていますが、そのルール設定はConfiguration Filesとして保存されています。
そしてそのFileを以下のコマンドで開けます。
doas ee /etc/pf.conf. |
もちろんUser定義もでき、そのpf.conf Fileを修正すればOKです。
注意するのはDefault上で ADS port 48898の暗号化なし通信が無効になっていることです。
Reference Link
TwinCAT/BSDに関連する記事はこちらへ↓
http://soup01.com/ja/category/beckhoff/twincat3/twincat-bsd/
Enable/Disable
FirewallはDefaultで有効になっていて様々なところで使用できます。たとえばテスト環境やセキュリティ向上など。
Enable Command
以下のコマンドを実行し再Loginする。
doas service pf start |
Disable Comand
以下のコマンドを実行し再Loginする。
doas service pf stop |
Auto-ReEnable
rc.conf file内で以下の記述があると再起動すれば自動的にEnableになります。
pf_enable=”YES” |
Test
では実際にテストしてFirewallのRulesを変更してみますね。みなさんはTwinCATのRuntimeにAdd Remote Routeするときに、そのSecure ADSのCheckboxをCheck外したことありますか?
暗号化ADSを使用するかどうかをOptionです。
まずこのCheckboxを外し、Add Remote Routeしてみます。
そうするとShellからADS TCP port 48898 はTargetに拒否されたとエラーメッセージが出てきます。最初にも言いましたが、TwinCAT/BSDはDefault上で ADS port 48898の暗号化なし通信が無効になっています。
Check The pf.conf
以下のコマンドでpf.confの設定を見てみます。
cat /etc/pf.conf
見てる通り48898 の記述がありません。
# Copyright (C) 2018 – 2021 Beckhoff Automation GmbH & Co. KG # Customized Packet Filter – /etc/pf.conf set skip on lo0 scrub in all # allow dynamic NAT configuration (e.g. luemuctl) nat-anchor “bhf-nat/*” # block all incoming and allow all outgoing traffic block return in all pass out quick all # allow icmp6 pass in quick proto icmp6 all # allow icmp4 (ping) pass in quick inet proto icmp all icmp-type { echoreq, unreach } # allow ssh pass in quick proto tcp to port ssh # allow dynamic configuration for Beckhoff specific services anchor bhf load anchor bhf from “/etc/pf.conf.d/bhf” |
Edit
この記述を記入し48898を有効にします。
pass in quick proto tcp to
port 48898 synproxy state
# Copyright (C) 2018 – 2021 Beckhoff Automation GmbH & Co. KG # Customized Packet Filter – /etc/pf.conf set skip on lo0 scrub in all # allow dynamic NAT configuration (e.g. luemuctl) nat-anchor “bhf-nat/*” # block all incoming and allow all outgoing traffic block return in all pass out quick all # allow icmp6 pass in quick proto icmp6 all # allow icmp4 (ping) pass in quick inet proto icmp all icmp-type { echoreq, unreach } # allow ssh pass in quick proto tcp to port ssh # allow dynamic configuration for Beckhoff specific services anchor bhf load anchor bhf from “/etc/pf.conf.d/bhf” #allow encrypted ADS port 48898 pass in quick proto tcp to port 48898 synproxy state |
Test it!
最後はPythonからpyadsからテストしてみます。
もちろんTwinCATからAdd Remote RouteでもOKです。
pyads通信の記事:
Code
import pyads SENDER_AMS = ‘41.167.92.31.1.1’ PLC_IP = remote_ip PLC_USERNAME = ‘Administrator’ PLC_PASSWORD = ‘abcdefsg’ ROUTE_NAME = ‘RouteToMyPC’ HOSTNAME = PLC_IP pyads.open_port() pyads.set_local_address(SENDER_AMS) pyads.add_route_to_plc(SENDER_AMS, HOSTNAME, PLC_IP, PLC_USERNAME, PLC_PASSWORD, route_name=ROUTE_NAME) pyads.close_port() with pyads.Connection(remote_ads, pyads.PORT_TC3PLC1, remote_ip) as plc: value=plc.read_by_name(‘GVL.b1′, pyads.PLCTYPE_BOOL) print(value) |
Result
GVL.b1はいまFalseなので、Falseが表示されていますね。
False |