iptables 초보자 가이드, Linux 방화벽
iptables는 Linux 운영 체제 용으로 제작 된 매우 유연한 방화벽 유틸리티입니다. 당신이 초보 리눅스 전문가이거나 시스템 관리자 이건간에 iptables가 당신에게 큰 도움이 될 수있는 방법이있을 것입니다. 가장 다재다능한 리눅스 방화벽을 설정하는 방법을 설명하는 글을 계속 읽어보십시오..
~의 사진 자오선.
iptables 정보
iptables는 정책 체인을 사용하여 트래픽을 허용하거나 차단하는 명령 줄 방화벽 유틸리티입니다. 연결이 시스템에서 자체 설정을 시도하면 iptables는 일치하는 목록의 규칙을 찾습니다. 하나도 찾지 못하면 기본 동작을 사용합니다..
iptables는 거의 모든 Linux 배포판에 사전 설치되어 제공됩니다. 업데이트 / 설치하려면 iptables 패키지를 검색하십시오.
sudo apt-get iptables 설치하기
Firestarter와 같은 iptables에 대한 GUI 대안이 있지만, 몇 가지 명령을 내려 놓으면 iptables는 그리 어렵지 않습니다. iptables 규칙을 구성 할 때, 특히 서버에 SSH를 사용하는 경우 특히주의해야합니다. 하나의 잘못된 명령이 물리적 시스템에서 수동으로 고정 될 때까지 사용자를 잠글 수 있기 때문입니다.
체인의 종류
iptables는 세 개의 다른 체인을 사용합니다 : 입력, 전달 및 출력.
입력 - 이 체인은 들어오는 연결에 대한 동작을 제어하는 데 사용됩니다. 예를 들어 사용자가 PC / 서버로 SSH를 시도하면 iptables는 IP 주소와 포트를 입력 체인의 규칙과 일치 시키려고 시도합니다.
앞으로 - 이 체인은 실제로 로컬로 배달되지 않는 들어오는 연결에 사용됩니다. 라우터를 생각해보십시오 - 데이터는 항상 라우터로 보내지 만 실제로 라우터 자체는 거의 대상이 아닙니다. 데이터가 대상으로 전달됩니다. 포워딩이 필요한 시스템에서 라우팅, NATing 또는 기타 작업을 수행하지 않는 한이 체인을 사용하지 않아도됩니다.
시스템이 순방향 체인을 사용하는지 여부를 확인하는 확실한 방법이 있습니다..
iptables -L -v
위의 스크린 샷은 몇 주 동안 실행 중이며 수신 또는 발신 연결에 대한 제한이없는 서버에 대한 것입니다. 보시다시피 입력 체인은 11GB의 패킷을 처리하고 출력 체인은 17GB를 처리했습니다. 다른 한편, 순방향 체인은 단일 패킷을 처리 할 필요가 없습니다. 이는 서버가 어떤 종류의 포워딩도하지 않거나 통과 장치로 사용되지 않기 때문입니다.
산출 - 이 체인은 나가는 연결에 사용됩니다. 예를 들어 howtogeek.com에 ping을 시도하면 iptables는 출력 체인을 검사하여 연결 시도를 허용하거나 거부하기로 결정하기 전에 ping 및 howtogeek.com과 관련된 규칙을 확인합니다.
주의 사항
외부 호스트에 ping을하는 것만으로 출력 체인을 탐색해야하는 것처럼 보이더라도 데이터를 반환하려면 입력 체인도 사용된다는 점을 명심하십시오. iptables를 사용하여 시스템을 잠그는 경우 많은 프로토콜이 양방향 통신이 필요하므로 입력 및 출력 체인을 모두 올바르게 구성해야합니다. SSH는 사람들이 양쪽 체인에서 허용하지 않는 일반적인 프로토콜입니다..
정책 체인 기본 동작
특정 규칙을 설정하고 구성하기 전에 세 체인의 기본 동작을 원하는대로 결정해야합니다. 즉, 연결이 기존 규칙과 일치하지 않으면 iptables에서 수행하고자하는 작업은 무엇입니까??
현재 일치하지 않는 트래픽과 관련하여 정책 체인이 어떤 구성을 가지고 있는지 확인하려면 iptables -L
명령.
보시다시피 grep 명령을 사용하여 더 깨끗한 결과물을 얻을 수 있습니다. 해당 스크린 샷에서 우리의 체인은 현재 트래픽을 수용 할 것으로 생각됩니다..
더 많은 시간이 걸리면 시스템이 기본적으로 연결을 허용하게됩니다. 이전에 정책 체인 규칙을 변경하지 않았다면이 설정이 이미 구성되어 있어야합니다. 어느 쪽이든 기본적으로 연결을 허용하는 명령은 다음과 같습니다.
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
기본적으로 수락 규칙을 사용하면 iptables를 사용하여 다른 모든 연결을 계속 허용하면서 특정 IP 주소 또는 포트 번호를 거부 할 수 있습니다. 우리는 1 분 안에 그 명령에 도달 할 것입니다..
모든 연결을 거부하고 연결을 허용 할 연결을 수동으로 지정하려면 체인의 기본 정책을 삭제하도록 변경해야합니다. 이 작업은 민감한 정보가 포함되어 있고 동일한 IP 주소로만 연결되는 서버에만 유용합니다..
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
연결 별 응답
기본 체인 정책이 구성된 상태에서 iptables에 규칙을 추가 할 수 있으므로 특정 IP 주소 또는 포트와의 연결이 발생할 때 수행 할 작업을 알 수 있습니다. 이 가이드에서는 세 가지 가장 기본적이고 일반적으로 사용되는 "응답".
동의 - 연결 허용.
하락 - 연결이 끊어 지거나, 일어난 적이없는 것처럼 행동하십시오. 소스가 시스템 존재를 인식하지 못하도록하는 경우에 가장 좋습니다.
받지 않다 - 연결을 허용하지 말고 오류를 다시 보내십시오. 이는 특정 소스를 시스템에 연결하지 않고 방화벽이 차단 한 것을 알기를 원할 때 가장 좋습니다.
이 세 가지 규칙의 차이점을 보여주는 가장 좋은 방법은 PC가 Linux 컴퓨터에 iptables를 설정하고이 설정 중 하나에 대해 ping을 시도 할 때의 모습을 보여주는 것입니다.
연결 허용 :
연결 끊기 :
연결 거부 :
특정 연결 허용 또는 차단
정책 체인을 설정하면 특정 주소, 주소 범위 및 포트를 허용하거나 차단하도록 iptables를 구성 할 수 있습니다. 이 예에서는 다음과 같은 연결을 설정합니다. 하락
, 하지만 그 (것)들을 수락
또는 받지 않다
, 필요에 따라 정책 체인을 구성하는 방법에 따라.
참고 :이 예에서 Google은 iptables -A
기존 체인에 규칙을 추가합니다. iptables는 목록의 맨 위에서 시작하여 일치하는 규칙을 찾을 때까지 각 규칙을 거칩니다. 규칙을 다른 규칙보다 위에 삽입해야하는 경우 iptables -I [chain] [number]
목록에 있어야 할 번호를 지정한다..
단일 IP 주소의 연결
이 예에서는 IP 주소 10.10.10.10에서 모든 연결을 차단하는 방법을 보여줍니다..
iptables -A INPUT -s 10.10.10.10 -j DROP
다양한 IP 주소의 연결
이 예에서는 10.10.10.0/24 네트워크 범위의 모든 IP 주소를 차단하는 방법을 보여줍니다. 넷 마스크 또는 표준 슬래시 표기법을 사용하여 IP 주소의 범위를 지정할 수 있습니다.
iptables -A INPUT -s 10.10.10.0/24 -j DROP
또는
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
특정 포트에 대한 연결
이 예는 SSH 연결을 10.10.10.10에서 차단하는 방법을 보여줍니다..
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
"ssh"를 프로토콜이나 포트 번호로 바꿀 수 있습니다. 그만큼 -피 TCP
코드의 일부는 iptables에게 프로토콜이 어떤 종류의 연결을 사용하는지 알려줍니다. TCP가 아닌 UDP를 사용하는 프로토콜을 차단하는 경우 -P udp
대신에 필요할 것이다..
이 예에서는 모든 IP 주소에서 SSH 연결을 차단하는 방법을 보여줍니다..
iptables -A INPUT -p tcp --dport ssh -j DROP
연결 상태
앞서 언급했듯이 많은 프로토콜이 양방향 통신을 필요로합니다. 예를 들어, 시스템에 SSH 연결을 허용하려면 입력 및 출력 체인에 규칙을 추가해야합니다. 하지만 시스템에 들어오는 SSH 만 허용되도록하려면 어떻게해야합니까? 출력 체인에 규칙을 추가하지 않으면 나가는 SSH 시도도 허용됩니다.?
이것이 연결 상태가되는 곳입니다. 양방향 통신을 허용하면서 단방향 연결 만 허용 할 수있는 기능을 제공합니다. 10.10.10.10의 SSH 연결은 허용되지만 10.10.10.10의 SSH 연결은 허용되지 않는이 예를 살펴보십시오. 그러나 세션이 이미 설정되어있는 한 시스템은 SSH를 통해 정보를 되돌려 보낼 수 있으므로이 두 호스트간에 SSH 통신이 가능합니다..
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m 상태 - 상태 NEW, ESTABLISHED -j ACCEPT
iptables -A 출력 -p tcp --sport 22 -d 10.10.10.10 -m 상태 - 상태 ESTABLISHED -j 승인
변경 사항 저장
iptables 규칙에 대한 변경 사항은 다음에 변경 사항을 저장하기위한 명령을 실행하지 않는 한 iptables 서비스가 다시 시작될 때 폐기됩니다. 이 명령은 배포본에 따라 다를 수 있습니다.
우분투 :
sudo / sbin / iptables-save
Red Hat / CentOS :
/ sbin / service iptables save
또는
/etc/init.d/iptables save
기타 명령
현재 구성된 iptables 규칙을 나열하십시오 :
iptables -L
추가 -V
옵션은 패킷 및 바이트 정보를 제공하고 추가 -엔
모든 것을 숫자로 나열합니다. 즉, 호스트 이름, 프로토콜 및 네트워크가 숫자로 나열됩니다..
현재 구성된 모든 규칙을 지우려면 flush 명령을 실행할 수 있습니다.
iptables -F