리눅스 커널 2.4부터 추가된 iptables를 이용하면 특정 포트에 대한 서비스만 오픈이 가능하며 그 외의 서비스 또는 IP에서 들어오는 패킷은 필터링이 가능하다. iptables는 테이블 형태로 관리되며 위에 명시된 설정이 먼저 적용되며 밑에 설정된 사항은 나중에 적용이 된다. 따라서 허용하는 정책이 먼저 명시되고 나서 거부하는 정책이 와야 한다.
기본적으로 iptables 명령어의 형식은 다음과 같다.
# iptables -A chain_name options

iptables의 도움말을 잠시 살펴보자

# iptables -h
iptables v1.3.5

Usage: iptables -[AD] chain rule-specification [options]
       iptables -[RI] chain rulenum rule-specification [options]
       iptables -D chain rulenum [options]
       iptables -[LFZ] [chain] [options]
       iptables -[NX] chain
       iptables -E old-chain-name new-chain-name
       iptables -P chain target [options]
       iptables -h (print this help information)

Commands:
Either long or short options are allowed.
  --append  -A chain            Append to chain
  --delete  -D chain            Delete matching rule from chain
  --delete  -D chain rulenum
                                Delete rule rulenum (1 = first) from chain
  --insert  -I chain [rulenum]
                                Insert in chain as rulenum (default 1=first)
  --list    -L [chain]          List the rules in a chain or all chains
Options:
  --proto       -p [!] proto    protocol: by number or name, eg. `tcp'
  --source      -s [!] address[/mask]
                                source specification
  --destination -d [!] address[/mask]
                                destination specification
  --in-interface -i [!] input name[+]
                                network interface name ([+] for wildcard)
  --jump        -j target
                                target for rule (may load target extension)
  --goto      -g chain
                              jump to chain with no return
  --out-interface -o [!] output name[+]
                                network interface name ([+] for wildcard)

중요하다고 생각되어지는 옵션 및 명령어들만 추려봤다.

일단 현재 iptables의 내용을 확인하기 위해서는 "iptables -L" 명령어를 입력한다.

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

위와 같이 아무것도 설정되지 않은 상태라는 것을 알 수 있다.

예를들어 현재 서버가 순수 웹서비스(80 port) 만을 사용한다고 가정하여 80을 제외한 모든 포트의 접근을 막아보자
일단 허용하는 정책에 대한 명시가 먼저 이루어져야 하므로 80 port에 대한 접근 허용 규칙을 설정한 후 모든 포트에 대한 접근 거부 정책을 설정한다.

# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# iptables -A INPUT -p tcp --dport 1:30000 -j DROP

위의 설정대로 하면 외부에서의 80 포트로의 접근만이 허용되며 나머지 포트는 모두 접근을 DROP 하게 된다.(따라서 telnet, ssh 접근도 안되므로 위의 설정은 단지 예제용일 뿐 함부로 사용시 골치 아파진다. 저렇게 설정했다가 원격 접속이 아무것도 할 수가 없어 서버실 들어가서 직접 모니터와 키보들 연결해서 해당 설정을 지워줬다 ㅠ ㅠ)

특정 iptables의 내용을 지워주기 위해서는 -D 옵션을 사용한다.

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

위와 같이 2개의 iptables 설정이 있을 경우 2번의 설정을 지우고 싶을 경우 아래와 같이 입력해 준다.

# iptables -D INPUT 2
# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

                                                                +---------------------------------------+
                                                                | Infinite
Flow..                                       |
                                                                | mail :
geekspark@gmail.com                |
                                                                | Blog : 
http://sinun.tistory.com               |
                                                                | CISSP                                                 |
                                                                +---------------------------------------+
신고
Posted by By. PHR34K

티스토리 툴바