Articles

리눅스 iptables 방화벽 단순화 예

이전 게시물에서,우리가 얘기하는 방법에 대한 안전한 리눅스 서버를 사용하여 강하게 하는 모범 사례를 설명합니다. 어떤 사람들은 방화벽 섹션에 대해 물었습니다.이 섹션은 iptables 방화벽에 대한 간략한 소개였습니다. 오늘 우리는 Linux iptables 방화벽과 그 멋진 방화벽을 사용하여 서버 트래픽을 보호하는 방법에 대해 자세히 설명합니다.

테이블의 내용.

Iptables CentOS7

사용하는 경우 7,당신은 당신을 찾는 특정 작업을 수행을 관리합 iptables,그래서 당신은 다시 가고 싶 iptables,당신은 당신을 중지하고 마스크는 특정 작업을 수행.

$ systemctl stop firewalld$ systemctl mask firewalld

설치 iptables 과 서비스를 설정합니다.

$ yum install iptables-services$ systemctl enable iptables

그리고 당신은 그것을 시작할 수 있습니다:

$ systemctl start iptables

는 방법 Linux firewall 작품

Iptables 방화벽 기능이 내장되어 있에 Netfilter framework 에서 사용할 수 있는 리눅스 커널 패킷 필터링.

방화벽에 유형

두 가지 유형의 방화벽:

상태 정보를 저장하지 않는 방화벽 프로세스의 각 패킷은 자체에서,그것은 의미가 표시되지 않은 다른 패킷의 동일한 연결입니다.

상태 저장 방화벽 이 유형의 방화벽은 전달 된 모든 패킷을 관리하므로 연결 상태를 알고 있습니다. 그것은 트래픽을 통해 더 많은 제어를 제공합니다.

Netfilter 에는 테이블이 포함되어 있습니다. 이러한 테이블에는 체인이 포함되며 체인에는 개별 규칙이 포함됩니다.

패킷이 어떤 규칙과 일치하면 iptables 는 해당 패킷에 규칙 작업을 적용합니다.

작업은 다음과 같을 수 있습니다: 더 많은 처리를 위해 패킷을 수락,거부,무시 또는 다른 규칙에 전달합니다.

Netfilter 는 IP 주소와 포트 번호를 사용하여 수신 또는 발신 트래픽을 처리 할 수 있습니다.

iptables 명령은 Netfilter 를 관리하고 구성합니다.방화벽 명령 작성을 시작하기 전에 방화벽 규칙을 쉽게 작성할 수 있도록 방화벽 구조를 조금 이해해야합니다.

iptables 방화벽 테이블

Netfilter 에는 처리를위한 규칙을 수행 할 수있는 세 개의 테이블이 있습니다.

iptables 필터 테이블은 트래픽을 처리하기위한 기본 테이블입니다.두 번째는 NAT 규칙을 처리하는 nat 테이블입니다.

세 번째 테이블은 맹 글링 패킷의 맹 글링 테이블입니다.

테이블이 체인

각각 테이블의 테이블 위에서 언급된 담 체인;이러한 사슬은 컨테이너의 규칙의 iptables.

필터 테이블에는 정방향,입력 및 출력 체인이 포함됩니다. 사용자 정의 체인을 만들어 규칙을 저장할 수 있습니다.

패킷이 호스트에 오는 경우 iptables 는 입력 체인 규칙에 따라 처리합니다.

패킷이 다른 호스트로가는 경우 출력 체인 규칙이이를 처리한다는 것을 의미합니다.

iptables 는 호스트에 액세스했지만 다른 호스트로 향하는 패킷을 처리하기 위해 포워드 체인을 사용합니다.

체인 정책

필터 테이블의 각 체인에는 정책이 있습니다. 정책은 iptables 가 취하는 기본 조치입니다.정책은 삭제,거부 및 수락 일 수 있습니다.

수락 정책은 패킷이 방화벽을 통과하도록 허용합니다. 드롭 정책은 클라이언트에 알리지 않고 패킷을 삭제합니다. 거부 정책은 또한 패킷을 삭제하고 발신자에게 알립니다.

보안 관점에서,당신은 모든 패킷을 오는 호스트만을 적용을 패킷에서 신뢰할 수 있는 소스입니다.

추가 iptables 규칙

추가할 수 있습니다 새로운 규칙을 사용하여 iptables 다음과 같은 명령을 입력하십시오:

$ iptables -A INPUT -i eth1 -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT

의 이 명령은 조각으로 그렇게 우리가 모든 것을 이해할 수 있다.

-A 는 새로운 규칙을 추가하고 있음을 의미합니다. 기본적으로 iptables 는 다른 테이블을 지정하지 않는 한 모든 새 규칙을 필터 테이블에 추가합니다.

-i 플래그는 규칙을 적용할 장치를 지정합니다. 장치를 지정하지 않으면 iptables 는 장치에 관계없이 들어오는 모든 트래픽에 규칙을 적용합니다.

