이것은 Linode에서 Ubuntu 12.04 LTS를 실행하는 Drupal 웹사이트입니다. 최근 누군가가 iptables 규칙을 변경했고 많은 문제가 발생하기 시작했습니다.
여기에는 다음이 포함됩니다.
서버가 외부 서비스에 액세스할 수 없기 때문에 Mollom 스팸 방지는 Drupal 사이트에서 작동하지 않습니다. (자세한 내용은 아래에서)
Drupal 보고서: "귀하의 시스템 또는 네트워크 구성으로 인해 Drupal이 웹 페이지에 액세스하는 것이 허용되지 않아 기능이 저하되었습니다."
서버가 인터넷을 ping할 수 없습니다.
ping google.com
ping: 알 수 없는 호스트 google.com다른 네트워크 서비스가 실패했습니다. 예를 들어:
$ 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"을 확인할 수 없습니다.서버가 제대로 작동하지 않습니다. 아래와 같은 오류는 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
하면 구성이 복잡해지고 모든 나가는 패킷에 대해 약간의 성능이 저하되지만 아무런 이점도 제공되지 않습니다. 또한 대부분 권한이 있는 소스 포트를 지정하는데 이는 사용자가 원하는 것과 거의 확실히 일치하지 않습니다.