>  기사  >  백엔드 개발  >  초보자를 위한 Linux 방화벽 iptables 튜토리얼

초보자를 위한 Linux 방화벽 iptables 튜토리얼

伊谢尔伦
伊谢尔伦원래의
2016-11-25 15:11:001305검색

Iptables는 Linux 운영 체제용으로 설계된 매우 유연한 방화벽 도구입니다. Linux 괴짜와 시스템 관리자에게 iptables는 매우 유용합니다. 이 문서에서는 가장 다양한 기능을 갖춘 Linux 방화벽을 구성하는 방법을 보여줍니다.

iptables 정보

Iptables는 규칙 체인을 사용하여 네트워크 트래픽을 허용/차단하는 명령줄 기반 방화벽 도구입니다. 시스템에서 네트워크 연결을 시도하면 iptables는 일치하는 규칙을 찾습니다. 찾을 수 없으면 iptables는 이에 대해 기본 조치를 취합니다.
거의 모든 Linux 배포판에는 iptables가 사전 설치되어 있습니다. Ubuntu/Debian에서 iptables를 업데이트/설치하는 명령은 다음과 같습니다.

sudo apt-get install iptables

Firestarter와 같은 일부 기존 그래픽 인터페이스 소프트웨어도 iptables를 대체할 수 있습니다. 하지만 iptables는 사용하기 어렵지 않습니다. iptables 규칙을 구성할 때, 특히 원격으로 서버에 로그인할 때 주의하십시오. 이때 오류로 인해 서버와의 연결이 영구적으로 끊길 수 있으므로, 이를 해결하려면 서버에 직접 가야 합니다.

IPtables 규칙 체인 유형

IPtables 규칙 체인은 입력, 전달 및 출력의 세 가지 유형으로 구분됩니다.

입력 - 이 체인은 대상 주소가 로컬 컴퓨터인 연결을 필터링하는 데 사용됩니다. 예를 들어, 사용자가 SSH를 사용하여 PC/서버에 로그인을 시도하면 iptables는 먼저 해당 IP 주소와 포트를 iptables 입력 체인 규칙과 일치시킵니다.

전달 - 이 체인은 대상 주소와 소스 주소가 모두 로컬이 아닌 연결을 필터링하는 데 사용됩니다. 예를 들어, 라우터가 수신한 대부분의 데이터는 다른 호스트로 전달되어야 합니다. 시스템에 NATing과 같은 라우터와 유사한 기능이 활성화되어 있지 않으면 이 체인을 사용할 필요가 없습니다.
시스템에 전달 체인이 필요한지 여부를 감지하는 안전하고 신뢰할 수 있는 방법이 있습니다.

iptables -L -v

초보자를 위한 Linux 방화벽 iptables 튜토리얼

위 그림이 정확합니다. 몇 주 동안 실행된 서버의 스크린샷입니다. 이 서버는 입력 및 출력에 어떠한 제한도 두지 않습니다. 보시다시피, 입력 체인과 출력 체인은 각각 11GB와 17GB의 데이터를 처리한 반면 포워딩 체인은 어떤 데이터도 처리하지 않았습니다. 이는 이 서버에 라우터와 같은 전달 기능이 활성화되어 있지 않기 때문입니다.


출력 - 이 체인은 소스 주소가 로컬 시스템인 연결을 필터링하는 데 사용됩니다. 예를 들어, Howtogeek.com을 핑하려고 하면 iptables는 출력 체인에서 ping 및 Howtogeek.com과 관련된 규칙을 확인한 다음 연결 요청을 허용할지 거부할지 결정합니다.

참고: 외부 호스트를 핑하면 출력 체인만 작동하는 것처럼 나타납니다. 하지만 외부 호스트에서 반환된 데이터는 입력 체인을 통해 필터링되어야 한다는 점을 기억하세요. iptables 규칙을 구성할 때 많은 프로토콜에는 양방향 통신이 필요하므로 입력 체인과 출력 체인을 모두 구성해야 한다는 점을 명심하세요. 사람들은 SSH를 구성할 때 입력 및 출력 체인 모두에서 구성하는 것을 종종 잊어버립니다.

체인의 기본 동작

