Iptables: 각 포트 규칙 전에 ctstate ESTABLISHED, RELATED 규칙을 중복 출력합니다.

Iptables: 각 포트 규칙 전에 ctstate ESTABLISHED, RELATED 규칙을 중복 출력합니다.

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 규칙을 로드할 때 이름 확인이 발생합니다. 다른 이유도 있는데...

관련 정보