우분투에서 세 개의 포트를 제외한 모든 포트를 어떻게 차단할 수 있습니까?


22

1962, 999, 12020을 제외한 모든 포트를 어떻게 차단합니까?

SSH 용 포트 1 개와 스크립트 용 2 개 포트. 따라서이 포트에서 나가는 것을 허용해야합니까?

내 iptables :

# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*mangle
:PREROUTING ACCEPT [643521:136954367]
:INPUT ACCEPT [643521:136954367]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
:POSTROUTING ACCEPT [645723:99904505]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*filter
:INPUT ACCEPT [643490:136950781]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
-A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*nat
:PREROUTING ACCEPT [5673:734891]
:POSTROUTING ACCEPT [2816:179474]
:OUTPUT ACCEPT [2816:179474]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012

미안하지만,이 물건에 관해서는 정말 초보자이며 서버를 더 안전하게 만들고 싶습니다.


왜 UFW를 사용하지 않습니까?
Soviero

답변:


25

처음에는 항상 이미 정의 된 내용을 확인하기 위해 항상 플러시해야합니다.

iptables -F

그런 다음 끝에 도달하고 일치하는 규칙이없는 경우 입력 체인의 기본 정책을 DROP으로 설정하십시오.

iptables -P INPUT DROP

루프백이 발생하지 않도록하려면 다음을 추가해야합니다.

iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

lo-if의 모든 트래픽과 연결을 위해 들어오는 모든 트래픽을 허용합니다. 그런 다음 서비스에 필요한 모든 규칙을 추가하십시오 (필요한 경우 ssh를 여는 것을 잊지 마십시오! 그렇지 않으면 나옵니다) .

iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 

본인과 다른 사람들이 실수로 보안에 구멍을 뚫는 것을 막기 위해 약간의 트릭을 추가합니다.

iptables -A INPUT -j DROP

이 줄은 INPUT 체인의 모든 항목과 일치하며 정책은 아무것도 가져 오지 않아야합니다. 규칙 세트를 초기화 한 후 언젠가 ACCEPT 규칙을 추가하더라도 모든 것이 삭제되기 때문에 점검되지 않습니다. 모든 것을 한 곳에 보관해야합니다.

귀하의 질문에 대해 전체적으로 요약하면 다음과 같습니다.

iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 
iptables -A INPUT -j DROP

1
명확히하기 위해 : -P체인에 정책을 설정하십시오. 실제로 규칙을 추가하는 것은 아닙니다. 체인 정책은 체인 끝에 도달하면 패킷에서 수행 할 작업을 나타냅니다. 따라서 정책을 설정 하기 전에 규칙을 추가 하는 것이 DROP좋습니다.
Belmin Fernandez

올바르게 기억한다면 일반적으로 정책을 설정할 위치는 중요하지 않습니다.
모세

3
참고 사항 : ssh를 통해 방화벽을 설정할 때 기본 정책 거부 및 플러시 설정에 매우주의하십시오. 당신은 자신을 잠글 것입니다. 예,이 작업을 완료했습니다. :-) 이제 나는 일반적으로 iptables -A INPUT -j DROP대신 마지막 규칙을 만듭니다 .
Sirex

나는 내 ssh 경고를 약간 강조했다 ;-)
Mose

@Mose : 일반적으로 중요하지 않은 문제를 해결하십시오. 나는 그것을 강조하려고 노력했다. 그러나 이미 언급했듯이 잠기 게 될 수 있습니다.
Belmin Fernandez

20

당신과 같은 초보자의 답변 :-) 우분투 서버를 보호해야했습니다 .iptables를 배우는 것은 내가 통과 할 수없는 고통이었습니다. UFW (Uncomplicated Firewall)는 방화벽 구성을 최대한 쉽게 해주는 프로그램입니다.

  • ufw 설치 :

    sudo apt-get install ufw
    
  • 즉시 비활성화하십시오 (내 SSH 로그인이 잠겨 있기 때문에 구조 부팅해야했습니다).

    sudo ufw disable
    
  • "거부"를 기본 규칙으로 설정하십시오 (모든 포트를 차단 함).

    sudo ufw default deny
    
  • 필요한 포트를 허용하십시오.

    sudo ufw allow to 1962
    sudo ufw allow to 999
    sudo ufw allow to 12020
    
    sudo ufw allow from 1962
    sudo ufw allow from 999
    sudo ufw allow from 12020
    
  • 위의 규칙이 ssh 연결을 중단하지 않는다고 확신하는 경우 ufw를 활성화하십시오.

    sudo ufw enable
    

문서는 잘 작성되었으며 더 많은 예제를 제공합니다. https://help.ubuntu.com/community/UFW


1
방화벽 구성으로 작업 할 때는 방화벽을 다시 비활성화하는 크론 작업을 만드는 것이 좋습니다. 잠긴 경우를 대비하여.
pymkin

이 같은 오류를 던지고, 0.35 UFW으로 일을하지 않습니다 ERROR: Bad destination addressERROR: Bad source address
데이브

특정 인터페이스에 대해 하나의 포트를 제외한 모든 포트를 허용하는 방법은 무엇입니까? 기본 거부 규칙을 사용하고 있으며 VPN을 사용할 때 DNS 누출을 방지하기 위해 이더넷 인터페이스에서 DNS 포트 53을 차단하려고합니다. 현재 개인 IP 범위에 사용하려는 모든 포트를 허용해야하지만 매우 편리하지 않습니다.
baptx
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.