특정 규칙을 구성하기 전에 이러한 체인의 기본 동작을 구성할 수 있습니다. 즉, 기존 규칙과 일치하지 않을 때 iptables가 무엇을 하길 원하시나요?
다음 명령을 실행하여 일치하지 않는 연결에 대한 iptables의 현재 기본 작업을 표시할 수 있습니다.

iptables -L

초보자를 위한 Linux 방화벽 iptables 튜토리얼

As As 위에 표시된 것처럼 grep을 사용하여 출력 결과를 더 간결하게 만들 수 있습니다. 위 스크린샷에서 모든 체인은 기본적으로 모든 연결을 허용합니다.
일반적으로 시스템이 기본적으로 모든 네트워크 데이터를 수신하기를 원할 것입니다. 이 설정은 iptables의 기본 구성이기도 합니다. 네트워크 연결을 수신하기 위한 구성 명령은 다음과 같습니다.

iptables --policy INPUT ACCEPT iptables --policy OUTPUT ACCEPT iptables --policy FORWARD ACCEPT

기본 구성을 사용하는 동안 특정 IP 주소나 포트 번호를 필터링하는 일부 명령을 추가할 수도 있습니다. 이 문서의 뒷부분에서 이러한 명령을 소개합니다.
기본적으로 모든 네트워크 연결을 거부하고 그 위에 허용된 IP 주소나 포트 번호를 추가하려면 아래 이미지와 같이 기본 구성에서 ACCEPT를 DROP으로 변경하면 됩니다. 이는 민감한 데이터가 포함된 서버에 매우 유용합니다. 일반적으로 이러한 서버는 특정 IP 주소만 액세스하도록 허용합니다.

iptables --policy INPUT DROP iptables --policy OUTPUT DROP iptables --policy FORWARD DROP

특정 연결 구성

특정 IP 주소나 포트를 구성하는 방법을 살펴보겠습니다. 이 문서에서는 가장 기본적이고 일반적인 세 ​​가지 설정을 주로 소개합니다.

수락 – 모든 데이터를 수락합니다.

삭제 – 데이터 삭제. 응용 시나리오: 데이터의 소스 주소가 시스템의 존재를 인식하는 것을 원하지 않는 경우(이를 처리하는 가장 좋은 방법)

거부 – 연결 설정을 허용하지 않지만 오류 응답을 반환합니다. 적용 시나리오: 특정 IP 주소가 시스템에 액세스하는 것을 원하지 않지만 방화벽이 해당 액세스를 차단한다는 사실을 알리고 싶은 경우.

为了直观的区分上述三种情况,我们使用一台PC来ping一台配置了iptables的Linux电脑:

초보자를 위한 Linux 방화벽 iptables 튜토리얼

允许或阻止特定的连接

在配置完基本的规则链之后,你就可以配置iptables来允许或者阻止特定的IP地址或者端口。
注意:在这些例子中,我们使用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地址的连接。你可以使用子网掩码或者标准的/符号来标示一个子网:

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

特定端口的连接
这个例子展示了如何阻止来自10.10.10.10的SSH连接。

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

你可以将“ssh”替换成其它任何协议或者端口号。上述命令中的-p tcp告诉iptables连接使用的是何种协议。

下面这个例子展示了如何阻止来自任意IP地址的SSH连接。

iptables -A INPUT -p tcp --dport ssh -j DROP

连接状态

我们之前提到过,许多协议均需要双向通信。例如,如果你打算允许SSH连接,你必须同时配置输入和输出链。但是,如果你只想允许来自外部的SSH请求,那该怎么做?
下面这个例子展示了如何允许源IP地址为10.10.10.10同时阻止目的地址为10.10.10.10的SSH连接:

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

保存更改

上述方法对iptables规则作出的改变是临时的。如果你想永久保存这些更改,你需要运行额外的命令(不同Linux发行版下的保存命令也不相同):

Ubuntu:

sudo /sbin/iptables-save

Red Hat / CentOS:

/sbin/service iptables save

或者

/etc/init.d/iptables save

其它命令

列出iptables的当前配置:

iptables -L

使用-v选项将显示数据包和字节信息;使用-n选项将以数字形式列出信息,即不将IP地址解析为域名。
换句话讲,主机名,协议和网络都以数字的形式列出。

清除当前所有的配置规则:

iptables -F

原文 The Beginner’s Guide to iptables, the Linux Firewall


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.