Iptables
고정 IP를 사용하여 VPS에 연결하고 VPS X.X.X.X
가 패키지를 업데이트하고 설치하도록 허용합니다.
*filter
#Allow all loopback (lo0) traffic and reject traffic
#to localhost that does not originate from lo0.
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT
-A OUTPUT -o lo -j ACCEPT
#Allow traffic from address X.X.X.X
-A INPUT -i eth0 -s X.X.X.X -j ACCEPT
-A OUTPUT -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#Allow DNS
-A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT
-A INPUT -i eth0 -p udp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT
#Allow HTTP
-A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
#Allow HTTPS
-A OUTPUT -o eth0 -p tcp --dport 443 -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
#Reject everything else
-A INPUT -j DROP
-A FORWARD -j DROP
-A OUTPUT -j DROP
COMMIT
질문: 그러한 조항이 있는 이유는 무엇입니까?
-A OUTPUT -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
불필요한?
또 다른 3가지 출력 규칙,
-A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT
-A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT
-A OUTPUT -o eth0 -p tcp --dport 443 -j ACCEPT
--ctstate ESTABLISHED
포트 전용53,80,443
RELATED
추가하고 나면 차이가 있나요 ctstate
?
업데이트가 에서만 제공되는 경우 mirrors.linode.com
추가 개선 규칙을 사용할 수 있습니까 -s mirrors.linode.com
? 몇 달 후에 뭔가 바뀌면 hostname
ip
어떻게 되나요 ?
답변1
이 규칙은 필요하지 않습니다:
-A INPUT -i eth0 -p udp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
다음 중 하나로 대체되어야 합니다.
-A INPUT -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
설명: 이 규칙은 다음 연결에서 트래픽을 수신하는 데 필요합니다.호스트가 시작되었습니다. 이 규칙은 다음에 의해 시작된 연결을 요청하지 않습니다.원격 호스트.
Iptables 규칙은 정의한 특정 순서로 패킷에 적용됩니다..
패킷이 호스트에 들어가면 INPUT 체인에 배치되고 iptables는 INPUT 규칙을 적용합니다. 체인을 통해 규칙을 변환해 보겠습니다.
*filter
-A INPUT -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT
-A INPUT -i eth0 -s X.X.X.X -j ACCEPT
-A OUTPUT -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT
-A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT
-A OUTPUT -o eth0 -p tcp --dport 443 -j ACCEPT
-A INPUT -j DROP
-A FORWARD -j DROP
-A OUTPUT -j DROP
COMMIT
답변을 줄이기 위해 모든 댓글을 삭제했습니다.
귀하의 질문에 답변합니다.
이 규칙:
-A OUTPUT -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
원격 호스트가 연결을 시작하면 로컬 시스템에서 원격 호스트로의 모든 트래픽이 허용됩니다. 즉, 이 규칙을 사용하면 호스트가 원격 연결에 응답할 수 있습니다. 이 규칙은 올바른 작동을 위해 필요합니다.
허용된 다른 세션 내에서 시작된 새 연결에는 RELATED가 필요합니다.. (예: 동적 포트 범위를 사용한 수동 FTP 연결)
iptables 규칙에 DNS 이름을 입력하는 것은 좋지 않습니다.- iptables 규칙을 로드할 때 이름 확인이 발생합니다. 다른 이유도 있는데...