mirroir readonly du Gitit wiki.evolix.org (attention, ne rien commiter/merger sur ce dépôt) https://wiki.evolix.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

HowtoSquid.md 8.2 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. ---
  2. categories: web
  3. title: Howto Squid
  4. ...
  5. * Documentation : <http://www.squid-cache.org/Versions/v3/3.5/cfgman/>
  6. * Rôle Ansible : <https://forge.evolix.org/projects/ansible-roles/repository/show/squid>
  7. [Squid](http://www.squid-cache.org/) est serveur proxy HTTP/HTTPS.
  8. ## Installation
  9. ~~~
  10. # apt install squid squidclient
  11. $ /usr/sbin/squid -v | head -3
  12. Squid Cache: Version 3.5.23
  13. Service Name: squid
  14. Debian linux
  15. # systemctl status squid
  16. ● squid.service - LSB: Squid HTTP Proxy version 3.x
  17. Loaded: loaded (/etc/init.d/squid; generated; vendor preset: enabled)
  18. Docs: man:systemd-sysv-generator(8)
  19. Main PID: 20892 (squid)
  20. CGroup: /system.slice/squid.service
  21. ├─20890 /usr/sbin/squid -YC -f /etc/squid/squid.conf
  22. ├─20892 (squid-1) -YC -f /etc/squid/squid.conf
  23. ├─20893 (logfile-daemon) /var/log/squid/access.log
  24. └─20894 (pinger)
  25. ~~~
  26. > *Note* : Pour Debian 8, il faut installer ainsi :
  27. >
  28. > ~~~
  29. > # apt install squid3 squidclient
  30. > ~~~
  31. ## Configuration
  32. La configuration par défaut est dans le fichier `/etc/squid/squid.conf`.
  33. Nous utilisons une configuration alternative en spécifiant via `/etc/default/squid` :
  34. ~~~
  35. CONFIG=/etc/squid/evolinux-defaults.conf
  36. SQUID_ARGS="-YC -f $CONFIG"
  37. ~~~
  38. `/etc/squid/evolinux-defaults.conf`:
  39. ~~~
  40. http_port 127.0.0.1:3128
  41. coredump_dir /var/spool/squid
  42. max_filedescriptors 4096
  43. acl SSL_ports port 443
  44. acl Safe_ports port 80 # http
  45. acl Safe_ports port 21 # ftp
  46. acl Safe_ports port 443 # https
  47. acl Safe_ports port 70 # gopher
  48. acl Safe_ports port 210 # wais
  49. acl Safe_ports port 1025-65535 # unregistered ports
  50. acl Safe_ports port 280 # http-mgmt
  51. acl Safe_ports port 488 # gss-http
  52. acl Safe_ports port 591 # filemaker
  53. acl Safe_ports port 777 # multiling http
  54. acl CONNECT method CONNECT
  55. acl Whitelist_domains dstdom_regex -i "/etc/squid/evolinux-whitelist-defaults.conf"
  56. acl Whitelist_domains dstdom_regex -i "/etc/squid/evolinux-whitelist-custom.conf"
  57. include /etc/squid/evolinux-acl.conf
  58. http_access deny !Safe_ports
  59. http_access deny CONNECT !SSL_ports
  60. http_access allow localhost manager
  61. http_access deny manager
  62. include /etc/squid/evolinux-httpaccess.conf
  63. http_access allow localhost
  64. http_access deny all
  65. refresh_pattern ^ftp: 1440 20% 10080
  66. refresh_pattern ^gopher: 1440 0% 1440
  67. refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
  68. refresh_pattern . 0 20% 4320
  69. logformat combined %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
  70. access_log /var/log/squid/access.log combined
  71. include /etc/squid/evolinux-custom.conf
  72. ~~~
  73. ### Configuration en mode Proxy local
  74. Pour sécuriser un serveur, on peut installer un proxy HTTP en local.
  75. Cela permet d'interdire ou de garder des traces des requêtes HTTP faites vers l'extérieur
  76. `/etc/squid/evolinux-custom.conf` :
  77. ~~~
  78. http_port 8888 transparent
  79. cache deny all
  80. ignore_expect_100 on
  81. tcp_outgoing_address 192.0.2.42
  82. ~~~
  83. Le fichier `/etc/squid/evolinux-whitelist-defaults.conf` contiendra les noms de domaine autorisés en sortie :
  84. ~~~
  85. ^mirror.evolix.org$
  86. ^security.debian.org$
  87. ^pub.evolix.net$
  88. ~~~
  89. > *Note* : la liste des noms de domaine autorisés en sortie peut-être trouvée sur <https://forge.evolix.org/projects/ansible-roles/repository/revisions/stable/entry/squid/files/evolinux-whitelist-defaults.conf>
  90. Le fichier `/etc/squid/evolinux-acl.conf` contient les adresses IPv4 locales :
  91. ~~~
  92. acl LOCAL src 192.0.2.42/32
  93. ~~~
  94. `/etc/squid/evolinux-httpaccess.conf` :
  95. ~~~
  96. http_access deny !Whitelist_domains
  97. http_access allow LOCAL
  98. ~~~
  99. Il reste évidemment à rediriger les requêtes HTTP en sortie vers Squid avec IPTables :
  100. ~~~
  101. /sbin/iptables -t nat -A OUTPUT -p tcp --dport 80 -m owner --uid-owner proxy -j ACCEPT
  102. /sbin/iptables -t nat -A OUTPUT -p tcp --dport 80 -d 192.0.2.42 -j ACCEPT
  103. /sbin/iptables -t nat -A OUTPUT -p tcp --dport 80 -d 127.0.0.1 -j ACCEPT
  104. /sbin/iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8888
  105. ~~~
  106. ### Configuration en mode Proxy pour réseau local
  107. `/etc/squid/evolinux-custom.conf` :
  108. ~~~
  109. http_port 3128 transparent
  110. error_directory /usr/share/squid3/errors/custom
  111. email_err_data on
  112. cache_mgr proxy@example.com
  113. negative_ttl 0
  114. cache deny badreq
  115. coredump_dir /var/spool/squid3
  116. cache_dir ufs /var/spool/squid3 800 16 256
  117. cache_mem 128 MB
  118. maximum_object_size_in_memory 512 KB
  119. maximum_object_size 64 MB
  120. ~~~
  121. Le fichier `/etc/squid/evolinux-whitelist-defaults.conf` contiendra les noms de domaine autorisés en sortie :
  122. ~~~
  123. ^mirror.evolix.org$
  124. ^security.debian.org$
  125. ^pub.evolix.net$
  126. ~~~
  127. > *Note* : la liste des noms de domaine autorisés en sortie peut-être trouvée sur https://forge.evolix.org/project/ansibles-roles/repository...
  128. Le fichier `/etc/squid/evolinux-acl.conf` contient les adresses IPv4 locales :
  129. ~~~
  130. acl badreq http_status 400
  131. acl LOCAL src 192.0.2.42/32
  132. ~~~
  133. `/etc/squid/evolinux-httpaccess.conf` :
  134. ~~~
  135. http_access deny !Whitelist_domains
  136. http_access allow LOCAL
  137. ~~~
  138. #### rate-limiting
  139. Voici une configuration qui définit 3 *delay_pools* et qui en utilise un des trois pour l'acl _localnet_ :
  140. ~~~
  141. ## rate-limiting
  142. delay_pools 3
  143. # Débit non limité
  144. delay_class 1 2
  145. delay_parameters 1 -1/-1 -1/-1
  146. # Débit global non limité
  147. # Debit d'un poste limité à 1310720 bytes/s, soit environ 10Mb/s
  148. delay_class 2 2
  149. delay_parameters 2 -1/-1 1310720/1310720
  150. # Débit global limité à 120000 bytes/s, soit 960 Kbit/s
  151. # Débit d'un poste limité à 40000 bytes/s, soit 320 Kbit/s
  152. delay_class 3 2
  153. delay_parameters 3 120000/120000 40000/40000
  154. delay_access 1 deny all
  155. delay_access 2 allow localnet
  156. delay_access 2 deny all
  157. delay_access 3 deny all
  158. ~~~
  159. ## Administration
  160. Vérification de la syntaxe de la configuration actuelle :
  161. ~~~
  162. # squid -k parse
  163. ~~~
  164. ## Monitoring
  165. ### Log2mail
  166. Afin de détecter des oublis ou des éventuelles attaques, il sera intéressant d'ajouter la configuration suivante au logiciel _log2mail_ :
  167. ~~~
  168. file = /var/log/squid/access.log
  169. pattern = "TCP_DENIED/403"
  170. mailto = ADRESSE-MAIL-ALERTE
  171. template = /etc/log2mail/mail
  172. ~~~
  173. On n'oubliera pas d'ajouter l'utilisateur _log2mail_ dans le groupe _proxy_ pour qu'il puisse lire ce fichier (sinon _log2mail_ plante !!) :
  174. ~~~
  175. # adduser log2mail proxy
  176. Adding user `log2mail' to group `proxy' ...
  177. Adding user log2mail to group proxy
  178. Done.
  179. ~~~
  180. ## FAQ
  181. ### Infos à propos de Squid
  182. Pour avoir des informations à propos de Squid :
  183. ~~~
  184. $ squidclient -h 127.0.0.1 -p 3128 cache_object://localhost/
  185. $ squidclient -h 127.0.0.1 -p 3128 mgr:info
  186. ~~~
  187. ### WARNING! Your cache is running out of filedescriptor
  188. En utilisation intensive, si vous obtenez un message '''WARNING! Your cache is running out of filedescriptors''',
  189. c'est qu'il est nécessaire d'augmenter le maximum de fichiers ouverts... mais ce problème est normalement résolu
  190. depuis Debian Lenny où l'on trouve un '''ulimit -n 65535''' dans le script d'init (c'était à ajouter en ''Etch'').
  191. ### Résolution DNS
  192. Squid "cache" les nameserver de /etc/resolv.conf car il gère son propre resolver : <http://wiki.squid-cache.org/Features/Dnsserver>
  193. Voir aussi <https://www.jethrocarr.com/2014/07/05/funny-tasting-squid-resolver/>
  194. En conséquence, si vous changez votre /etc/resolv.conf vous devez recharger Squid !
  195. ### Récupération des UID des requêtes sortantes
  196. On peut le faire avec iptables :
  197. ~~~
  198. /sbin/iptables -t nat -A OUTPUT -p tcp --dport 80 -j LOG --log-uid
  199. ~~~
  200. Extrait de logs :
  201. ~~~
  202. Jun 29 15:08:30 foo kernel: [14743572.575111] IN= OUT=eth0 SRC=192.0.2.1 DST=192.0.2.2 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=51425 DF PROTO=TCP SPT=53175 DPT=80 WINDOW=29200 RES=0x00 SYN URGP=0 UID=1137 GID=1071
  203. ~~~
  204. ### Arrêt rapide de squid
  205. Il suffit de jouer sur la directive `shutdown_lifetime`. Par défaut, la valeur est à 30 secondes.
  206. Mais on peut ajuster la valeur comme on le souhaite.
  207. Pour un arrêt immédiat. On passera la valeur à 0.
  208. ~~~
  209. shutdown_lifetime 0 seconds
  210. ~~~
  211. ### Request entities
  212. Si l'on a ce type d'erreur :
  213. ~~~
  214. HTTP/1.1 411 Length Required
  215. ~~~
  216. Squid bloque les requêtes GET et HEAD avec des *request entities* par défaut. Pour les autoriser, on peut suivre la procédure suivante.
  217. ~~~
  218. # echo 'request_entities on' >> /etc/squid/evolinux-custom.conf
  219. # systemctl reload squid.service
  220. ~~~