web-dev-qa-db-ja.com

CentOSでiptablesを変更できません

私の質問:特定のポートで接続を受け入れるためにカスタムiptablesルールを追加するにはどうすればよいですか?

サーバーでポート3500を開こうとしましたが、失敗しました。私はこのコマンドを使用して開始しました:(From http://wiki.centos.org/HowTos/Network/IPTables

iptables -A INPUT -p tcp --dport 3500 -j ACCEPT

しかし、次にiptables -Lを実行します。まだ新しいルールがリストされていません:(出力に3500が含まれているはずです)

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
RH-Firewall-1-INPUT  all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:rtmp-port 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
RH-Firewall-1-INPUT  all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain RH-Firewall-1-INPUT (2 references)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            icmp any 
ACCEPT     esp  --  anywhere             anywhere            
ACCEPT     ah   --  anywhere             anywhere            
ACCEPT     udp  --  anywhere             224.0.0.251         udp dpt:mdns 
ACCEPT     udp  --  anywhere             anywhere            udp dpt:ipp 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ipp 
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     udp  --  anywhere             anywhere            state NEW udp dpt:snmp 
ACCEPT     udp  --  anywhere             anywhere            state NEW udp dpt:snmptrap 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ftp 
REJECT     all  --  anywhere             anywhere            reject-with icmp-Host-prohibited 

Editそこで、ACCEPTルールをINPUTチェーンに挿入しようとすると、iptablesは次のようになります。

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:3500 
RH-Firewall-1-INPUT  all  --  0.0.0.0/0            0.0.0.0/0

ただし、外部から3500に接続することはできません。 (私はまだ内側からtelnetできます)。 my_Host 3500にTelnetで接続しようとすると、次のようになります。telnet: Unable to connect to remote Host: Connection refused

編集2:私のnetstat -an | grep "LISTEN "出力:

tcp 0 0 127.0.0.1:3500 0.0.0.0:*聞く
tcp 0 0 0.0.0.0:973 0.0.0.0:*聞く
tcp 0 0 0.0.0.0:111 0.0.0.0:*聞く
tcp 0 0 127.0.0.1:631 0.0.0.0:*聞く
tcp 0 0 127.0.0.1:25 0.0.0.0:*聞く
tcp 0 0 ::: 22 ::: *聞く

編集3:私はlainのアドバイスに従い、サービスを127.0.0.1:3500ではなく0.0.0.0:3500にバインドしました。

5
Phuong Nguyen

ルールがリストされています。rtmp-portはIANAによるとポート3500です ポート/サービス 名前。サービス名ではなくポート番号のリストを取得するには、-nスイッチを使用します

iptables -L -n 

また、-Aスイッチを使用して、ルールをINPUTチェーンに追加しました。これは、パケットがRH-Firewall-1-INPUTチェーンに送信された後に追加されました。最後のルールはブランケットREJECTであるため、ポート3500宛てのパケットはINPUTチェーンでテストされる前に拒否されます。

考えられる解決策がいくつかあります。-Iスイッチを使用して、ルールをINPUTチェーンまたはRH-Firewall-1-INPUTチェーンに挿入します。

iptables -I INPUT -p tcp --dport 3500 -j ACCEPT

または

iptables -I RH-Firewall-1-INPUT -p tcp --dport 3500 -j ACCEPT

あなたはおそらくあなたのルールもきれいにするべきです、あなたは使うことができます

iptables -D INPUT -p tcp --dport 3500 -j ACCEPT

(数回)新しいルールを追加する前に、ポート3500の既存のルールを削除します。

10
user9517