If I understand your question, then you want ensure, that nobody is able read and change your code to see, what are you doing and to send you fake data from that Arduino.
What are problems here:
- It can be stolen (eventually with the entire trash bin) - means no fake data and no data
- It can be vandalised/destroyed in matter of minutes (max) - again no (real/fake) data
- The arduino can be reprogrammed by normal way (via bootloader) and send fake data - you can prevent that by changing the bootloader
- Arduino can be read and reprogrammed by ISP and send fake data - you can lock it (by setting SPIEN) to prevent both reading its memory and to reprogramming it this way
- the lock can be cleaned and chip erased and reprogrammed (but not read) by Chip Erase command from High Voltage programming. You can make it more difficult, if needed pins are attached to some devices or ground/power.
- the chip can be desoldered, reprogrammed and soldered back to avoid problems with connected devices.
- also the whole Arduino can be swapped with already tampered Arduino
- another Arduino can be atached to the net to inject fake data (and maybe prevent the original from normal transfers by interference)
(so it have problems with physical security)
To mess with your data (send fake) such program need to be able send data in (somehow) correct format over the net. Without source code or at least the code in Arduino the format of the data could still be sniffed from transmissions and deciphered (but it is difficult task to do) and you can employ some crytography to make it even harder (but it would eat a lot of memory and computing power from your code).
Well, in practical life your problem is stolen/vandalised arduino and simple attacks, which can be blocked by locking the Arduino fuses and bootloader (but you would have hard time put update there after locking it) and using some cryptography.