OUTPUT 체인 ( iptables -P OUTPUT ACCEPT
) 메일 의 모든 트래픽을 허용하도록 선택하면 정상적으로 전송됩니다. 이러한 규칙으로 서버를 잠그면 발신 메일이 작동하지 않습니다. 그래도 다른 모든 기능이 작동합니다.
누구든지 여기에서 나가는 메일이 발송되지 않는 것을 보았습니까? 나는 혼란에 빠졌고, 이러한 규칙을 반복해서 살펴보고 많은 다른 버전을 시도했습니다.
iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 587 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 587 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
iptables -A LOGGING -j DROP
답변
트래픽을 내보내는 규칙이 있지만 반환 트래픽을 허용하는 규칙은 없습니다.
나는이 두 가지 규칙이 -A INPUT
대신 해야한다고 생각 합니다.
iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 587 -j ACCEPT
그러나 리턴 트래픽을 허용하는 방법으로 소스 포트를 사용하는 것은 시스템을 보호하는 나쁜 방법입니다. 누군가가해야 할 일은이 소스 포트 중 하나를 사용하는 것이므로 방화벽 규칙 세트는 쓸모 없게됩니다.
훨씬 더 좋은 아이디어는 모든 -A INPUT ... --sport
규칙 을 제거하고 대신이 단일 규칙 만 사용하는 것입니다.
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
이 규칙이 작동하는 방식은 시스템이 아웃 바운드 연결을 할 때 커널이 연결을 추적 테이블에 기록하는 것입니다. 그런 다음 원격 시스템의 패킷이 다시 들어 오면 해당 패킷이 추적 테이블의 연결과 연결되어 있는지 확인합니다. 비트는 세션과 직접 관련된 트래픽을 허용
하는 ESTABLISHED
비트입니다. 이것은 스트림으로 다시 들어오는 TCP 패킷입니다.
그만큼RELATED
비트는 연결과 관련이 있지만 연결 자체의 일부가 아닌 트래픽을 통과시킵니다. “ICMP는 조각화 할 수 없습니다”와 같은 ICMP 패킷과 같은 것일 수 있습니다. 이러한 패킷은 TCP 스트림의 일부는 아니지만 스트림을 유지하는 데 매우 중요합니다 (규칙 집합에서 다루지 않는 또 다른 문제이며 연결 문제 및 손실이 발생하지 않는 경우도 있음).
이 규칙은 UDP 트래픽에도 적용되지만 UDP는 상태 비 저장이므로 동일하지 않습니다. 대신 커널은 나가는 UDP 패킷을 추적해야하며 UDP 패킷이 동일한 호스트 / 포트 조합으로 돌아오고 짧은 시간 내에 관련되어 있다고 가정합니다.