Идеи для обеспечения безопасности OpenVPN на маршрутизаторе OpenWrt

Я поставил сервер OpenVPN на порт 1194 на маршрутизаторе OpenWrt 10.03:

echo "nameserver 8.8.8.8" > /etc/resolv.conf; opkg update; opkg install luci-app-openvpn openvpn openssl-util openssh-sftp-server ntpd vim /etc/ssl/openssl.cnf # modify a few lines [ CA_default ] dir = /etc/openvpn new_certs_dir = $dir/certs certificate = $dir/ca.crt private_key = $dir/ca.key touch /etc/openvpn/index.txt; touch /etc/openvpn/serial; echo 01 > /etc/openvpn/serial openssl req -nodes -new -x509 -keyout /etc/openvpn/ca.key -out /etc/openvpn/ca.crt -days 3650 # give a common name, like: vpnserver openvpn --genkey --secret /etc/openvpn/ta.key openssl req -nodes -new -keyout /etc/openvpn/server.key -out /etc/openvpn/server.csr # give a common name, like: vpnserver mkdir -p /etc/openvpn/certs; mkdir -p /etc/openvpn/private openssl ca -out /etc/openvpn/server.crt -in /etc/openvpn/server.csr time openssl dhparam -out /etc/openvpn/dh1024.pem 1024 # it could take 10 minutes! # generate certs for clients [X = client number] openssl req -nodes -new -keyout /etc/openvpn/clientX.key -out /etc/openvpn/clientX.csr # give a common name! it will be the user name openssl ca -out /etc/openvpn/clientX.crt -in /etc/openvpn/clientX.csr # eg: openssl req -nodes -new -keyout /etc/openvpn/client1.key -out /etc/openvpn/client1.csr # give a common name! it will be the user name openssl ca -out /etc/openvpn/client1.crt -in /etc/openvpn/client1.csr vim /etc/config/openvpn config 'openvpn' 'openvpn_server' option 'enable' '1' option 'port' '1194' option 'proto' 'udp' option 'dev' 'tap' option 'ca' '/etc/openvpn/ca.crt' option 'cert' '/etc/openvpn/server.crt' option 'key' '/etc/openvpn/server.key' option 'tls_auth' '/etc/openvpn/ta.key 0' # server: 0 option 'dh' '/etc/openvpn/dh1024.pem' option 'comp_lzo' '1' option 'server' '10.20.30.0 255.255.255.0' option 'keepalive' '10 120' option 'persist_key' '1' option 'persist_tun' '1' option 'mute' '20' option 'verb' '3' option 'client_to_client' '1' list 'push' 'dhcp-option DNS 10.20.30.1' /etc/init.d/openvpn enable /etc/init.d/openvpn start ifconfig -a | less ping 10.20.30.1 # here comes the firewall part vim /etc/config/firewall # modify it config 'include' option 'path' '/etc/firewall.user' config 'redirect' option 'src' 'wan' option 'proto' 'udp' option 'src_dport' '1194' option 'dest_port' '1194' option '_name' 'OpenVPN' vim /etc/firewall.user # modify it iptables -t nat -A prerouting_rule -i $WAN -p udp --dport 1194 -j ACCEPT iptables -A input_rule -i $WAN -p udp --dport 1194 -j ACCEPT iptables -A forwarding_rule -i tap+ -o br-lan -j ACCEPT iptables -A forwarding_rule -i br-lan -o tap+ -j ACCEPT iptables -A input_rule -i tap+ -j ACCEPT iptables -A output_rule -o tap -j ACCEPT /etc/init.d/firewall restart # tar the files that goes to the client1 mkdir -p /root/client1 cp /etc/openvpn/ca.crt /root/client1/; cp /etc/openvpn/client1.crt /root/client1/; cp /etc/openvpn/client1.key /root/client1/; cp /etc/openvpn/ta.key /root/client1/ cd /root/; tar -cf client1.tar client1 # configure the client # extract the client1.tar's content to "~/.cert" on the clients pc # if you're using eg: Fedora/SELinux, then restorecon -Rv ~/.cert* # then: # ca.crt: the ca certificate # client1.crt: the users certificate # client1.key: the users private key # ta.key: tls authentication [1] 

