1. ping 에 의한 icmp 패킷 응답 여부를 설정
- 공격자들은 ping을 통한 icmp 패킷의 응답을 통하여 대상 시스템을 확인한다. 또 ping 명령으로 DOS 공격도 가능하다.
그러므로 관리자는 icmp 패킷을 무시하도록 하는 것이 좋다.
[root@server3 ~]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all - 기본 설정값은 0 이다. 0 [root@server3 ~]# ping 10.10.33.101 - ping을 보내면 응답이 온다. PING 10.10.33.101 (10.10.33.101) 56(84) bytes of data. 64 bytes from 10.10.33.101: icmp_seq=1 ttl=64 time=1.76 ms 64 bytes from 10.10.33.101: icmp_seq=2 ttl=64 time=0.128 ms --- 10.10.33.101 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.128/0.944/1.760/0.816 ms [root@server3 ~]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all [root@server3 ~]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all 1 [root@server3 ~]# ping 10.10.33.101 - 기본 설정값을 1로 변경해 주면 ping 시 응답이 없어진다. PING 10.10.33.101 (10.10.33.101) 56(84) bytes of data. --- 10.10.33.101 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 1999ms [root@server3 ~]# vi /etc/sysctl.conf - sysctl.conf 파일은 커널의 매개변수를 설정하는 파일이다. 1 # Kernel sysctl configuration file for Red Hat Linux 2 # 3 # For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and 4 # sysctl.conf(5) for more details. 5 6 # Controls IP packet forwarding 7 net.ipv4.ip_forward = 0 8 9 # Controls source route verification 10 net.ipv4.conf.default.rp_filter = 1 11 12 # Do not accept source routing 13 net.ipv4.conf.default.accept_source_route = 0 14 15 # Controls the System Request debugging functionality of the kernel 16 kernel.sysrq = 0 17 18 # Controls whether core dumps will append the PID to the core filename 19 # Useful for debugging multi-threaded applications 20 kernel.core_uses_pid = 1 21 22 # Controls the use of TCP syncookies 23 net.ipv4.tcp_syncookies = 1 24 25 # Controls the maximum size of a message, in bytes 26 kernel.msgmnb = 65536 27 28 # Controls the default maxmimum size of a mesage queue 29 kernel.msgmax = 65536 30 31 # Controls the maximum shared segment size, in bytes 32 kernel.shmmax = 4294967295 33 34 # Controls the maximum number of shared memory segments, in pages 35 kernel.shmall = 268435456 36 37 #icmp packet setting 38 net.ipv4.icmp_echo_ignore_all = 1 - 디렉토리 구분자는 ' / ' 대신 ' . '으로 대체한다. 추가해주면 시스템 재시작시에도 적용된다. [root@server3 ~]# sysctl -p - 리부팅 안하고 바로 적용 및 확인 net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 4294967295 kernel.shmall = 268435456 net.ipv4.icmp_echo_ignore_all = 1 - 설정값이 제대로 적용되었는지 확인 할 수 있다. |
2. 시스템의 ip포워딩 기능 가능 여부를 설정
- 하나의 서버에서 IP를 공유하여 IP 포워딩 기능을 사용할 경우 기능을 활성화 한다.
[root@server3 ~]# cat /proc/sys/net/ipv4/ip_forward 0 - 방화벽에서 ip forwarding기능을 사용한다면 1로 설정해야 하지만 사용하지 않는다면 0 으로 설정해 놓으면 된다. - 만약 하나의 서버에서 IP를 공유하여 IP포워딩 기능을 사용할 경우 1로 설정해 준다. [root@server3 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward [root@server3 ~]# vi /etc/sysctl.conf # Controls IP packet forwarding net.ipv4.ip_forward = 1 - 설정값을 수정해 준다. [root@server3 ~]# sysctl -p |
3. 브로드캐스트 주소에 icmp 패킷 응답 여부를 설정
- DOS 공격의 하나로 공격자가 Source IP address를 target 으로 위장한 후 broadcast address로 icmp 패킷을 보내면 그 해당 네트워크에서 icmp request를 보내어 target이 정상적인 서비스를 할 수 없도록 만드는 공격방법으로 smurf attack이라고도 하며 이 공격에 대처하기 위해 브로드캐스트 주소의 icmp 패킷을 무시하도록 설정한다. 이를 해결하기 위해서 네트워크 라우터에서 IP 브로드캐스트 주소를 사용할 수 없게 설정하면 된다.
[root@server3 ~]# cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts - 기본값(= 1)은 패킷 응답 여부를 무시한다. 1 - 설정값이 1이 아닌 경우 1로 설정해 준다. [root@server3 ~]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts - 설정값을 1로 설정해준다. [root@server3 ~]# vi /etc/sysctl.conf #broadcasts setting net.ipv4.icmp_echo_ignore_broadcasts = 1 [root@server3 ~]# sysctl -p |
4. TCP 세션 종료 후 세션연결 유지 시간 설정
- TCP 세션 종료 후 세션연결 유지 시간 설정으로 초 단위 값으로 설정되어 있으며 기본값은 60초이다.
서버에 접속하다가 예기치 못한 상태에서 연결이 종료되었을 경우 연결 상태 지속여부를 지정한다.
10-20초로 설정해도 무방하다.
[root@server3 ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout 60 [root@server3 ~]# echo 20 > /proc/sys/net/ipv4/tcp_fin_timeout [root@server3 ~]# vi /etc/sysctl.conf # tcp fin timeout setting net.ipv4.tcp_fin_timeout = 20 [root@server3 ~]# sysctl -p |
5. TCP 연결 상태를 계속 유지시키기 위한 시간 설정
- TCP 연결 상태를 게속 유지시키기 위한 시간 설정값으로 기본 초 단위로 7200초(2시간)이다.
2-30분 정도만 설정해도 서버 자원을 효율적으로 사용할 수 있다.
[root@server3 ~]# cat /proc/sys/net/ipv4/tcp_keepalive_time 7200 [root@server3 ~]# echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time [root@server3 ~]# vi /etc/sysctl.conf # tec keepalive time setting net.ipv4.tcp_keepalive_time = 1800 [root@server3 ~]# sysctl -p |
6. syn 패킷의 도착 빈도가 많을 경우 해당 요청에 대한 무시 여부를 설정
- TCP 프로토콜에서 시스템이 연결되려면 클라이언트 연결요청(SYN패킷), 서버응답(SYN/ACK 패킷), 클라이언트 응당(ACK 패킷) 후 연결이라는 3-WAY HANDSHAKE 방식을 이용하는데 공격자는 존재하지 않는 IP 주소를 source address 로 이용하여 SYN 패킷을 Target에 전송하면 Target에서는 SYN/ACK 패킷을 보내고 SYN_RCVD 상태로 전환한다. 하지만 존재하지 않는 IP주소에서 패킷을 보냈으므로 클라이언트쪽 ACK 패킷이 응답하지 않으므로 Target 은 일정 시간 패킷을 보내면서 SYN_RCVD 상태로 대기하게 되고, TCP Connection pool 이 꽉차게 되어 새로운 커넥션을 생성하지 못하게 되어 다른 클라이언트 연결요청을 거부하게 된다. 이러한 공격을 SYN Flooding 공격이라고 한다. 이러한 공격에 응답하지 않기 위해 설정한다.
[root@server3 ~]# cat /proc/sys/net/ipv4/tcp_syncookies 1 [root@server3 ~]# echo 1 > /proc/sys/net/ipv4/tcp_syncookies [root@server3 ~]# vi /etc/sysctl.conf # tcp_syncookies setting net.ipv4.tcp_syncookies = 1 [root@server3 ~]# sysctl -p |
7. 한 소켓에 동시에 syn 요청을 처리하는 backing 길이를 설정
- TCP프로토콜에서 한 소켓이 동시에 SYN 요청을 처리하는 한계가 백로그(backlog) 인데, 백로그는 연결요청이 완전히 처리되지 않은 대기상태의 큐의 길이이다.
이 백로그 큐가 차게되면 SYN 요청은 무시되어 서비시를 거부하게 되는데 이 큐의 길이를 지정할 수 있다. 보통 1024 값으로 사용한다.
[root@server3 ~]# cat /proc/sys/net/ipv4/tcp_max_syn_backlog 1024 [root@server3 ~]# echo 1024 > /proc/sys/net/ipv4/tcp_max_syn_backlog [root@server3 ~]# vi /etc/sysctl.conf # tcp_max_syn_backlog net.ipv4.tcp_max_syn_backlog = 1024 [root@server3 ~]# sysctl -p |
8. 자신의 네트워크가 스푸닝된 공격지의 IP소스로 쓰이는 것을 차단
- IPV4 에서는 source IP address 를 조작 할 수 가 있는데 자신의 IP를 속여 다른 시스템에 접근 하는 것을 IP spoofing이라고 하는데
이러한 공격을 rp_filter 는 패킷이 들어오는 인터페이스와 나가는 인터페이스가 같은지를 검사한다.
[root@server3 ~]# cat /proc/sys/net/ipv4/conf/all/rp_filter 0 [root@server3 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter [root@server3 ~]# vi /etc/sysctl.conf # Controls source route verification net.ipv4.conf.all.rp_filter = 1 [root@server3 ~]# sysctl -p |
'Linux > 보안' 카테고리의 다른 글
네트워크 서비스 보안 - tcpdump (0) | 2009.01.30 |
---|---|
네트워크 서비스 보안 - TCP_Wrapper (0) | 2009.01.30 |
사용자 보안 - PAM (0) | 2009.01.29 |
사용자 보안 - 루트권한 제한(sudo) (0) | 2009.01.29 |
사용자 보안 - 패스워드 크랙 (0) | 2009.01.29 |
시스템 보안 - Immutable Bit 설정 (0) | 2009.01.23 |