-p 플래그는 처리하려는 패킷의 프로토콜을 지정합니다.이 프로토콜은 우리의 경우 TCP 입니다.

-dport 플래그는 80 인 대상 포트를 지정합니다.

-d 는 1.2.3.4 인 대상 IP 주소를 지정합니다. 지정된 대상 IP 주소가 없으면 IP 주소에 관계없이 eth1 의 모든 수신 트래픽에 규칙이 적용됩니다.

-j 는 할 동작 또는 점프 동작을 지정합니다. 여기서는 수락 정책을 사용하여 패킷을 수락합니다.

위의 규칙은 포트 80 에있는 들어오는 HTTP 트래픽을 허용합니다.

나가는 트래픽을 허용하는 것은 어떻습니까?

$ iptables -A OUTPUT -o eth1 -p tcp --sport 80 -j ACCEPT

-A 플래그를 사용하여 출력 체인에 규칙을 추가할 수 있습니다.

발신 트래픽에 사용되는 장치에-o 플래그가 사용됩니다.

-sport 플래그는 소스 포트를 지정합니다.

sport 또는 dport 의 숫자 포트 번호 대신 http 또는 https 와 같은 서비스 이름을 사용할 수 있습니다. 모든 서비스 이름은/etc/services 파일에 있습니다.포트 번호가 아닌 서비스 이름을 사용해야하므로 규칙을 쉽게 읽을 수 있습니다.

iptables 규칙 순서

iptables 는 체인의 끝에 새 규칙을 배치합니다. -I 옵션을 사용하여 상단에 추가할 수 있습니다.

지금 보시다시피 규칙의 순서가 중요합니다. I 플래그를 사용하여 원하는 위치에 규칙을 정확하게 삽입 할 수 있습니다.

보면 다음과 같은 규칙을 이해하 규칙이 어떻게 주문정

$ iptables -I INPUT 3 -i eth1 -p udp -j ACCEPT$ iptables -I INPUT 4 -i eth1 -p udp --dport 80 -j DROP

첫 번째 규칙은 모든 UDP 트래픽을 제공하 eth1,과 3 번은 규칙의 순서.

두 번째 규칙은 포트 80 에 들어가는 트래픽을 삭제합니다.

첫 번째 규칙이 허용하는 모든 트래픽 다음,두번째 규칙이 어떤장해야 합니다 트래픽이 아무것도 하지 않기 때문 iptables 통과 트래픽에서 첫번째 규칙이 있습니다.

당신의 규칙은 사슬에있는 규칙의 순서가 중요하기 때문에 의미가 있어야합니다.

목 iptables 규칙

할 수 있는 목록에서 규칙을 사용하여 체인-L flag:

$ iptables -L INPUT

를 표시할 수 있습니다 라인은 숫자를 사용하여 규칙을 선호:

$ iptables -L INPUT --line-numbers

목록을 보여줍 이름의 서비스입니다. 대신-n 옵션을 사용하여 포트 번호를 표시 할 수 있습니다:

$ iptables -L INPUT -n --line-numbers

위의 규칙은 IPTABLES 를 DNS 확인 및 서비스 조회에서 방지하므로 목록을 더 빠르게 만듭니다.

할 수 있 목록에 대한 모든 규칙의 모든 체인을 다음과 같다:

$ iptables -L -n --line-numbers

을 얻을 얼마나 많은 패킷 처리에 의해 각 규칙을 사용할 수 있습니다-v 플래그:

$ iptables -L -v

또한,재설정할 수 있습니다 카운터를 사용하여 제이-Z 플래그입니다.

이제 우리는 우리를 추가 할 수 있는 새로운 규칙을 모든 체인 우리는,우리는 삽입할 수 있는 규칙에서 특정기 위해,우리가 할 수 있 목록에 대한 규칙을 어떤 체인 또는 모든 체인,하지만 삭제하는 방법에 대한 규칙?

삭제하는 규칙

삭제할 수 있습니다 규칙을 사용하여-D 플래그:

$ iptables -D INPUT -i eth1 -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT

이 명령이 삭제 HTTP 규칙을 지정한다.

규칙을 삭제하기 전에 규칙 사양을 나열하여 확인한 다음 삭제하십시오.

규칙 사양을 작성하는 대신 순서 번호를 사용하여 규칙을 삭제할 수 있습니다.

$ iptables -D INPUT 2

삭제할 수 있습니다 모든 규칙에서 특정을 사용하여 체인-F 플래그는 의미 넘치는 모든 규칙이 있습니다.

$ iptables -F INPUT

경우에 당신은 당신을 언급 체인 이름을 사용하는 경우-F 플래그,다음은 모든 체인 규칙을 삭제됩니다.

교체 규칙

을 대체할 수 있는 기존 규칙과 당신의 자신의 규칙을 사용하기:

$ iptables -R INPUT 1 -i eth1 -p tcp --dport httpht -d 1.2.3.4 -j ACCEPT

