>>> 체크리스트 <<<
방화벽이 무엇인가?
. 미리 정의된 룰을 기반으로 패킷을 제어하는 보안시스템이다.
iptables 방화벽에서 테이블, 체인, 룰이 무엇인가?
. 테이블: 방화벽에서 제공하는 기능
- filter: 패킷을 필터링(허가, 거부)하는 기능을 제공하는 테이블이다.
- nat: 패킷을 주소 변환(공인IP주소 -> 사설IP주소, 사설IP주소 -> 공인IP주소) 제공하는 테이블이다.
. 체인: 패킷이 통과하는 경로
- filter : INPUT -> OUTPUT (로컬소켓으로 올 때 사용)
- forward: FORWARD -> (내부망의 서버의 소켓으로 올 때 사용)
. 룰: 각 체인에서의 세부 규칙
테이블의 종류중에서 들어오고 나가는 패킷을 필터링하는 테이블은 무엇인가?
필터 테이블
테이블의 종류중에서 주소변환 테이블은 무엇인가?
. nat 테이블
filter 테이블에 존재하는 체인은 무엇인가?
INPUT, OUTPUT, FOEARD
filter 테이블에 존재하는 각 체인의 역할은 무엇인가?
. INPUT: 패킷이 본인한테 들어오는것을 관리한다
. FORWARD: 패킷이 본인에게서 나가는 것을 관리한다
. OUTPUT: 패킷이 본인을 거쳐서 다른곳으로 가는것을 관리한다
iptables COMMANDS 옵션
. -P: 기본정책을 변경할 때 (ACCEPT, DROP)
. -A: 룰을 추가할 때 (룰은 계속 아래로 붙는다.)
. -I: 룰을 삽입할 때 (룰의 순서는 자유롭게 설정한다.)
. -D: 룰을 삭제할 때
. -N: 사용자 정의 체인을 생성할 때
. -X: 사용자 정의 체인을 삭제할 때
. -E: 사용자 정의 체인의 이름을 변경할 때
. -F: 설정된 룰을 초기화 할 때
. -L: 설정된 룰을 확인할 때 (자세히)
. -S: 설정된 룰을 확인할 때 (간략히)
iptables 모듈
. 리눅스 라이브러리
. 리눅스 라이브러리
- lib<라이브러리명>.<라이브러리종류>
| | |
| | +-- 공유(so), 동적(so), 정적(a)
| +-- 개발자가 마음대로 설정
+-- 고정
- 공유 라이브러리: lib라이브러리명.so (Shared Object)
- 동적 라이브러리: lib라이브러리.so (Shared Object)
- 정적 라이브러리: lib리이브러리.a
. iptables는 기본 기능 외에도 TCP, UDP, NAT, 상태 추적과 같은 다양한 기능을 확장 모듈로 제공한다.
이러한 모듈 파일들은 리눅스 라이브러리 형식에 따라 lib로 시작하며 대부분 .so 확장자를 가진 공유 라이브러리 형태 로 제공된다.
. iptables 동적 라이브러리 저장 디렉터리
- /usr/lib64/xtables
. iptables는 기본 기능 외에도 TCP, UDP, NAT, 상태 추적과 같은 다양한 기능을 확장 모듈로 제공한다.
이러한 모듈 파일들은 리눅스 라이브러리 형식에 따라 lib로 시작하며 대부분 .so 확장자를 가진 공유 라이브러리
형태로 제공된다.
. iptables 동적 라이브러리 저장 디렉터리
- /usr/lib64/xtables
. iptables 모듈 디렉터리
- /usr/lib64/xtables
- libipt_*.so: IPv4용 iptables 확장 모듈
- libip6t_*.so: IPv6용 ip6tables 확장 모듈
- libxt_*.so: 공통(IPv4/IPv6) 확장 모듈
. 상태/연결 추적 관련 모듈
- libxt_state.so: 연결 추적 모듈(NEW, INVALID, ESTABLISHED)
- libxt_conntrack.so: 최신 연결 추적 모듈 (conntrack 기반, --ctstate)
- libxt_connlimit.so: 연결 수 제한 (IP당 최대 접속 수 제한 등)
- libxt_connmark.so: 연결에 마크 부여/비교
. 네트워크 주소 변환 (NAT) 모듈
- libipt_DNAT.so: IPv4용 DNAT(목적지 주소 변환) 모듈
- libipt_SNAT.so: IPv4용 SNAT(출발지 주소 변환) 모듈
- libipt_MASQUERADE.so: IPv4용 SNAT의 동적 버전(DHCP 환경에서 사용)
- libipt6_DNAT.so: IPv6용 DNAT(목적지 주소 변환) 모듈
- libipt6_SNAT.so: IPv6용 SNAT(출발지 주소 변환) 모듈
- libip6t_MASQUERADE.so: IPv6용 SNAT의 동적 버전(DHCP 환경에서 사용)
. 포트/프로토콜/조건 기반 매치 모듈
- libxt_tcp.so, libxt_udp.so: TCP/UDP 포트 기반 모듈
- libxt_multiport.so: 여러 포트를 룰 한 줄로 설정하는 모듈
- libxt_mac.so: MAC 주소 모듈(MAC 주소 기반을 필터링할 때 사용)
- libxt_time.so: 시간 기반 모듈(룰에 시간을 09:00 ~ 18:00 만 허용하는 룰을 사용할 때 사용)
. 로깅 및 마킹
- libipt_LOG.so, libip6t_LOG.so: syslog로 패킷 로깅 모듈
- libxt_NFLOG.so: netfilter-log로 패킷 로깅 모듈 (고급 기능)
- ibxt_MARK.so, libxt_CONNMARK.so: 패킷이나 연결에 mark 설정 모듈 (QoS 등과 연계 가능)
. 제어/제한
- libxt_limit.so: 초당 패킷 수 제한 모듈 (DoS 완화)
- libxt_quota.so: 특정 용량만 허용하는 룰 모듈
가상 MAC주소 등록
# iptables -F
# iptables -A INPUT -m mac -h | grep -A 10 mac
mac match options:
[!] --mac-source XX:XX:XX:XX:XX:XX
Match source MAC address
# iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
# iptables -A INPUT -m mac --mac-source 12:34:56:78:90:aa -j ACCEPT
# iptables -nL INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 MAC 00:11:22:33:44:55
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 MAC 12:34:56:78:90:aa
lsmod 명령어는 현재 리눅스 커널에 로드되어 있는 커널 모듈 목록을 확인하는 명령어이다.
방화벽, 파일시스템, 네트워크, 장치 드라이버, 가상화 관련 기능 등이 커널 모듈 형태로 동작할 수 있다.
# lsmod
:(생략)
iptables에서 mac 모듈로 MAC 주소를 등록하면 커널에 mac 모듈이 올라간다.
# lsmod | grep mac
xt_mac 12288 2
# iptables -F 로 룰을 초기화 하면 # lsmod | grep mac 에서 mac 값이 0으로 바뀐다
arp -n 을 통해 본인의 mac 주소를 확인 후 INPUT 체인에 IP주소와 mac 주소를 동시에 체크하게 설정한다.
이 방식은 단순히 IP 주소만 확인하는 것보다 조금 더 구체적인 접근 제어가 가능하다.
IP주소만 검사하면 MAC주소 변조를 변조를 통해서 방화벽 룰을 위회할 수 있다.
[root@firewall ~]# arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.100.1 ether 00:50:56:c0:00:08 C ens160
192.168.100.2 ether 00:50:56:f9:db:5c C ens160
[root@firewall ~]# iptables -A INPUT -s 192.168.100.1 -m mac --mac-source 00:50:56:c0:00:08 -j ACCEPT
모듈 테스트
모듈위치를 임의로 변경해서 오류가 난다
# mv /usr/lib64/xtables/libxt_mac.so ~
다시 원래위치로 변경한다
# mv libxt_mac.so /usr/lib64/xtables/
comment 모듈
comment 모듈: 룰에 주석을 설정하는 모듈
사용 형식: -m comment --comment '설명문'
# iptables -A INPUT -p tcp --dport 80 -m comment --comment '웹서버 허용' -j ACCEPT
# iptables -A INPUT -p tcp --dport 443 -m comment --comment '웹서버 허용 https' -j ACCEPT
# iptables -A INPUT -s 168.126.63.1 -p udp --sport 53 -j ACCEPT -m comment --comment 'KT DNS Response Traffic'
# iptables -A INPUT -s 168.126.63.2 -p udp --sport 53 -j ACCEPT -m comment --comment 'KT DNS-p Response Traffic'
# iptables -nL INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 /* 웹서버 허용 */
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 /* 웹서버 허용 https */
ACCEPT udp -- 168.126.63.1 0.0.0.0/0 udp spt:53 /* KT DNS Response Traffic */
ACCEPT udp -- 168.126.63.2 0.0.0.0/0 udp spt:53 /* KT DNS Response Traffic */
상태 추적 모듈 사용하기
iptables에서는 패킷의 단순한 출발지, 목적지, 포트 정보뿐만 아니라 연결 상태를 기준으로 방화벽 룰을 설정할 수 있다.
이 기능을 상태 추적(State Tracking) 또는 연결 추적(Connection Tracking) 이라고 한다.
상태 추적 기능을 사용하면 패킷이 새로운 연결인지, 이미 연결된 통신인지, 비정상적인 패킷인지 등을 구분하여 제어할 수 있다.
. -m state : 패킷의 상태를 파악하는 모듈
- 형식 : -m state --state 상태
- --state NEW : 새로운 연결 패킷
- --state ESTABLISHED : 연결된 상태의 패킷
- --state RELATED : 기존 연결과 관련된 새로운 연결 패킷
- --state INVALID : 연결 상태를 확인할 수 없거나 비정상적인 패킷
상태 값 설명
. NEW
- NEW는 새로운 연결을 시작하는 패킷을 의미한다.
- e.g.)
Host OS에서 리눅스 서버로 SSH 접속을 처음 시도할 때
클라이언트가 서버의 22/tcp 포트로 접속 요청을 보낸다.
이때 서버 입장에서 들어오는 SSH 접속 요청 패킷은 NEW 상태에 해당한다.
서버에서는 SSH 서비스로 새롭게 들어오는 접속 요청을 허용한다.
state 모듈을 사용하는 경우
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
. ESTABLISHED
- ESTABLISHED는 이미 연결이 성립된 상태에서 패킷이 오고가는 것을 의미한다.
state 모듈을 사용하는 경우
TCP 전체에 대해 이미 연결된 패킷을 허용하려면 다음과 같이 설정할 수 있다.
iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
22/tcp만 해당하는 이미 연결된 패킷을 허용하려면 다음과 같이 설정할 수 있다.
iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
. INVALID
- INVALID는 연결 추적 테이블에서 정상적인 상태로 판단할 수 없는 패킷을 의미한다.
비정상 패킷, 손상된 패킷, 연결 정보가 불명확한 패킷 등이 여기에 해당할 수 있다.
보안상 일반적으로 INVALID 상태의 패킷은 차단하는 것이 좋다.
INVALID state 모듈을 사용하는 경우
iptables -A INPUT -m state --state INVALID -j DROP
상태추적의 권장 순서
- 1. [비정상 패킷 먼저 차단] > 2. [이미 연결된 패킷 허용] > 3. [신규 접속 허용] > 4. [나머지 모두 차단]
NEW 설정
아래 실습을 통해서 NEW를 확인해본다.
# iptables -F
# iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
ESTABLISHED 설정
아래 실습을 통해서 ESTABLISHED 를 확인해본다.
# iptables -I INPUT -p tcp --dport 22 -m state --state ESTABLISHED -j ACCEPT
INVALID 설정
아래 실습을 통해서 INVALID 를 확인해본다.
보통은 INVALID 패킷 차단 룰을 INPUT 체인의 가장 위쪽에 설정하는 것이 좋다.
INVALID 패킷은 정상적인 연결 상태로 판단할 수 없는 패킷이고 이런 패킷은 다른 허용 룰을 검사하기 전에 먼저 버리는 것이 좋다.
# iptables -I INPUT -m state --state INVALID -j DROP
hping3
. hping3는 TCP/IP 패킷을 직접 생성해서 전송할 수 있는 패킷 생성 도구
. hping3는 TCP, UDP, ICMP 패킷을 원하는 옵션으로 만들어서 전송할 수 있다.
. 보안 실습
- 방화벽 테스트: 특정 포트로 TCP/UDP 패킷을 보내 룰 매칭 여부 확인
- TCP 플래그 테스트: SYN, ACK, FIN, RST 등 비정상 조합 테스트
- 포트 응답 확인: 대상 포트가 열려 있는지 간단히 확인
- 상태 추적 테스트: NEW, ESTABLISHED, INVALID 패킷 테스트
- IDS/IPS 실습: 탐지 룰이 동작하는지 패킷 생성
. 옵션
- -S: TCP SYN 플래그 설정
- -A: TCP ACK 플래그 설정
- -F: TCP FIN 플래그 설정
- -R: TCP RST 플래그 설정
- -P: TCP PUSH 플래그 설정
- -U: TCP URG 플래그 설정
- -p <포트>: 목적지 포트 지정
- -s <포트>: 출발지 포트 지정
- -c <개수>: 보낼 패킷 개수 지정
- -i <간격>: 패킷 전송 간격 지정
- --icmp: ICMP 패킷 전송
- --udp: UDP 패킷 전송
1. TCP SYN 패킷 보내기
┌──(root㉿kali)-[~]
└─# hping3 -S -p 22 -c 1 192.168.100.10
2. ACK 패킷 보내기
┌──(root㉿kali)-[~]
└─# hping3 -A -p 22 -c 3 192.168.100.10
3. FIN 패킷 보내기
FIN은 정상적으로 연결을 종료할 때 사용하는 플래그이며
연결이 없는 상태에서 FIN 패킷만 보내면 비정상적인 패킷으로 판단될 수 있다.
┌──(root㉿kali)-[~]
└─# hping3 -F -p 22 -c 1 192.168.100.10
LOG 기록 확인하기
iptables에서는 들어오는 패킷에 대해서 LOG 타깃을 사용하여 특정 조건에 매칭되는 패킷을 커널 로그에 기록할 수 있다.
LOG는 패킷을 허용하거나 차단하는 기능이 아니라 로그만 남기는 기능이다.
그러므로 로그를 남긴 후 실제로 패킷을 처리하려면 -j LOG 아래에 ACCEPT 또는 DROP 룰을 추가해야 한다.
-j LOG 형식
. iptables -A <체인명> <매칭조건> -j LOG [LOG옵션]
로그 레벨
. 0 emerg: 시스템 사용 불가
. 1 alert: 즉시 조치 필요
. 2 crit: 치명적 상태
. 3 err: 오류
. 4 warning: 경고
. 5 notice: 일반적이지만 중요한 알림
. 6 info: 정보
. 7 debug : 디버깅
iptables -F
iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "PACKET INVALID "
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m tcp -p tcp -m multiport --dports 22,80,443 -m state --state NEW -j LOG --log-prefix "state NEW "
iptables -A INPUT -m tcp -p tcp -m multiport --dports 22,80,443 -m state --state NEW -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j DROP
기존 /var/log/messages 파일의 내용을 삭제하고 실시간 모니터링을 한다.
# > /var/log/messages
# tail -f /var/log/messages
공격자가 정상적이지 않은 패킷을 보내면 서버에서는 정상적으로 연결된 상태가 아니라서
INVALID 패킷에 해당되므로 /var/log/message 에 기록된다.
INPUT / OUTPUT LOG 기록 설정하기
# INPUT 체인 설정
iptables -F
iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "PACKET INVALID "
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT <== 이미 장부에 기록으로 판단해 통과시킴
iptables -A INPUT -m tcp -p tcp -m multiport --dports 22,80,443 -m state --state NEW -j LOG --log-prefix "state NEW "
iptables -A INPUT -m tcp -p tcp -m multiport --dports 22,80,443 -m state --state NEW -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j DROP
# OUTPUT 체인 설정
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -m state --state INVALID -j LOG --log-prefix "OUTPUT INVALID "
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dports 22,80,443 -m state --state NEW -j LOG --log-prefix "OUTPUT NEW "
iptables -A OUTPUT -p tcp -m multiport --dports 22,80,443 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p icmp -m state --state NEW -j LOG --log-prefix "OUTPUT ICMP NEW "
iptables -A OUTPUT -p icmp -m state --state NEW -j ACCEPT
iptables -A OUTPUT -j LOG --log-prefix "OUTPUT DROP "
iptables -A OUTPUT -j DROP
# 방화벽 룰 저장
iptables-save > /etc/sysconfig/iptables
iptables -A OUTPUT -p udp -m multiport --dports 53 -m state --state NEW -j ACCEPT <= DROP 위에 추가!!
OUTPUT의 길만 열어주면, 들어오는 길은 '기존 대화(ESTABLISHED)' 규칙에 의해서 INPUT은 다른 설정없이 들어올 수 있다.
즉 서버에서 OUTPUT을 통해 패킷을 보낸것만 INPUT으로 받기때문에 다른 사용자가 서버로 패킷을 보내도 INPUT에서 막을 수 있다.
핵심은 리눅스 커널의 conntrack(Connection Tracking) 모듈이 비연결성 프로토콜인 UDP를 단순한 패킷의 나열이 아닌 하나의 '흐름(Flow)'으로 관리한다는 점에 있다.
서버가 외부 DNS 서버로 질의를 보낼 때, 임의의 출발지 포트(예: 40000)에서 목적지 포트(53)로 첫 패킷이 나가는 순간 OUTPUT 체인의 규칙에 의해 NEW 상태가 부여되며, 동시에 conntrack 테이블에는 이 정보(Src 40000 / Dst 53)가 기록된다.
이후 DNS 서버가 반환하는 응답 패킷은 출발지 53번, 목적지 40000번 포트를 달고 들어오는데, 이때 커널은 conntrack 테이블을 조회하여 조금 전 나갔던 질의와 대칭되는 데이터 흐름임을 확인하고 해당 패킷의 상태를 ESTABLISHED로 정의한다.
방화벽 설정에 포함된 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 규칙에 의하여 내가 먼저 요청하여 돌아오는 모든 응답 패킷은 INPUT 체인에서 이미 '검증된 연결의 일부'로 판단되어 자동으로 통과된다.
즉, INPUT 체인에서의 별도 설정 없이도 외부 DNS 응답을 받을 수 있는 이유는 리눅스가 내부적으로 UDP를 상태 기반으로 추적하여 내가 보낸 질문에 대한 답변만을 선별적으로 수용하기 때문이다.
NAT(Network Address Translation)
. 네트워크 주소를 변환하는 기술로 주소 또는 포트 번호를 변경하는 기술이다.
. SNAT(Source Network Address Translation)
- 출발지 주소를 변환하는 기술로 패킷에 저장된 출발지 주소를 변환한다.
- 패킷이 내부에서 외부로 나갈 때 사용한다.
. DNAT(Destination Network Address Translation)
- 목적지 주소를 변환하는 기술로 패킷에 저장된 목적지 주소를 변환한다.
- 패킷이 외부에서 내부로 들어올 때 사용한다.
1. 네트워크 구성도
Untrusted Network Trusted Network
외부망(internet)] DMZ(DeMilitarized Zone)
| |
192.168.100.0/24 10.10.11.0/24
|--- Untrusted Network ---| |------------ Trusted Network ------------|
Rocky9 Rocky9 Rocky9
[PC]--------------------[FireWall]----------------[DMZWEB1]---------[DMZWEB2]
| | |.253 |.253 | |
| 192.168.100.0/24 | | | 10.10.11.0/24 | |
| VMnet8 | | | VMnet1 | |
| | | +-- ens224 | |
192.168.100.1 | | .10 .11
| | VMnet2 10.10.12.0/24
| +-- ens256 -------- [OFFICEWinXP] . 10
|
+-- ens160 .10 (in: DNAT, out: SNAT)
SNAT 설정이 안된 경우 외부와 통신이 안된다
. VMnet1 네트워크는 통신이 안되는 네트워크이기 때문이다.
외부와 통신하기위해서는 VMnet8번, 브릿지가 필요하다
SNAT 설정을 하고 방화벽 룰을 저장한다.
[root@firewall ~]# iptables -t nat -A POSTROUTING -o ens160 -s 10.10.11.10 -j SNAT --to 192.168.100.10
[root@firewall ~]# iptables-save > /etc/sysconfig/iptables
패킷 포트 포워딩을 설정한다
패킷을 영구적으로 포워딩하기 위해서는 /etc/systl.conf에 패킷 포워딩의 커널 파라미터 값을 설정해야 한다.
/proc 디렉터리에서 유일하게 쓸 수 있는 곳이 커널 파라미터 디렉터리이다.
/proc/sys/ <-- 커널 파라미터 디렉터리
|
+-- net/ipv4/ip_forward
|
+-- 0: 패킷 포워딩 금지 (Default)
+-- 1: 패킷 포워딩 허용 (변경)
[root@firewall ~]# cat /proc/sys/net/ipv4/ip_forward
0
sysctl -p 명령어 설명
. /etc/sysctl.conf 파일에 설정된 시스템의 커널 매개변수 값을 변경하는 명령어를 읽어와서 적용한다.
[root@firewall ~]# vi /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@firewall ~]# sysctl -p
net.ipv4.ip_forward = 1
시스템의 커널 매개변수 값을 확인하는 명령어이다.
[root@firewall ~]# cat /proc/sys/net/ipv4/ip_forward
1
DMZ1 에서 Docker 설치하기
-- install_docker.sh --
#!/bin/bash
# 프로그램 설명: Docker를 설치하는 자동화 스크립트
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker.service
systemctl status docker --no-pager
#docker version
ip -br -4 a
[root@dmzweb1 ~]# chmod 755 install_docker.sh
[root@dmzweb1 ~]# ./install_docker.sh
# 아파치 웹서버 컨테이너 실행
[root@dmzweb1 ~]# docker run -d \
--name apachewebserver\
--restart=always \
-p 80:80 \
httpd
DNAT 설정
[External Network]----------[Firewall]----------[DMZWEB1]
| |
| +-- ens224(a2.53)
|
+-- ens160(out) dst: 192.168.100.10 -> dst: 10.10.11.10
(a1.10)
[Host OS] -------------> [Firewall] ----------------> 10.10.11.10
라우팅 전 단계에서 목적지 주소를 192.168.100.10 > 10.10.11.10 으로 변경한다.
[root@firewall ~]# iptables -t nat -A PREROUTING -i ens160 -d 192.168.100.10 -j DNAT --to 10.10.11.10
외부에서의 접속을 확인한다
http://192.168.100.10/
http://10.10.11.10/