IPTables는 내가 허용하더라도 http로 나가는 모든 트래픽을 차단합니다.

IPTables는 내가 허용하더라도 http로 나가는 모든 트래픽을 차단합니다.

다음 코드를 사용하여 DNS 요청 및 포트에 대한 나가는 트래픽을 허용합니다 443.2280

443그러나 어떤 이유로 인해 해당 포트로의 모든 트래픽이 80차단됩니다.

# Allowing DNS lookups (tcp, udp port 53) to server '8.8.8.8'
/sbin/iptables -A OUTPUT -p udp -d 8.8.8.8 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -p udp -s 8.8.8.8 --sport 53 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -d 8.8.8.8 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s 8.8.8.8 --sport 53 -m state --state ESTABLISHED -j ACCEPT

# Allowing DNS lookups (tcp, udp port 53) to server '127.0.0.53'
/sbin/iptables -A OUTPUT -p udp -d 127.0.0.53 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -p udp -s 127.0.0.53 --sport 53 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -d 127.0.0.53 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s 127.0.0.53 --sport 53 -m state --state ESTABLISHED -j ACCEPT


 # allow all and everything on localhost
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT

# Allowing new and established incoming connections to port 22, 80, 443
/sbin/iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

# Allow all outgoing connections to port 22
/sbin/iptables -A OUTPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

# Allow outgoing icmp connections (pings,...)
/sbin/iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow outgoing connections to port 123 (ntp syncs)
/sbin/iptables -A OUTPUT -p udp --dport 123 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -p udp --sport 123 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -j LOG -m limit --limit 12/min --log-level 4 --log-prefix IP INPUT drop:
/sbin/iptables -A INPUT -j DROP
/sbin/iptables -A OUTPUT -j LOG -m limit --limit 12/min --log-level 4 --log-prefix IP OUTPUT drop:
/sbin/iptables -A OUTPUT -j DROP

 # Set default policy to 'DROP'
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT DROP

시스템 로그에서 다음을 볼 수 있습니다.

Sep 28 08:17:06 ip-172-31-57-142 kernel: [  486.605568] IP OUTPUT drop: IN= OUT=eth0 SRC=172.31.57.142 DST=172.217.7.206 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=30718 DF PROTO=TCP SPT=37026 DPT=443 WINDOW=62727 RES=0x00 SYN URGP=0
Sep 28 08:17:07 ip-172-31-57-142 kernel: [  487.617296] IP OUTPUT drop: IN= OUT=eth0 SRC=172.31.57.142 DST=172.217.7.206 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=30719 DF PROTO=TCP SPT=37026 DPT=443 WINDOW=62727 RES=0x00 SYN URGP=0

내가 뭘 잘못하고 있는지 잘 모르겠습니다.

답변1

그 중 일부만 살펴보겠습니다. 포트 tcp/22에서 SSH에 대한 아웃바운드 연결을 허용하려고 합니다.

# Allowing new and established incoming connections to port 22, 80, 443
/sbin/iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

# Allow all outgoing connections to port 22
/sbin/iptables -A OUTPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

첫 번째 규칙 쌍은 주석에 명시된 내용을 수행하지 않습니다. 두 번째 쌍은 작동하지만 너무 관대합니다. 네 가지 규칙은 모두거의정확하지만 궁극적으로는 충분히 정확하지 않습니다. 대신 간단하게만 하세요.

# Allow outgoing connections to port tcp/22
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT

# Allow return traffic for established connections
iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT

관련 정보