반응형

iptables에서 source 와 target 지정

: 소스발신지의 IP주소를 지정하는 방법

1. www.tistory.com, localhost등과 같이 도메인이름을 이용

2. 127.0.0.1과 같이 IP주소를 이용하는 방법

3. IP주소의 대역폭을 지정하는것

- 192.168.1.0/24 와 같이 네트워크 영역을 지정

- 모든 IP주소를 지정할 시에는 0/0가 사용

ex) iptables -A INPUT -s 0/0 -j DROP

 

: 반대의 의미로 사용하고 싶다면 ! (not의 의미)를 사용하면 됨.

ex) -s ! localhost 라고 하면 localhost로 부터 오는 패킷이 아닌 경우를 의미

 

: 프로토콜 지정은 -p를 사용하는데 포트번호가 될 수도 있고 TCP, UDP와 같은 프로토콜 이름을 지정할 수도 있음. 프로토콜 이름에도 ! 사용가능

ex) -p ! TCP : TCP 프로토콜이 아닌 모든 프로토콜

TCP 포트를 확장하여 지정가능. TCP확장은 --protocol tcp 가 지정되고 다른 적용이 지정되지 않으면 자동으로 체인이 적재

 

: --source-port

- ! 옵션이 선행될 수 있으며, 하나의 TCP포트나 포트의 범위를 지정

 

: --sport

- /etc/services 파일에 기록된 사항과 같은 포트이름을 사용할 수도 있으며, 숫자로 포트번호를 지정할 수 있음. 두개의 포트이름을 -로 연결해서 사용하거나 하나의 포트 뒤에 -을 사용하거나, 하나의 포트 앞에 -를 붙일수 있음

 

: --destination-port, --dport

- 소스 포트 지정과 같으며 목적지를 지정

 

: --tcp-flags

- 첫번째 단어는 검사하고자하는 지시자 리스트의 마스크, 두번째 단어는 지시자에게 어떤 것이 설정 될 것인지 말해줌. 이 옵션은 한방향으로만 통신이 가능하게 설정하기 위해서 많이 사용함

ex) iptables -A INPUT -p TCP --tcp-flags SYN,RST,ACK SYN -j DROP

: --tcp-flags에 첫번째 인자는 검사할 리스트 마스크이며 두번째 인자는 설정되어 있어야할 플래그. SYN, RST, ACK 플래그중 SYN의 set이 1로 되어있으면 위의 --tcp-flags설정에 해당이되므로 패킷은 DROP됨

 

: 클라이언트와 서버간의 접속단계

1. client -------------- syn --------------> Server

2. client <------------- syn, ack ----------- Server

3. client -------------- ack --------------> Server

- syn 패킷은 접속요청 플래그(syn)가 설정된 패킷이므로 syn 패킷만 막으면 클라이언트가 접속할 수 없음

 

: --syn

- ! 옵션이 선행 될 수 있음, --tcp-flags SYN, RST, ACK, FIN SYN의 약어

 

: --tcp-option

- ! 나 숫자가 옵션에 선행될 수 있음, 숫자가 앞에 올 경우 그 숫자와 TCP옵션이 같은 경우의 패킷을 검사. TCP옵션을 검사하려 할 때 완전한 TCP헤더를 갖지 않는 것은 자동으로 거부(DROP)됨

 

iptables 방화벽은 테이블 형식으로 정책을 관리

: 등록순서에 있어서 먼저 등록한 정책에 대해 효력이 유효함

- 등록시에는 순서가 매우 중요함

: 허용하는 정책을 먼저 정의한 다음 거부하는 정책을 설정

 

ACCEPT    tcp    --    anywhere        anywhere        tcp dpt:ssh

DROP        tcp    --    anywhere        anywhere        tcp dpts:ssh:30

: 위에서 보는것과 같이 첫번째에 22번 포트를 허용하고 다음줄에 22번부터 30번포트까지 접속 거부를 설정. ssh포트에 대해 먼저 접속을 허용해주었기 때문에 원격에서 접속이 가능. 하지만 위의 순서를 바꾸면 ssh원격접속은 불가능하게 됨

: 대부분의 원격 접속을 22번 ssh 접속을 사용하기 때문에 iptables를 설정할 시에는 항상 22번 포트를 먼저 오픈해 주도록 함

- iptables -A INPUT -p tcp --dport 22 -j ACCEPT

 

 

포트 열기

: ftp-data 포트

iptables -A INPUT -p tcp --dport 20 -j ACCEPT

: ftp 21번 포트

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

: ssh 22번 포트

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

: named 포트

iptables -A INPUT -p udp --dport 53 -j ACCEPT

: http 포트

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

: pop3 포트

iptables -A INPUT -p tcp --dport 110 -j ACCEPT

: imap 포트

iptables -A INPUT -p tcp --dport 143 -j ACCEPT

: mysql 포트

iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

: 서브시포트 모두 거부

iptables -A INPUT -p tcp --dport 1:65535 -j DROP

: ping에 대한 응답 거부

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

 

iptable 적용 및 확인

: /etc/init.d/iptables save

- /etc/sysconfig/iptables 파일이 생성

- 이후 재부팅시마다 자동으로 iptables설정이 적용

: cat /etc/sysconfig/iptables

 

nmap 포트스캐너를 이용하면 오픈된 포트를 알수 있음

: nmap localhost

 

예제) 웹서비스의 80번 포트 공격에 대한 iptables 설정

개요 : 1초동안 80번포트에 똑같은 IP가 10번이상 SYN가 들어오면 드랍시킴

     정상적인 요청이 아닌 웹서비스 공격으로 간주하여 요청패킷을 폐기시킴

설정

: iptables -A INPUT -p tcp --dport 80 -m recent --update --seconds 1 --hitcount 10 --name HTTP -j DROP

: /etc/init.d/iptables status 로 테이블 확인

Posted by 마광2
,