現時点では、localhostからlocalhost()に接続するすべてのポートを許可する必要があります。iptables -A INPUT -i lo -p tcp -m tcp --dport 8888 -j ACCEPT
これは、a)毎回少し迷惑になり、b)ローカルポートを変更するサービスではしばしば不可能です。
netcat
Debian でこれをテストしています。
nc -vv -l -s 127.0.0.1 -p 8888
127.0.0.1 インターフェイスのポート 8888 でリッスンします。接続しようとしています
nc 127.0.0.1 8888
上記のルールを手動で追加するまで、接続は拒否されます。どうすればいいですか?
ループバックインターフェイスのすべてのトラフィックを無駄にすることを許可してみました。
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
また、以下をすべて許可します127.0.0.1
。
-A INPUT -s 127.0.0.1 -j ACCEPT
netstat
127.0.0.1から来るものとしてリストされているため、機能しないでください。
tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN 15338/nc
現在のルールは次のとおりです。
# Generated by iptables-save v1.6.0 on Thu Jan 25 08:01:28 2018
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 172.20.0.0/24 -j MASQUERADE
COMMIT
# Completed on Thu Jan 25 08:01:28 2018
# Generated by iptables-save v1.6.0 on Thu Jan 25 08:01:28 2018
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:port-scan - [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 67:68 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 587 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 2368 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 9987 -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1666 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m limit --limit 25/min --limit-burst 100 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A INPUT -i eth0 -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 53 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j DROP
-A FORWARD -i wintap0 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
-A OUTPUT -o tun0 -j ACCEPT
-A port-scan -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j RETURN
-A port-scan -j DROP
注:私はポートが外部の世界に表示されることを望まないが、内部でのみ表示されることを願っています。
答え1
問題はほぼ確実に次の行にあります。
-A INPUT -j REJECT --reject-with icmp-port-unreachable
トラフィックを許可してフィルタなしのルールの前に来るため、lo
最後の4つのルールは表示されません。
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A INPUT -i eth0 -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 53 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j DROP
インターフェイス(127.0.0.1/8)でのみリッスンしているサービスに人々が接続できることを心配する必要はありませんlo
。これは内部専用インターフェイスです。
答え2
追加して継続的に行を追加するのとは対照的に、次のことを行います。
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
次のように入力して、その行を継続的に追加してみてください。
-I INPUT -i lo -j ACCEPT
-I OUTPUT -o lo -j ACCEPT
これにより、ルールはINPUTチェーンの終わりではなく前面に配置されます。これ
-A INPUT -j REJECT --reject-with icmp-port-unreachable
読み取りルールをブロックします。