diff --git a/Magento/Sniffs/PHP/FinalImplementationSniff.php b/Magento/Sniffs/PHP/FinalImplementationSniff.php
new file mode 100644
index 00000000..5db2828b
--- /dev/null
+++ b/Magento/Sniffs/PHP/FinalImplementationSniff.php
@@ -0,0 +1,36 @@
+addError(
+ // phpcs:ignore Generic.Files.LineLength.TooLong
+ 'Final keyword is prohibited in Magento. It decreases extensibility and is not compatible with plugins and proxies.',
+ $stackPtr,
+ 'FoundFinal'
+ );
+ }
+}
diff --git a/Magento/Tests/PHP/FinalImplementationUnitTest.inc b/Magento/Tests/PHP/FinalImplementationUnitTest.inc
new file mode 100644
index 00000000..99381b5f
--- /dev/null
+++ b/Magento/Tests/PHP/FinalImplementationUnitTest.inc
@@ -0,0 +1,13 @@
+ 1,
+ 6 => 1,
+ ];
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getWarningList()
+ {
+ return [];
+ }
+}
diff --git a/Magento/ruleset.xml b/Magento/ruleset.xml
index 10bd7805..b009a662 100644
--- a/Magento/ruleset.xml
+++ b/Magento/ruleset.xml
@@ -104,6 +104,9 @@
8
+
+ 10
+
10