<ICMP 막기>
[root@jo:~]#iptables -I INPUT -p ICMP -j DROP
윈도우xp
--
[root@jo:~]#iptables -I INPUT -p ICMP --icmp-type echo-request -j ACCEPT
--
[root@jo:~]#iptables -I INPUT -p icmp -m limit --limit 5/minute -j REJECT [root@jo:~]#iptables -I OUTPUT -p icmp -m limit --limit 5/minute -j REJECT 매칭을 시키는데 매칭 모듈을 limit 모듈을 사용하겠다는 의미 [root@jo:~]#iptables -L INPUT Chain INPUT (policy ACCEPT) target prot opt source destination REJECT icmp -- anywhere anywhere limit: avg 5/min burst 5 reject-with icmp-port-unreachable à limit : 평균 분당 5번 이상들어오면 host unreacherable 메시지를 보낸다. ACCEPT udp -- anywhere anywhere udp dpt:domain ACCEPT udp -- anywhere anywhere udp spt:domain ACCEPT tcp -- anywhere anywhere tcp spt:https ACCEPT tcp -- anywhere anywhere tcp spt:http DROP tcp -- !192.168.10.26 anywhere tcp dpt:ssh |
--
[root@jo:~]#tcpdump |grep ICMP à tcpdump로 서버에서 "ICMP"메시지를 서버에서 보면 Request/reply 가 계속 가다가 request만 주르륵 갈 때가 있을 것이다. tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 19:59:17.699030 IP 192.168.10.26 > 192.168.10.181: ICMP echo request, id 1024, seq 36352, length 40 19:59:17.699243 IP 192.168.10.181 > 192.168.10.26: ICMP echo reply, id 1024, seq 36352, length 40 19:59:22.688573 IP 192.168.10.26 > 192.168.10.181: ICMP echo request, id 1024, seq 37888, length 40 19:59:22.688613 IP 192.168.10.181 > 192.168.10.26: ICMP echo reply, id 1024, seq 37888, length 40 19:59:24.682589 IP 192.168.10.26 > 192.168.10.181: ICMP echo request, id 1024, seq 38400, length | |
40 19:59:29.698823 IP 192.168.10.26 > 192.168.10.181: ICMP echo request, id 1024, seq 38656, length 40 19:59:30.700167 IP 192.168.10.26 > 192.168.10.181: ICMP echo request, id 1024, seq 39168, length 40 19:59:30.700672 IP 192.168.10.181 > 192.168.10.26: ICMP echo reply, id 1024, seq 39168, length 40 19:59:31.701368 IP 192.168.10.26 > 192.168.10.181: ICMP echo request, id 1024, seq 39424, length 40 19:59:31.701530 IP 192.168.10.181 > 192.168.10.26: ICMP echo reply, id 1024, seq 39424, length 40 à 이런 식으로 횟수 매칭에 제한을 건다. |
--
[root@jo:~]#iptables -I INPUT -p tcp ! --syn -m state --state NEW -j DROP à 커넥션을 새로 연결하는게 syn을 맺는데 새로운 커넥션이 아니면 syn이 아니기 때문에 새로운 패킷이 아니면 버린다는 의미 [root@jo:~]#iptables -I INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT à ESTABLISH되어 있으면 서버에서도 접속한 클라이언트로 접속을 할 수 있는데 이 state 옵션이 왜 있냐면 역으로 들어오는 패킷을 막기 위함이다. |
--
[root@jo:~]#iptables -I OUTPUT -m state --state ESTABLISHED -j ACCEPT [root@jo:~]#iptables -L OUTPUT Chain OUTPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere state ESTABLISHED à 만약 OUTPUT 전부 드롭 정책인데 위 명령이 되어 있다면 나랑 커넥션 맺은놈이면은 허용하겠다는 뜻이다. 즉 원래 드롭되어야 하는데 이미 새로운 세션으로 맺어져 ESTABLISHED 되면 허용하겠다라는 의미 But "ping"은 안된다. Ping은 ESTABLISHED 가 없고 그냥 주고 받고 하기 때문이다. 그래서 OUTPUT은 저렇게 적용하고 INPUT만 룰을 적용하여 사용한다. [root@jo:~]#iptables -I INPUT -p tcp -m multiport --dports 80,443,110 -m state --state NEW -j ACCEPT [root@jo:~]#iptables -I INPUT -p tcp -m multiport --dports 80,443,110 -m state --state NEW -j ACCEPT à 하나의 룰에 여러 개의 포트를 적용할 수 있다. |
[root@jo:~]#iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- anywhere anywhere multiport dports http,https,pop3 state NEW ACCEPT tcp -- anywhere anywhere multiport dports http,https,pop3 à 이렇게 적용된 것을 볼 수 있다. |
--
[root@jo:~]#iptables -I INPUT -p icmp -j LOG --log-prefix "Input echo request" à 로그에 남길 때 앞에다 이 걸 붙인다는 의미 à 윈도우에서 ping 192.168.10.181 외부에서 서버로 핑을 쏴본다. [root@jo:~]#tail -f /var/log/messages Oct 28 20:23:28 jo kkk: [1] PID=16030, PWD=/root, CMD= 998 iptables -P INPUT DROP Oct 28 20:23:28 jo kernel: Input echo requestIN=eth0 OUT= MAC=00:0c:29:a9:92:8a:00:e0:4d:69:6c:90:08:00 SRC=192.168.10.26 DST=192.168.10.181 LEN=60 TOS=0x00 PREC=0x00 TTL=128 ID=46750 PROTO=ICMP TYPE=8 CODE=0 ID=1024 SEQ=9222 Oct 28 20:23:29 jo kernel: Input echo requestIN=eth0 OUT= MAC=00:0c:29:a9:92:8a:00:e0:4d:69:6c:90:08:00 SRC=192.168.10.26 DST=192.168.10.181 LEN=60 TOS=0x00 PREC=0x00 TTL=128 ID=46758 PROTO=ICMP TYPE=8 CODE=0 ID=1024 SEQ=9478 |
--
<수신 받은 놈이 그거에 대한 응답을 줄 거냐 말 거냐>
[root@jo:~]#iptables -I INPUT -p icmp -j REJECT à REJECT 는 개무시 하는 것 안 하는 것이 낫다 . 쓸 때없이 낭비하기 때문에
[root@jo:~]#iptables -I INPUT -p icmp -j DROP
[root@jo:~]#iptables -I OUTPUT -p icmp -j ACCEPT |
--