Servers for Hackers Server Administration for Programmers Chris Fidao Thisbookisforsaleathttp://leanpub.com/serversforhackers Thisversionwaspublishedon2014-10-21 ThisisaLeanpubbook.LeanpubempowersauthorsandpublisherswiththeLeanPublishing process.LeanPublishingistheactofpublishinganin-progressebookusinglightweighttoolsand manyiterationstogetreaderfeedback,pivotuntilyouhavetherightbookandbuildtractiononce youdo. ©2014ChrisFidao Tweet This Book! PleasehelpChrisFidaobyspreadingthewordaboutthisbookonTwitter! Thesuggestedhashtagforthisbookis#srvrsforhackers. Findoutwhatotherpeoplearesayingaboutthebookbyclickingonthislinktosearchforthis hashtagonTwitter: https://twitter.com/search?q=#srvrsforhackers Contents Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i BookIssues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii AccidentalSysadminSyndrome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii Assumptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii LinuxDistributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv TheSandbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 InstallVirtualboxandVagrant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 ConfigureVagrant. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 VagrantUp! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 BasicCommands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 BasicSoftware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 UsersandAccess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 IPAddresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 CreatingaNewUser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 MakingOurUseraSuperUser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 SettingUptheFirewall:Iptables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Addingtheserules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 InsertingRules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 DeletingRules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 SavingFirewallRules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 DefaultingtoDROPOverACCEPT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 LoggingDroppedPackets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Fail2Ban . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 CONTENTS IptablesIntegration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 AutomaticSecurityUpdates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Package Managers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Apt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Installing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Repositories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 SearchingPackages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Permissions and User Management . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 CheckingPermissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 ChangingPermissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 UserManagement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 CreatingUsers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Umask&StickyBit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 RunningProcesses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Webservers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 HTTP,WebServersandWebSites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 AQuickNoteonDNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 DNS&HostsFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Xip.io . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 VirtualHosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 HostingWebApplications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 ThreeActors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Installing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 VirtualHosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 ApacheandWebApplications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 MPMConfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 CONTENTS SecurityConfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Envvars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Nginx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 WebServerConfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Servers(virtualhosts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 IntegrationwithWebApplications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 PHP-FPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 ServerSetupforMulti-TenancyApps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Multi-TenancyinApache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Multi-TenancyinNginx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 SSL Certificates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 SSLOverview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 UsingSSLinYourApplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 CreatingSelf-SignedCertificates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 CreatingaWildcardSelf-SignedCertificate . . . . . . . . . . . . . . . . . . . . . . . . . . 167 ApacheSetup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 NginxSetup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 OneServerBlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 ExtraSSLTricks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Multi-Server Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 ImplicationsofMulti-ServerEnvironments . . . . . . . . . . . . . . . . . . . . . . . . . . 178 AssetManagement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 LostClientInformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 SSLTraffic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 Logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 LoadBalancingwithNginx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 BalancingAlgorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 CONTENTS Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 LoadBalancingwithHAProxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 CommonSetups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 HAProxyConfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 MonitoringHAProxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 SampleNodeJSWebServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 SSLwithHAProxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 HAProxywithSSLTermination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 HAProxywithSSLPass-Through . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 SampleNodeJSWebServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Logrotate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 WhatdoesLogrotatedo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 ConfiguringLogrotate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 GoingFurther . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 Rsyslog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 ShouldIUseRsyslog? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 SendingToRsyslogFromAnApplication . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 File Management, Deployment & Configuration Management . . . . . . . . 228 ManagingFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 CopyingFilesLocally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 SCP:SecureCopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Rsync:SyncFilesAcrossHosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Deployment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Auto-deploywithGitHub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 HowitWorks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 NodeListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 ShellScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 Puttingittogether . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Firewall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 ConfigurationManagementwithAnsible . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 CONTENTS Install . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 ManagingServers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Basic:RunningCommands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 BasicPlaybook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Facts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Vault . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 SSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Loggingin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 SSHConfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 SSHTunneling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 LocalPortForwarding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 RemotePortForwarding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 One-OffCommands&MultipleServers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 BasicAnsible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Monitoring Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 ASampleScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 SystemServices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 SystemVInit(SysVinit,SysV) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 Upstart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 TheServiceCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 Systemd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 UsingTheseSystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 Supervisord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 ControllingProcesses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 WebInterface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 Forever . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 Circus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 CONTENTS Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 ControllingProcesses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 WebInterface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 StartingonBoot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 Development and Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 ServingStaticContent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 Built-In . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 NodeJS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 DynamicContent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 Servers Serverscanbefun! Knowinghowtosetup,runandadministeraservercanbeasempoweringascodingitself! Someapplicationhaveneedsstretchingbeyondwhathostingproviderscangive.Thisshouldn’tstop usfrombuildingtheapplication. Serverscanbehard! Consumers expect and demand services to be functioning. Downtime can cost real money, and is oftenmetwithfrustrationandanger. At the same time, servers are increasingly commodified. Hosting once involved a few, powerful servers.Now,themodern“Cloud”consistsofmanysmall,cheapvirtualmachines.Virtualmachines commonlydieformanyreasons. Theendresultisthatweneedtobuildforfailure.ThisisaHardProblem™,andrequiresustoknow alotabouttheserversrunningourapplications. ThisbookexistsbecausewedevelopersarenowfacedwithSystemAdministrationissues.Weneed toatleastknowthebasicsofwhatgoesintohostingandservingourapplication! So,let’snotgetstuckwithlimitinghostingorabrokenserver! Book Issues All feedback is hugely appreciated! Any questions, comments, issues, stories of glory/valor and praisecanbedirectedtotheGithubrepository¹createdforfeedback! https://github.com/Servers-for-Hackers/the-book ¹https://github.com/Servers-for-Hackers/the-book
Description: