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 로 테이블 확인
'서버 > 리눅스' 카테고리의 다른 글
리눅스 소켓(LInux socket) / 소켓 제한 해제 (0) | 2013.04.18 |
---|---|
가상호스트 설정 (0) | 2013.04.11 |
IPtables를 이용한 방화벽 설정 - A (0) | 2013.04.05 |
RRDtool cacti - 시스템 모니터링 도구 (0) | 2013.04.04 |
vim 설치후 설정 (0) | 2013.04.04 |