夜を除いて一日中Facebookをブロックしたいです。 LinuxベースのルーターOpenWRTに実装したいと思います。変更するアーカイブは/etc/firewall.user(または少なくとも私の考えではそう思う)で、追加するコマンドは次のとおりです。
iptables RULE -m time --timestart TIME --timestop TIME --days DAYS -j ACTION
ルールは、Facebookや他のウェブサイトをブロックするために使用する一般的なルールと似ている必要があります。
iptables -t nat -I INPUT --sport 443 -m string \ --string www.facebook.com --algo bm -j REJECT
しかし、何らかの理由でまだFacebookにアクセスできます。どんなアイデアがありますか?私はいくつかの命令を間違って書きましたか?私が追加したコードは次のとおりです。
iptables -t nat -I INPUT --sport 443 -m string \ --string www.facebook.com --algo bm -m time --timestart 1:00 --timestop 20:00 --days Mon,Tue,Wed,Thu,Fri,Sat,Sun -j REJECT
そしてそれはうまくいきません...
通常、WebサイトをブロックするためにOpenDNSを使用しますが、これを使用すると、1日の特定の時間に人々がFacebookにアクセスすることを許可できないため、これを使用するのは良い選択ではありません。どんなアドバイスでも本当に感謝します。私の質問を読んでくれてありがとう。
答え1
time
おそらく、iptablesモジュールを使用するときに日付と時刻がUTC形式で提供されていると仮定するローカルクロックとカーネルを使用しようとしています。
私のiptables
マニュアルページを引用すると、次のようになります-m time
。
time
This matches if the packet arrival time/date is within a given range.
All options are optional, but are ANDed when specified. All times are
interpreted as UTC by default.
答え2
crontabを使用して実行するいくつかの.shスクリプトを作成できます。クローンタブから:
00 9 * * * /somedir/blockfun.sh
00 18 * * * /somedir/unblockfun.sh
次のように blockfun.sh に追加するか、
iptables -A INPUT -m string --string "facebook.com" --algo kmp --to 65535 -j DROP
URL をブロックする方法を追加します。
もちろん、unblock.shからこのルールを削除してください。
答え3
私の考えでは、あなたが言っていると思います。これそしてそれ実際にFacebookをブロックすると問題が発生します。
そこで議論されていない2つのことがあります。
Facebookに送信されたすべてのパケットに文字列が含まれている可能性はほとんどありません
www.facebook.com
。リンクされた質問にはfacebook.com
文字列のみが使用されます。これは最も強力な方法ではありませんが、公に許可されているFacebookのブロック方法のようです。ルールによってブロックされていないドメイン名を確認した後も、コンピュータはFacebookへのTCP接続を引き続き開きます。 TCPハンドシェイクにはこの文字列は含まれていないため、ルールは
www.facebook.com
これを防ぎません。結局のところ、トラフィックは-m state --state related,established -j ACCEPT
あなたが持っている可能性が最も高い特定の規則によってのみ許可されます。以下のスクリーンショットは、私の(デフォルト)OpenWRTフィルタテーブルを示しています。ここでは、すべてのチェーンについて2番目の規則が言及されていることを明確に見ることができます
related,established
。成功したTCPハンドシェイクと組み合わせると、Facebookからの着信および発信データトラフィックのルールは評価されません。このジェネリックの前にルールを挿入する必要があります
-j ACCEPT
。
答え4
あなたの例とインターネット検索に基づいて、これが私に役立ちました。
for website in facebook.com youtube.com; do
iptables -I FORWARD -p tcp --dport 80 -m string --string "$website" --algo bm -m time --timestart 00:00 --timestop 17:30 -j REJECT
iptables -I FORWARD -p tcp --dport 443 -m string --string "$website" --algo bm -m time --timestart 00:00 --timestop 17:30 -j REJECT
iptables -I FORWARD -p tcp --dport 80 -m string --string "$website" --algo bm -m time --timestart 18:30 --timestop 23:59 -j REJECT
iptables -I FORWARD -p tcp --dport 443 -m string --string "$website" --algo bm -m time --timestart 18:30 --timestop 23:59 -j REJECT
done
@Delfinの提案にはいくつかの問題があります。
いくつかのiptablesモジュールが私のopenwrtにインストールされていません。
opkgアップデート; opkg インストール iptables-mod-filter
*natの代わりに*filterを使用してください。それ以外の場合は、次のように文句を言います。 (ルールを*filterに直接入れるには、-t natを省略します。)
The "nat" table is not intended for filtering, the use of DROP is therefore inhibited
- INPUTキューの代わりにFORWARDを使用してください。