Что я могу сделать (на стороне сервера) для повышения безопасности в отношении этого сервера OpenVPN? Вот некоторые из моих идей:

  1. I sed 's/1194/50000/' номер порта для более высокого уровня, чтобы сделать его более трудным для сканеров портов, чтобы найти
  2. Iptables? Я должен разрешать только диапазоны IP [по цепочке ввода], которые я буду использовать в реальности? + Только разрешить MAC-адрес моего ноутбука
  3. Если я не использую свой маршрутизатор (например: когда я сплю), я просто отключу его.

Есть что-то, чего я не хватает? Из команды ps я вижу, что OpenVPN запускается root, что небезопасно. Что еще я должен сделать для повышения безопасности?

  • Firewalld порт по-прежнему открыт после удаления порта и служб
  • Как обеспечить, чтобы порт SSH был открыт только для определенного IP-адреса?
  • Сетевой анонимный вопрос
  • Linux: LUKS и несколько жестких дисков
  • Исходный доступ SELinux к другим сайтам с ограничениями
  • использование sudoers, чтобы позволить привилегированному пользователю перезапустить apache
  • Может ли KWallet управлять моими ssh-паролями?
  • Выполняется непосредственно через TTY более безопасно, чем через эмулятор терминала?
  • One Solution collect form web for “Идеи для обеспечения безопасности OpenVPN на маршрутизаторе OpenWrt”

    OpenVPN предназначен для обеспечения безопасности. Это позволит только клиентам, у которых есть ключи, подписанные вами. Самое главное – сохранить секретные ключи в безопасности. Всегда шифруйте их на клиентах и ​​проверяйте разрешения на файл ключей на сервере. Не оставляйте закрытые ключи CA на сервере, они им не нужны. Зашифруйте его, положив его на pendrive и защитите его.

    Сканеры портов не будут иметь проблем с поиском сервера на любом порту, но они не смогут его использовать. Если вы знаете, что будете использовать его только из ограниченного набора IP-адресов, то обязательно отключите все остальное с помощью iptables. Однако большинство людей склонны использовать его из разных мест, например, с помощью ноутбука. Вы можете автоматически запретить IP-адреса, которые пытаются использовать недействительные ключи, но перекрестные ключи RSA, подобные этому, в любом случае не могут быть неосуществимыми.

    Если ключи безопасны, самым большим риском является некоторая ошибка в реализации OpenVPN, которая делает ее уязвимой для атак. Если это произойдет, злоумышленник может запускать произвольный код с привилегиями процесса сервера OpenVPN. Вы можете уменьшить эффект такого типа атаки, не запустив сервер как root. Добавьте это в конфигурацию вашего сервера:

     user nobody group nobody 

    Ваш конфигурационный файл, похоже, использует другой синтаксис, чем мой, но что-то вроде этого должно поддерживаться. Вы можете попробовать патч grsecurity для ядра, но я не уверен, что он работает с встроенными системами, и было бы очень плохо, если бы вы сделали его не загружаемым случайно. Это затрудняет работу с ошибками выполнения кода.

    Вы также можете увеличить размеры ключей. 1024-битные ключи могут стать неисправными в ближайшем будущем, если это уже не так. Обязательно не создавайте их с помощью OpenSSL Debian. 🙂

    Мое личное мнение, что фильтрация MAC-адресов абсолютно бесполезна. Легко подделать, и действительные можно легко найти. Используйте WPA2 CCMP с случайным ключом длиной 63 байта, и вы должны быть в порядке. Не позволяйте людям подключать случайные кабели.

    Я знаю, что в маршрутизаторах не так много ресурсов, но вы можете попробовать выполнить регистрацию. Я почти уверен, что на маршрутизаторе не будет достаточно места для входа в другой хост. Syslog-ng может сделать это легко, я не знаю, как легко установить его на маршрутизаторе.

    Linux и Unix - лучшая ОС в мире.