{"id":471908,"date":"2025-08-23T21:00:22","date_gmt":"2025-08-23T21:00:22","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=471908"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=471908","title":{"rendered":"<span>\u0412 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 NGFW \u0438\u0437 RedOS<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>RedNGFW<\/h2>\n<p>\u041d\u0443 \u0447\u0442\u043e \u0436, \u043e\u043a\u043e\u043b\u043e \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u0432\u044b\u0448\u043b\u0430 \u0432\u0435\u0440\u0441\u0438\u044f RedOS 8. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u043e\u0440\u0430 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0440\u043e NGFW \u043d\u0430 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u041e\u0421.<br \/> \u0412\u0435\u0440\u0441\u0438\u044f 7.3.\u0445 <a href=\"https:\/\/habr.com\/ru\/articles\/766862\/\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u0445\u0430\u0431\u0440\u0435\u043d\u0430<\/a> \u0438 <a href=\"https:\/\/wiki.sakhost.ru\/ru\/manuals\/infra\/homefw\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u0432\u0438\u0447\u0435\u043d\u0430<\/a><\/p>\n<p>\u0427\u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438<\/p>\n<\/li>\n<li>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043b\u044f \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c NGFW (Enterprise)<\/p>\n<\/li>\n<li>\n<p>Suricata IPS (\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f) \u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u0442\u043e\u043d\u043a\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u0430\u0432\u0438\u043b<\/p>\n<\/li>\n<li>\n<p>GeoIP: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435, \u0441\u0431\u043e\u0440\u043a\u0430<\/p>\n<\/li>\n<li>\n<p>URL Filtering: \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043f\u043e URL<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 &#8212; \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 ipset \u0434\u043b\u044f iptables (\u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c nftables, \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c iptables-nft)<\/p>\n<\/li>\n<li>\n<p>DHCP-Relay<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0442\u0443\u043d\u043d\u0435\u043b\u0435\u0439 IPSec \/ WireGuard \/ OpenVPN (Site-2-Site, RemoteAccess)<\/p>\n<\/li>\n<li>\n<p>\u041a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f (active-backup \u043d\u0430 \u0431\u0430\u0437\u0435 VRRP \u0441 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b connections)<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 (\u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c OSPF)<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0437\u0430\u0446\u0438\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 (QoS)<\/p>\n<\/li>\n<\/ul>\n<h2>\u0410\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u0445\u043e\u0434\u0430 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0435\u0440\u0441\u0438\u0438<\/h2>\n<ul>\n<li>\n<p>RedOS 8.0 (Kernel 6.6.76)<\/p>\n<\/li>\n<li>\n<p>Suricata 6.0.12 (\u0432 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0435 RedOS \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f)<\/p>\n<\/li>\n<li>\n<p>GeoIP (xtables-addons 3.27)<\/p>\n<\/li>\n<li>\n<p>URL Filtering (xt_tls)<\/p>\n<\/li>\n<li>\n<p>nftables v1.8.9 \/ ipset v7.21, protocol version: 7<\/p>\n<\/li>\n<li>\n<p>DHCP-Relay 12:4.4.3<\/p>\n<\/li>\n<li>\n<p>VRRP (keepalived 2.3.2) \/ SYNC (conntrack-tools 1.4.5)<\/p>\n<\/li>\n<li>\n<p>Quagga (FRR v10.1.2)<\/p>\n<\/li>\n<li>\n<p>iproute-tc (6.1.0) + mangle<\/p>\n<\/li>\n<li>\n<p>WireGuard 1.0.20210914*<\/p>\n<\/li>\n<li>\n<p>\u041ep\u0435nV\u0420N 2.6.11*<\/p>\n<\/li>\n<li>\n<p>ShadowSocks 2.9.1*<\/p>\n<\/li>\n<li>\n<p>StrongSwan 5.9.10*<\/p>\n<\/li>\n<li>\n<p>SSTP 1.0.11*<\/p>\n<\/li>\n<\/ul>\n<h2>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b<\/h2>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0434\u043b\u044f iptables-nft, \u0442\u043e \u043d\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 Development Tools, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e (\u0437\u0434\u0435\u0441\u044c \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0435\u0434\u0438\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u043e standalone-\u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0437\u0430 Enterprise-\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0430 RedOS-\u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0435 NGFW \u0438\u0437 \u043f\u043e\u0447\u0442\u0438 \u043b\u044e\u0431\u043e\u0433\u043e Linux, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f Welcome). \u0412\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 root (\u043a\u0440\u043e\u043c\u0435 make, make install \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0441\u0435 \u0436\u0435 \u043e\u0442 root).<br \/> \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u043d\u043e\u0432\u0438\u043c \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c:<\/p>\n<pre><code class=\"bash\">dnf update -y reboot<\/code><\/pre>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438<\/p>\n<pre><code class=\"bash\">dnf groupinstall \"Development Tools\" -y dnf install cmake autoconf gcc kernel-devel iptables-devel make git telnet dkms -y<\/code><\/pre>\n<p>\u0410 \u0442\u0430\u043a\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 RedOS 8 + \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b perl<\/p>\n<pre><code class=\"bash\">dnf install iptables-nft ipset dhcp-relay suricata htop tree tcpdump socat -y dnf install perl-Net-CIDR perl-Net-CIDR-Lite perl-Text-CSV_SX -y dnf autoremove -y<\/code><\/pre>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438<\/h2>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438<\/p>\n<h3>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 IPTables<\/h3>\n<p>\u0412\u0441\u044e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \/etc<br \/> \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0438 \u0444\u0430\u0439\u043b:<\/p>\n<pre><code class=\"bash\">mkdir -p \/etc\/ngfw mkdir -p \/etc\/ngfw\/default mkdir -p \/etc\/ngfw\/default\/layers echo default &amp;gt;\/etc\/policyname<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 onboot, \u0438 \u0441\u043b\u0443\u0436\u0431\u0443 oneshot.<br \/> \u0424\u0430\u0439\u043b \/etc\/ngfw\/<a href=\"http:\/\/load.sh\" rel=\"noopener noreferrer nofollow\">load.sh<\/a>:<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  FWDIR=\/etc\/ngfw echo \"### Initial policy ###\" $FWDIR\/initpolicy.sh echo \"### Loading objects ###\" . $FWDIR\/ngfw-self-ips.sh $FWDIR\/objects.sh echo \"### AntiSpoofing ###\" . $FWDIR\/antispoofing.sh echo \"### Implied Rules ###\" . $FWDIR\/impliedrules.sh  echo \"### Loading specified policy ###\" if [ -z \"$1\" ]; then   POLICY=\"$1\" else   POLICY=\"default\" fi $FWDIR\/$POLICY\/accessrules.sh $FWDIR\/$POLICY\/natrules.sh  echo \"### Ending policy ###\" $FWDIR\/endpolicy.sh<\/code><\/pre>\n<p>\u0424\u0430\u0439\u043b \/usr\/local\/bin\/fwboot:<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  FWDIR=\/etc\/ngfw # Loading Saved Policy if [ -f \"\/etc\/policyname\" ]; then   POLICY=$(cat \/etc\/policyname)   if [ ! -d \"$FWDIR\/$POLICY\" ]; then     POLICY=\"default\"   fi else   POLICY=\"default\" fi systemctl set-environment POLICY=\"$POLICY\"  # Loading Policy Rules \/usr\/local\/bin\/fw load $POLICY<\/code><\/pre>\n<p>\u0421\u043b\u0443\u0436\u0431\u0430 \/etc\/systemd\/system\/fw.service:<\/p>\n<pre><code>[Unit] Description=RedNGFW Before=network-pre.target Wants=network-pre.target After=syslog.target  [Service] Type=oneshot RemainAfterExit=yes ExecStart=\/usr\/local\/bin\/fwboot StandardOutput=syslog StandardError=syslog  [Install] WantedBy=basic.target<\/code><\/pre>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u043b\u0443\u0436\u0431\u0443 \u0432 \u0430\u0432\u0442\u043e\u0437\u0430\u043f\u0443\u0441\u043a<\/p>\n<pre><code class=\"bash\">systemctl enable fw<\/code><\/pre>\n<h3>\u0421\u043a\u0440\u0438\u043f\u0442\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438<\/h3>\n<p>\u0412 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ul>\n<li>\n<p>\/etc\/ngfw\/<a href=\"http:\/\/initpolicy.sh\" rel=\"noopener noreferrer nofollow\">initpolicy.sh<\/a> &#8212; \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\/etc\/ngfw\/<a href=\"http:\/\/ngfw-self-ips.sh\" rel=\"noopener noreferrer nofollow\">ngfw-self-ips.sh<\/a> &#8212; \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 NGFW<\/p>\n<\/li>\n<li>\n<p>\/etc\/ngfw\/<a href=\"http:\/\/objects.sh\" rel=\"noopener noreferrer nofollow\">objects.sh<\/a> &#8212; \u0441\u043e\u0441\u0442\u0430\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\/etc\/ngfw\/<a href=\"http:\/\/antispoofing.sh\" rel=\"noopener noreferrer nofollow\">antispoofing.sh<\/a> &#8212; \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u0430\u043d\u0442\u0438\u0441\u043f\u0443\u0444\u0444\u0438\u043d\u0433\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\/etc\/ngfw\/<a href=\"http:\/\/impliedrules.sh\" rel=\"noopener noreferrer nofollow\">impliedrules.sh<\/a> &#8212; \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u043b\u044f Enterprise-\u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\/etc\/ngfw\/<a href=\"http:\/\/endpolicy.sh\" rel=\"noopener noreferrer nofollow\">endpolicy.sh<\/a> &#8212; \u043f\u043e\u0434\u0432\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0430\u044f \u0437\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/p>\n<\/li>\n<li>\n<p>\/etc\/ngfw\/default\/<a href=\"http:\/\/accessrules.sh\" rel=\"noopener noreferrer nofollow\">accessrules.sh<\/a> &#8212; \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0442\u0435\u043b\u043e \u043d\u0430\u0448\u0435\u0439 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\/etc\/ngfw\/default\/<a href=\"http:\/\/natrules.sh\" rel=\"noopener noreferrer nofollow\">natrules.sh<\/a> &#8212; \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 NAT<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0442\u0430\u043a, \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443:<\/p>\n<h4>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 (\/etc\/ngfw\/initpolicy.sh)<\/h4>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043e\u0431\u043d\u0443\u043b\u044f\u0435\u0442 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0438, \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u044e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0432 \u043d\u043e\u043b\u044c. \u041d\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u0431\u0440\u043e\u0448\u0435\u043d\u044b, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 conntrack RELATED,ESTABLISHED \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u044b \u043d\u0430 \u043c\u0435\u0441\u0442\u043e.<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  ### CLEAR POLICY ### iptables -F iptables -X iptables -t mangle -F iptables -t nat -F iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP ipset -F ipset -X  ### ACTIONS ### iptables -N accept iptables -N drop iptables -N lognaccept iptables -N logndrop iptables -N spoof iptables -N ips iptables -N alert ipset -N NGFWSelf hash:ip  ### LOCAL INTERFACES ### iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT  ### MODULE XT_CONNTRACK NT_CONNTRACK ### iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT<\/code><\/pre>\n<h4>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 (\/etc\/ngfw\/ngfw-self-ips.sh)<\/h4>\n<p>\u042d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u043e\u0433\u0440\u0443\u0437\u0438\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 NGFWSelf \u0438 \u043d\u0430\u043f\u043e\u043b\u043d\u0438\u0442 \u0435\u0433\u043e IP-\u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 \u0441\u0430\u043c\u043e\u0433\u043e NGFW (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 VRRP-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, VIP \u0432\u0440\u044f\u0434 \u043b\u0438 \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u0432 \u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 &#8212; \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u0443\u0434\u0435\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442, \u043d\u043e \u044d\u0442\u043e \u043f\u043e\u0437\u0436\u0435).<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  external_ifname=$(ip route list default | awk '{ print $5 }') external_ifip=$(ip address show $external_ifname | awk '\/inet \/ { print $2 }' | cut -d\\\/ -f1)  declare -A vlans_nets declare -A vlans_ips while read -r line; do   vlan_ifname=$(echo $line | awk '{ print $2 }')   if [ \"$vlan_ifname\" == \"--\" ]; then     continue   fi   vlan_id=$(echo $vlan_ifname | cut -d. -f2)   parent_ifname=$(echo $vlan_ifname | cut -d. -f1)   vlan_ip=$(ip address show $vlan_ifname | awk '\/inet \/ { print $2 }' | cut -d\\\/ -f1)   vlan_this_network=$(ip route list dev $vlan_ifname | awk '\/kernel\/ { print $1 }')   vlans_nets[\"${vlan_ifname}\"]=\"${vlan_this_network}\"   vlans_ips[\"${vlan_ifname}\"]=\"${vlan_ip}\" done &amp;lt; &amp;lt;(nmcli -f TYPE,DEVICE con sh | grep vlan)  ipset -A NGFWSelf $external_ifip for int in \"${!vlans_nets[@]}\"; do   ipset -A NGFWSelf ${vlans_ips[$int]} done<\/code><\/pre>\n<h4>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 (\/etc\/ngfw\/objects.sh)<\/h4>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438. \u0418\u043c\u0435\u043d\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u0438\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c.<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  ### \u0417\u0434\u0435\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0438\u0436\u0435 \u043f\u043e \u0442\u0438\u043f\u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 ###  ### Network Objects ### ipset -N net_192.168.0.0\/16-LocalNet nethash &amp;amp;&amp;amp; ipset -A net_192.168.0.0\/16-LocalNet 192.168.0.0\/16  ### Host Objects ### ipset -N localhost hash:ip &amp;amp;&amp;amp; ipset -A localhost 127.0.0.1 ipset -N host_DNSServer hash:ip &amp;amp;&amp;amp; ipset -A host_DNSServer 192.168.61.26  ### Group Objects ### ipset -N gr_LocalUsers list:set &amp;amp;&amp;amp; \\   ipset -A gr_LocalUsers host_IvanovAA &amp;amp;&amp;amp; \\   ipset -A gr_LocalUsers net_192.168.0.0\/16-LocalNet  ### Services Objects ### ipset -N svc_ssh bitmap:port range 22-22 &amp;amp;&amp;amp; ipset -A svc_ssh tcp:22<\/code><\/pre>\n<h4>\u0410\u043d\u0442\u0438\u0441\u043f\u0443\u0444\u0444\u0438\u043d\u0433 (\/etc\/ngfw\/antispoofing.sh)<\/h4>\n<p>\u0412 \u0434\u0435\u0444\u043e\u043b\u0442\u043e\u0432\u043e\u0439 \u0434\u043b\u044f iptables \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u0432\u0441\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432. \u0414\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 &#8212; \u044d\u0442\u043e \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c \u043f\u0440\u0430\u0432\u0438\u043b. \u0412\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044f \u0438 \u0443\u0445\u043e\u0434\u0430 \u043e\u0442 \u0433\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0438, \u043e\u0442\u043a\u0443\u0434\u0430 \u0438 \u043a\u0443\u0434\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0439\u0442\u0438 \u0442\u0440\u0430\u0444\u0438\u043a, \u043c\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043c \u0437\u0430\u0449\u0438\u0442\u0443 \u043e\u0442 \u0441\u043f\u0443\u0444\u0438\u043d\u0433\u0430 \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u043c \u0438\u0437 \u043f\u0440\u0430\u0432\u0438\u043b \u043f\u043e\u043d\u044f\u0442\u0438\u0435 in interface \/ out interface. \u0410\u043d\u0442\u0438\u0441\u043f\u0443\u0444\u0438\u043d\u0433 \u0437\u0434\u0435\u0441\u044c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u0437\u0430\u0449\u0438\u0442\u0443 \u043e\u0442 \u0442\u0440\u0430\u0444\u0438\u043a\u0430, \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043d\u0435 \u0441 \u0442\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u0439\u0442\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 IP-\u0441\u0435\u0442\u0435\u0439 \u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 (\u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c) \u0432 \u044d\u0442\u043e\u0439 \u0441\u0435\u0442\u0438.<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  default_interface=$(ip -4 route show default | awk '{ print $5 }' | head -n1)  interfaces=$(ip link show | awk -F': ' '\/^[0-9]+: [^lo]\/ { print $2 }' | cut -d'@' -f1 | grep -v \"^$default_interface$\" | sort -u)  for interface in $interfaces; do   networks=$(     (        ip -4 route list dev $interface 2&amp;gt;\/dev\/null | awk '{print $1}' | grep -v default     ) | sort -u   )        if [ -z \"$networks\" ]; then     continue   fi    network_list=\"\"   for net in $networks; do     if [[ $net =~ ^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+(\/[0-9]+)?$ ]]; then       if [ -z \"$network_list\" ]; then         network_list=\"$net\"       else         network_list=\"$network_list,$net\"       fi     fi   done    if [ -z \"$network_list\" ]; then     continue   fi    iptables -A FORWARD -s $network_list ! -i $interface -m comment --comment \"AntiSpoofing\" -j spoof done<\/code><\/pre>\n<h4>\u041f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u041c\u042d (\/etc\/ngfw\/impliedrules.sh)<\/h4>\n<p>\u0422\u0430\u043a\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0443\u0436\u0435\u043d \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043e\u0434\u043d\u0430\u043a\u043e \u0432 \u043d\u0435\u0433\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0442\u0443\u043d\u043d\u0435\u043b\u0435\u0439.<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  ### \u0417\u0430\u0433\u043b\u0443\u0448\u043a\u0430 \u0434\u043b\u044f Enterprise. \u0422\u0430\u043a\u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0442\u0443\u043d\u043d\u0435\u043b\u0438 VPN.<\/code><\/pre>\n<h4>\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 (\/etc\/ngfw\/endpolicy.sh)<\/h4>\n<p>\u0417\u0434\u0435\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u041c\u042d \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u043b\u043e\u0435\u0432, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u043a system-preconfig (\/etc\/ngfw\/<a href=\"http:\/\/initpolicy.sh\" rel=\"noopener noreferrer nofollow\">initpolicy.sh<\/a>).<br \/> <strong>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u044f\u0434\u0435\u0440 \u0434\u043b\u044f IDPS Suricata<\/strong><\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  # \u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044f\u0434\u0435\u0440 \u043f\u043e\u0434 IDPS. \u0412\u0430\u0436\u043d\u043e \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c 1 \u044f\u0434\u0440\u043e \u043d\u0435 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043e, \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Suricata \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0436\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e. \u042d\u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f. CPU=$(lscpu | awk '\/^CPU\\(s\\)\/ { print $2 }') CPU=$((CPU - 2))  iptables -A accept -j ips iptables -A drop -j DROP iptables -A lognaccept -j LOG --log-prefix \"FW: Allow: \" iptables -A lognaccept -j ips iptables -A logndrop -j LOG --log-prefix \"FW: Deny: \" iptables -A logndrop -j DROP iptables -A spoof -j LOG --log-prefix \"FW: Spoofed: \" iptables -A spoof -j DROP iptables -A ips -j LOG --log-prefix \"FW: IPS: \" iptables -A ips -j NFQUEUE --queue-balance 0:${CPU} iptables -A ips -j RETURN iptables -A alert -j LOG --log-prefix \"FWALERT: \" iptables -A alert -j RETURN<\/code><\/pre>\n<h4>\u0421\u0430\u043c\u0430 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u041c\u042d (\/etc\/ngfw\/default\/accesspolicy.sh)<\/h4>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u0438\u0448\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0438 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u043b\u043e\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0438\u0436\u0435, \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c &#8212; \u043b\u044e\u0431\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u044b, \u043a\u0440\u043e\u043c\u0435 \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e NGFWSelf. Best practice \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b, \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u0438\u043f\u0430 \u0445\u043e\u0441\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 host_, \u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0439 &#8212; net_, \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f &#8212; gr_, \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 svc_.<\/p>\n<pre><code class=\"bash\"> #### FW Management \/ Access Rules ####  ## Management Rule ## iptables -A INPUT -p tcp -m multiport --dports 22 -m set --match-set host_FWAdmin src -m set --match-set NGFWSelf dst -m conntrack --ctstate NEW -m comment --comment \"FW Management\" -j ips  ## DHCP-Relay ## iptables -A INPUT -d 255.255.255.255 -p udp --dport 67 -m conntrack --ctstate NEW -m comment --comment \"DHCP-Relay broadcast\" -j ACCEPT iptables -A INPUT -m set --match-set NGFWSelf dst -m set --match-set gr_DHCP_Servers src -p udp --dport 67 -m conntrack --ctstate NEW -m comment --comment \"DHCP-Relay FWIN\" -j ips iptables -A OUTPUT -m set --match-set NGFWSelf src -m set --match-set gr_DHCP_Servers dst -p udp --dport 67 -m conntrack --ctstate NEW -m comment --comment \"DHCP-Relay FWOUT\" -j ips  ## Originating FW Rule ## iptables -A OUTPUT -m set --match-set NGFWSelf src -m conntrack --ctstate NEW -m comment --comment \"FW Original Traffic\" -j ips  ## Stealth Rule ## iptables -A INPUT -m set --match-set NGFWSelf dst -m comment --comment \"Stealth Rule\" -j logndrop  #### Layers ####  # AD Integration # iptables -A FORWARD -m set --match-set gr_AD_Clients src -m set --match-set gr_DC_Servers dst -p tcp -m multiport --dports 88,135,139,389,445,464,636,49152:65535 -m conntrack --ctstate NEW -m comment --comment \"AD Clients\" -j ips iptables -A FORWARD -m set --match-set gr_AD_Clients src -m set --match-set gr_DC_Servers dst -p udp -m multiport --dports 88,389 -m conntrack --ctstate NEW -m comment --comment \"AD Clients\" -j ips  # StrictInet Layer # iptables -N StrictInet iptables -A FORWARD -m set ! --match-set gr_NoInternet dst -m conntrack --ctstate NEW -m comment --comment \"StrictInet-Layer\" -j StrictInet \/etc\/ngfw\/policy\/default\/layers\/StrictInet.sh  # CleanUp Rule # iptables -A FORWARD -j logndrop<\/code><\/pre>\n<h4>\u0412\u044b\u043d\u0435\u0441\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e NAT \u043f\u0440\u0430\u0432\u0438\u043b\u0430 (\/etc\/ngfw\/default\/natrules.sh)<\/h4>\n<pre><code class=\"bash\">#!\/bin\/bash  # NAT \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c IP, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c\u044b\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 iptables -t nat -A POSTROUTING -o ens192 -j MASQUERADE<\/code><\/pre>\n<p>\u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0432\u0441\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c\u0438:<\/p>\n<pre><code class=\"bash\">chmod -rv u+x \/etc\/ngfw\/*.sh<\/code><\/pre>\n<h3>\u0421\u043a\u0440\u0438\u043f\u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f NGFW<\/h3>\n<p>\u0412 \u0441\u043e\u0441\u0442\u0430\u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0432\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 (\/usr\/local\/bin\/):<\/p>\n<ul>\n<li>\n<p>fw &#8212; \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \/ \u0432\u044b\u0432\u043e\u0434\u0430 \/ \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0439 \u0441 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u043e\u0439<\/p>\n<\/li>\n<li>\n<p>fwadd &#8212; \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a dhcp-relay &#171;\u043d\u0430 \u043b\u0435\u0442\u0443&#187; (<em>\u043d\u0435\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d<\/em>)<\/p>\n<\/li>\n<li>\n<p>fwremove &#8212; \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a &#171;\u043d\u0430 \u043b\u0435\u0442\u0443&#187; (<em>\u043d\u0435\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d<\/em>)<\/p>\n<\/li>\n<li>\n<p>fwset &#8212; \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432, \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432, dhcp-relay, \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b IDS\/IPS (<em>\u043d\u0435\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d<\/em>)<\/p>\n<\/li>\n<li>\n<p>fwshow &#8212; \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a<\/p>\n<\/li>\n<li>\n<p>fwsave &#8212; \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0438\u0439 &#171;\u043d\u0430 \u043b\u0435\u0442\u0443&#187; \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0432 boot-time<\/p>\n<\/li>\n<li>\n<p>fwalert &#8212; \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439, \u0430\u043b\u0435\u0440\u0442\u043e\u0432 \u0432 \u0422\u0413<\/p>\n<\/li>\n<\/ul>\n<h4>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f fw<\/h4>\n<pre><code class=\"bash\">#!\/bin\/bash  # \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b declare -A ports ports[0]=\"any\" ports[1]=\"icmp\" ports[2]=\"igmp\" ports[6]=\"tcp\" ports[8]=\"egp\" ports[9]=\"igp\" ports[17]=\"udp\" ports[47]=\"gre\" ports[50]=\"esp\" ports[51]=\"ah\" ports[56]=\"tlsp\" ports[88]=\"eigrp\" ports[89]=\"ospfigp\" ports[112]=\"vrrp\" ports[115]=\"l2tp\"  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0437\u0430\u043c\u0435\u043d\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441 ! \u043d\u0430 \"Not &amp;lt;\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435&amp;gt;\" apply_not_prefix() {   local var=$1   if [[ \"$var\" == !* ]]; then     echo \"NOT ${var:1}\"  # \u0423\u0431\u0438\u0440\u0430\u0435\u043c ! \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \"Not\"   else     echo \"$var\"   fi }  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 Port wrap_port() {   local port=$1   local max_length=10  # \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438   local result=\"\"   local temp=\"\"    # \u0420\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u043e\u0440\u0442\u044b \u043f\u043e \u0437\u0430\u043f\u044f\u0442\u043e\u0439   IFS=',' read -r -a port_list &amp;lt;&amp;lt;&amp;lt; \"$port\"    for p in \"${port_list[@]}\"; do     if [[ ${#temp} -eq 0 ]]; then       temp=\"$p\"     elif [[ $((${#temp} + ${#p} + 1)) -le $max_length ]]; then       temp=\"$temp,$p\"     else       result=\"$result$temp\\n\"       temp=\"$p\"     fi   done    # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u043f\u043e\u0440\u0442\u044b   if [[ -n \"$temp\" ]]; then     result=\"$result$temp\"   fi    echo -e \"$result\" }  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0438 \u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 parse_fw_chains() {   # \u0417\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u0430   chain=$1   output=$(iptables -vnL $chain --line-numbers | grep -v \" lo \" | grep -vE \"RELATED|RETURN\")    # \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u044b   echo -ne \"\\e[1;34m\" &amp;gt;&amp;amp;2   printf \"%-7s %-5s %-32s %-32s %-8s %-20s %-10s %-40s\\n\" \"Number\" \"Hits\" \"Source\" \"Destination\" \"Protocol\" \"Port\" \"Action\" \"Comment\"   echo -ne \"\\e[0m\" &amp;gt;&amp;amp;2    # \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0432\u044b\u0432\u043e\u0434\u0430   echo \"$output\" | while IFS= read -r line; do     # \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0438 \u043f\u0443\u0441\u0442\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438     if [[ \"$line\" =~ ^Chain|^num || -z \"$line\" ]]; then       continue     fi      # \u0420\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e awk     number=$(echo \"$line\" | awk '{ print $1 }')     hits=$(echo \"$line\" | awk '{ print $2 }')     source=$(echo \"$line\" | awk '{ print $9 }')     destination=$(echo \"$line\" | awk '{ print $10 }')     protocol=${ports[$(echo \"$line\" | awk '{ print $5 }')]}     action=$(echo \"$line\" | awk '{ print $4 }')     options=$(echo \"$line\" | awk '{ for(i=11; i&amp;lt;=NF; i++) printf $i \" \"; print \"\" }')      # \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c source     if [[ \"$options\" == *\"match-set\"* ]]; then       # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043b\u0438 match-set \u0434\u043b\u044f source       if [[ \"$options\" == *\"match-set\"*\" src\"* ]]; then         if [[ \"$options\" == *\"! match-set\"*\" src\"* ]]; then           # \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u044e \u0434\u043b\u044f source           source_set=$(echo \"$options\" | grep -oP '! match-set \\K[^ ]+(?= src)')           if [[ -n \"$source_set\" ]]; then             source=\"!$source_set\"           fi         else           # \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0431\u0435\u0437 \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f source           source_set=$(echo \"$options\" | grep -oP 'match-set \\K[^ ]+(?= src)')           if [[ -n \"$source_set\" ]]; then             source=\"$source_set\"           fi         fi       fi     fi      # \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c destination     if [[ \"$options\" == *\"match-set\"* ]]; then       # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043b\u0438 match-set \u0434\u043b\u044f destination       if [[ \"$options\" == *\"match-set\"*\" dst\"* ]]; then         if [[ \"$options\" == *\"! match-set\"*\" dst\"* ]]; then           # \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u044e \u0434\u043b\u044f destination           destination_set=$(echo \"$options\" | grep -oP '! match-set \\K[^ ]+(?= dst)')           if [[ -n \"$destination_set\" ]]; then             destination=\"!$destination_set\"           fi         else           # \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0431\u0435\u0437 \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f destination           destination_set=$(echo \"$options\" | grep -oP 'match-set \\K[^ ]+(?= dst)')           if [[ -n \"$destination_set\" ]]; then             destination=\"$destination_set\"           fi         fi       fi     fi      # \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 TLS \u043c\u043e\u0434\u0443\u043b\u044f     if [[ \"$options\" == *\"TLS match\"* ]]; then       # \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c --tls-host       tls_host=$(echo \"$options\" | grep -oP 'TLS match host \\K[^ ]+')       if [[ -n \"$tls_host\" ]]; then         destination=\"tls:$tls_host\"       fi       # \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c --tls-hostset       tls_hostset=$(echo \"$options\" | grep -oP 'TLS match hostset \\K[^ ]+')       if [[ -n \"$tls_hostset\" ]]; then         destination=\"tls:[$tls_hostset]\"       fi     fi      # \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u044e \u0434\u043b\u044f source \u0438 destination (\u0435\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e)     if [[ \"$source\" == \"!0.0.0.0\/0\" ]]; then       source=\"!any\"     elif [[ \"$source\" == \"0.0.0.0\/0\" ]]; then       source=\"any\"     fi      if [[ \"$destination\" == \"!0.0.0.0\/0\" ]]; then       destination=\"!any\"     elif [[ \"$destination\" == \"0.0.0.0\/0\" ]]; then       destination=\"any\"     fi      # \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0437\u0430\u043c\u0435\u043d\u0443 ! \u043d\u0430 \"Not\"     source=$(apply_not_prefix \"$source\")     destination=$(apply_not_prefix \"$destination\")      # \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 (\u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c)     comment=$(echo \"$options\" | grep -oP '\/\\* \\K.*(?= \\*\/)')     if [[ -z \"$comment\" ]]; then       comment=\"\"     fi      # \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c AntiSpoofing-\u043f\u0440\u0430\u0432\u0438\u043b\u0430     if [ \"$comment\" == \"AntiSpoofing\" ]; then       continue     fi      # \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u043f\u043e\u0440\u0442 (\u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c)     if [[ \"$options\" == *\"multiport dports\"* ]]; then       # \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c multiport (\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0440\u0442\u044b \u0438 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u044b)       port=$(echo \"$options\" | grep -oP 'multiport dports \\K[0-9,:]+')     else       # \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u043f\u043e\u0440\u0442       port=$(echo \"$options\" | grep -oP '(dpt|spt):\\K\\d+')     fi     if [[ -z \"$port\" ]]; then       port=\"any\"     fi     # \u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 Port     port_wrapped=$(wrap_port \"$port\")     # \u0420\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0451\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0440\u0442\u043e\u0432     IFS=$'\\n' read -r -d '' -a port_lines &amp;lt;&amp;lt;&amp;lt; \"$port_wrapped\"      number=$(echo \"$number\" | cut -c -7)     hits=$(echo \"$hits\" | cut -c -5)     source=$(echo \"$source\" | cut -c -32)     destination=$(echo \"$destination\" | cut -c -32)     protocol=$(echo \"$protocol\" | cut -c -8)     #port=$(echo \"$port\" | cut -c -15)     comment=$(echo \"$comment\" | cut -c -40)     #destination=$(echo -ne \"\\e[32m$destination\\e[0m\")     comment=$(echo -ne \"\\e[32m$comment\\e[0m\")      # \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b     for ((i = 0; i &amp;lt; ${#port_lines[@]}; i++)); do       if [[ $i -eq 0 ]]; then         # \u041f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430: \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0432\u0441\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438         printf \"%-7s %-5s %-32s %-32s %-8s %-20s %-10s %-40s\\n\" \"$number\" \"$hits\" \"$source\" \"$destination\" \"$protocol\" \"${port_lines[$i]}\" \"$action\" \"$comment\"       else         # \u041f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438: \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0440\u0442, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u043f\u0443\u0441\u0442\u044b\u0435         printf \"%-7s %-5s %-32s %-32s %-8s %-20s %-10s %-40s\\n\" \"\" \"\" \"\" \"\" \"\" \"${port_lines[$i]}\" \"\" \"\"       fi     done     done }  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 check_ipset_usage() {   local ipset_name=\"$1\"   # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 ipset \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 ipset   # \u0414\u043b\u044f list:set \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0435\u0440\u0435\u043c \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 Members   ipset list \"$ipset_name\" 2&amp;gt;\/dev\/null | awk '     \/Members:\/ {flag=1; next}     flag &amp;amp;&amp;amp; NF &amp;amp;&amp;amp; !\/^[[:space:]]*$\/ {print $1}     \/^References:\/ {flag=0}   ' &amp;gt;&amp;gt; \"$used_ipsets_file\" }  show_unused_objects() {   # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 ipset   all_ipsets=$(ipset list -n)    # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 ipset   used_ipsets_file=$(mktemp)    # 1. \u041d\u0430\u0445\u043e\u0434\u0438\u043c ipset, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0432 iptables   iptables-save | grep -oE \"\\-m set --match-set [[:alnum:]_-]+\" | awk '{print $4}' &amp;gt;&amp;gt; \"$used_ipsets_file\"    # 2. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 ipset \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 ipset   for ipset in $all_ipsets; do     check_ipset_usage \"$ipset\"   done    # 3. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 ipset   used_ipsets=$(cat \"$used_ipsets_file\" | sort -u)    # 4. \u0412\u044b\u0432\u043e\u0434\u0438\u043c ipset, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f, \u0441 \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u0435\u0439   echo -e \"\\e[1;31m          \u041d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b\\e[0m\"   counter=1   while IFS= read -r ipset; do     if ! grep -q \"^${ipset}$\" &amp;lt;&amp;lt;&amp;lt; \"$used_ipsets\" &amp;amp;&amp;amp; [ -n \"$ipset\" ]; then       printf \"%d. %s\\n\" \"$counter\" \"$ipset\"       ((counter++))     fi   done &amp;lt;&amp;lt;&amp;lt; \"$all_ipsets\"    # \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b   rm -f \"$used_ipsets_file\" }  case \"$1\" in   \"load\")     # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439     if [ \"$EUID\" -ne 0 ]; then       echo \"You haven't permissions\"       exit 1     fi     # \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0438\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0439 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438     if [ ! -z \"$2\" ]; then       if [ -d \"\/etc\/ngfw\/policy\/$2\" ]; then         policy=\"$2\"       else         policy=\"default\"         echo \"No specified policy found. Loading default policy\"       fi     else       policy=\"default\"     fi     systemctl set-environment POLICY=\"$policy\"     # \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443     \/etc\/ngfw\/load.sh $policy     ;;   \"unload\")     # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439     if [ \"$EUID\" -ne 0 ]; then       echo \"You haven't permissions\"       exit 1     fi     # \u041e\u0431\u043d\u0443\u043b\u044f\u0435\u043c \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443     iptables -F     iptables -X     iptables -t nat -F     iptables -t mangle -F     iptables -P INPUT ACCEPT     iptables -P FORWARD ACCEPT     iptables -P OUTPUT ACCEPT     ipset -F     ipset -X     ;;   \"save\")     # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439     if [ \"$EUID\" -ne 0 ]; then       echo \"You haven't permissions\"       exit 1     fi     # \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0432 Boot-Time     if [ ! -z \"$2\" ]; then       if [ -d \"\/etc\/ngfw\/policy\/$2\" ]; then         policy=\"$2\"       else         policy=\"default\"         echo \"No specified policy found. Saving as default\"       fi     else       policy=\"default\"     fi     echo $policy &amp;gt;\/etc\/policyname     ;;   \"show\")     # \u0412\u044b\u044f\u0441\u043d\u044f\u0435\u043c \u0438\u043c\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438     systemctl show-environment | grep POLICY | cut -d\\= -f2     ;;   \"display\")     # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439     if [ \"$EUID\" -ne 0 ]; then       echo \"You haven't permissions\"       exit 1     fi      # \u0412\u044b\u0432\u043e\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432     echo -e \"\\e[1;31m          FW-Self Rules\\e[0m\" &amp;gt;&amp;amp;2     parse_fw_chains INPUT     echo -e \"\\e[1;31m          Main FW Rules\\e[0m\" &amp;gt;&amp;amp;2     parse_fw_chains FORWARD     echo -e \"\\e[1;31m          FW Originating Rules\\e[0m\" &amp;gt;&amp;amp;2     parse_fw_chains OUTPUT     ;;   \"layer\")     # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439     if [ \"$EUID\" -ne 0 ]; then       echo \"You haven't permissions\"       exit 1     fi      # \u0415\u0441\u043b\u0438 Layer \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d, \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 Layer, \u043a\u0440\u043e\u043c\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445     if [ -z \"$2\" ]; then       echo \"Specify Layer:\"       echo \"Main\"       iptables -t filter -vnL | grep -E '^Chain' | awk '{print $2}' | grep -vE '^(INPUT|FORWARD|OUTPUT|ips|drop|accept|lognaccept|logndrop|spoof|alert|PREROUTING|POSTROUTING)$'       exit 0     fi     if [ \"$2\" == \"Main\" ]; then       $0 display       exit 0     fi      # \u0415\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043b\u0438\u0431\u043e \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 Layer, \u0432\u044b\u0434\u0430\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0443     exists=$(iptables -t filter -vnL | grep -E '^Chain' | awk '{print $2}' | grep -vE '^(INPUT|FORWARD|OUTPUT|ips|drop|accept|lognaccept|logndrop|spoof|alert|PREROUTING|POSTROUTING)$'     if ! echo \"$exists\" | grep -qw \"$2\"; then       echo \"Specified layer not exist\"       exit 1     fi      # \u041f\u0440\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0438 Layer (\u043d\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e) \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435     echo -e \"\\e[1;31m          $2\\e[0m\" &amp;gt;&amp;amp;2     parse_fw_chains $2     ;;   \"objects\")     # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439     if [ \"$EUID\" -ne 0 ]; then       echo \"You haven't permissions\"       exit 1     fi     # \u0415\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u043d \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 (\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0435\u0433\u043e \u0442\u0438\u043f\u0430)     if [ ! -z \"$3\" ]; then       ipset list $3       exit 0     fi     # \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430     if [ \"$2\" == \"host\" ]; then       ipset list | awk '\/^Name: \/{if(name &amp;amp;&amp;amp; type==\"hash:ip\") print i, name; name=$2; type=\"\"; i++} \/^Type: \/{type=$2;} END{if(name &amp;amp;&amp;amp; type==\"hash:ip\") print i, name;}'     elif [ \"$2\" == \"net\" ]; then       ipset list | awk '\/^Name: \/{if(name &amp;amp;&amp;amp; type==\"hash:net\") print i, name; name=$2; type=\"\"; i++} \/^Type: \/{type=$2;} END{if(name &amp;amp;&amp;amp; type==\"hash:net\") print i, name;}'     elif [ \"$2\" == \"group\" ]; then       ipset list | awk '\/^Name: \/{if(name &amp;amp;&amp;amp; type==\"list:set\") print i, name; name=$2; type=\"\"; i++} \/^Type: \/{type=$2;} END{if(name &amp;amp;&amp;amp; type==\"list:set\") print i, name;}'     elif [ \"$2\" == \"service\" ]; then       ipset list | awk '\/^Name: \/{if(name &amp;amp;&amp;amp; type==\"bitmap:port\") print i, name; name=$2; type=\"\"; i++} \/^Type: \/{type=$2;} END{if(name &amp;amp;&amp;amp; type==\"bitmap:port\") print i, name;}'     elif [ \"$2\" == \"unused\" ]; then       show_unused_objects     else       echo \"Unknown object type specified\"     fi     ;;   \"debug\")     case \"$2\" in       \"drop\")         # \u0412\u044b\u0434\u0430\u0435\u043c \u0432 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u044f\u043c\u044b\u0435 DROP \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0440\u043e\u043f\u044b suricata         # \u041f\u0440\u044f\u043c\u044b\u0435 \u0434\u0440\u043e\u043f\u044b         tail -f \/var\/log\/fw.log | grep --line-buffered \"Deny:\"         # IPS         #fast.json         # \u041f\u043e \u0432\u044b\u0445\u043e\u0434\u0443 \u0438\u0437 \u0434\u0435\u0431\u0430\u0433\u0430 - \u0443\u0431\u0438\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438         ;;       \"accept\")         # \u0412\u044b\u0434\u0430\u0435\u043c \u0432 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u044f\u043c\u044b\u0435 ACCEPT \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0430\u043a\u0446\u0435\u043f\u0442\u044b suricata         # \u041f\u0440\u044f\u043c\u044b\u0435 \u0430\u043a\u0446\u0435\u043f\u0442\u044b         tail -f \/var\/log\/fw.log | grep --line-buffered \"Allow:\"         # IPS         #fast.json         # \u041f\u043e \u0432\u044b\u0445\u043e\u0434\u0443 \u0438\u0437 \u0434\u0435\u0431\u0430\u0433\u0430 - \u0443\u0431\u0438\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438         ;;       \"dump\")         # \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c tcpdump \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435         if [ -z \"$3\" ]; then           echo \"Specify interface\"           exit 1         fi         ifexist=$(nmcli -f NAME,DEVICE,STATE connection show | grep -v \" lo \" | grep -v \"DEVICE\" | grep -v \"\\-\\-\" | grep -c \" $3 \")         if [ \"$ifexist\" -lt 1 ]; then           echo \"Unknown interface specified. Use show interfaces to see all existents interfaces\"           exit 1         fi         tcpdump -i $3 -vv -nn         ;;       *)         $0         ;;     esac     ;;   *)     echo \"Using:   fw load | unload | show | save | display     load: loading specified policy       fw load  (default by default)     unload: clean to initial policy       fw unload     show: displays current policy name       fw show     save: saving specified policy name for loading at startup       fw save     display: shows current policy content       fw display     layer: shows specified policy layer content       fw layer [layer-name]     objects: displays object list       fw objects  [object_name]         types:           host: show host objects           net: show net objects           group: show group objects           service: show service objects           unused: show unused objects     debug: runs debug process       fw debug  [interface]         action:           drop: show dropped connections           accept: show accepted connections           dump: show traffic on specified interface \"                 ;; esac<\/code><\/pre>\n<h4>\u0421\u043a\u0440\u0438\u043f\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a fwadd (\u043d\u0435\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d)<\/h4>\n<pre><code class=\"bash\">#!\/bin\/bash  case \"$1\" in   \"interface\")     # $2 - ifname     # $3 - vlan     # $4 - vlan id     # \u0411\u0443\u0434\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c nmconnection \u043a \u0438\u043c\u0435\u044e\u0449\u0435\u043c\u0443\u0441\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443.     # \u0418\u043c\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f vlan     # \u0418\u043c\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 .     # \u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \/etc\/NetworkManager\/system-connections\/&amp;lt;\u0418\u043c\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f&amp;gt;.nmconnection     # \u041f\u043e\u0442\u043e\u043c nmcli connection reload     ;;   \"bootp\")     # \u0414\u043e\u043f\u0438\u0441\u0430\u0442\u044c     ;;   \"rule\")     # \u0414\u043e\u043f\u0438\u0441\u0430\u0442\u044c     ;;   *)     echo \"Use:     add interface  vlan      add bootp       add rule   &lt;source&gt;         add fw rule     \"     ;; esac<\/code><\/pre>\n<h4>\u0421\u043a\u0440\u0438\u043f\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a fwremove(\u043d\u0435\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d)<\/h4>\n<p><em>\u0412 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0435**<\/em><\/p>\n<h4>\u0421\u043a\u0440\u0438\u043f\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 fwset(\u043d\u0435\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d)<\/h4>\n<pre><code class=\"bash\">#!\/bin\/bash  case \"$1\" in   \"static-route\")     # \u0417\u0430\u0434\u0430\u0442\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0432 Run Time, \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0438 \u0434\u0440. \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f save config     # $2 network     # $3 router-ip     # $4 action     if [ \"$#\" -lt 4 ]; then       echo \"Error: Not enough parameters specified\" &amp;gt;&amp;amp;2       echo \"Usage: set static-route   \" &amp;gt;&amp;amp;2       exit 1     fi     if [ \"$4\" == \"on\" ]; then       act=add     elif [ \"$4\" == \"off\" ]; then       act=del     else       echo \"Unknown action specified\" &amp;gt;&amp;amp;2       echo \"Usage: set static-route   \" &amp;gt;&amp;amp;2       exit 1     fi     ip route $act $2 via $3 2&amp;gt;\/dev\/null     ;;   \"interface\")     if [ -z \"$2\" ]; then       echo \"Specify interface\"       exit 1     fi     ifexist=$(nmcli -f DEVICE,NAME connection show | grep -c \"$2 \")     if [ \"$ifexist\" -lt 1 ]; then       echo \"Unknown interface specified. Use show interfaces to see all existents interfaces\"       exit 1     fi     if [ -z \"$3\" ]; then       echo \"Use: set interface $2 \"       exit 1     fi     case \"$3\" in       \"ipv4-address\")         # \u0412 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0435**         # \u041f\u0440\u043e\u0432\u043e\u0434\u0438\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u0447\u0442\u043e \u043d\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432 \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u0445 \u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430\u0445         # \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443         # \u0412\u043d\u043e\u0441\u0438\u043c ip-\u0430\u0434\u0440\u0435\u0441         # \u0415\u0441\u043b\u0438 state 100 (connected) \u0434\u0435\u043b\u0430\u0435\u043c reload \u0438 down\/up \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0438\u043d\u0430\u0447\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c         # \u0414\u043e\u043f\u0438\u0441\u0430\u0442\u044c         ;;       \"state\")         # \u0412 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0435**         # \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430         # \u0435\u0441\u043b\u0438 state on \u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 up, \u0435\u0441\u043b\u0438 off \u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 down         # \u0414\u043e\u043f\u0438\u0441\u0430\u0442\u044c         ;;       *)         echo \"Use: set interface $2 \"         ;;     esac     ;;   \"bootp\")     # $2 - ip address dhcp server     # $3 - start \/ stop     if [ -z \"$2\" ]; then       echo \"Specify DHCP-Server IP-Address\" &amp;gt;&amp;amp;2       exit 1     fi     CFGFILE=\/etc\/dhcp\/dhcrelay.d\/server-$2.conf     if [ ! -f \"$CFGFILE\" ]; then       echo \"Specified DHCP-Server have no added yet. Use add bootp \"       exit 1     fi     if [ -z \"$3\" ]; then       echo \"Which action: on or off\" &amp;gt;&amp;amp;2       exit 1     fi     CFG=server-$2     case \"$3\" in        \"on\")         if systemctl start dhcrelay@$CFG.service &amp;gt;\/dev\/null 2&amp;gt;&amp;amp;1 ; then           echo \"DHCP-Relay by server $2 started\"         else           systemctl status dhcrelay@$CFG.service           journalctl -xeu dhcrelay@$CFG.service         fi         ;;       \"off\")         if systemctl stop dhcrelay@$CFG.service &amp;gt;\/dev\/null 2&amp;gt;&amp;amp;1 ; then           echo \"DHCP-Relay by server $2 stopped\"         else           systemctl status dhcrelay@$CFG.service           journalctl -xeu dhcrelay@$CFG.service         fi         ;;       *)         echo \"ERROR: Unknown action given. Must be on or off\"         ;;     esac     ;;   \"ips-mode\")     MODE=$2     CONFIG_FILE=\"\/etc\/suricata\/suricata.yaml\"     ETALON_FILE=\"\/usr\/local\/share\/applications\/suricata.yaml\"      if [ \"$MODE\" == \"ips\" ]; then       echo \"Set Suricata to IPS Mode...\"       # \u0420\u0430\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b nfq \u0438 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435       sed -i '\/^#\\?nfq:\/,\/^[^#[:space:]]\/ {\/^#nflog support\/! s\/^#\/\/}' $CONFIG_FILE       # \u0417\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b pcap \u0438 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435       sed -i '\/^pcap:\/,\/^$\/ {\/^[[:space:]]*[^#]\/ s\/^\/#\/}' $CONFIG_FILE     elif [ \"$MODE\" == \"ids\" ]; then       echo \"Set Suricata to IDS Mode...\"       # \u0417\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b nfq \u0438 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435       sed -i '\/^nfq:\/,\/^[^#[:space:]]\/ {\/^[[:space:]]*[^#]\/ s\/^\/#\/}' $CONFIG_FILE       # \u0420\u0430\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b pcap \u0438 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435       sed -i '\/^#pcap:\/,\/^$\/ {s\/^#\/\/}' $CONFIG_FILE     elif [ \"$MODE\" == \"reset\" ]; then       echo \"Reseting default config\"       cp -f $ETALON_FILE $CONFIG_FILE     else       echo \"Use: set ips-mode \"       exit 1     fi      # \u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Suricata     systemctl restart suricata     echo \"Suricata was set into $MODE Mode\"     ;;   *)     echo \"Use:     set interface       set static-route        set bootp       set ips-mode \"     ;; esac<\/code><\/pre>\n<h4>\u0421\u043a\u0440\u0438\u043f\u0442 \u0432\u044b\u0432\u043e\u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a fwshow<\/h4>\n<pre><code class=\"bash\">#!\/bin\/bash  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 get_value() {   local key=\"$1\"   grep -oP \"(?&amp;lt;=^$key=).*\" \"$config_file\" | tr -d '\"' }  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0443\u0441 IPS\/IDS Suricata CONFIG_FILE=\"\/etc\/suricata\/suricata.yaml\" show_current_mode() {   if grep -q \"^nfq:\" $CONFIG_FILE; then     echo \"Suricata in IPS Mode\"   elif grep -q \"^pcap:\" $CONFIG_FILE; then     echo \"Suricata in IDS Mode\"   else     echo \"Suricata mode is unknown\"   fi }  case \"$1\" in   \"interface\")     # \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430     if [ -z \"$2\" ]; then       echo \"Specify interface\"       exit 1     fi     nmcli device show $2     ;;   \"interfaces\")     # \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432     nmcli -f DEVICE connection show | grep -v \"lo\" | grep -v \"DEVICE\" | grep -v \"\\-\\-\"     ;;   \"connection\")     # \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430     if [ -z \"$2\" ]; then       echo \"Specify interface\"       exit 1     fi     name=$(nmcli -f DEVICE,NAME connection show | grep \"$2 \" | awk '{ print $2 }')     nmcli connection show $name     ;;   \"vlans\")     # \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f VLAN \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0441 \u0438\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f\u043c\u0438 (\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043f\u0443\u043d\u043a\u0442 description \u0432 \u0444\u0430\u0439\u043b\u0435 nmconnection)     echo -ne \"\\e[1;31m\"     printf \"%-20s %-20s %-40s\\n\" \"VLAN\" \"IP Address\" \"Description\" &amp;gt;&amp;amp;2     echo -ne \"\\e[0m\"     nmcli -f DEVICE,TYPE,FILENAME connection show | grep \"vlan\" | while IFS= read line; do       ifname=$(echo \"$line\" | awk '{ print $1 }')       fname=$(echo \"$line\" | awk '{ print $3 }')       desc=$(grep \"description\" $fname | cut -d\"=\" -f2 | sed -e 's\/\\\"\/\/g')       if [ \"$desc\" == \"\" ]; then         desc=\"[No description]\"       fi       ipaddr=$(ifconfig $ifname | grep \"inet \" | awk '{ print $2 }')       printf \"%-20s %-20s %-40s\\n\" \"$ifname\" \"$ipaddr\" \"$desc\"     done     ;;   \"bootp\")     # \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 DHCP-relay (\u0441\u043c \u0441\u0435\u0440\u0432\u0438\u0441 dhcrelay@.service)     ls -l \/etc\/dhcp\/dhcrelay.d\/ | while IFS= read line; do       config=$(echo $line | awk '{ print  $9 }' | sed -e 's\/\\.conf\/\/')       if [ -z \"$config\" ]; then         continue       fi       # \u041f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445       state=$(systemctl is-active dhcrelay@$config.service)       config_file=\"\/etc\/dhcp\/dhcrelay.d\/${config}.conf\"       down=$(get_value \"DOWN\")       server=$(get_value \"SERVER\")       # \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0438\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 DOWN       interfaces=$(echo \"$down\" | grep -oP 'ens[0-9]+\\.[0-9]+')       for interface in $interfaces; do         echo \"bootp interface $interface dhcp-server $server $state\"       done     done     ;;   \"ips-mode\")      show_current_mode      ;;   \"route\")     # \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438     ip route list table main     ;;   *)     echo \"Use:      show interface(s)     show connection     show vlans     show bootp     show ips-mode     show route\"     ;; esac<\/code><\/pre>\n<h4>\u0421\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0438\u0437 runtime \u0432 boottime fwsave<\/h4>\n<pre><code class=\"bash\">#!\/bin\/bash  ## \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b (\u043f\u0440\u044f\u043c\u043e \u0432 nmconnection), ##   \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 ip route | grep \"via\" ##   (\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u043c connected route \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f) ##   \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430: 20.20.20.20 via 192.168.70.22 dev ens224.70  ## bootp systemctl enable\/disable dhcrelay@CONF.service ##   \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f (is-active) ## \u0438\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 (\u0445\u043e\u0442\u044f \u043e\u043d\u043e \u0443\u0436\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e) ## \u0430\u0432\u0442\u043e\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 autoconnect=true\/false \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c nmconnection-\u0444\u0430\u0439\u043b\u0435 ##   \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f up\/down  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0432 \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 update_routes() {   local DEV=\"$1\"   local ROUTES=\"$2\"    # \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430   CONNECTION_FILE=$(nmcli -f DEVICE,NAME,FILENAME connection show | grep \"$DEV \" | awk '{print $3}')    # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0430\u0439\u0434\u0435\u043d \u043b\u0438 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438   if [ -z \"$CONNECTION_FILE\" ]; then     return   fi    # \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f   TEMP_FILE=$(mktemp)    # \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438   ROUTE_INDEX=1   INSIDE_IPV4_SECTION=false    while IFS= read -r LINE; do     # \u0415\u0441\u043b\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0441\u0435\u043a\u0446\u0438\u044e [ipv4], \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443     if [[ \"$LINE\" == \"[ipv4]\" ]]; then       INSIDE_IPV4_SECTION=true       echo \"$LINE\" &amp;gt;&amp;gt; \"$TEMP_FILE\"       # \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b       continue     fi      # \u0415\u0441\u043b\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u043a\u0446\u0438\u0438 [ipv4], \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u044b\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b     if [[ \"$INSIDE_IPV4_SECTION\" == true &amp;amp;&amp;amp; \"$LINE\" =~ ^route[0-9]*= ]]; then       continue     fi      # \u0415\u0441\u043b\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u043a\u0446\u0438\u0438 [ipv4], \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b     if [[ \"$INSIDE_IPV4_SECTION\" == true &amp;amp;&amp;amp; \"$LINE\" == \"\" ]]; then       while read -r ROUTE; do         NETWORK=$(echo \"$ROUTE\" | awk '{print $1}')         GATEWAY=$(echo \"$ROUTE\" | awk '{print $3}')         echo \"route${ROUTE_INDEX}=${NETWORK},${GATEWAY}\" &amp;gt;&amp;gt; \"$TEMP_FILE\"         ROUTE_INDEX=$((ROUTE_INDEX + 1))       done &amp;lt;&amp;lt;&amp;lt; \"$ROUTES\"       INSIDE_IPV4_SECTION=false     fi      # \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b     echo \"$LINE\" &amp;gt;&amp;gt; \"$TEMP_FILE\"   done &amp;lt; \"$CONNECTION_FILE\"    # \u0417\u0430\u043c\u0435\u043d\u044f\u0435\u043c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c   mv \"$TEMP_FILE\" \"$CONNECTION_FILE\" }  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 autoconnect update_autoconnect() {   local CONNECTION_NAME=\"$1\"   local STATE=\"$2\"    # \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f   CONNECTION_FILE=$(nmcli -f NAME,FILENAME con show | grep \"$CONNECTION_NAME\" | awk '{print $2}')    # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0430\u0439\u0434\u0435\u043d \u043b\u0438 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438   if [ -z \"$CONNECTION_FILE\" ]; then     return   fi    # \u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438   CONNECTION_FILE=\"\/etc\/NetworkManager\/system-connections\/${CONNECTION_FILE}\"    # \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f   TEMP_FILE=$(mktemp)    # \u0424\u043b\u0430\u0433 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 autoconnect   AUTOCONNECT_FOUND=false    # \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438   while IFS= read -r LINE; do     # \u0415\u0441\u043b\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 autoconnect, \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e     if [[ \"$LINE\" =~ ^autoconnect= ]]; then       AUTOCONNECT_FOUND=true       if [[ \"$STATE\" == \"active\" || \"$STATE\" == \"\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043e\" ]]; then         echo \"autoconnect=true\" &amp;gt;&amp;gt; \"$TEMP_FILE\"       else         echo \"autoconnect=false\" &amp;gt;&amp;gt; \"$TEMP_FILE\"       fi     else       echo \"$LINE\" &amp;gt;&amp;gt; \"$TEMP_FILE\"     fi      # \u0415\u0441\u043b\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0441\u0435\u043a\u0446\u0438\u044e [connection] \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 autoconnect \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e     if [[ \"$LINE\" == \"[connection]\" ]]; then       if [[ \"$AUTOCONNECT_FOUND\" == false ]]; then         if [[ \"$STATE\" == \"active\" || \"$STATE\" == \"\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043e\" ]]; then           echo \"autoconnect=true\" &amp;gt;&amp;gt; \"$TEMP_FILE\"         else           echo \"autoconnect=false\" &amp;gt;&amp;gt; \"$TEMP_FILE\"         fi         AUTOCONNECT_FOUND=true       fi     fi   done &amp;lt; \"$CONNECTION_FILE\"    # \u0417\u0430\u043c\u0435\u043d\u044f\u0435\u043c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c   mv \"$TEMP_FILE\" \"$CONNECTION_FILE\" }  case \"$1\" in   \"route\")     # \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0432\u0441\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0441 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430\u043c\u0438     INTERFACES=$(ip route | awk '\/dev\/ {print $3}' | sort | uniq)      # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0441 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430\u043c\u0438     if [ -z \"$INTERFACES\" ]; then       exit 1     fi      # \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441     for DEV in $INTERFACES; do       # \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b (\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044f connected routes)       ROUTES=$(ip route show dev \"$DEV\" | grep -oP '(\\d+\\.\\d+\\.\\d+\\.\\d+\\\/\\d+ via \\d+\\.\\d+\\.\\d+\\.\\d+)' | grep -v 'link src')        # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b       if [ -z \"$ROUTES\" ]; then         continue       fi        # \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438       update_routes \"$DEV\" \"$ROUTES\"     done      # \u041f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f     nmcli connection reload     ;;   \"bootp\")     # \u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438     CONFIG_DIR=\"\/etc\/dhcp\/dhcrelay.d\"      # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f     if [ ! -d \"$CONFIG_DIR\" ]; then       exit 0     fi      # \u041f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b .conf \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438     for CONFIG_FILE in \"$CONFIG_DIR\"\/*.conf; do       # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f       SERVICE_NAME=$(basename \"$CONFIG_FILE\" .conf)        # \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0438\u043c\u044f \u0441\u043b\u0443\u0436\u0431\u044b       SERVICE=\"dhcrelay@${SERVICE_NAME}.service\"       # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043b\u0443\u0436\u0431\u044b       STATE=$(systemctl is-active \"$SERVICE\" 2&amp;gt;\/dev\/null)        # \u0415\u0441\u043b\u0438 \u0441\u043b\u0443\u0436\u0431\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430, \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c       if [ -z \"$STATE\" ]; then         continue       fi        # \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0438\u043b\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0430\u0432\u0442\u043e\u0437\u0430\u043f\u0443\u0441\u043a \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f       if [[ \"$STATE\" == \"active\" ]]; then         systemctl enable \"$SERVICE\"       else         systemctl disable \"$SERVICE\"       fi     done     ;;   \"ifstate\")     # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0438 \u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435     CONNECTIONS=$(nmcli -f NAME,STATE con show | grep -v ' -- ' | awk '{print $1, $2}')      # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f     if [ -z \"$CONNECTIONS\" ]; then       exit 1     fi      # \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u0430\u0436\u0434\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435     while read -r CONNECTION_NAME STATE; do       # \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 autoconnect       update_autoconnect \"$CONNECTION_NAME\" \"$STATE\"     done &amp;lt;&amp;lt;&amp;lt; \"$CONNECTIONS\"      # \u041f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f     nmcli connection reload     ;;   \"config\")     $0 route     $0 bootp     $0 ifstate     ;;   *)     echo \"Use: save config\"     ;; esac<\/code><\/pre>\n<h4>\u0421\u043a\u0440\u0438\u043f\u0442 \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0439 fwalert<\/h4>\n<pre><code class=\"bash\">#!\/bin\/bash  # \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Telegram TELEGRAM_BOT_TOKEN=\"\" TELEGRAM_CHAT_ID=\"\" # \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0440\u043e\u043a\u0441\u0438, \u0435\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f PROXY=\"http:\/\/192.168.0.5:3128\"  # \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441 \u043c\u0435\u0442\u043a\u0430\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 CACHE_FILE=\"\/tmp\/fwalert.cache\" CACHE_TIMEOUT=120  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 IP \u0432 ipset \u0441 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c: hash:ip -&amp;gt; list:set -&amp;gt; hash:net check_ipset() {   local ip=\"$1\"    # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u043d\u0430\u0431\u043e\u0440\u044b ipset \u0441 \u0438\u0445 \u0442\u0438\u043f\u0430\u043c\u0438   ipset_list=$(ipset list)    # \u0420\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c \u043d\u0430\u0431\u043e\u0440\u044b \u043f\u043e \u0442\u0438\u043f\u0430\u043c   hash_ip_sets=$(echo \"$ipset_list\" | awk '\/^Name:\/ {name=$2} \/^Type: hash:ip$\/ {print name}')   list_set_sets=$(echo \"$ipset_list\" | awk '\/^Name:\/ {name=$2} \/^Type: list:set$\/ {print name}')   hash_net_sets=$(echo \"$ipset_list\" | awk '\/^Name:\/ {name=$2} \/^Type: hash:net$\/ {print name}')    # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c hash:ip (\u0445\u043e\u0441\u0442\u044b)   for set in $hash_ip_sets; do     if ipset test \"$set\" \"$ip\" 2&amp;gt;\/dev\/null; then       echo \"$set\"       return 0     fi   done    # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c list:set (\u0433\u0440\u0443\u043f\u043f\u044b)   for set in $list_set_sets; do     if ipset test \"$set\" \"$ip\" 2&amp;gt;\/dev\/null; then       echo \"$set\"       return 0     fi   done    # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c hash:net (\u043f\u043e\u0434\u0441\u0435\u0442\u0438)   for set in $hash_net_sets; do     if ipset test \"$set\" \"$ip\" 2&amp;gt;\/dev\/null; then       echo \"$set\"       return 0     fi   done   echo \"NULL\" }  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f FW formatmessage() {   local msg=\"$1\"    # \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e awk   SRC=$(echo \"$msg\" | awk '{for(i=1;i&amp;lt;=NF;i++) if($i ~ \/^SRC=\/) {split($i,a,\"=\"); print a[2]}}')   DST=$(echo \"$msg\" | awk '{for(i=1;i&amp;lt;=NF;i++) if($i ~ \/^DST=\/) {split($i,a,\"=\"); print a[2]}}')   DPT=$(echo \"$msg\" | awk '{for(i=1;i&amp;lt;=NF;i++) if($i ~ \/^DPT=\/) {split($i,a,\"=\"); print a[2]}}')   PRT=$(echo \"$msg\" | awk '{for(i=1;i&amp;lt;=NF;i++) if($i ~ \/^PROTO=\/) {split($i,a,\"=\"); print a[2]}}')    # \u0418\u0449\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u044b   SRC_OBJECT=$(check_ipset \"$SRC\")   DST_OBJECT=$(check_ipset \"$DST\")    # \u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435   FORMATTED_MESSAGE=\"Source IP: $SRC\\n\"   [ \"$SRC_OBJECT\" != \"NULL\" ] &amp;amp;&amp;amp; FORMATTED_MESSAGE=\"${FORMATTED_MESSAGE}Source Object: $SRC_OBJECT\\n\"   FORMATTED_MESSAGE=\"${FORMATTED_MESSAGE}Destination IP: $DST\\n\"   [ \"$DST_OBJECT\" != \"NULL\" ] &amp;amp;&amp;amp; FORMATTED_MESSAGE=\"${FORMATTED_MESSAGE}Destination Object: $DST_OBJECT\\n\"   FORMATTED_MESSAGE=\"${FORMATTED_MESSAGE}Protocol: $PRT\\n\"   FORMATTED_MESSAGE=\"${FORMATTED_MESSAGE}Port: $DPT\"    echo -e \"$FORMATTED_MESSAGE\" }  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 Telegram send_telegram() {   local message=\"$1\"    SRC=$(echo \"$message\" | awk '{for(i=1;i&amp;lt;=NF;i++) if($i ~ \/^SRC=\/) {split($i,a,\"=\"); print a[2]}}')   DST=$(echo \"$message\" | awk '{for(i=1;i&amp;lt;=NF;i++) if($i ~ \/^DST=\/) {split($i,a,\"=\"); print a[2]}}')   DPT=$(echo \"$message\" | awk '{for(i=1;i&amp;lt;=NF;i++) if($i ~ \/^DPT=\/) {split($i,a,\"=\"); print a[2]}}')      if [ ! -z \"$PROXY\" ]; then     LOC_PRX=\"--proxy $PROXY\"   fi    # \u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0434\u043b\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f   EVENT_KEY=\"$SRC:$DST:$DPT\"   CURRENT_TIME=$(date +%s)    # \u041e\u0447\u0438\u0449\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437 \u043a\u0435\u0448\u0430   if [ -f \"$CACHE_FILE\" ]; then     awk -v now=\"$CURRENT_TIME\" -v timeout=\"$CACHE_TIMEOUT\" '$1 &amp;gt; now-timeout {print $0}' \"$CACHE_FILE\" &amp;gt; \"$CACHE_FILE.tmp\" &amp;amp;&amp;amp; mv \"$CACHE_FILE.tmp\" \"$CACHE_FILE\"   else     touch \"$CACHE_FILE\"   fi  \\   # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0431\u044b\u043b\u043e \u043b\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0443\u0436\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e   if ! awk '{print $2}' \"$CACHE_FILE\" | grep -Fxq \"$EVENT_KEY\"; then     # \u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0443\u0435\u043c \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435     formatted_message=$(formatmessage \"$message\")     curl \"$LOC_PRX\" -s -X POST \"https:\/\/api.telegram.org\/bot$TELEGRAM_BOT_TOKEN\/sendMessage\" \\       -d chat_id=\"$TELEGRAM_CHAT_ID\" \\       -d text=\"$formatted_message\" &amp;gt;&amp;gt;\/var\/log\/suricata\/tgalert.log 2&amp;gt;&amp;amp;1     # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043b\u044e\u0447 \u0432 \u043a\u0435\u0448 \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043c\u0435\u0442\u043a\u043e\u0439     echo \"$CURRENT_TIME $EVENT_KEY\" &amp;gt;&amp;gt; \"$CACHE_FILE\"   fi }  case \"$1\" in   \"ips\")     LOG_FILE=\"\/var\/log\/suricata\/tgalert.log\"     # \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0435 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442     MESSAGE=\"$2\"     echo \"$(date) - Sending alert: ${MESSAGE}\" &amp;gt;&amp;gt; ${LOG_FILE}     echo \"$(date) - Script called with args: $1 $2\" &amp;gt;&amp;gt; ${LOG_FILE}     echo \"$(date) - Sending alert: ${MESSAGE}\" &amp;gt;&amp;gt; ${LOG_FILE}     # \u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 API Telegram     if [ ! -z \"$PROXY\" ]; then       LOC_PRX=\"--proxy $PROXY\"     fi     curl \"$LOC_PRX\" -s -X POST \"https:\/\/api.telegram.org\/bot${TELEGRAM_BOT_TOKEN}\/sendMessage\" \\       -d chat_id=\"${TELEGRAM_CHAT_ID}\" \\       -d text=\"${MESSAGE}\" &amp;gt;&amp;gt; ${LOG_FILE} 2&amp;gt;\/dev\/null     ;;   \"fwd\")     LOG_FILE=\"\/var\/log\/fwalert.log\"     if [ ! -f \"$LOG_FILE\" ]; then       touch $LOG_FILE     fi     # \u0421\u043b\u0435\u0434\u0438\u043c \u0437\u0430 \u043d\u043e\u0432\u044b\u043c\u0438 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 \u0432 \u043b\u043e\u0433\u0435     tail -Fn0 \"$LOG_FILE\" | while read line; do       send_telegram \"$line\"     done     ;; esac<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0430\u043b\u0438\u0430\u0441\u044b:<br \/> \/root\/.bashrc:<\/p>\n<pre><code class=\"bash\">... export TMOUT=300  alias show='\/usr\/local\/bin\/fwshow' alias add='\/usr\/local\/bin\/fwadd' alias save='\/usr\/local\/bin\/fwsave' alias set='\/usr\/local\/bin\/fwset' alias delete='\/usr\/local\/bin\/fwremove' alias alert='\/usr\/local\/bin\/fwalert'<\/code><\/pre>\n<p>\u0418 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c\u0438:<\/p>\n<pre><code class=\"bash\">chmod u+x \/usr\/local\/bin\/fw*<\/code><\/pre>\n<h3>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u041c\u042d<\/h3>\n<p>\u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\/etc\/ngfw\/<a href=\"http:\/\/objects.sh\" rel=\"noopener noreferrer nofollow\">objects.sh<\/a> &#8212; \u0421\u043a\u0440\u0438\u043f\u0442, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u044f\u044e\u0449\u0438\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u0430\u0432\u0438\u043b<\/p>\n<\/li>\n<li>\n<p>\/etc\/ngfw\/default\/<a href=\"http:\/\/accessrules.sh\" rel=\"noopener noreferrer nofollow\">accessrules.sh<\/a> &#8212; \u0421\u043a\u0440\u0438\u043f\u0442, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u041c\u042d, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u043d\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043b\u043e\u0438 (layers\/*.sh)<\/p>\n<\/li>\n<li>\n<p>\/etc\/ngfw\/default\/<a href=\"http:\/\/natrules.sh\" rel=\"noopener noreferrer nofollow\">natrules.sh<\/a> &#8212; \u0421\u043a\u0440\u0438\u043f\u0442, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u043e\u0432\/\u043f\u043e\u0440\u0442\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 IDPS Suricata<\/h2>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c suricata \u0431\u0443\u0434\u0435\u043c \u0438\u0437 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 &lt;\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044f\u0434\u0435\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430&gt; -1<br \/> \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u043c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f\u0434\u0435\u0440 (\u0430 \u0432\u0435\u0440\u043d\u0435\u0435 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e \u044f\u0434\u0440\u0430 x \u0441\u043e\u043a\u0435\u0442\u044b x hyperthreading)<\/p>\n<pre><code class=\"bash\">lscpu | grep<\/code><\/pre>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043f\u043e \u044f\u0434\u0440\u0430\u043c (\/etc\/sysconfig\/suricata):<\/p>\n<pre><code class=\"bash\"># Add options to be passed to the daemon --user suricata # \u0417\u0434\u0435\u0441\u044c \u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u044f\u0434\u0435\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 (lscpu) -1 #  1 \u044f\u0434\u0440\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0435 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043f\u043e\u0434 \u0437\u0430\u0434\u0430\u0447\u0443 IDPS OPTIONS=\"-D -q 0 -q 1 -q 2 -q 3 -D --user suricata\"<\/code><\/pre>\n<h3>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Suricata<\/h3>\n<p>\u0412\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0430\u0439\u043b\u0430 <code>\/etc\/suricata\/suricata.yaml<\/code> \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b suricata-update, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043c\u0438\u043c\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u043c\u0435\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u043c\u0438 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 (\u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438\u0445)<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0431\u0430\u0437 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 (\u0431\u0435\u0440\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u0438 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0435)<br \/> \u041a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>uricata-update list-sources<\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438. \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438:<\/p>\n<pre><code class=\"bash\">[user@ngfw]# suricata-update list-sources --enabled 7\/4\/2025 -- 11:33:37 -  -- Using data-directory \/var\/lib\/suricata. 7\/4\/2025 -- 11:33:37 -  -- Using Suricata configuration \/etc\/suricata\/suricata.yaml 7\/4\/2025 -- 11:33:37 -  -- Using \/usr\/share\/suricata\/rules for Suricata provided rules. 7\/4\/2025 -- 11:33:37 -  -- Found Suricata version 6.0.12 at \/usr\/sbin\/suricata. Enabled sources:   - et\/open   - ptrules\/open   - etnetera\/aggressive   - oisf\/trafficid<\/code><\/pre>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>update-sources &#8212; \u041e\u0431\u043d\u043e\u0432\u0438\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>list-sources &#8212; \u041f\u043e\u043a\u0430\u0436\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>enable-source &#8212; \u0412\u043a\u043b\u044e\u0447\u0435\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>disable-source &#8212; \u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>remove-source &#8212; \u0423\u0434\u0430\u043b\u0438\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>add-source &#8212; \u0414\u043e\u0431\u0430\u0432\u0438\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f Suricata, \u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f Snort. \u0412\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438, \u0430 \u0435\u0441\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0435.<\/p>\n<p>\u0414\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0431\u0430\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0444\u0430\u0439\u043b \/etc\/suricata\/suricata.yaml. \u0422\u0430\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u043a\u043e\u0440\u0440\u0435\u043b\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0431\u0430\u0437\u0430 suricata:<\/p>\n<pre><code class=\"yaml\">default-rule-path: \/var\/lib\/suricata\/rules  rule-files:   - suricata.rules # \u043c\u043e\u0436\u043d\u043e \u0432\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043a\u0430\u0436\u0434\u0443\u044e \u0431\u0430\u0437\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u043d\u043e suricata.rules \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0431\u043e\u0440\u043d\u0430\u044f \u0438\u0437 \u0432\u0441\u0435\u0445, \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c\u0430\u044f suricata-update #  - app-layer-events.rules #  - dhcp-events.rules #  - dns-events.rules #  - files.rules #  - http2-events.rules #  - http-events.rules #  - ipsec-events.rules #  - kerberos-events.rules #  - nfs-events.rules #  - ntp-events.rules #  - smb-events.rules #  - smtp-events.rules #  - ssh-events.rules #  - stream-events.rules #  - tls-events.rules<\/code><\/pre>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0432 \u044d\u0442\u043e\u043c YAML \u0432\u0430\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c EXTERNAL_NET \u0438 HOME_NET, \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u044d\u0442\u0438\u0445 \u0441\u0435\u0442\u0435\u0439 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0436\u0438\u0442\u044c IDPS. \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u0435\u0449\u0435 \u0432\u0430\u0436\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b: IDS \u0438\u043b\u0438 IPS. \u042d\u0442\u043e \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u044d\u0442\u043e\u043c YAML + \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u0445 Suricata. \u0412 \u0444\u0430\u0439\u043b\u0430\u0445 *.rules \u0443\u043a\u0430\u0437\u0430\u043d\u043e alert \u043b\u0438\u0431\u043e drop.<\/p>\n<p>\u0414\u043b\u044f \u0436\u0435\u0441\u0442\u043a\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0432\u0441\u0435\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u0432 \u0440\u0435\u0436\u0438\u043c DROP (IPS FORCE) \u043c\u043e\u0436\u043d\u043e \u0432 \u0441\u043a\u0440\u0438\u043f\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <code>sed -i 's\/^alert\/drop\/g' \/var\/lib\/suricata\/rules\/suricata.rules<\/code> \u043b\u0438\u0431\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432 suricata-ips.rules \u0441 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 alert \u043d\u0430 drop. \u0422\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0436\u0435\u0441\u0442\u043a\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u0431\u0443\u0434\u0435\u0442 \u0432 \/etc\/suricata\/suricata.yaml:<\/p>\n<pre><code class=\"yaml\">rule-files:   - suricata-ips.rules<\/code><\/pre>\n<p>\u0418 \u0432 cron:<\/p>\n<pre><code>0 2 * * * \/usr\/sbin\/suricata-update &amp;gt;&amp;gt; \/var\/log\/suricata\/update.log 2&amp;gt;&amp;amp;1 &amp;amp;&amp;amp; systemctl restart suricata.service<\/code><\/pre>\n<p>\u041b\u0438\u0431\u043e:<\/p>\n<pre><code>0 2 * * * \/usr\/local\/bin\/ips-update &amp;gt;&amp;gt; \/var\/log\/suricata\/update.log 2&amp;gt;&amp;amp;1 &amp;amp;&amp;amp; systemctl restart suricata.service<\/code><\/pre>\n<p>\u0418 \u043f\u0438\u0448\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \/usr\/local\/bin\/ips-update<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash if \/usr\/sbin\/suricata-update; then   cp -f \/var\/lib\/suricata\/rules\/suricata-ips.rules   sed -i 's\/^alert\/drop\/g' \/var\/lib\/suricata\/rules\/suricata-ips.rules      # \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f   # \u0417\u0434\u0435\u0441\u044c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u0435\u0440\u043d\u0443 no-ip \u0432 alert   sed -i '\/no-ip\/ s\/^drop\/alert\/g' \/var\/lib\/suricata\/rules\/suricata-ips.rules   exit 0 else   exit 1 fi<\/code><\/pre>\n<p>\u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c<\/p>\n<pre><code class=\"bash\">chmod +x \/usr\/local\/bin\/ips-update<\/code><\/pre>\n<p><strong>\u0412\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432 iptables \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 jump \u0432 ips, \u0434\u043b\u044f iptables \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0443\u0436\u0435 Suricata \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0442\u0440\u0430\u0444\u0438\u043a\u043e\u043c. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043b\u043e\u0433\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0443\u0436\u0435 \u043d\u0435 \u0432 \/var\/log\/fw.log (\u0437\u0434\u0435\u0441\u044c \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e jump \u0432 ips), \u0430 \u0432 \/var\/log\/suricata\/eve.json \u043b\u0438\u0431\u043e \/var\/log\/suricata\/fast.log. \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u0432 ips \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 SYN\/SYN-ACK \u0440\u0438\u0441\u043a\u0443\u0435\u043c \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c IDPS<\/strong><br \/> <em>\u041a\u0441\u0442\u0430\u0442\u0438, \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043e, DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f <\/em><a href=\"http:\/\/no-ip.com\" rel=\"noopener noreferrer nofollow\"><em>no-ip.com<\/em><\/a><em> \u0431\u0443\u0434\u0443\u0442 Drop: ET INFO DYNAMIC_DNS Query to a Suspicious no-ip Domain [**] [Classification: Potentially Bad Traffic]<\/em><\/p>\n<h2>\u0421\u0431\u043e\u0440\u043a\u0430 URL-Filtering<\/h2>\n<pre><code class=\"bash\">cd \/opt git clone https:\/\/github.com\/Lochnair\/xt\\\\_tls.git cd xt_tls make # \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0448\u0442\u0430\u0442\u043d\u0430\u044f make install # \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f make dkms-install<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\">iptables -A FORWARD -i ens224.40 -o ens192 -m tls --tls-host \"*.telegram.org\" -j ACCEPT iptables -A FORWARD -i ens224.40 -o ens192 -m tls --tls-host \"*.telegram.org\" -j ACCEPT<\/code><\/pre>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438:<\/p>\n<pre><code class=\"bash\">sudo echo +facebook.com &amp;gt; \/proc\/net\/xt_tls\/hostset\/blacklist sudo echo +googlevideo.com &amp;gt; \/proc\/net\/xt_tls\/hostset\/blacklist  iptables -A OUTPUT -p tcp --dport 443 -m tls --tls-hostset blacklist -j DROP<\/code><\/pre>\n<p><strong>\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0432\u0430\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \/proc\/ &#8212; \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432 <\/strong><a href=\"http:\/\/load.sh\" rel=\"noopener noreferrer nofollow\"><strong>load.sh<\/strong><\/a><strong> \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432 \/proc\/net\/xt_tls \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u0438\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0432 <\/strong><a href=\"http:\/\/endpolicy.sh\" rel=\"noopener noreferrer nofollow\"><strong>endpolicy.sh<\/strong><\/a><br \/> <strong>\u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u0438 ipset \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 (aka Application Control)<\/strong><\/p>\n<h2>\u0421\u0431\u043e\u0440\u043a\u0430 GeoIP<\/h2>\n<p>\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a, \u043f\u0438\u0448\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u044b \u0438 \u0441\u0442\u0430\u0432\u0438\u043c \u0432 cron.<br \/> \u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0430\u0440\u0445\u0438\u0432 \u043e\u0442\u0441\u044e\u0434\u0430:<br \/> <a href=\"http:\/\/INAI.de\" rel=\"noopener noreferrer nofollow\">INAI.de<\/a><\/p>\n<pre><code class=\"bash\">cd \/opt wget https:\/\/inai.de\/files\/xtables-addons\/xtables-addons-3.27.tar.xz tar -xvf xtables-addons-3.27.tar.xz cd xtables-addons-3.27 .\/configure  # \u0427\u0435\u043a\u043d\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441 \u0430\u0432\u0442\u043e\u043a\u043e\u043d\u0444\u0438\u0433\u0430 less .\/config.status  make make install # \u0414\u0430\u043b\u0435\u0435, \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a (\u0430 \u0442\u0430\u043a \u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443, \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 GEOIP_DIR=\"\/usr\/share\/xt_geoip\/\" DATE=$(date +'%Y-%m') GEOIP_URL=\"https:\/\/download.db-ip.com\/free\/dbip-country-lite-${DATE}.csv.gz\" GEOIP_CSV_GZ_FILE=\"${GEOIP_DIR}dbip-country-lite-${DATE}.csv.gz\" GEOIP_CSV_FILE=\"${GEOIP_DIR}dbip-country-lite-${DATE}.csv\" mkdir -p ${GEOIP_DIR} wget $GEOIP_URL mv dbip-country-lite-2025-03.csv.gz $GEOIP_DIR cd $GEOIP_DIR gunzip \"${GEOIP_CSV_GZ_FILE}\" -f GEOIP_BUILD=\/usr\/local\/libexec\/xtables-addons\/xt_geoip_build mv ${GEOIP_CSV_FILE} dbip-country-lite.csv \"$GEOIP_BUILD\" -D \/usr\/share\/xt_geoip *.csv rm -f ${GEOIP_CSV_FILE}<\/code><\/pre>\n<p>\u041f\u0438\u0448\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u044b \/usr\/local\/bin\/geoupdate<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  # GeoIP database update echo \"\" echo -e \"\\033[32mPreparing to update GeoIP database...\\033[0m\" GEOIP_DIR=\"\/usr\/share\/xt_geoip\/\" DATE=$(date +'%Y-%m') GEOIP_URL=\"https:\/\/download.db-ip.com\/free\/dbip-country-lite-${DATE}.csv.gz\" GEOIP_CSV_GZ_FILE=\"${GEOIP_DIR}dbip-country-lite-${DATE}.csv.gz\" GEOIP_CSV_FILE=\"${GEOIP_DIR}dbip-country-lite-${DATE}.csv\"  # Create the GeoIP directory if it doesn't exist mkdir -p ${GEOIP_DIR}  # Download &amp;amp; Extract updates cd ${GEOIP_DIR} wget ${GEOIP_URL} echo \"\" echo -e \"\\033[32mExtracting GeoIP CSV file...\\033[0m\" cd ${GEOIP_DIR} gunzip \"${GEOIP_CSV_GZ_FILE}\" -f  echo \"\" echo -e \"\\033[32mLocating and running xt_geoip_build...\\033[0m\"  # Define possible locations for xt_geoip_build POSSIBLE_LOCATIONS=(     \"\/usr\/lib\/xtables-addons\/xt_geoip_build\"     \"\/usr\/libexec\/xtables-addons\/xt_geoip_build\"     \"\/usr\/local\/lib\/xtables-addons\/xt_geoip_build\"     \"\/usr\/local\/libexec\/xtables-addons\/xt_geoip_build\" )  GEOIP_BUILD=\"\" for location in \"${POSSIBLE_LOCATIONS[@]}\"; do     if [ -f \"$location\" ]; then         GEOIP_BUILD=\"$location\"         break     fi done  if [ -z \"$GEOIP_BUILD\" ]; then     echo -e \"\\033[31mError: Could not find xt_geoip_build script in any known location\\033[0m\"     echo \"Searching for xt_geoip_build in the system...\"     FOUND_PATH=$(find \/ -name \"xt_geoip_build\" 2&amp;gt;\/dev\/null)          if [ -n \"$FOUND_PATH\" ]; then         echo -e \"\\033[32mFound xt_geoip_build at: $FOUND_PATH\\033[0m\"         GEOIP_BUILD=\"$FOUND_PATH\"     else         echo -e \"\\033[31mFatal: xt_geoip_build script not found anywhere in the system\\033[0m\"         exit 1     fi fi  echo -e \"\\033[32mBuilding the GeoIP database with xtables-addons...\\033[0m\" mv ${GEOIP_CSV_FILE} dbip-country-lite.csv \"$GEOIP_BUILD\" -D \/usr\/share\/xt_geoip *.csv rm -f ${GEOIP_CSV_FILE}<\/code><\/pre>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c:<\/p>\n<pre><code class=\"bash\">chmod +x \/usr\/local\/bin\/geoupdate<\/code><\/pre>\n<p>\u0421\u0442\u0430\u0432\u0438\u043c \u0432 cron:<\/p>\n<pre><code>0 3 * * * env \/usr\/local\/bin\/geoupdate &amp;gt;&amp;gt; \/var\/log\/suricata\/geoip-update.log 2&amp;gt;&amp;amp;1<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\">iptables -I INPUT -m geoip --src-cc XX -j DROP<\/code><\/pre>\n<p>XX &#8212; \u043a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u044b <a href=\"https:\/\/en.wikipedia.org\/wiki\/ISO%5C_3166-1%5C_alpha-2\" rel=\"noopener noreferrer nofollow\">\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u0434\u043e\u0432 \u0441\u0442\u0440\u0430\u043d<\/a><\/p>\n<h2>DHCP-Relay<\/h2>\n<p>DHCP Relay \u0442\u043e\u0436\u0435 \u043d\u0435\u043c\u0430\u043b\u043e \u0432\u0430\u0436\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0434\u043b\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e FW, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435 \u0441\u0432\u043e\u0439 DHCP-\u0441\u0435\u0440\u0432\u0435\u0440<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.<\/p>\n<pre><code class=\"bash\">dnf install dhcp-relay<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0434\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441-\u044e\u043d\u0438\u0442 \u0434\u043b\u044f systemd.<br \/> \u0424\u0430\u0439\u043b \/etc\/systemd\/system\/dhcrelay@.service:<\/p>\n<pre><code>[Unit] Description=DHCP Relay Agent Daemon Documentation=man:dhcrelay(8) Wants=network-online.target After=network-online.target  [Service] Type=notify EnvironmentFile=\/etc\/dhcp\/dhcrelay.d\/%i.conf ExecStart=\/usr\/sbin\/dhcrelay -d --no-pid -iu $UP $DOWN $SERVER StandardError=null  [Install] WantedBy=multi-user.target<\/code><\/pre>\n<p>\u041d\u0443 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433 \u0434\u043b\u044f dhcp-relay \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 DHCP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f:<br \/> \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u0430\u0439\u043b \/etc\/dhcp\/dhcrelay.d\/server-192.168.10.10.conf:<\/p>\n<pre><code class=\"bash\">UP=ens224.10 DOWN=\"-id ens224.30 -id ens224.8 -id ens224.55 -id ens224.26 -id ens224.20\" SERVER=192.168.10.10 LOG=192.168.10.10<\/code><\/pre>\n<p>\u0413\u0434\u0435:<\/p>\n<ul>\n<li>\n<p>UP &#8212; \u044d\u0442\u043e uplink \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a DHCP-\u0441\u0435\u0440\u0432\u0435\u0440\u0443<\/p>\n<\/li>\n<li>\n<p>DOWN &#8212; \u044d\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a downlink \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f DHCP \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>SERVER &#8212; \u044d\u0442\u043e IP-\u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043a\u0443\u0434\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b<\/p>\n<\/li>\n<li>\n<p>LOG &#8212; \u043f\u043e\u043a\u0430 \u043d\u0438 \u0434\u043b\u044f \u0447\u0435\u0433\u043e \ud83d\ude09<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0441\u0435 \u044d\u0442\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432\u044b\u0448\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438.<\/p>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438<\/h2>\n<p>\u0412\u0441\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u043f\u0430\u043a\u0435\u0442 \u0434\u043b\u044f OSPF Quagga, \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0432\u0435\u0436\u0435\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 (\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e quagga) &#8212; FRR<br \/> \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u0441\u043b\u0443\u0436\u0431\u0443 (\u0432 \u043b\u0443\u0447\u0448\u0438\u0445 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u044f\u0445 Ubuntu)<\/p>\n<pre><code class=\"bash\">dnf install frr -y systemctl enable --now frr<\/code><\/pre>\n<p>\u041a\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u044b (OSPF, BGP \u0438 \u0434\u0440.) \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435:<br \/> \/etc\/frr\/daemons<br \/> \u0414\u043b\u044f OSPF \u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c<\/p>\n<pre><code>ospfd=yes<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u044c vtysh \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 OSPF<\/p>\n<pre><code class=\"bash\">vtysh<\/code><\/pre>\n<p>\u0418 \u0434\u0430\u043b\u0435\u0435 \u0432 \u044d\u0442\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 (cisco-like) \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e (\/etc\/frr\/frr.conf):<\/p>\n<pre><code>configure terminal  ! \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Zebra (\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e) router zebra  hostname my-firewall ! ! \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 OSPF router ospf  network 192.168.0.0\/16 area 0    # \u041b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0442\u044c  network 172.16.0.0\/24 area 0     # WAN-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441  passive-interface ens224         # \u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c OSPF \u043d\u0430 ens224 (\u0435\u0441\u043b\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e)  default-information originate    # \u0420\u0430\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e  exit ! ! \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e write memory exit<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<pre><code class=\"bash\">vtysh -c \"show ip ospf neighbor\"  # \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 vtysh -c \"show ip ospf route\"     # \u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 OSPF<\/code><\/pre>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 QoS<\/h2>\n<p>\u0414\u043b\u044f QoS \u0431\u0443\u0434\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e iptables \u0442\u0430\u0431\u043b\u0438\u0446\u044b mangle \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a. \u042d\u0442\u043e\u0442 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u0438 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f tc.<br \/> \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.<\/p>\n<pre><code class=\"bash\">dnf install iproute-tc -y<\/code><\/pre>\n<p>\u0413\u043e\u0442\u043e\u0432\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043b\u043e\u0433\u0438\u043a\u0438 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0438\u043c\u0435\u0440.<br \/> \u0414\u0435\u043b\u0430\u0435\u043c \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0432 iptables<\/p>\n<pre><code class=\"bash\"># SIP (5060) \u2014 \u043c\u0435\u0442\u043a\u0430 0x1 iptables -t mangle -A PREROUTING -p udp --dport 5060 -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -p udp --dport 5060 -j RETURN  # RTP (10000-20000) \u2014 \u043c\u0435\u0442\u043a\u0430 0x1 iptables -t mangle -A PREROUTING -p udp --dport 10000:20000 -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -p udp --dport 10000:20000 -j RETURN  # HTTP (80) \u2014 \u043c\u0435\u0442\u043a\u0430 0x2 iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 0x2 iptables -t mangle -A PREROUTING -p tcp --dport 80 -j RETURN  # HTTPS (443) \u2014 \u043c\u0435\u0442\u043a\u0430 0x2 iptables -t mangle -A PREROUTING -p tcp --dport 443 -j MARK --set-mark 0x2 iptables -t mangle -A PREROUTING -p tcp --dport 443 -j RETURN  # \u041a\u043b\u0438\u0435\u043d\u0442 Transmission (\u043f\u043e\u0440\u0442 51413) \u2014 \u043c\u0435\u0442\u043a\u0430 0x3 (\u043d\u0438\u0437\u043a\u0438\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442) iptables -t mangle -A PREROUTING -p tcp --dport 51413 -j MARK --set-mark 0x3 iptables -t mangle -A PREROUTING -p tcp --dport 51413 -j RETURN # \u0418\u043b\u0438 \u043f\u043e IP (\u0435\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d) iptables -t mangle -A PREROUTING -s 192.168.1.100 -j MARK --set-mark 0x3 iptables -t mangle -A PREROUTING -s 192.168.1.100 -j RETURN  # \u041f\u0440\u0438\u043c\u0435\u0440: \u0442\u0440\u0430\u0444\u0438\u043a \u0438\u0437 \u041a\u0438\u0442\u0430\u044f (CN) - \u043c\u0435\u0442\u043a\u0430 0x4 iptables -t mangle -A PREROUTING -m geoip --src-cc CN -j MARK --set-mark 0x4 iptables -t mangle -A PREROUTING -m geoip --src-cc CN -j RETURN<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u044b QoS<\/p>\n<pre><code class=\"bash\"># \u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043c\u0435\u0442\u043e\u043a \u043a \u043a\u043b\u0430\u0441\u0441\u0430\u043c HTB tc filter add dev ens192 parent 1:0 protocol ip handle 0x1 fw flowid 1:10  # VoIP \u043a\u043b\u0430\u0441\u0441 1:10  tc filter add dev ens192 parent 1:0 protocol ip handle 0x2 fw flowid 1:20  # \u0412\u0435\u0431 \u043a\u043b\u0430\u0441\u0441 1:20  tc filter add dev ens192 parent 1:0 protocol ip handle 0x3 fw flowid 1:30  # \u0422\u043e\u0440\u0440\u0435\u043d\u0442\u044b \u043a\u043b\u0430\u0441\u0441 1:30 tc filter add dev ens192 parent 1:0 protocol ip handle 0x4 fw flowid 1:40  # \u0422\u0440\u0430\u0444\u0438\u043a \u0438\u0437 \u041a\u0438\u0442\u0430\u044f \u043a\u043b\u0430\u0441\u0441 1:40<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\"># \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b tc -s class show dev ens192  # \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u044b tc -s filter show dev ens192<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 <a href=\"http:\/\/load.sh\" rel=\"noopener noreferrer nofollow\">load.sh<\/a> \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 QoS:<\/p>\n<pre><code class=\"bash\">... $FWDIR\/$POLICY\/qos.sh<\/code><\/pre>\n<p>\u0412\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u043e \u043e\u0431\u0440\u0430\u0437\u0446\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u044b \u0432 \u0444\u0430\u0439\u043b \/etc\/ngfw\/default\/<a href=\"http:\/\/qos.sh\" rel=\"noopener noreferrer nofollow\">qos.sh<\/a> \u0438 \u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c:<\/p>\n<pre><code class=\"bash\">chmod +x \/etc\/ngfw\/default\/qos.sh<\/code><\/pre>\n<h2>\u041a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f<\/h2>\n<p>\u041d\u0443 \u0432\u043e\u0442 \u043c\u044b \u0438 \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u043a \u0432\u043a\u0443\u0441\u043d\u0435\u043d\u044c\u043a\u043e\u043c\u0443. VRRP \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u043d\u043e\u0434\u0430\u043c\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.<\/p>\n<h3>VRRP<\/h3>\n<p><em>\u0412 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0435**<\/em><\/p>\n<h3>Connections table<\/h3>\n<p><em>\u0412 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0435**<\/em><\/p>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 VPN-\u0442\u0443\u043d\u043d\u0435\u043b\u0435\u0439<\/h2>\n<p>\u0412\u043e\u0442 \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 IPTables \u0432 <a href=\"http:\/\/impliedrules.sh\" rel=\"noopener noreferrer nofollow\">impliedrules.sh<\/a><\/p>\n<h3>OpenVPN<\/h3>\n<p><em>\u0412 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0435**<\/em><\/p>\n<h3>WireGuard<\/h3>\n<p><em>\u0412 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0435**<\/em><\/p>\n<h3>SSTP<\/h3>\n<p><em>\u0412 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0435**<\/em><\/p>\n<h3>StrongSwan<\/h3>\n<p><em>\u0412 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0435**<\/em><\/p>\n<h2>\u0411\u043e\u043d\u0443\u0441\u044b<\/h2>\n<p>\u041d\u0430\u0447\u043d\u0443 \u0441 \u043c\u043e\u0449\u043d\u043e\u0439 \u0444\u0438\u0447\u0438, \u043a\u0430\u043a TOTP (\u0434\u0432\u0443\u0445\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f).<\/p>\n<h3>TOTP (Google Authenticator \/ \u042f.\u041a\u043b\u044e\u0447)<\/h3>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 TOTP \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u043a\u0435\u0442:<\/p>\n<pre><code class=\"bash\">dnf install google-authenticator<\/code><\/pre>\n<p>\u0414\u0430-\u0434\u0430, \u042f.\u041a\u043b\u044e\u0447 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u0441\u0443\u043f\u0435\u0440-\u0441\u043e\u0444\u0442.<br \/> \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c <code>google-authenticator<\/code> \u043d\u0430\u0434\u043e \u043f\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c (\u043d\u0435 root) \u0438 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c, \u043e\u043d \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u0438 QR-\u043a\u043e\u0434 \u0434\u043b\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f TOTP<br \/> \u0414\u0430\u043b\u0435\u0435 \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u0434 root \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b\u044b:<br \/> \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0430\u0439\u043b\u0430 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c \u0442\u0430\u043a \/etc\/pam.d\/sshd:<\/p>\n<pre><code>#%PAM-1.0 # classic auth auth       substack     password-auth auth       include      postlogin # auth by TOTP auth       required     pam_google_authenticator.so<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 \/etc\/ssh\/sshd_config:<\/p>\n<pre><code># Google \/ Ya.Key TOTP ChallengeResponseAuthentication yes UsePAM yes AuthenticationMethods keyboard-interactive<\/code><\/pre>\n<p>\u0418 \u0432\u0430\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 <code>ChallengeResponseAuthentication no<\/code>. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0443 RedOS \u0448\u0442\u0430\u0442\u043d\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 \/etc\/ssh\/sshd_config.d\/50-redsoft.conf \u044d\u0442\u043e \u0432\u043f\u0438\u0441\u0430\u043d\u043e, \u043d\u0430\u0434\u043e \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<br \/> google-authenticator \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 offline-\u0440\u0435\u0436\u0438\u043c\u0435 \u0432\u0441\u0435\u0433\u0434\u0430, \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 (\u0434\u0430\u0436\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432 offline). \u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0441\u0442, google-authenticator \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043a\u043b\u044e\u0447, \u043a\u043e\u0434\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043e\u0442 \u043a\u043b\u044e\u0447\u0430 x timestamp = \u0448\u0435\u0441\u0442\u0438\u0437\u043d\u0430\u0447\u043d\u044b\u0439 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043a\u043e\u0434. \u0410 \u043f\u0440\u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 QR-\u043a\u043e\u0434\u0430 \u0441 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430, \u0432\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u043b\u044e\u0447 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Google Authenticator \/ \u042f.\u041a\u043b\u044e\u0447 \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435. \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u043e\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0435\u0440\u0432\u0435\u0440 \u0431\u044b\u043b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u0441 NTP.<\/p>\n<p>*\u041d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0432 \u043e\u0431\u0445\u043e\u0434 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a \u0420\u041a\u041d<\/p>\n<p>**\u0421\u043b\u0435\u0434\u0438\u0442\u0435 \u0437\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438, \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f<\/p>\n<p>***\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u043c\u043e\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/wiki.sakhost.ru\/ru\/manuals\/infra\/redngfw8\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/940024\/\"> https:\/\/habr.com\/ru\/articles\/940024\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>RedNGFW<\/h2>\n<p>\u041d\u0443 \u0447\u0442\u043e \u0436, \u043e\u043a\u043e\u043b\u043e \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u0432\u044b\u0448\u043b\u0430 \u0432\u0435\u0440\u0441\u0438\u044f RedOS 8. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u043e\u0440\u0430 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0440\u043e NGFW \u043d\u0430 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u041e\u0421.<br \/> \u0412\u0435\u0440\u0441\u0438\u044f 7.3.\u0445 <a href=\"https:\/\/habr.com\/ru\/articles\/766862\/\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u0445\u0430\u0431\u0440\u0435\u043d\u0430<\/a> \u0438 <a href=\"https:\/\/wiki.sakhost.ru\/ru\/manuals\/infra\/homefw\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u0432\u0438\u0447\u0435\u043d\u0430<\/a><\/p>\n<p>\u0427\u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438<\/p>\n<\/li>\n<li>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043b\u044f \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c NGFW (Enterprise)<\/p>\n<\/li>\n<li>\n<p>Suricata IPS (\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f) \u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u0442\u043e\u043d\u043a\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u0430\u0432\u0438\u043b<\/p>\n<\/li>\n<li>\n<p>GeoIP: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435, \u0441\u0431\u043e\u0440\u043a\u0430<\/p>\n<\/li>\n<li>\n<p>URL Filtering: \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043f\u043e URL<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 &#8212; \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 ipset \u0434\u043b\u044f iptables (\u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c nftables, \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c iptables-nft)<\/p>\n<\/li>\n<li>\n<p>DHCP-Relay<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0442\u0443\u043d\u043d\u0435\u043b\u0435\u0439 IPSec \/ WireGuard \/ OpenVPN (Site-2-Site, RemoteAccess)<\/p>\n<\/li>\n<li>\n<p>\u041a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f (active-backup \u043d\u0430 \u0431\u0430\u0437\u0435 VRRP \u0441 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b connections)<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 (\u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c OSPF)<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0437\u0430\u0446\u0438\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 (QoS)<\/p>\n<\/li>\n<\/ul>\n<h2>\u0410\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u0445\u043e\u0434\u0430 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0435\u0440\u0441\u0438\u0438<\/h2>\n<ul>\n<li>\n<p>RedOS 8.0 (Kernel 6.6.76)<\/p>\n<\/li>\n<li>\n<p>Suricata 6.0.12 (\u0432 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0435 RedOS \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f)<\/p>\n<\/li>\n<li>\n<p>GeoIP (xtables-addons 3.27)<\/p>\n<\/li>\n<li>\n<p>URL Filtering (xt_tls)<\/p>\n<\/li>\n<li>\n<p>nftables v1.8.9 \/ ipset v7.21, protocol version: 7<\/p>\n<\/li>\n<li>\n<p>DHCP-Relay 12:4.4.3<\/p>\n<\/li>\n<li>\n<p>VRRP (keepalived 2.3.2) \/ SYNC (conntrack-tools 1.4.5)<\/p>\n<\/li>\n<li>\n<p>Quagga (FRR v10.1.2)<\/p>\n<\/li>\n<li>\n<p>iproute-tc (6.1.0) + mangle<\/p>\n<\/li>\n<li>\n<p>WireGuard 1.0.20210914*<\/p>\n<\/li>\n<li>\n<p>\u041ep\u0435nV\u0420N 2.6.11*<\/p>\n<\/li>\n<li>\n<p>ShadowSocks 2.9.1*<\/p>\n<\/li>\n<li>\n<p>StrongSwan 5.9.10*<\/p>\n<\/li>\n<li>\n<p>SSTP 1.0.11*<\/p>\n<\/li>\n<\/ul>\n<h2>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b<\/h2>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0434\u043b\u044f iptables-nft, \u0442\u043e \u043d\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 Development Tools, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e (\u0437\u0434\u0435\u0441\u044c \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0435\u0434\u0438\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u043e standalone-\u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0437\u0430 Enterprise-\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0430 RedOS-\u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0435 NGFW \u0438\u0437 \u043f\u043e\u0447\u0442\u0438 \u043b\u044e\u0431\u043e\u0433\u043e Linux, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f Welcome). \u0412\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 root (\u043a\u0440\u043e\u043c\u0435 make, make install \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0441\u0435 \u0436\u0435 \u043e\u0442 root).<br \/> \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u043d\u043e\u0432\u0438\u043c \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c:<\/p>\n<pre><code class=\"bash\">dnf update -y reboot<\/code><\/pre>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438<\/p>\n<pre><code class=\"bash\">dnf groupinstall \"Development Tools\" -y dnf install cmake autoconf gcc kernel-devel iptables-devel make git telnet dkms -y<\/code><\/pre>\n<p>\u0410 \u0442\u0430\u043a\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 RedOS 8 + \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b perl<\/p>\n<pre><code class=\"bash\">dnf install iptables-nft ipset dhcp-relay suricata htop tree tcpdump socat -y dnf install perl-Net-CIDR perl-Net-CIDR-Lite perl-Text-CSV_SX -y dnf autoremove -y<\/code><\/pre>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438<\/h2>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438<\/p>\n<h3>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 IPTables<\/h3>\n<p>\u0412\u0441\u044e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \/etc<br \/> \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0438 \u0444\u0430\u0439\u043b:<\/p>\n<pre><code class=\"bash\">mkdir -p \/etc\/ngfw mkdir -p \/etc\/ngfw\/default mkdir -p \/etc\/ngfw\/default\/layers echo default &amp;gt;\/etc\/policyname<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 onboot, \u0438 \u0441\u043b\u0443\u0436\u0431\u0443 oneshot.<br \/> \u0424\u0430\u0439\u043b \/etc\/ngfw\/<a href=\"http:\/\/load.sh\" rel=\"noopener noreferrer nofollow\">load.sh<\/a>:<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  FWDIR=\/etc\/ngfw echo \"### Initial policy ###\" $FWDIR\/initpolicy.sh echo \"### Loading objects ###\" . $FWDIR\/ngfw-self-ips.sh $FWDIR\/objects.sh echo \"### AntiSpoofing ###\" . $FWDIR\/antispoofing.sh echo \"### Implied Rules ###\" . $FWDIR\/impliedrules.sh  echo \"### Loading specified policy ###\" if [ -z \"$1\" ]; then   POLICY=\"$1\" else   POLICY=\"default\" fi $FWDIR\/$POLICY\/accessrules.sh $FWDIR\/$POLICY\/natrules.sh  echo \"### Ending policy ###\" $FWDIR\/endpolicy.sh<\/code><\/pre>\n<p>\u0424\u0430\u0439\u043b \/usr\/local\/bin\/fwboot:<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  FWDIR=\/etc\/ngfw # Loading Saved Policy if [ -f \"\/etc\/policyname\" ]; then   POLICY=$(cat \/etc\/policyname)   if [ ! -d \"$FWDIR\/$POLICY\" ]; then     POLICY=\"default\"   fi else   POLICY=\"default\" fi systemctl set-environment POLICY=\"$POLICY\"  # Loading Policy Rules \/usr\/local\/bin\/fw load $POLICY<\/code><\/pre>\n<p>\u0421\u043b\u0443\u0436\u0431\u0430 \/etc\/systemd\/system\/fw.service:<\/p>\n<pre><code>[Unit] Description=RedNGFW Before=network-pre.target Wants=network-pre.target After=syslog.target  [Service] Type=oneshot RemainAfterExit=yes ExecStart=\/usr\/local\/bin\/fwboot StandardOutput=syslog StandardError=syslog  [Install] WantedBy=basic.target<\/code><\/pre>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u043b\u0443\u0436\u0431\u0443 \u0432 \u0430\u0432\u0442\u043e\u0437\u0430\u043f\u0443\u0441\u043a<\/p>\n<pre><code class=\"bash\">systemctl enable fw<\/code><\/pre>\n<h3>\u0421\u043a\u0440\u0438\u043f\u0442\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438<\/h3>\n<p>\u0412 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ul>\n<li>\n<p>\/etc\/ngfw\/<a href=\"http:\/\/initpolicy.sh\" rel=\"noopener noreferrer nofollow\">initpolicy.sh<\/a> &#8212; \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\/etc\/ngfw\/<a href=\"http:\/\/ngfw-self-ips.sh\" rel=\"noopener noreferrer nofollow\">ngfw-self-ips.sh<\/a> &#8212; \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 NGFW<\/p>\n<\/li>\n<li>\n<p>\/etc\/ngfw\/<a href=\"http:\/\/objects.sh\" rel=\"noopener noreferrer nofollow\">objects.sh<\/a> &#8212; \u0441\u043e\u0441\u0442\u0430\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\/etc\/ngfw\/<a href=\"http:\/\/antispoofing.sh\" rel=\"noopener noreferrer nofollow\">antispoofing.sh<\/a> &#8212; \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u0430\u043d\u0442\u0438\u0441\u043f\u0443\u0444\u0444\u0438\u043d\u0433\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\/etc\/ngfw\/<a href=\"http:\/\/impliedrules.sh\" rel=\"noopener noreferrer nofollow\">impliedrules.sh<\/a> &#8212; \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u043b\u044f Enterprise-\u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\/etc\/ngfw\/<a href=\"http:\/\/endpolicy.sh\" rel=\"noopener noreferrer nofollow\">endpolicy.sh<\/a> &#8212; \u043f\u043e\u0434\u0432\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0430\u044f \u0437\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/p>\n<\/li>\n<li>\n<p>\/etc\/ngfw\/default\/<a href=\"http:\/\/accessrules.sh\" rel=\"noopener noreferrer nofollow\">accessrules.sh<\/a> &#8212; \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0442\u0435\u043b\u043e \u043d\u0430\u0448\u0435\u0439 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\/etc\/ngfw\/default\/<a href=\"http:\/\/natrules.sh\" rel=\"noopener noreferrer nofollow\">natrules.sh<\/a> &#8212; \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 NAT<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0442\u0430\u043a, \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443:<\/p>\n<h4>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 (\/etc\/ngfw\/initpolicy.sh)<\/h4>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043e\u0431\u043d\u0443\u043b\u044f\u0435\u0442 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0438, \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u044e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0432 \u043d\u043e\u043b\u044c. \u041d\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u0431\u0440\u043e\u0448\u0435\u043d\u044b, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 conntrack RELATED,ESTABLISHED \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u044b \u043d\u0430 \u043c\u0435\u0441\u0442\u043e.<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  ### CLEAR POLICY ### iptables -F iptables -X iptables -t mangle -F iptables -t nat -F iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP ipset -F ipset -X  ### ACTIONS ### iptables -N accept iptables -N drop iptables -N lognaccept iptables -N logndrop iptables -N spoof iptables -N ips iptables -N alert ipset -N NGFWSelf hash:ip  ### LOCAL INTERFACES ### iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT  ### MODULE XT_CONNTRACK NT_CONNTRACK ### iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT<\/code><\/pre>\n<h4>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 (\/etc\/ngfw\/ngfw-self-ips.sh)<\/h4>\n<p>\u042d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u043e\u0433\u0440\u0443\u0437\u0438\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 NGFWSelf \u0438 \u043d\u0430\u043f\u043e\u043b\u043d\u0438\u0442 \u0435\u0433\u043e IP-\u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 \u0441\u0430\u043c\u043e\u0433\u043e NGFW (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 VRRP-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, VIP \u0432\u0440\u044f\u0434 \u043b\u0438 \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u0432 \u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 &#8212; \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u0443\u0434\u0435\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442, \u043d\u043e \u044d\u0442\u043e \u043f\u043e\u0437\u0436\u0435).<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  external_ifname=$(ip route list default | awk '{ print $5 }') external_ifip=$(ip address show $external_ifname | awk '\/inet \/ { print $2 }' | cut -d\\\/ -f1)  declare -A vlans_nets declare -A vlans_ips while read -r line; do   vlan_ifname=$(echo $line | awk '{ print $2 }')   if [ \"$vlan_ifname\" == \"--\" ]; then     continue   fi   vlan_id=$(echo $vlan_ifname | cut -d. -f2)   parent_ifname=$(echo $vlan_ifname | cut -d. -f1)   vlan_ip=$(ip address show $vlan_ifname | awk '\/inet \/ { print $2 }' | cut -d\\\/ -f1)   vlan_this_network=$(ip route list dev $vlan_ifname | awk '\/kernel\/ { print $1 }')   vlans_nets[\"${vlan_ifname}\"]=\"${vlan_this_network}\"   vlans_ips[\"${vlan_ifname}\"]=\"${vlan_ip}\" done &amp;lt; &amp;lt;(nmcli -f TYPE,DEVICE con sh | grep vlan)  ipset -A NGFWSelf $external_ifip for int in \"${!vlans_nets[@]}\"; do   ipset -A NGFWSelf ${vlans_ips[$int]} done<\/code><\/pre>\n<h4>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 (\/etc\/ngfw\/objects.sh)<\/h4>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438. \u0418\u043c\u0435\u043d\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u0438\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c.<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  ### \u0417\u0434\u0435\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0438\u0436\u0435 \u043f\u043e \u0442\u0438\u043f\u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 ###  ### Network Objects ### ipset -N net_192.168.0.0\/16-LocalNet nethash &amp;amp;&amp;amp; ipset -A net_192.168.0.0\/16-LocalNet 192.168.0.0\/16  ### Host Objects ### ipset -N localhost hash:ip &amp;amp;&amp;amp; ipset -A localhost 127.0.0.1 ipset -N host_DNSServer hash:ip &amp;amp;&amp;amp; ipset -A host_DNSServer 192.168.61.26  ### Group Objects ### ipset -N gr_LocalUsers list:set &amp;amp;&amp;amp; \\   ipset -A gr_LocalUsers host_IvanovAA &amp;amp;&amp;amp; \\   ipset -A gr_LocalUsers net_192.168.0.0\/16-LocalNet  ### Services Objects ### ipset -N svc_ssh bitmap:port range 22-22 &amp;amp;&amp;amp; ipset -A svc_ssh tcp:22<\/code><\/pre>\n<h4>\u0410\u043d\u0442\u0438\u0441\u043f\u0443\u0444\u0444\u0438\u043d\u0433 (\/etc\/ngfw\/antispoofing.sh)<\/h4>\n<p>\u0412 \u0434\u0435\u0444\u043e\u043b\u0442\u043e\u0432\u043e\u0439 \u0434\u043b\u044f iptables \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u0432\u0441\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432. \u0414\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 &#8212; \u044d\u0442\u043e \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c \u043f\u0440\u0430\u0432\u0438\u043b. \u0412\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044f \u0438 \u0443\u0445\u043e\u0434\u0430 \u043e\u0442 \u0433\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0438, \u043e\u0442\u043a\u0443\u0434\u0430 \u0438 \u043a\u0443\u0434\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0439\u0442\u0438 \u0442\u0440\u0430\u0444\u0438\u043a, \u043c\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043c \u0437\u0430\u0449\u0438\u0442\u0443 \u043e\u0442 \u0441\u043f\u0443\u0444\u0438\u043d\u0433\u0430 \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u043c \u0438\u0437 \u043f\u0440\u0430\u0432\u0438\u043b \u043f\u043e\u043d\u044f\u0442\u0438\u0435 in interface \/ out interface. \u0410\u043d\u0442\u0438\u0441\u043f\u0443\u0444\u0438\u043d\u0433 \u0437\u0434\u0435\u0441\u044c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u0437\u0430\u0449\u0438\u0442\u0443 \u043e\u0442 \u0442\u0440\u0430\u0444\u0438\u043a\u0430, \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043d\u0435 \u0441 \u0442\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u0439\u0442\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 IP-\u0441\u0435\u0442\u0435\u0439 \u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 (\u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c) \u0432 \u044d\u0442\u043e\u0439 \u0441\u0435\u0442\u0438.<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  default_interface=$(ip -4 route show default | awk '{ print $5 }' | head -n1)  interfaces=$(ip link show | awk -F': ' '\/^[0-9]+: [^lo]\/ { print $2 }' | cut -d'@' -f1 | grep -v \"^$default_interface$\" | sort -u)  for interface in $interfaces; do   networks=$(     (        ip -4 route list dev $interface 2&amp;gt;\/dev\/null | awk '{print $1}' | grep -v default     ) | sort -u   )        if [ -z \"$networks\" ]; then     continue   fi    network_list=\"\"   for net in $networks; do     if [[ $net =~ ^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+(\/[0-9]+)?$ ]]; then       if [ -z \"$network_list\" ]; then         network_list=\"$net\"       else         network_list=\"$network_list,$net\"       fi     fi   done    if [ -z \"$network_list\" ]; then     continue   fi    iptables -A FORWARD -s $network_list ! -i $interface -m comment --comment \"AntiSpoofing\" -j spoof done<\/code><\/pre>\n<h4>\u041f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u041c\u042d (\/etc\/ngfw\/impliedrules.sh)<\/h4>\n<p>\u0422\u0430\u043a\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0443\u0436\u0435\u043d \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043e\u0434\u043d\u0430\u043a\u043e \u0432 \u043d\u0435\u0433\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0442\u0443\u043d\u043d\u0435\u043b\u0435\u0439.<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  ### \u0417\u0430\u0433\u043b\u0443\u0448\u043a\u0430 \u0434\u043b\u044f Enterprise. \u0422\u0430\u043a\u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0442\u0443\u043d\u043d\u0435\u043b\u0438 VPN.<\/code><\/pre>\n<h4>\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 (\/etc\/ngfw\/endpolicy.sh)<\/h4>\n<p>\u0417\u0434\u0435\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u041c\u042d \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u043b\u043e\u0435\u0432, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u043a system-preconfig (\/etc\/ngfw\/<a href=\"http:\/\/initpolicy.sh\" rel=\"noopener noreferrer nofollow\">initpolicy.sh<\/a>).<br \/> <strong>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u044f\u0434\u0435\u0440 \u0434\u043b\u044f IDPS Suricata<\/strong><\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  # \u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044f\u0434\u0435\u0440 \u043f\u043e\u0434 IDPS. \u0412\u0430\u0436\u043d\u043e \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c 1 \u044f\u0434\u0440\u043e \u043d\u0435 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043e, \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Suricata \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0436\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e. \u042d\u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f. CPU=$(lscpu | awk '\/^CPU\\(s\\)\/ { print $2 }') CPU=$((CPU - 2))  iptables -A accept -j ips iptables -A drop -j DROP iptables -A lognaccept -j LOG --log-prefix \"FW: Allow: \" iptables -A lognaccept -j ips iptables -A logndrop -j LOG --log-prefix \"FW: Deny: \" iptables -A logndrop -j DROP iptables -A spoof -j LOG --log-prefix \"FW: Spoofed: \" iptables -A spoof -j DROP iptables -A ips -j LOG --log-prefix \"FW: IPS: \" iptables -A ips -j NFQUEUE --queue-balance 0:${CPU} iptables -A ips -j RETURN iptables -A alert -j LOG --log-prefix \"FWALERT: \" iptables -A alert -j RETURN<\/code><\/pre>\n<h4>\u0421\u0430\u043c\u0430 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u041c\u042d (\/etc\/ngfw\/default\/accesspolicy.sh)<\/h4>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u0438\u0448\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0438 \u043f\u0440\u0438<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-471908","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/471908","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=471908"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/471908\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=471908"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=471908"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=471908"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}