iptables 규칙은 너무 제한적입니다. Drupal 웹 서버는 저장소, NTP 또는 웹 사이트에도 액세스할 수 없습니다.

iptables 규칙은 너무 제한적입니다. Drupal 웹 서버는 저장소, NTP 또는 웹 사이트에도 액세스할 수 없습니다.

이것은 Linode에서 Ubuntu 12.04 LTS를 실행하는 Drupal 웹사이트입니다. 최근 누군가가 iptables 규칙을 변경했고 많은 문제가 발생하기 시작했습니다.

여기에는 다음이 포함됩니다.

  1. 서버가 외부 서비스에 액세스할 수 없기 때문에 Mollom 스팸 방지는 Drupal 사이트에서 작동하지 않습니다. (자세한 내용은 아래에서)

  2. Drupal 보고서: "귀하의 시스템 또는 네트워크 구성으로 인해 Drupal이 웹 페이지에 액세스하는 것이 허용되지 않아 기능이 저하되었습니다."

  3. 서버가 인터넷을 ping할 수 없습니다.

    ping google.com
    ping: 알 수 없는 호스트 google.com

  4. 다른 네트워크 서비스가 실패했습니다. 예를 들어:

    $ sudo ntpdate ntp.ubuntu.com 종료, 네임서버를 사용할 수 없음: 이름 확인이 일시적으로 실패함(-3) 6월 1일 16:42:34 ntpdate[7420]: 네임서버를 사용할 수 없음: 이름 확인이 일시적으로 실패함(-3)
    apt-get 업데이트 오류http://us.archive.ubuntu.comPrecision Release.gpg는
    일시적으로 "us.archive.ubuntu.com" 오류를 해결할 수 없습니다.http://security.ubuntu.comPrecision-security Release.gpg는
    일시적으로 "security.ubuntu.com"을 확인할 수 없습니다.

  5. 서버가 제대로 작동하지 않습니다. 아래와 같은 오류는 iptables 규칙으로 인해 인터넷에 접속할 수 없는 것과 관련이 있나요?

    메모리 부족: 프로세스 2300(mysqld) 종료 점수 129 또는 하위 프로세스를 희생하여 프로세스 2300(mysqld) 종료 Total-vm:354780kB, anon-rss:53180kB, file-rss:0kB 메모리 부족: 프로세스 5937 종료(mysqld) 점수 60 또는 희생 하위 종료 프로세스 5937(mysqld) total-vm: 344040kB, anon-rss: 78988kB, file-rss: 0kB

Drupal 오류에 대한 자세한 내용은 다음과 같습니다. Drupal 구성은 변경되지 않았습니다. iptables에만 다음이 있습니다.

1. HTTP 요청 상태가 실패했습니다. 시스템 또는 네트워크 구성에서 Drupal이 웹 페이지에 액세스하는 것을 허용하지 않아 기능이 저하되었습니다. 이는 웹 서버 구성이나 PHP 설정으로 인해 발생할 수 있으며, 사용 가능한 업데이트에 대한 정보를 다운로드하거나, 수집기 피드를 가져오거나, OpenID를 통해 로그인하거나, 기타 네트워크 종속 서비스를 사용하려면 해결해야 합니다. Drupal이 페이지에 액세스할 수 있다고 확신하지만 여전히 이 메시지가 표시되는 경우 $conf['drupal_http_request_fails'] = FALSE;를 settings.php 파일 하단에 추가할 수 있습니다.

2. Mollom API Key 서비스 오류 Mollom API Key를 확인할 수 없습니다. 나중에 다시 시도 해주십시오. 이 문제로 인해 회원은 당사 사이트에 등록하거나 댓글을 남길 수 없습니다.

다음은 현재 (문제가 있는) iptables 규칙입니다. (그런데 포트 2222는 원래 SSH 포트였습니다. 누군가 이제 SSH를 다시 ​​포트 22로 변경했지만 분명히 iptables에 포트 2222를 열어 두었지만 이는 또 다른 질문입니다.)

# iptables -nL
Chain INPUT (policy DROP)
target     prot opt source               destination         
fail2ban-apache-overflows  tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
fail2ban-apache  tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
DROP       all  --  69.30.238.162        0.0.0.0/0           
DROP       all  --  121.205.199.140      0.0.0.0/0           
DROP       all  --  137.117.129.250      0.0.0.0/0           
DROP       all  --  117.26.252.26        0.0.0.0/0           
DROP       all  --  112.111.165.71       0.0.0.0/0           
DROP       all  --  175.42.95.145        0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 state NEW,ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:2222 state NEW,ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443 state NEW,ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:2222

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp spt:80 state ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp spt:2222 state ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp spt:443 state ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp spt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp spt:2222

