여기에 데비안 8을 새로 설치할 때 로드한 파일이 있습니다 iptables-restore
. 제가 변경한 유일한 것은 파일에서 SSH 포트 22022를 사용하는 것이었습니다 /etc/ssh/sshd_config
.
----- 아래 업데이트를 참조하세요 -----
이 파일을 로드하면 어떤 식으로든 이 데비안에 액세스할 수 없습니다. 심지어 ping도 작동하지 않습니다. /var/log/messages 파일에는 오류에 대한 정보가 없습니다. iptables를 구성하는 것은 이번이 처음입니다. 나는 그것에 관한 많은 문서를 읽었지만 어딘가에서 잘못하고 있습니다. 여기서 무슨 일이 일어나고 있는지 지적할 수 있나요?
*filter
#----------
# Local loop
#----------
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
#----------
# Connexions already established
#----------
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#----------
# PING
#----------
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
#----------
# SSH
#----------
-A INPUT -p tcp --dport 22022 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --dport 22022 -m state --state NEW,ESTABLISHED -j ACCEPT
#----------
# HTTP
#----------
-A INPUT -p tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp --dport 80 -j ACCEPT
#----------
# HTTPS
#----------
-A INPUT -p tcp --dport 443 -j ACCEPT
-A OUTPUT -p tcp --dport 443 -j ACCEPT
#----------
# FTP
#----------
-A INPUT -p tcp --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
#----------
# Logs
#----------
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 4
#----------
# DROP everything else
#----------
-A INPUT -j DROP
-A OUTPUT -j DROP
-A FORWARD -j DROP
COMMIT
- - - 갱신 - - -
이제 NTP, Ping, DNS, Whois, SSH, HTTP(S) 및 FTP를 사용할 수 있습니다. 훌라. 새로운 파일입니다. 이상한 점을 발견하면 알려주세요. 또한 내가 사용하는 vsftp와 함께 FTP(TLS/SSL)를 사용하려면 몇 가지 좋은 구성 요령이 필요하다는 것도 배웠지만 지금까지 좋은 해결책을 찾지 못했습니다. 나는 이와 같이 "깨끗한" FTP를 유지하지 않을 것이기 때문에 이 문제를 해결할 수 있기를 정말로 바랍니다. 아이디어가 있다면. 도움을 주셔서 다시 한번 감사드립니다. 두 답변 모두 훌륭합니다. 하나를 선택할 수 없었습니다. ;)
(그런데 이제 sh 스크립트를 사용하여 모듈을 로드합니다)
#!/bin/sh
#----------
# Load needed modules
#----------
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
#----------
# Local loop
#----------
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
#----------
# Connexions already established
#----------
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#----------
# NTP
#----------
iptables -A INPUT -p udp --sport 123 -j ACCEPT
iptables -A OUTPUT -p udp --dport 123 -j ACCEPT
#----------
# PING
#----------
iptables -A INPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#----------
# DNS
#----------
# UDP
iptables -A INPUT -i eth0 -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
# TCP
iptables -A INPUT -i eth0 -p tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
#----------
# WHOIS
#----------
iptables -A INPUT -p tcp --sport 43 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 43 -j ACCEPT
#----------
# SSH
#----------
# Incoming
iptables -A INPUT -i eth0 -p tcp --dport 22022 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22022 -m state --state ESTABLISHED -j ACCEPT
# Outgoing
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
#----------
# HTTP
#----------
# Incoming
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
# Outgoing
iptables -A INPUT -i eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
#----------
# HTTPS
#----------
# Incoming
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
# Outgoing
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
#----------
# FTP
#----------
#incoming
iptables -A INPUT -i eth0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
#----------
# Logs
#----------
#-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 4
#----------
# DROP everything else
#----------
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
iptables -A FORWARD -j DROP
exit 0
답변1
이 규칙 이후에는:
-A OUTPUT -p tcp --dport 22022 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp --dport 443 -j ACCEPT
-A OUTPUT -p tcp --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -j DROP
컴퓨터에서 보낼 수 있는 것은 HTTP(S) 요청, 포트 22022에 대한 일부 FTP 연결 및 SSH 연결뿐입니다. 예를 들어 SSH 서버로부터의 응답에는 해당되지 않습니다. 그 이유는 대상이 클라이언트가 선택한 임의의 포트(우연하지 않는 한 22022가 아닐 가능성이 높음)이기 때문입니다. 마찬가지로 HTTP 서버의 응답은 전송되지 않으며 ICMP 에코 응답은 허용되지 않습니다.
SSH 서버에서 보낸 패킷만 허용하려면 해당 패킷을 허용해야 합니다.보내다포트 22022에서 --sport 22022
.
SSH 서버의 응답을 허용하더라도 외부로 나가는 요청을 많이 할 수 없다는 사실을 곧 알게 될 것입니다. HTTP 요청을 허용하지만 예를 들어 나가는 DNS 쿼리는 나가지 않습니다. 출력 규칙을 얼마나 엄격하게 만들 것인지 고려하십시오. 적어도 먼저 체인에 -m state --state ESTABLISHED -j ACCEPT
규칙을 추가하는 것이 좋습니다.-j LOG
OUTPUT
답변2
ilkkachu가 그의 대답에서 말했듯이 출력 규칙은 당신이 원하는 것을 원하지 않습니다.
몇개의 충고:
DROP
규칙을 사용하여 체인을 명시적으로 종료하는 대신 ( 및 유사한 을DROP
사용합니다 . 그런 다음 을 사용하여 체인에 규칙을 추가할 수 있으며 정책은 체인 끝에 도달하는 모든 패킷에 자동으로 적용됩니다.iptables -P INPUT DROP
OUTPUT
FORWARD
iptables -A <chain>
- 체인 의 연결과 정확히 유사한
OUTPUT
설정된 관련 연결에서 트래픽을 허용하는 규칙을 체인에 추가합니다 . 그러면 특정 프로토콜의 작동 방식에 관계없이 허용하는 모든 것에 대한 응답이 허용됩니다.iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
INPUT
- 서버가 나가는 DNS 요청을 할 수 있도록 규칙을 추가하는 것을 고려해 보세요.둘 다UDP 및 TCP).