これらのiptablesルールを起動時に実行するように設定する方法


20

通常、ログインするたびにiptablesルールを実行します。端末から入力します。

sudo sh firewall.sh

妹のコンピューターをセットアップして、基本的なファイアウォール保護を彼女に与えたいと思います。彼女は管理者としてログインすることはなく、単なる標準アカウントです。パスワードを入力せずにログインするたびにファイアウォールスクリプトを実行するにはどうすればよいですか?

妹のコンピューター用に書いたスクリプトには以下が含まれています。

#!/bin/sh

modprobe ip_conntrack
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -I OUTPUT -p tcp --dport 80 --sport 32768:61000 -j ACCEPT
iptables -I OUTPUT -p udp --dport 53 --sport 32768:61000 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 443 --sport 32768:61000 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -I OUTPUT -p icmp -j DROP

iptables -I INPUT -p icmp -j DROP
iptables -I INPUT -p udp -j DROP
iptables -I INPUT -p tcp -m tcp --syn -j DROP
iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

firewall.shとして彼女のホームフォルダーに配置し、実行可能に設定しました(ファイルを右クリックし、[アクセス許可]タブで[プログラムとして実行ファイルを許可する]オプションをオンにします)。

rootとして端末からこのスクリプトを実行すると問題なく動作します。

入力後

sudo sh firewall.sh

ターミナルに入力しました

sudo iptables -L -v

そして私は得る

Chain INPUT (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
    0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcpflags: FIN,SYN,RST,ACK/SYN
    0     0 DROP       udp  --  any    any     anywhere             anywhere            
    0     0 DROP       icmp --  any    any     anywhere             anywhere            

Chain FORWARD (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       icmp --  any    any     anywhere             anywhere            
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spts:32768:61000 dpt:https
    0     0 ACCEPT     udp  --  any    any     anywhere             anywhere             udp spts:32768:61000 dpt:domain
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spts:32768:61000 dpt:http
    0     0 ACCEPT     all  --  any    lo      anywhere             anywhere

このスクリプトをログイン時に自動的に実行したり、姉妹コンピューター用にこれらのルールを永続的に保存したりするにはどうすればよいですか?rc.localメソッドとiptables-saveでの私の最初の試みはあまり成功していないため、詳細なコードを教えてください。再起動するたびに、すべてのINPUT、OUTPUT、およびFORWARDチェーンがACCEPTにリセットされ、入力時にポリシーがリストされません。sudo iptables -L -v


ほぼ2年後ですが、重要なコメント:ip6tablesいつかv6接続を取得する場合は、IPv6はip6tablesでなくIPv6で処理されるため、ルールがあることを確認してくださいiptables
トーマス区

回答:


38

iptables-persistentブートスクリプトを台無しにするのではなく、パッケージを使用することもできます。まず、スクリプトを実行してファイアウォールルールを設定します。次に、を実行しsudo apt-get install iptables-persistent、プロンプトに従います。現在のルールを保存するように求められたら、両方のプロンプトで「はい」を押します。これで、再起動時にiptablesルールが復元されます。


注:この後にルールを変更する場合は、変更後に次のコマンドを実行する必要があります。

IPv4 iptablesルールを保存するには: sudo su -c 'iptables-save > /etc/iptables/rules.v4'

IPv6 ip6tablesルールを保存するには: sudo su -c 'ip6tables-save > /etc/iptables/rules.v6'


ありがとう、それは働いた。一時的にルールを変更したい場合、ターミナルからスクリプトを実行できますか?
マイクレーン

はい、またはiptablesシステムを直接操作できます。ただし、一時的なルールを永続的に使用する予定がある場合、回答で述べたコマンドを実行しない限り、新しいルールが保存されることは保証されません。
トーマス・ウォード

sudo dpkg-reconfigure iptables-persistentルールを変更した後に実行するのは悪い考えですか?
souravc

@souravcそれに答える質問は、「なぜあなたは必要なのか、またはしたいのか」です。アイデアは、あなたが持っていないし、ちょうど(書き換え(または上書きできるということですrules.v4rules.v6、あなたが実行した場合、彼らはすぐに次回の起動時にインデックスを付け、または取得してファイルを手動iptables-restore < /etc/iptables/rules.v4またはip6tables-restore < /etc/iptables/rules.v6
トーマス・ウォード

2

次の場所にファイアウォールルールがあると仮定します。

/etc/iptables.up.rules

おそらく最も明白な答えは、次の場所にiptablesというファイルを作成することです。

/etc/network/if-pre-up.d

コンテンツで:

#!/bin/bash
/sbin/iptables-restore < /etc/iptables.up.rules

を使用して実行可能にします

sudo chmod +x /etc/network/if-pre-up.d/iptables

これにより、ネットワークインターフェイスがアクティブになる前にルールがロードされます。


ありがとう、どこにでもログを投げますか?これは機能していません。これは、使用しているDNSサーバーに、ホストの起動時にまだリゾルバーが開始されていないことが原因と思われます。
ディミトリコプリワ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.