내 iptables
규칙을 확인하는 데 도움을 줄 수 있는 사람이 있나요(새로운 Tor 중계 서버 실행)?
저는 완전히 업데이트된 Debian GNU/Linux 11(bullseye)을 실행하고 있습니다.
기본적으로 INPUT 체인의 모든 것을 제거했고 SSH 포트는 검열되었으므로 보시다시피 XXYYZ
... 봇이 22를 누르는 것보다 더 많은 작업을 수행하도록 사용자 지정 포트로 변경했습니다.
이제 이 파일을 복사하여 붙여넣겠습니다 rules.v4
.
# Latest revision on 2021-Jul-25
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
--append INPUT --match conntrack --ctstate NEW --protocol tcp ! --syn --match comment --comment "protection: non-syn packets" --jump DROP
--append INPUT --match conntrack --ctstate INVALID --match comment --comment "protection: malformed packets" --jump DROP
--append INPUT --in-interface lo --match comment --comment "loopback: compulsory" --jump ACCEPT
--append INPUT --protocol icmp --icmp-type echo-request --match limit --limit 2/second --limit-burst 5 --match comment --comment "ICMP: ping only" --jump ACCEPT
--append INPUT --match conntrack --ctstate RELATED,ESTABLISHED --match comment --comment "Tor: traffic" --jump ACCEPT
--append INPUT --match conntrack --ctstate NEW,ESTABLISHED --protocol tcp --match tcp --destination-port XXYYZ --match comment --comment "SSH: global obfuscated" --jump ACCEPT
--append INPUT --protocol tcp --match tcp --destination-port 9001 --match comment --comment "Tor: OR" --jump ACCEPT
--append INPUT --protocol tcp --match tcp --destination-port 9030 --match comment --comment "Tor: Dir" --jump ACCEPT
COMMIT
약 1일 가동 시간 동안의 현재 출력은 다음과 같습니다.
# iptables -L INPUT -v --line-numbers
Chain INPUT (policy DROP 29718 packets, 3008K bytes)
num pkts bytes target prot opt in out source destination
1 234 131K DROP tcp -- any any anywhere anywhere ctstate NEW tcp flags:!FIN,SYN,RST,ACK/SYN /* protection: non-syn packets */
2 374 45284 DROP all -- any any anywhere anywhere ctstate INVALID /* protection: malformed packets */
3 96 4800 ACCEPT all -- lo any anywhere anywhere /* loopback: compulsory */
4 24 902 ACCEPT icmp -- any any anywhere anywhere icmp echo-request limit: avg 2/sec burst 5 /* ICMP: ping only */
5 3736K 2726M ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED /* Tor: traffic */
6 30 1800 ACCEPT tcp -- any any anywhere anywhere ctstate NEW,ESTABLISHED tcp dpt:XXYYZ /* SSH: global obfuscated */
7 12493 743K ACCEPT tcp -- any any anywhere anywhere tcp dpt:9001 /* Tor: OR */
8 7948 423K ACCEPT tcp -- any any anywhere anywhere tcp dpt:9030 /* Tor: Dir */
서버가 제대로 작동하는 것 같지만과도한 자신감, 더 나은 단어가 부족하기 때문입니다.
답변1
귀하의 정보를 위해:
*filter
-N RNNS
-A RNNS -p tcp ! --syn -j REJECT --reject-with tcp-reset
# accept (new) syn
-A RNNS -j ACCEPT
-N ALLOW
# tcp (r)eset (n)ew but (n)ot (s)yn
# -j RNNS is fine too since the chain has a "fallback" verdict at the end
-A ALLOW -p tcp --dport 9001 -g RNNS
-A ALLOW -p tcp --dport 9030 -g RNNS
-A ALLOW -p tcp --dport 12345 -g RNNS
# for (new) udp, just accept
-A ALLOW -p udp --dport 54321 -j ACCEPT
# others' fate will be determined by the chain policy of INPUT
# because we came to this chain by -g
# but well, -g ALLOW was the last rule anyway, so -j would have worked too
# and you can -j DROP here anyway
-P INPUT DROP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
# -A INPUT -m conntrack --ctstate INVALID ! -p tcp -j DROP
# could only be of conntrack state NEW; oh well, also see UNTRACKED
-A INPUT -i lo -j ACCEPT
# -A INPUT -i lo -g RNNS
-A INPUT -p icmp --icmp-type echo-request -m limit --limit 2/second --limit-burst 5 -j ACCEPT
# chain policy; optimization / optional
-A INPUT -p icmp -j RETURN
# won't be ICMP
-A INPUT -g ALLOW
-P FORWARD DROP
-P OUTPUT ACCEPT
COMMIT
동일한 체인 내에서 규칙의 순서는 중요할 수 있지만 논리적 관계가 없는 규칙 사이의 순서는 확실히 그렇지 않습니다(체인 참조 ALLOW
). "최적화"로서 우리는 더 "중요한 일치"에 우선순위를 두지만 " / Might는 true입니다( 체인 --ctstate
의 처음 두 규칙을 참조하세요 INPUT
.)