# Sangchul Byun 2010-07-29
# Loopback traffic allow
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
# 사내네트워크
-A INPUT -s 192.168.0.19 -j ACCEPT
# TCP flag check
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP
-A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
# State chase
-A INPUT -m state --state INVALID -j DROP
-A OUTPUT -m state --state INVALID -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Service Port Configuration
# DNS
-A INPUT -p udp -m udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
# HTTP
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
# SSL
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# MySQL
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
# SSH
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 2165 -j ACCEPT
# FTP
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
# SNMP
-A INPUT -p udp -m udp --dport 161 -j ACCEPT
# Deny port
-A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
-A INPUT -p tcp -m tcp --dport 0:1023 -j DROP
-A INPUT -p udp -m udp --dport 0:1023 -j DROP
COMMIT
1.1 IPTALBES 의 COMMAND와 옵션 방법.
1.1.1 명령의 기본 형태
iptable - [ADC]chain-rule-specification [option]
iptable - [RI] chain rulenum rule - specification [option]
iptable - D chain rulenum [options]
iptable - [LFZ] [chain] [options]
iptable - [NX] chain
iptable - P chain target [option]
iptalbe - E old-chain-name new-chain-name
* iptables -A INPUT -s 211.254.138.130 -j DROP
* iptables -A OUPUT -d 211.254.138.130 -j DROP
#iptables -A INPUT -s 근원지 --sport 근원지포트 -d 목적지 --dport 목적지의 포트 -j 정책 |
1.1.2 commands
-A (--append) : 지정된 체인의 끝에 하나 또는 그 이상의 정책을 첨가
-I (--insert) : 지정된 체인의 시작에 하나 또는 그 이상의 정책을 삽입
-D (--delete) : 정책 내용과 일치하는 특징 체인에서 하나 또는 그 이상의 정책을 삭제
(ex) iptables -D 1 (룰번호 1번 삭제)
-R (--replace) : 선택된 체인에서 정책을 교채
-L (--list) : 선택된 체인에서 모든 정책의 목록을 출력 (룰번호등을 확인 출력)
-F (--flush) : 지정된 체이 내의 정책들을 삭제
-Z (--zero) : 모든 체인의 byte와 packet 카운트를 0으로 만든다.
-N (--new-chain)
-X (--delete-chain) : 지정한 상용자 정이 체인을 삭제 한다.
-P (--policy) : 지정된 체인에 정책을 세운다.
-E (--rename-chain) : 체인의 이름을 바꾼다.
-h
1.1.3 Rule specification parameters (중요) -p : 점검할 패킷 또는 정책에 대한 프로토콜이 정의 ex) -p tcp, -p udp |
* 패킷이 들어오는 체인 : -INPUT, FORWARD, PREROUTING
패킷이 나가는 체인 : -OUTPUT, FORWARD, POSTROUTING
-f : 두 번째 이후의 패킷에 대한 규칙을 지정할 수 있다.
-c(-set-counters) PKTS BYTES : 정책에 패킷과 byte를 초기화 할 수 있다.
1.1.4 OPTIONS
-v(--verbose) : 상세 정보를 출력
-n(--numeric) : 호스트 이름이나 포트 이름 대신 숫자로 출력
-x(--exact) : 패킷과 바이트 카운터 값을 단위(K,M,G)로 보여주지 않고 전제 숫자로 보여줌
--line-numbers : 정책을 출력시 각 정책의 시작 부분에 라인의 넘버를 추가.
* TCP, UDP, ICMP Extensions (중요) |
1.1.6 그 외의 적용확장
* mac : 들어오는 패킷의 이터넷 주소를 감시하며 INPUT 체인에서만 유용하다.
--mac-source [!] address : (:)으로 분리된 16진수의 이더넷 주소를 지정
* limit : 로그 메시지를 억제하는 것과 같이 적용검사의 속도를 제한하는데 사용되며
1초에 주어진 숫자만큼의 적용만 검사하게 된다.
--limit rate : 초당 평균 최대 적용 검사수(rate)지정하며 시간단위를 지정할 수있다.
--limit-burst number : 일치하는 패킷의 최대 수 (default는 5)
* owner : 지역 프로세서에 의해서 발생한 패킷의 생성자(유저)의 다양한 특징을 적용
--uid-owner userid : 지정된 사용자에 의해서 발생한 프로세서에서 만들어진 패킷
--uid-owner groupid : 지정된 그룹에 의해서 발생한 프로세서 만들어진 패킷
--pid-owner processid : 지정된 프로세서에 의해서 발생한 프로세서에 의해 만들어진 패킷인지를 검사
--sid-owner sessionid : 지정된 세션그룹에 의해서 발생한 프로세서에의해 만들어진 패킷인지를 검사
* state : 'ip_conntrack'모듈이 접속 추적 분석(connection-trackin analysis)를 해석한다.
NEW : 새로운 접속을 만드는 패킷
ESTABLISHED : 존재하는 패킷에 속하는 패킷(i,c. 응답 패킷 또는 응답을 보안 접속에서 나가는 패킷)
RELATED : 실재의 접속은 아니지만 관계있는 패킷으로 ICMP error 또는 ftp data 접속을 성릭하는 패킷
INVALID : 몇 가지 이유로 인증되지 않는 패킷으로 ICMP error 와 out of memory등 을 포함.
1.1.7 target 확장
* LOG : 일치하는 패킷이 커널 로그를 제공
--log-level level : 레벨 숫자나 이름을 적게 된다.
--log-prefix : 로그 시작 부분에 prefix의 내용을 첨가 하게 된다.
--log-tcp-sequence : TCP sequence 넘버를 로그에 기록한다. 만약 사용자들이 로그를 읽을 수 있을 경우 보안이 위험이 있다.
--log-tcp-options : TCP 패킷 헤더의 option들을 로그에 남긴다.
--log-ip-options : ip패킷 헤더의 options을 로그에 남긴다
* REJECT : DROP 과 동일한 작용을 하며 상대편 호스트에 ‘port unreachable'이란 에러 메시지를 icmp로 보내게 된다.
--reject-with : 응답 패킷에 대한 변경을 할 수 있다.
icmp-net-unreachable, icmp-host-unreachable
icmp-port-unreachable, icmp-proto-unrechable, icmp-net-prohibited
echo-reply, tcp-reset 사용 할 수 있다
* 재부팅후에도 설정이 되려면 쉘프로그램으로 설정후 /etc/rc.d/rc.local 에 넣어준다.
IPTABLE 적용 사례 |
iptables -A INPUT -p ! tcp -j DROP |
iptables -A INPUT -p tcp -j ACCEPT |
iptables -A INPUT -s 211.100.100.111 -j DROP |
iptables -A INPUT -d 211.100.100.777 -j DROP |
iptables -A PREROUTING -s 211.11.17.9 -i ppp0 -j DROP |
iptables -A INPUT ?s 200.200.200.1 ?p tcp --dport 21 ?j DROP 출발지가 200.200.200.1이고 목적지 포트가 21번 이면 파기하라 |
iptables -A INPUT --dport 25 ?j DROP 목적지 포트가 25이면 파기하라 |
iptables -A INPUT ?p tcp --dport 22 ?i ppp0 ?j DROP |
iptables -A INPUT ?i ppp0 ?p tcp --syn --dport ! 80 ?j DROP 인터넷 연결에 들어오는 syn패킷은 80포트가 아니라면 모두 파기 |
NAT(NETWORK ADDRESS TRANSLATION) 서버에 대한 요약과 사례 |
SNAT (Source NAT) : 사설 IP -> SNAT서버(공인IP) -> 외부에 패킷전달 |
'리눅스' 카테고리의 다른 글
MySQL Replication을 위한 계정을 생성하는 방법 (0) | 2013.07.24 |
---|---|
MySQL의 root 사용자 패스워드를 설정하고 변경하는 방법 (0) | 2013.07.24 |
서비스 이름 및 전송 프로토콜 포트 번호 레지스트리 (0) | 2013.07.24 |
[리눅스] 아파치 443 포트 올리기 (0) | 2013.07.23 |
[PHP] error: You have to install PHP gettext extension! (0) | 2013.07.23 |