{"id":934,"date":"2019-04-11T18:32:51","date_gmt":"2019-04-11T18:32:51","guid":{"rendered":"https:\/\/www.ixeous.net\/cms\/?p=934"},"modified":"2019-04-13T01:39:48","modified_gmt":"2019-04-13T01:39:48","slug":"piloting-a-new-print-server","status":"publish","type":"post","link":"https:\/\/www.ixeous.net\/cms\/index.php\/2019\/04\/11\/piloting-a-new-print-server\/","title":{"rendered":"Print Server Project"},"content":{"rendered":"<p>Print servers are generally the opposite of exciting.&nbsp; Environments that only use AD connected Windows clients simply add Print Services and go.&nbsp; Users can use point and print, or admins can deploy printers via GPO.&nbsp; The Windows print server will even install drivers for the client systems and update them if needed.&nbsp; What happens when things aren&#8217;t quite as homogeneous?<\/p>\n<h4>The Scenario<\/h4>\n<p>Printing needs to be provides for multiple OSes including Windows, MacOS, Linux, ChromeOS, etc.&nbsp; Add in that a significant portion of clients are bring-your-own-device (BYOD) that belong to the individual and are not actually managed by IT.<\/p>\n<p>The basic Windows print server starts to break down.&nbsp; The deploy drivers feature doesn&#8217;t work for a number of clients and point and print is invalid for a sizable group of users.<\/p>\n<p>There are some products that provide printing service in similar situations, but that doesn&#8217;t make for an interesting story.&nbsp; Can we build something that can provide services and does not require purchasing and introducing a new product\/technology?&nbsp; That is interesting, at least as interesting as a print server gets.<\/p>\n<p>The goals are simple:<\/p>\n<ol>\n<li>Solve the BYOD issue.&nbsp; Make it simple and straight forward for users to connect their systems to the available printers.<\/li>\n<li>Minimize client interruption when a printer is replaced.<\/li>\n<li>Use the same system for 95+% of printing needs.&nbsp; This includes the managed Windows AD systems as well.&nbsp; There are a number of reasons that one-offs may happen, but keep them to a minimum.<\/li>\n<\/ol>\n<p>With these goals in mind, I decided that the print server will have the following feaures:<\/p>\n<ol>\n<li>Use IPP for all clients.&nbsp; This is a well defined protocol that is available to practically all clients.<\/li>\n<li>Use SSL encryption between the client and the server.&nbsp; The server will answer on the standard HTTPS port so that the chance of firewall issues between networks or client security suites are minimized.&nbsp; We don&#8217;t want any sensitive information sent to the printer in the clear.<\/li>\n<li>Provide useful logging of print jobs<\/li>\n<li>Clients should generally use generic drivers (PCL or PS)<\/li>\n<\/ol>\n<h4>Evaluating Options<\/h4>\n<p>Without purchasing a third party solution, our options are:<\/p>\n<ol>\n<li>Use Windows Print Services<\/li>\n<li>Use CUPS<\/li>\n<\/ol>\n<h6>Feature 1: Use IPP<\/h6>\n<p>Both options can serve as an IPP print server.&nbsp; Windows by uses IIS to provide IPP services.&nbsp; This is actually a nice feature as it provides browsing to clients using a system that is designed to serve the purpose.<\/p>\n<p>CUPS is IPP.&nbsp; There isn&#8217;t anything special to do.&nbsp; Simply add a printer and share it.<\/p>\n<h6>Feature 2: Use SSL<\/h6>\n<p>Due to the diversity of clients that will use the service(BYOD), the print server will use an SSL cert signed by a trusted CA.&nbsp; No self signed certs allowed.&nbsp; Because Windows uses IIS to provide IPP services, it is very easy to add SSL protection to all printing.&nbsp; Also, managing the service port is exactly the same as any other IIS hosted service.&nbsp; This creates nice consistency of management for those that are predominately Windows shops.&nbsp; It&#8217;s fairly simple and straight forward.<\/p>\n<p>CUPS on the other hand doesn&#8217;t play nicely with SSL.&nbsp; It is quite easy to find Internet posts detailing various problems with SSL and CUPS.&nbsp; The greatest concern may be securing SSL.&nbsp; There didn&#8217;t seem to be any way to limit the ciphers used so the server could use weak or broken ciphers and leave communications vulnerable.&nbsp; The newest versions of CUPS may have addressed some of the issues, but maintaining and patching a production system is typically much easier (read secure) when using packages from the distro.<\/p>\n<p>The workaround for CUPS in this case is rather simple.&nbsp; Copy the Windows method.&nbsp; Install a webserver and configure the webserver to act as a reverse proxy for the CUPS service.&nbsp; The webserver can provide all SSL services and the clients can use the standard HTTPS port that the webserver listens on by default.&nbsp; In addition, the SSL becomes fully configurable, just like Windows.&nbsp; Another benefit of this extra layer is the method of restricting access to printers.&nbsp; While CUPS does have various access controls, using the webserver seems more flexible to me.&nbsp; The webserver&#8217;s configuration can be used to restrict access to individual printers via the Location directive.&nbsp; This allows one printer to be restricted to a specific set of IPs while others remain open.&nbsp; Using the extra layer to solve the SSL problem turns out to be a nice feature.<\/p>\n<h6>Feature 3: Useful Logging<\/h6>\n<p>Useful logging is heavily influenced by the environment in which the service is run.&nbsp; Both Windows and CUPS allow for logging to a central log server, though each in the underlying system&#8217;s own way.&nbsp; Windows has the Event Logger and Windows Event Forwarding while CUPS (*NIX) has syslog.&nbsp; The existing infrastructure will probably hold final sway in which system &#8220;wins&#8221; this feature.<\/p>\n<p>If things are &#8220;equal&#8221;, CUPS does provide a logging advantage over Windows.&nbsp; Windows captures the user that printed as IUSER_ANONYMOUS for unauthenticated printing.&nbsp; CUPS, on the other hand, is able to capture the username of the user that is logged into the system.&nbsp; For clients that authenticate against AD or other central service, this is the user&#8217;s username.&nbsp; For the BYOD devices it&#8217;s whatever username they are using on the system that is printing.&nbsp; This may not always be the best or most reliable information, but it is better than not having the information should there be a need to track something down.<\/p>\n<p>I was not able to get authenticated printing working on the Windows server, but the issue seemed to be on the client side and not the server.&nbsp; A number of sites indicate that it &#8220;should work&#8221;.&nbsp; I have not yet had a chance to test authentication via the CUPS server.&nbsp; I will update this information once I have had the chance to test authentication with the CUPS server.&nbsp; I hope to find that I can use the webserver configuration to control authentication\/authorization on a per printer basis similar to what was described in the SSL section.<\/p>\n<h6>Feature 4: Use Generic Drivers<\/h6>\n<p>This is targeting goals 1 and 2.&nbsp; Users shouldn&#8217;t need to find, download, and install drivers for a specific printer.&nbsp; Also, should a printer be replaced with a different brand\/model, clients can continue to print as they were before without any interaction or modification.<\/p>\n<p>The drawback to using generic drivers is that some advanced features may not be usable.&nbsp; The most commonly used example of a missing feature is duplex printing.&nbsp; Users may not able to use duplex printing on a specific print job.&nbsp; This, so far, seems to apply more to Windows clients than other operating systems. Other missing features would be any number of finishing functions or accounting controls that require native print drivers.&nbsp; If required, native drivers can be installed as needed.<\/p>\n<h3>How It&#8217;s Working<\/h3>\n<p>I ended up using the CUPS option.&nbsp; The winning factors revolve around consistency with existing infrastructure and logging of usernames.<\/p>\n<p>So far&nbsp; things are going rather well.&nbsp; The biggest issue to this point&nbsp; has revolved around the generic driver to use.&nbsp; Older printers may not recognize the PCL language version.&nbsp; Some printers are slow when using the PS driver versus PCL driver.&nbsp; These issues are usually resolved by switching to the other driver.<\/p>\n<p>Interestingly, there were a couple of odd printing issues that were resolved by using the print server.&nbsp; In one case, a user could not print to a specific printer regardless of setup including direct ip and native vendor drivers.&nbsp; Another user would experience very long delays when printing from a Mac.&nbsp; In both cases, going through the print server corrected the issue.<\/p>\n<p>It&#8217;s still too early to declare success, but it&#8217;s moving on the right track.&nbsp;<\/p>\n<h4>&nbsp;<\/h4>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Print servers are generally the opposite of exciting.&nbsp; Environments that only use AD connected Windows clients simply add Print Services and go.&nbsp; Users can use point and print, or admins can deploy printers via GPO.&nbsp; The Windows print server will even install drivers for the client systems and update them if needed.&nbsp; What happens when [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[],"tags":[],"class_list":["post-934","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/www.ixeous.net\/cms\/index.php\/wp-json\/wp\/v2\/posts\/934","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ixeous.net\/cms\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ixeous.net\/cms\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ixeous.net\/cms\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ixeous.net\/cms\/index.php\/wp-json\/wp\/v2\/comments?post=934"}],"version-history":[{"count":13,"href":"https:\/\/www.ixeous.net\/cms\/index.php\/wp-json\/wp\/v2\/posts\/934\/revisions"}],"predecessor-version":[{"id":979,"href":"https:\/\/www.ixeous.net\/cms\/index.php\/wp-json\/wp\/v2\/posts\/934\/revisions\/979"}],"wp:attachment":[{"href":"https:\/\/www.ixeous.net\/cms\/index.php\/wp-json\/wp\/v2\/media?parent=934"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ixeous.net\/cms\/index.php\/wp-json\/wp\/v2\/categories?post=934"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ixeous.net\/cms\/index.php\/wp-json\/wp\/v2\/tags?post=934"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}