Chain fail2ban-apache (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           

Chain fail2ban-apache-overflows (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0  

내 질문: 저는 Fail2ban 구성에 대해 아무것도 모르기 때문에 기본 기능을 복원하기 위해 수행할 수 있는 가장 작은 변경 사항은 무엇입니까(특히 발신 서비스의 경우 이것이 주요 문제인 것 같기 때문에)?

업데이트: Michael Kjörling의 답변을 바탕으로 업데이트된 iptables 규칙은 다음과 같습니다. 맞습니까?

# cat iptables.modified.rules 
# Generated by iptables-save v1.4.12 on Sat Jun  1 21:26:17 2013
*security
:INPUT ACCEPT [60016:6837978]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [60450:61970107]
COMMIT
# Completed on Sat Jun  1 21:26:17 2013
# Generated by iptables-save v1.4.12 on Sat Jun  1 21:26:17 2013
*raw
:PREROUTING ACCEPT [72450:7582406]
:OUTPUT ACCEPT [60450:61970107]
COMMIT
# Completed on Sat Jun  1 21:26:17 2013
# Generated by iptables-save v1.4.12 on Sat Jun  1 21:26:17 2013
*nat
:PREROUTING ACCEPT [7899:447793]
:INPUT ACCEPT [7787:439884]
:OUTPUT ACCEPT [5818:4357219]
:POSTROUTING ACCEPT [5818:4357219]
COMMIT
# Completed on Sat Jun  1 21:26:17 2013
# Generated by iptables-save v1.4.12 on Sat Jun  1 21:26:17 2013
*mangle
:PREROUTING ACCEPT [72450:7582406]
:INPUT ACCEPT [72450:7582406]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [60450:61970107]
:POSTROUTING ACCEPT [60450:61970107]
COMMIT
# Completed on Sat Jun  1 21:26:17 2013
# Generated by iptables-save v1.4.12 on Sat Jun  1 21:26:17 2013
*filter
:INPUT DROP [44:2387]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [78:41503]
:fail2ban-apache - [0:0]
:fail2ban-apache-overflows - [0:0]
-A INPUT -s 69.30.238.162/32 -j DROP
-A INPUT -s 121.205.199.140/32 -j DROP
-A INPUT -s 137.117.129.250/32 -j DROP
-A INPUT -s 117.26.252.26/32 -j DROP
-A INPUT -s 112.111.165.71/32 -j DROP
-A INPUT -s 175.42.95.145/32 -j DROP
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-overflows
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache
-A INPUT -i eth0 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p udp -m state --state RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A fail2ban-apache -j RETURN
-A fail2ban-apache-overflows -j RETURN
COMMIT
# Completed on Sat Jun  1 21:26:17 2013

답변1

OOM 킬러의 출현은 귀하의 문제와 관련이 있을 가능성이 높으며 확실히 도움이 되지 않습니다. 스왑 공간을 늘리거나 더 많은 RAM을 설치하십시오. 다른 것이 없다면 커널 OOM 킬러가 피해자를 찾기 시작할 때 서버가 프로세스를 계속 종료하는 것을 원하지 않을 것입니다.나쁜.

즉, ICMP 또는 UDP(또는 TCP) 기반 DNS를 사용할 수 없다는 것을 알았습니다. 인터넷에서 제대로 작동하는 호스트는 ICMP 패킷을 수락해야 하며, DNS 서버를 실행하는 경우 TCP 및 UDP를 통해 포트 53 통신을 열어야 제대로 작동합니다.

외부 당사자가 사용할 수 있는 서비스에 영향을 주지 않고 합리적인 구성에 더 부합하도록 최소한의 변경은 간단할 수 있습니다.

iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp -m state --state RELATED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT

(테스트되지 않았으므로 명령줄 구문이 약간 다를 수 있지만 이것이 요점입니다.)

일반적으로 성능상의 이유로 이러한 규칙은 관련 iptables 체인의 최상위 또는 그 근처에 있습니다. 이를 통해 TCP 또는 UDP는 물론 ICMP 메시지를 통해 서버에 대한 모든 아웃바운드 응답이 허용됩니다. ICMP는 다음과 같습니다.비판적인인터넷에서 잘 작동하는 호스트의 경우 차단하려는 경우 다음을 ping사용할 수 있습니다 .많은ICMP 에코 요청을 차단하는 보다 구체적인 규칙이 그것입니다. 그러나 잘 알려진 포트 80이 열려 있으면 실제로는 별로 도움이 되지 않으며 문제 해결이 더 복잡해집니다.

출력 연결 규칙도 연결 전략이 수행하지 않는 작업을 수행하지 않기 때문에 중복됩니다. 이를 제거하기 만 iptables -F OUTPUT하면 구성이 복잡해지고 모든 나가는 패킷에 대해 약간의 성능이 저하되지만 아무런 이점도 제공되지 않습니다. 또한 대부분 권한이 있는 소스 포트를 지정하는데 이는 사용자가 원하는 것과 거의 확실히 일치하지 않습니다.

관련 정보