이 명령을 대체합니다 첫 번째 규칙에 입력망을 가진화된 규칙이 있습니다.

목록 특정 테이블

을 목록으로는 특정 테이블을 사용하 t 플래그의 테이블과 같은 이름이다.

$ iptables -L -t nat

여기서 우리 목록에서 규칙 nat 테이블.

Iptables 사용자 정의 체인

사용자 정의 체인을 만들려면-N 플래그를 사용하십시오.

$ iptables -N MY_CHAIN

또한-E 플래그를 사용하여 이름을 바꿀 수 있습니다.

$ iptables -E MY_CHAIN NEW_NAME

그리고-X 플래그를 사용하여 사용자 정의 체인을 삭제할 수 있습니다.

$ iptables -X MY_CHAIN

-X 플래그를 사용할 때 체인 이름을 언급하지 않으면 모든 사용자 정의 체인이 삭제됩니다. 입력 및 출력과 같은 기본 제공 체인은 삭제할 수 없습니다.

리다이렉션을 사용자 정의 사슬

리디렉션할 수 있습니다 패킷을 사용자 정의 체인과 같은 내장된 체인을 사용하여-j 플래그입니다.

$ iptables -A INPUT -p icmp -j MY_CHAIN

위의 규칙은 모든 ICMP 트래픽을 체인 MY_CHAIN 으로 리디렉션합니다.

체인의 기본 정책 설정

-P 플래그를 사용하여 특정 체인의 기본 정책을 설정할 수 있습니다. 기본 정책은 수락,거부 및 삭제 일 수 있습니다.

$ iptables -P INPUT DROP

그래서 지금,입력 체인 드롭 패킷 오지 않는 한 당신이 규칙을 작성하여 허용하신 트래픽이다.

SYN 초

공격자를 보내 SYN 패킷을 완료하지 않고 TCP 핸드셰이크와 결과적으로 수신 호스트가 많은 열린 연결과 당신의 서버가 너무 바빠서에 대응하는 다른 클라이언트입니다.iptables 방화벽의 제한 모듈을 사용하여 SYN 범람으로부터 우리를 보호 할 수 있습니다.

$ iptables -A INPUT -i eth1 -p tcp --syn -m limit --limit 10/second -j ACCEPT

여기서 우리는 초당 10 개의 SYN 패킷만을 지정합니다. 네트워크 요구에 따라 이 값을 조정할 수 있습니다.이것이 네트워크를 스로틀하는 경우 SYN 쿠키를 사용할 수 있습니다.

SYN 쿠키

/etc/sysctl.conf

파일이 줄을 추가

net.ipv4.tcp_syncookies = 1

한 다음 저장고 합니다.

$ sysctl -p

드롭 잘못된 상태로 패킷

잘못된 상태로 패킷은 패킷에 속하지 않는 모든 연결하고 당신은 그들을 놓습니다.

$ iptables -A INPUT -m state --state INVALID -j DROP

이 규칙은 들어오는 모든 잘못된 상태 패킷을 삭제합니다.

드롭된 패킷

된 패킷은 조각의 큰 잘못된 패킷을 써야 하는 규칙이 필요합니다.

-f 플래그는 iptables 방화벽에 모든 조각을 선택하도록 지시합니다. 따라서 iptables 를 라우터로 사용하지 않는 경우 조각난 패킷을 삭제할 수 있습니다.

$ iptables -A INPUT -f -j DROP

iptables 규칙 저장

서버를 재부팅하면 작성한 모든 규칙을 잃게됩니다.CentOS 또는 Red Hat 을 사용하는 경우 iptables-save 명령을 사용하여 모든 규칙을 저장할 수 있습니다.

iptables-save > /etc/sysconfig/iptables

CentOS7,저장할 수 있습니다 규칙은 다음과 같다:

$ service iptables save

을 저장할 수 있습 특정 테이블과 같은 필터 테이블만:

$ iptables-save -t filter

또한 iptables-restore 를 사용하여 규칙을 복원 할 수 있습니다.

데비안 기반 배포판에서는 iptables-persistent 패키지를 사용하여 규칙을 저장하고 복원 할 수 있습니다.

첫 번째는,설치합니다:

$ apt-get install iptables-persistent

을 저장할 수 있습니다 다음과 규칙을 복원

$ netfilter-persistent save
$ netfilter-persistent reload

나는 당신이 찾을 수 있 iptables 방화벽을 쉽습니다. 계속 돌아온다.

감사합니다.

의 설립자 LikeGeeks. 저는 2010 년부터 리눅스 시스템 관리자로 일하고 있습니다. 전 세계의 여러 클라이언트에 대해 Linux 서버를 유지 관리,보안 및 문제 해결해야 할 책임이 있습니다. 내 작업을 자동화하기 위해 쉘과 파이썬 스크립트를 작성하는 것을 좋아합니다.나는 이것을 할 수 없다.