web-dev-qa-db-ja.com

CentOS / RHEL 7で再起動した後、iptablesサービスを自動的に開始するにはどうすればよいですか?

新しくインストールしたホームサーバーで準備中の問題がいくつかあります。 CentOS7をインストールしましたが、デフォルトでポート80と443がオフになっています。したがって、次のコマンドを使用してそれらをiptablesに追加しました。

iptables -I INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 5 -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
service iptables save

存在しないiptableサービスもインストールしました。問題は、マシンをリブートするたびに新しい構成が消去されることです。

Iptableサービスをchkconfigに追加しようとしましたが、次のエラーが発生しました。

[root@CentOS-7]# chkconfig --add iptables
error reading information on service iptables: No such file or directory

このエラーが発生する理由は、/ etc/init.d /にiptableスクリプトがないためだと思いますが、実際に正しいことをしている場合や、より簡単な方法がある場合は、誰かにアイデアがありますこの?そうでない場合、どうすればこの問題を解決できますか?最後に、ホームサーバーをWeb /メールサーバーとして使用する必要があります...

私はまた、フレミングゴウイルスが親切に提案したように 'systemctl enable iptables'コマンドを使用しようとしましたが、成功しませんでした。コマンドを入力した後、次の出力が表示されました。

ln -s '/usr/lib/systemd/system/iptables.service' '/etc/systemd/system/basic.target.wants`/iptables.service'`

更新:iptablesを見てきましたが、コマンド "service iptables save"は正しく機能しました。問題は、再起動時にサービスが開始されないことが原因のようです。 /etc/rc.localに次の行を追加した後、再起動時にサービスを実行することができました

systemctl start  iptables.service

ただし、この場合、「systemctl enable iptables」コマンドが機能しないのはなぜですか。何か不足していますか?ありがとう

8
Dave

この質問は古いですが、同じ問題に遭遇し、解決策 here を発見しました。

systemctl mask firewalld
systemctl stop firewalld

基本的にファイアウォールで保護されているとiptablesが競合するため、iptablesが読み込まれなくなります。

# cat /usr/lib/systemd/system/firewalld.service 
[Unit]
Description=firewalld - dynamic firewall daemon
Before=network.target
Before=libvirtd.service
Before=NetworkManager.service
Conflicts=iptables.service ip6tables.service ebtables.service

...

私は、firewalldをマスクして、自動的に起動せず、その後は起動しないようにすることで、これを解決できました。もちろん、iptablesが有効になっていることを確認する必要があります。

systemctl enable iptables
6
zanegray

initスクリプトはなくなりました。現在はsystemctlです。すべてのCentOS7ドキュメントにあります。起動時にchtconfig ipatablesまたはiptablesサービスを開始するには、これを使用する必要があります:-

systemctl enable iptables

iptables のCyber​​citiドキュメントで、systemctlについて知っておくべき簡単なことをチェックアウトする必要があります。

4
flemingovirus

まず最初に#chkconfig --add /sbin/iptablesを試してみてください。これにより「iptables」が認識されます。次に、iptables構成用のスクリプトを作成し、そのスクリプトを起動時に開始するようにします。スクリプトを作成します。

#!/bin/bash
#
iptables -I INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 5 -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/service iptables save

たとえば、myfirewallなどの名前を付けます。 chmod +x myfirewallで実行可能にして、これを./myfirewall/etc/rc.localに書き込んで、起動時にスクリプトを開始します。

0
amir jj