잘정리된 iptables 사용법
[출처 : http://seeaster.tistory.com/18 ]
오늘은 Iptables 에 대해 간단히 포스팅 하겠습니다. 그전에 몇가지 팁을 적어볼게요 ^^
옵션 보고 익히는 것보다 아래에 적은 팁이 실무에선 더 중요할 것 같네요.!!
Tip 7가지
1. Iptables 하면서 팁은 위에서부터 아래로 적용 됨
2. 명렁어 치기전엔 3번 생각하자
-쳐놓고 서비스 장애 등 가용성에 문제가 온다면 GG입니다
3. 신뢰 IP Any Any open 해놓고 작업하기
-ssh 등 원격 접속 해 있을 때 실수로 차단되면 콘솔로 붙어서 작업해야함.
-inbound 와 outbound 해야함(ssh 같은경우 inbound open만 해놓을경우 통신 불가)
4. 생각나는데로 룰 만드는 것이 아닌 먼저 정책 분석, 트래픽 분석하고 다 정리한다음 테스트 장비에 테스트 후 적용할 것.
-초기 셋팅이 아닌 서비스 중에 변경할 땐 더욱 신중해야함.
5. #]man iptables 를 이용할 것
-man 명령어로 명령어 옵션 보는 습관을 들이는 것이 좋습니다. 모든 명령어들어 옵션을 외울 수는 없지요. 물론 자주 쓰는 것은 외워두는 것이 좋습니다.
6. 일괄 적업하지 말 것.
-일괄작업 하면 빠르지만 하나하나씩 넣으면서 확인하는 습관을 길러야 합니다. 모든 보안 시스템은 일괄처리 기능이 제거되어있는데요 기계는 실수를 안하지만 사람은 항상 실수 하기 때문 입니다.
7. Vi 편집기로 /etc/sysconfig/iptables 편집하는 것이 더 편하다.
-저장하기전에 확인하고 확인할것!!또한 vi 편집기로 작업후 서비스 재시작 해줄 것!(service iptables restart)
*처음 룰 생성해서 저장 하기 전까지는 /etc/sysconfig/iptables 파일이 없습니다.
# iptables 명령어(옵션) 간단한 설명
~]#vi /etc/sysconfig/iptables
~]#iptables -L :리스트보기
~]#iptables -P INPUT DROP : -P 기본정책, INPUT의 기본정책을 DROP으로 하겠다.
현재 FORWARD 기본정책은 ACCEPT
~]#iptables -A : -A 는 추가할떄
~]#iptables -I INPUT 3 : -I 는 원하는 라인에 추가, 3번쨰 라인에 추가한다는말임.
~]#iptables -A INPUT -p tcp : -p 는 프로토콜 정하기
~]#iptables -A INPUT -p tcp -s : -s 는 src ip
~]#iptables -A INPUT -p tcp -s 192.168.81.63 --dport 80: --dport 는 dst port
~]#iptables -A INPUT -p tcp -d 192.168.81.62: -d 는 dst ip
~]#iptabels -A INPUT -p tcp --sport 80: --sport 는 src port
~]#iptables -A INPUT -p tcp -dport 80 -j ACCEPT : -j 는 대응 방법(ACCEPT, DROP, REJECT 등),
*REJECT는 DOS 공격시 부하가 걸리므로 권장하지 않음
~]#iptables -A INPUT –m : -m은 man 페이지를 참조 하길..옵션이 너무 많아요..
#서비스 시작/정지/재시작/저장
*iptables 는 save 명령어를 쳐주지 않으면 시스템 재부팅 후 정책이 초기화 됩니다.
~]#service iptables start
~]#service iptables stop
~]#service iptables restart
~]#service iptables save
예제 참조는
http://team.boanin.com/
0. 기본정책을 ACCEPT로 설정
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
1. 현재 자신의 방화벽 규칙을 볼 수 있는 명령
iptables -L
iptables --list
2. 21.23.25.80 포트를 차단하는 정책(각각 하나씩 규칙을 만들것)
iptables -A INPUT -p tcp --dport 21 -j DROP
iptables -A INPUT -p tcp --dport 23 -j DROP
iptables -A INPUT -p tcp --dport 25 -j DROP
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp -m multiport --destination-port 21,23,25,80 -j DROP
3.첫번쨰 정책을 삭제
iptabels -D INPUT 1
4. 세번째 정책의 출발지 IP를 192.168.1.0/24로 수정
iptables -R INPUT 3 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP
5. 출발지 IP가 A클래스 사설 IP 일 경우 차단하는 정책
iptables -A INPUT -s 10.0.0.0./8 -j DROP
6. 출발지 IP 192.168.10.1 부터 192.168.10.100, 그리고 192.168.150.0/24이고 목적지IP 는 192.168.10.170이고 목적지 포트는 3306일 경우 차단하는 정책
iptables -A INPUT -p tcp -s 192.168.150.0/24 -d 192.168.10.170 --dport 3306 -j DROP
iptables -A INPUT -p tcp -m iprange --src-range 192.168.10.1-192.168.10.100 -d 192.168.10.170 --dport 3306 -j DROP
7. tcp 패킷이 초당 10개가 올경우 차단하는 정책(limit match 이용)
iptables -A INPUT -p tcp -m limit --limit 10/s -j DROP
8. 하나의 세션에서 10개의 패킷이 매치된 후 tcp 패킷이 분당 100개가 올 경우 차단하는 정책
iptables -A INPUT -p tcp -m limit --limit 100/m --limit-burst 10 -j DROP
9. 옆사람의 윈도우와 리눅스에서 SSH 접속을 차단하도록 설정, 윈도우에서 연결은DROP, 리눅스는 REJECT
iptables -A INPUT -p tcp -s 172.17.24.140 --dport 22 -j DROP
iptables -A INPUT -p tcp -s 172.17.24.170 --dport 22 -j REJECT --reject-with tcp-reset
10. ICMP 라는 체인을 생성
-icmp 패킷이 들어올 경우 ICM 체인으로 전달
-icmp 체인에 ping에 대한 응답하지 않는 정책 추가
iptables -N ICMP
iptables -A INPUT -p icmp -j ICMP
iptables -A ICMP -p icmp --icmp-type 8 -j DROP
11. 기본정책을 DROP으로 설정
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
본인의 윈도우에서 ssh연결이 되도록 설정하고 이미 연결된 상태나 연광성이 있는 연결은 별도의 정책 대신 state 매치를 이용하여 계쏙 사용할수 있도록 설정
iptables -I INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A INPUT -p tcp -s 172.17.24.130 --dport 22 -j ACCEPT
12. TCP FLAG 중 전체를 보고 그 중 SYN 과 FIN이 있을 경우 차단하는 정책
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP
13. TCP FLAG 중 전체를 보고 그 중 PSH 과 FIN이 있을 경우 차단하는 정책
iptables -A INPUT -p tcp --tcp-flags ALL FIN,FIN -j DROP