Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.07 KB | None | 0 0
  1. #!/bin/bash
  2. IPT="/sbin/iptables"
  3.  
  4. # Server IP
  5. SERVER_IP="$(ip addr show eth0 | grep 'inet ' | cut -f2 | awk '{ print $2}')"
  6.  
  7. # Your DNS servers you use: cat /etc/resolv.conf
  8. DNS_SERVER="8.8.4.4 8.8.8.8"
  9.  
  10. # Allow connections to this package servers
  11. PACKAGE_SERVER="ftp.us.debian.org security.debian.org"
  12.  
  13. echo "flush iptable rules"
  14. $IPT -F
  15. $IPT -X
  16. $IPT -t nat -F
  17. $IPT -t nat -X
  18. $IPT -t mangle -F
  19. $IPT -t mangle -X
  20.  
  21. echo "Set default policy to 'DROP'"
  22. $IPT -P INPUT DROP
  23. $IPT -P FORWARD DROP
  24. $IPT -P OUTPUT DROP
  25.  
  26. ## This should be one of the first rules.
  27. ## so dns lookups are already allowed for your other rules
  28. for ip in $DNS_SERVER
  29. do
  30. echo "Allowing DNS lookups (tcp, udp port 53) to server '$ip'"
  31. $IPT -A OUTPUT -p udp -d $ip --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
  32. $IPT -A INPUT -p udp -s $ip --sport 53 -m state --state ESTABLISHED -j ACCEPT
  33. $IPT -A OUTPUT -p tcp -d $ip --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
  34. $IPT -A INPUT -p tcp -s $ip --sport 53 -m state --state ESTABLISHED -j ACCEPT
  35. done
  36.  
  37. echo "allow all and everything on localhost"
  38. $IPT -A INPUT -i lo -j ACCEPT
  39. $IPT -A OUTPUT -o lo -j ACCEPT
  40.  
  41. for ip in $PACKAGE_SERVER
  42. do
  43. echo "Allow connection to '$ip' on port 22"
  44. $IPT -A OUTPUT -p tcp -d "$ip" --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
  45. $IPT -A INPUT -p tcp -s "$ip" --sport 22 -m state --state ESTABLISHED -j ACCEPT
  46.  
  47. echo "Allow connection to '$ip' on port 80"
  48. $IPT -A OUTPUT -p tcp -d "$ip" --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
  49. $IPT -A INPUT -p tcp -s "$ip" --sport 80 -m state --state ESTABLISHED -j ACCEPT
  50.  
  51. echo "Allow connection to '$ip' on port 443"
  52. $IPT -A OUTPUT -p tcp -d "$ip" --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
  53. $IPT -A INPUT -p tcp -s "$ip" --sport 443 -m state --state ESTABLISHED -j ACCEPT
  54. done
  55.  
  56.  
  57. #######################################################################################################
  58. ## Global iptable rules. Not IP specific
  59.  
  60. echo "Allowing new and established incoming connections to port 22, 80, 443"
  61. $IPT -A INPUT -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
  62. $IPT -A OUTPUT -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT
  63.  
  64. echo "Allow all outgoing connections to port 22"
  65. $IPT -A OUTPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
  66. $IPT -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
  67.  
  68. echo "Allow outgoing icmp connections (pings,...)"
  69. $IPT -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  70. $IPT -A INPUT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
  71.  
  72. echo "Allow outgoing connections to port 123 (ntp syncs)"
  73. $IPT -A OUTPUT -p udp --dport 123 -m state --state NEW,ESTABLISHED -j ACCEPT
  74. $IPT -A INPUT -p udp --sport 123 -m state --state ESTABLISHED -j ACCEPT
  75.  
  76. # Log before dropping
  77. $IPT -A INPUT -j LOG -m limit --limit 12/min --log-level 4 --log-prefix 'IP INPUT drop: '
  78. $IPT -A INPUT -j DROP
  79.  
  80. $IPT -A OUTPUT -j LOG -m limit --limit 12/min --log-level 4 --log-prefix 'IP OUTPUT drop: '
  81. $IPT -A OUTPUT -j DROP
  82.  
  83. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement