{"id":38,"date":"2012-06-10T09:03:35","date_gmt":"2012-06-10T09:03:35","guid":{"rendered":"http:\/\/rmohan.com\/?p=38"},"modified":"2012-06-10T09:55:19","modified_gmt":"2012-06-10T09:55:19","slug":"iptables-firewall-on-centos","status":"publish","type":"post","link":"https:\/\/mohan.sg\/?p=38","title":{"rendered":"IPTABLES Firewall on Centos"},"content":{"rendered":"<p><strong>Firewall on Centos OS <\/strong><\/p>\n<p>#!\/bin\/sh<br \/>\n#<br \/>\n#<\/p>\n<p>## Set your IP address<br \/>\nMYIP=&#8221;192.168.1.108&#8243;<br \/>\n#<br \/>\n## Flush rules &#038; reset counters<br \/>\n\/sbin\/iptables -F<br \/>\n\/sbin\/iptables -Z<br \/>\n#<br \/>\n## Set policies<br \/>\n\/sbin\/iptables -P INPUT DROP<br \/>\n\/sbin\/iptables -P FORWARD DROP<br \/>\n\/sbin\/iptables -P OUTPUT DROP<br \/>\n#<br \/>\n## Drop all incoming fragments<br \/>\n\/sbin\/iptables -A INPUT -i eth0 -f -j DROP<br \/>\n#<br \/>\n## Drop outside packets with local addresses &#8211; anti-spoofing measure<br \/>\n\/sbin\/iptables -A INPUT -s $MYIP -i ! lo -j DROP<br \/>\n\/sbin\/iptables -A INPUT -s 127.0.0.0\/8 -i ! lo -j DROP<br \/>\n\/sbin\/iptables -A INPUT -s 10.0.0.0\/8 -i ! lo -j DROP<br \/>\n\/sbin\/iptables -A INPUT -s 192.168.0.0\/16 -i ! lo -j DROP<br \/>\n\/sbin\/iptables -A INPUT -s 224.0.0.0\/4 -i ! lo -j DROP<br \/>\n\/sbin\/iptables -A INPUT -s 0.0.0.0\/8 -i ! lo -j DROP<br \/>\n\/sbin\/iptables -A INPUT -s 255.255.255.255 -i ! lo -j DROP<br \/>\n\/sbin\/iptables -A INPUT -s 169.254.0.0\/16 -i ! lo -j DROP<br \/>\n\/sbin\/iptables -A INPUT -s 221.240.102 -i ! lo -j DROP<br \/>\n\/sbin\/iptables -A INPUT -s 203.215.94.193 -i ! lo -j DROP<br \/>\n\/sbin\/iptables -A INPUT -s 218.71.137.68 -i ! lo -j DROP<br \/>\n#<br \/>\n## Pass all locally-originating packets<br \/>\n\/sbin\/iptables -A INPUT -i lo -j ACCEPT<br \/>\n\/sbin\/iptables -A OUTPUT -o lo -j ACCEPT<br \/>\n#<br \/>\n## Accept ICMP ping echo requests<br \/>\n## (this allows other people to ping your machine, among other things),<br \/>\n\/sbin\/iptables -A INPUT -p icmp &#8211;icmp-type echo-request -j ACCEPT<br \/>\n#<br \/>\n## Accept all traffic from a specific machine with IP x.x.x.x<br \/>\n## replace x.x.x.x with the desired IP, then uncomment the line.<br \/>\n#\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;syn -s xxx.xxx.xxx.xxx -j ACCEPT<br \/>\n#<br \/>\n## Accept traffic on port p from a specific machine with IP x.x.x.x<br \/>\n## replace p with the desired port number, and replace x.x.x.x with<br \/>\n## the desired IP, then uncomment the line.<br \/>\n#\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;syn -s x.x.x.x &#8211;dport p -j ACCEPT<br \/>\n#<br \/>\n## Accept ftp-data and ftp (ports 20 &#038; 21)<br \/>\n\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;syn &#8211;dport 20 -j ACCEPT<br \/>\n\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;syn &#8211;dport 21 -j ACCEPT<br \/>\n#<br \/>\n## Accept ssh (port 22)<br \/>\n\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;syn &#8211;dport 22 -j ACCEPT<br \/>\n#<br \/>\n## Accept telnet (port 23)<br \/>\n#\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;syn &#8211;dport 23 -j ACCEPT<br \/>\n#<br \/>\n## Accept smtp (port 25)<br \/>\n#\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;syn &#8211;dport 25 -j ACCEPT<br \/>\n## Accept dns (port 53)<br \/>\n\/sbin\/iptables -A INPUT -p udp -m udp -s 0\/0 &#8211;dport 53 -d 0\/0 -j ACCEPT<br \/>\n\/sbin\/iptables -A INPUT -p tcp -m tcp -s 0\/0 &#8211;dport 53 -d 0\/0 -j ACCEPT<br \/>\n#<br \/>\n## Accept http (port 80)<br \/>\n#\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;syn &#8211;dport 80 -j ACCEPT<br \/>\n#<br \/>\n## Accept pop3 (port 110)<br \/>\n#\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;syn &#8211;dport 110 -j ACCEPT<br \/>\n#<br \/>\n## Accept inbound identd (port 113)<br \/>\n#\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;syn &#8211;dport 113 -j ACCEPT<br \/>\n## or you can reject and send back a TCP RST packet instead<br \/>\n#\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;dport 113 -j REJECT &#8211;reject-with tcp-reset<br \/>\n#<br \/>\n## Accept imap (port 143)<br \/>\n#\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;syn &#8211;dport 143 -j ACCEPT<br \/>\n#<br \/>\n## Accept https (port 443)<br \/>\n#\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;syn &#8211;dport 443 -j ACCEPT<br \/>\n#<br \/>\n## Accept smtps (port 465)<br \/>\n#\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;syn &#8211;dport 465 -j ACCEPT<br \/>\n## Accept msp (port 587)<br \/>\n#\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;syn &#8211;dport 587 -j ACCEPT<br \/>\n#<br \/>\n## Accept SpamAssassin (port 783)<br \/>\n#\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;syn &#8211;dport 783 -j ACCEPT<br \/>\n#<br \/>\n## Accept imaps (port 993)<br \/>\n#\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;syn &#8211;dport 993 -j ACCEPT<br \/>\n#<br \/>\n## Accept pop3s (port 995)<br \/>\n#\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;syn &#8211;dport 995 -j ACCEPT<br \/>\n#<br \/>\n## Accept mysql (port 3306)<br \/>\n#\/sbin\/iptables -A INPUT -p tcp -m tcp &#8211;syn &#8211;dport 3306 -j ACCEPT<br \/>\n#<br \/>\n## Allow inbound established and related outside communication<br \/>\n\/sbin\/iptables -A INPUT -m state &#8211;state ESTABLISHED,RELATED -j ACCEPT<br \/>\n#<br \/>\n## Drop outside initiated connections<br \/>\n\/sbin\/iptables -A INPUT -m state &#8211;state NEW -j REJECT<br \/>\n#<br \/>\n## Allow all outbound tcp, udp, icmp traffic with state<br \/>\n\/sbin\/iptables -A OUTPUT -p tcp -m state &#8211;state NEW,ESTABLISHED -j ACCEPT<br \/>\n\/sbin\/iptables -A OUTPUT -p udp -m state &#8211;state NEW,ESTABLISHED -j ACCEPT<br \/>\n\/sbin\/iptables -A OUTPUT -p icmp -m state &#8211;state NEW,ESTABLISHED,RELATED -j ACCEPT<br \/>\n#<br \/>\n## Save rules<br \/>\nservice \/sbin\/iptables save<br \/>\n#<br \/>\n#<br \/>\necho &#8220;\/sbin\/iptables configuration is complete&#8221;<br \/>\necho &#8220;&#8221;<br \/>\necho &#8220;Check your rules &#8211; \/sbin\/iptables -L -n&#8221;<br \/>\necho &#8220;&#8221;<\/p>\n<p><strong>Redhat Linux IPTABLES <\/strong><\/p>\n<p>==============================================================================================<br \/>\n==============================================================================================<br \/>\n# Generated by iptables-save v1.3.5 on Sat Dec 10 05:28:35 2011<br \/>\n*filter<br \/>\n:INPUT DROP [0:0]<br \/>\n:FORWARD DROP [0:0]<br \/>\n:OUTPUT ACCEPT [59:18308]<br \/>\n:RH-Firewall-1-INPUT &#8211; [0:0]<br \/>\n:SSH_CHECK &#8211; [0:0]<br \/>\n-A INPUT -j RH-Firewall-1-INPUT<br \/>\n-A INPUT -s 10.0.0.0\/255.0.0.0 -i eth0 -j LOG &#8211;log-prefix &#8220;IP DROP SPOOF A: &#8221;<br \/>\n-A INPUT -s 172.16.0.0\/255.240.0.0 -i eth0 -j LOG &#8211;log-prefix &#8220;IP DROP SPOOF B: &#8221;<br \/>\n-A INPUT -s 192.168.0.0\/255.255.0.0 -i eth0 -j LOG &#8211;log-prefix &#8220;IP DROP SPOOF C: &#8221;<br \/>\n-A INPUT -s 224.0.0.0\/240.0.0.0 -i eth0 -j LOG &#8211;log-prefix &#8220;IP DROP MULTICAST D: &#8221;<br \/>\n-A INPUT -s 240.0.0.0\/248.0.0.0 -i eth0 -j LOG &#8211;log-prefix &#8220;IP DROP SPOOF E: &#8221;<br \/>\n-A INPUT -d 127.0.0.0\/255.0.0.0 -i eth0 -j LOG &#8211;log-prefix &#8220;IP DROP LOOPBACK: &#8221;<br \/>\n-A INPUT -p tcp -m tcp &#8211;dport 22 -m state &#8211;state NEW -j SSH_CHECK<br \/>\n-A FORWARD -j RH-Firewall-1-INPUT<br \/>\n-A RH-Firewall-1-INPUT -i lo -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p icmp -m icmp &#8211;icmp-type 0 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p icmp -m icmp &#8211;icmp-type 3 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p icmp -m icmp &#8211;icmp-type 11 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p icmp -m icmp &#8211;icmp-type 8 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -m state &#8211;state RELATED,ESTABLISHED -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p tcp -m state &#8211;state NEW -m tcp &#8211;dport 22 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p tcp -m state &#8211;state NEW -m tcp &#8211;dport 80 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p tcp -m state &#8211;state NEW -m tcp &#8211;dport 443 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -j LOG<br \/>\n-A RH-Firewall-1-INPUT -j DROP<br \/>\n-A SSH_CHECK -m recent &#8211;set &#8211;name SSH &#8211;rsource<br \/>\n-A SSH_CHECK -m recent &#8211;update &#8211;seconds 60 &#8211;hitcount 4 &#8211;name SSH &#8211;rsource -j DROP<br \/>\nCOMMIT<br \/>\n# Completed on Sat Dec 10 05:28:35 2011<br \/>\n==============================================================================================<br \/>\n==============================================================================================<\/p>\n<p><strong>Block Incomming Port 80 except for IP Address 192.168.3.0\/24<\/strong><\/p>\n<p># \/sbin\/iptables -A INPUT -p tcp -i eth0 -s ! 192.168.3.0\/24 &#8211;dport 80 -j DROP<\/p>\n<p># Generated by iptables-save v1.3.5 on Sat Dec 10 06:17:00 2011<br \/>\n*filter<br \/>\n:INPUT ACCEPT [80:5760]<br \/>\n:FORWARD ACCEPT [0:0]<br \/>\n:OUTPUT ACCEPT [78:12568]<br \/>\n-A INPUT -p tcp -m tcp &#8211;dport 80 &#8211;tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT<br \/>\n-A INPUT -p tcp -m tcp &#8211;dport 443 &#8211;tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT<br \/>\n-A INPUT -p tcp -m tcp &#8211;dport 22 &#8211;tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT<br \/>\n-A INPUT -s ! 192.168.3.0\/255.255.255.0 -i eth0 -p tcp -m tcp &#8211;dport 80 -j DROP<br \/>\nCOMMIT<br \/>\n# Completed on Sat Dec 10 06:17:00 2011<br \/>\n==============================================================================================<br \/>\n==============================================================================================<\/p>\n<p><strong>FTP FIREWALL <\/strong><\/p>\n<p># Generated by iptables-save v1.3.5 on Wed Jun 10 21:13:16 2009<br \/>\n*filter<br \/>\n:INPUT ACCEPT [0:0]<br \/>\n:FORWARD ACCEPT [0:0]<br \/>\n:OUTPUT ACCEPT [423:45748]<br \/>\n:RH-Firewall-1-INPUT \u2013 [0:0]<br \/>\n-A INPUT -j RH-Firewall-1-INPUT<br \/>\n-A FORWARD -j RH-Firewall-1-INPUT<br \/>\n-A RH-Firewall-1-INPUT -i lo -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p icmp -m icmp \u2013icmp-type any -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p esp -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p ah -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp \u2013dport 5353 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p udp -m udp \u2013dport 631 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p tcp -m tcp \u2013dport 631 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -m state \u2013state RELATED,ESTABLISHED -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p tcp -m state \u2013state NEW -m tcp \u2013dport 20 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p tcp -m state \u2013state NEW -m tcp \u2013dport 21 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p tcp -m state \u2013state NEW -m tcp \u2013dport 22 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p tcp -m state \u2013state NEW -m tcp \u2013dport 23 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -j REJECT \u2013reject-with icmp-host-prohibited<br \/>\nCOMMIT<br \/>\n==============================================================================================<br \/>\n==============================================================================================<\/p>\n<p><strong>Redhat Basic Firewall<\/strong><\/p>\n<p># Firewall configuration written by system-config-securitylevel<br \/>\n# Manual customization of this file is not recommended.<br \/>\n*filter<br \/>\n:INPUT ACCEPT [0:0]<br \/>\n:FORWARD ACCEPT [0:0]<br \/>\n:OUTPUT ACCEPT [0:0]<br \/>\n:RH-Firewall-1-INPUT &#8211; [0:0]<br \/>\n-A INPUT -j RH-Firewall-1-INPUT<br \/>\n-A FORWARD -j RH-Firewall-1-INPUT<br \/>\n-A RH-Firewall-1-INPUT -i lo -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p icmp &#8211;icmp-type any -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p 50 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p 51 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p udp &#8211;dport 5353 -d 224.0.0.251 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p udp -m udp &#8211;dport 631 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -p tcp -m tcp &#8211;dport 631 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -m state &#8211;state ESTABLISHED,RELATED -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 8009 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 5902 -j ACCEPT<br \/>\nA RH-Firewall-1-INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 8080 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 10050 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 22 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 80 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 443 -j ACCEPT<br \/>\n-A RH-Firewall-1-INPUT -j REJECT &#8211;reject-with icmp-host-prohibited<br \/>\nCOMMIT<\/p>\n<p>==============================================================================================<br \/>\n==============================================================================================<\/p>\n<p><strong>SSH  Rules <\/strong><\/p>\n<p>Using iptables to allow only specific hosts to connect<\/p>\n<p>An alternative to TCP wrappers (although you can use both at the same time) is limiting SSH access with iptables. Here&#8217;s a simple example of how you can allow only a specific host to connect to your SSH service:<\/p>\n<p>~# iptables -A INPUT -p tcp -m state &#8211;state NEW &#8211;source 193.180.177.13 &#8211;dport 22 -j ACCEPT <\/p>\n<p>And make sure no one else has access to SSH service:<\/p>\n<p>~# iptables -A INPUT -p tcp &#8211;dport 22 -j DROP <\/p>\n<p>~# iptables -A INPUT -p tcp -m state &#8211;syn &#8211;state NEW &#8211;dport 22 -m limit &#8211;limit 1\/minute &#8211;limit-burst 1 -j ACCEPT<br \/>\n~# iptables -A INPUT -p tcp -m state &#8211;syn &#8211;state NEW &#8211;dport 22 -j DROP<\/p>\n<p>In a second example, iptables are set to allow only host 193.180.177.13 to connect to the SSH service. After three failed login tries, iptables allows the host only one login try per minute:<\/p>\n<p>~# iptables -A INPUT -p tcp -s 193.180.177.13 -m state &#8211;syn &#8211;state NEW &#8211;dport 22 -m limit &#8211;limit 1\/minute &#8211;limit-burst 1 -j ACCEPT<br \/>\n~# iptables -A INPUT -p tcp -s 193.180.177.13 -m state &#8211;syn &#8211;state NEW &#8211;dport 22 -j DROP<\/p>\n<p>Conclusion <\/p>\n<p>iptables -N SSH_CHECK<br \/>\niptables -A INPUT -p tcp &#8211;dport 22 -m state &#8211;state NEW -j SSH_CHECK<br \/>\niptables -A SSH_CHECK -m recent &#8211;set &#8211;name SSH<br \/>\niptables -A SSH_CHECK -m recent &#8211;update &#8211;seconds 60 &#8211;hitcount 4 &#8211;name SSH -j DROP<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Firewall on Centos OS <\/p>\n<p>#!\/bin\/sh # #<\/p>\n<p>## Set your IP address MYIP=&#8221;192.168.1.108&#8243; # ## Flush rules &#038; reset counters \/sbin\/iptables -F \/sbin\/iptables -Z # ## Set policies \/sbin\/iptables -P INPUT DROP \/sbin\/iptables -P FORWARD DROP \/sbin\/iptables -P OUTPUT DROP # ## Drop all incoming fragments \/sbin\/iptables -A INPUT -i eth0 -f -j DROP [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,8],"tags":[],"_links":{"self":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts\/38"}],"collection":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=38"}],"version-history":[{"count":13,"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts\/38\/revisions"}],"predecessor-version":[{"id":52,"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts\/38\/revisions\/52"}],"wp:attachment":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=38"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=38"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=38"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}